From 5a87fc7c26cd308f4d9ac12b484e9f40e8c23479 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 14 Jan 2020 17:38:19 +0100 Subject: [PATCH] pcm/dsd2pcm: remove unused sources --- src/pcm/dsd2pcm/dsd2pcm.hpp | 69 --------------- src/pcm/dsd2pcm/info.txt | 38 --------- src/pcm/dsd2pcm/main.cpp | 150 --------------------------------- src/pcm/dsd2pcm/noiseshape.c | 113 ------------------------- src/pcm/dsd2pcm/noiseshape.h | 87 ------------------- src/pcm/dsd2pcm/noiseshape.hpp | 73 ---------------- src/pcm/meson.build | 13 --- 7 files changed, 543 deletions(-) delete mode 100644 src/pcm/dsd2pcm/dsd2pcm.hpp delete mode 100644 src/pcm/dsd2pcm/info.txt delete mode 100644 src/pcm/dsd2pcm/main.cpp delete mode 100644 src/pcm/dsd2pcm/noiseshape.c delete mode 100644 src/pcm/dsd2pcm/noiseshape.h delete mode 100644 src/pcm/dsd2pcm/noiseshape.hpp diff --git a/src/pcm/dsd2pcm/dsd2pcm.hpp b/src/pcm/dsd2pcm/dsd2pcm.hpp deleted file mode 100644 index 3799dfab2..000000000 --- a/src/pcm/dsd2pcm/dsd2pcm.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - -Copyright 2009, 2011 Sebastian Gesemann. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are -permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other materials - provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY SEBASTIAN GESEMANN ''AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SEBASTIAN GESEMANN OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those of the -authors and should not be interpreted as representing official policies, either expressed -or implied, of Sebastian Gesemann. - - */ - -#ifndef DSD2PCM_HXX_INCLUDED -#define DSD2PCM_HXX_INCLUDED - -#include -#include -#include "dsd2pcm.h" - -/** - * C++ PImpl Wrapper for the dsd2pcm C library - */ - -class dxd -{ - dsd2pcm_ctx *handle; -public: - dxd() : handle(dsd2pcm_init()) {} - - dxd(dxd const& x) : handle(dsd2pcm_clone(x.handle)) {} - - ~dxd() { dsd2pcm_destroy(handle); } - - friend void swap(dxd & a, dxd & b) - { std::swap(a.handle,b.handle); } - - dxd& operator=(dxd x) - { swap(*this,x); return *this; } - - void translate(size_t samples, - const unsigned char *src, ptrdiff_t src_stride, - bool lsbitfirst, - float *dst, ptrdiff_t dst_stride) - { - dsd2pcm_translate(handle,samples,src,src_stride, - lsbitfirst,dst,dst_stride); - } -}; - -#endif // DSD2PCM_HXX_INCLUDED - diff --git a/src/pcm/dsd2pcm/info.txt b/src/pcm/dsd2pcm/info.txt deleted file mode 100644 index 15ff29245..000000000 --- a/src/pcm/dsd2pcm/info.txt +++ /dev/null @@ -1,38 +0,0 @@ -You downloaded the source code for "dsd2pcm" which is a simple little -"filter" program, that takes a DSD data stream on stdin and converts -it to a PCM stream (352.8 kHz, either 16 or 24 bits) and writes it to -stdout. The code is split into three modules: - - (1) dsd2pcm - - This is where the 8:1 decimation magic happens. It's an - implementation of a symmetric 96-taps FIR lowpass filter - optimized for DSD inputs. If you feed this converter with - DSD64 you get a PCM stream at 352.8 kHz and floating point - samples. This module is independent and can be reused. - - (2) noiseshape - - A module for applying generic noise shaping filters. It's - used for the 16-bit output mode in "main" to preserve the - dynamic range. This module is independent and can be reused. - - (3) main.cpp (file contains the main function and handles I/O) - -The first two modules are pure C for maximum portability. In addition, -there are C++ wrapper headers for convenient use of these modules in -C++. The main application is a C++ application and makes use of the -C++ headers to access the functionality of the first two modules. - - -Under Linux this program is easily compiled by typing - - g++ *.c *.cpp -O3 -o dsd2pcm - -provided you have GCC installed. That's why I didn't bother writing -any makefiles. :-p - - -Cheers! -SG - diff --git a/src/pcm/dsd2pcm/main.cpp b/src/pcm/dsd2pcm/main.cpp deleted file mode 100644 index 7a3082e53..000000000 --- a/src/pcm/dsd2pcm/main.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - -Copyright 2009, 2011 Sebastian Gesemann. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are -permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other materials - provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY SEBASTIAN GESEMANN ''AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SEBASTIAN GESEMANN OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those of the -authors and should not be interpreted as representing official policies, either expressed -or implied, of Sebastian Gesemann. - - */ - -#include -#include -#include - -#include "dsd2pcm.hpp" -#include "noiseshape.hpp" - -namespace { - -const float my_ns_coeffs[] = { -// b1 b2 a1 a2 - -1.62666423, 0.79410094, 0.61367127, 0.23311013, // section 1 - -1.44870017, 0.54196219, 0.03373857, 0.70316556 // section 2 -}; - -const int my_ns_soscount = sizeof(my_ns_coeffs)/(sizeof(my_ns_coeffs[0])*4); - -inline long myround(float x) -{ - return static_cast(x + (x>=0 ? 0.5f : -0.5f)); -} - -template -struct id { typedef T type; }; - -template -inline T clip( - typename id::type min, - T v, - typename id::type max) -{ - if (vmax) return max; - return v; -} - -inline void write_intel16(unsigned char * ptr, unsigned word) -{ - ptr[0] = word & 0xFF; - ptr[1] = (word >> 8) & 0xFF; -} - -inline void write_intel24(unsigned char * ptr, unsigned long word) -{ - ptr[0] = word & 0xFF; - ptr[1] = (word >> 8) & 0xFF; - ptr[2] = (word >> 16) & 0xFF; -} - -} // anonymous namespace - -using std::vector; -using std::cin; -using std::cout; -using std::cerr; - -int main(int argc, char *argv[]) -{ - const int block = 16384; - int channels = -1; - int lsbitfirst = -1; - int bits = -1; - if (argc==4) { - if ('1'<=argv[1][0] && argv[1][0]<='9') channels = 1 + (argv[1][0]-'1'); - if (argv[2][0]=='m' || argv[2][0]=='M') lsbitfirst=0; - if (argv[2][0]=='l' || argv[2][0]=='L') lsbitfirst=1; - if (!strcmp(argv[3],"16")) bits = 16; - if (!strcmp(argv[3],"24")) bits = 24; - } - if (channels<1 || lsbitfirst<0 || bits<0) { - cerr << "\n" - "DSD2PCM filter (raw DSD64 --> 352 kHz raw PCM)\n" - "(c) 2009 Sebastian Gesemann\n\n" - "(filter as in \"reads data from stdin and writes to stdout\")\n\n" - "Syntax: dsd2pcm \n" - "channels = 1,2,3,...,9 (number of channels in DSD stream)\n" - "bitorder = L (lsb first), M (msb first) (DSD stream option)\n" - "bitdepth = 16 or 24 (intel byte order, output option)\n\n" - "Note: At 16 bits/sample a noise shaper kicks in that can preserve\n" - "a dynamic range of 135 dB below 30 kHz.\n\n"; - return 1; - } - int bytespersample = bits/8; - vector dxds (channels); - vector ns; - if (bits==16) { - ns.resize(channels, noise_shaper(my_ns_soscount, my_ns_coeffs) ); - } - vector dsd_data (block * channels); - vector float_data (block); - vector pcm_data (block * channels * bytespersample); - char * const dsd_in = reinterpret_cast(&dsd_data[0]); - char * const pcm_out = reinterpret_cast(&pcm_data[0]); - while (cin.read(dsd_in,block * channels)) { - for (int c=0; c -#include - -#include "noiseshape.h" - -extern int noise_shape_init( - noise_shape_ctx *ctx, - int sos_count, - const float *coeffs) -{ - int i; - ctx->sos_count = sos_count; - ctx->bbaa = coeffs; - ctx->t1 = (float*) malloc(sizeof(float)*sos_count); - if (!ctx->t1) goto escape1; - ctx->t2 = (float*) malloc(sizeof(float)*sos_count); - if (!ctx->t2) goto escape2; - for (i=0; it1[i] = 0.f; - ctx->t2[i] = 0.f; - } - return 0; -escape2: - free(ctx->t1); -escape1: - return -1; -} - -extern void noise_shape_destroy( - noise_shape_ctx *ctx) -{ - free(ctx->t1); - free(ctx->t2); -} - -extern int noise_shape_clone( - const noise_shape_ctx *from, - noise_shape_ctx *to) -{ - to->sos_count = from->sos_count; - to->bbaa = from->bbaa; - to->t1 = (float*) malloc(sizeof(float)*to->sos_count); - if (!to->t1) goto error1; - to->t2 = (float*) malloc(sizeof(float)*to->sos_count); - if (!to->t2) goto error2; - memcpy(to->t1,from->t1,sizeof(float)*to->sos_count); - memcpy(to->t2,from->t2,sizeof(float)*to->sos_count); - return 0; -error2: - free(to->t1); -error1: - return -1; -} - -extern float noise_shape_get(noise_shape_ctx *ctx) -{ - int i; - float acc; - const float *c; - acc = 0.0; - c = ctx->bbaa; - for (i=0; isos_count; ++i) { - float t1i = ctx->t1[i]; - float t2i = ctx->t2[i]; - ctx->t2[i] = acc -= t1i * c[2] + t2i * c[3]; - acc += t1i * c[0] + t2i * c[1]; - c += 4; - } - return acc; -} - -extern void noise_shape_update(noise_shape_ctx *ctx, float qerror) -{ - float *p; - int i; - for (i=0; isos_count; ++i) { - ctx->t2[i] += qerror; - } - p = ctx->t1; - ctx->t1 = ctx->t2; - ctx->t2 = p; -} - diff --git a/src/pcm/dsd2pcm/noiseshape.h b/src/pcm/dsd2pcm/noiseshape.h deleted file mode 100644 index 7818c1d67..000000000 --- a/src/pcm/dsd2pcm/noiseshape.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - -Copyright 2009, 2011 Sebastian Gesemann. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are -permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other materials - provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY SEBASTIAN GESEMANN ''AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SEBASTIAN GESEMANN OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those of the -authors and should not be interpreted as representing official policies, either expressed -or implied, of Sebastian Gesemann. - - */ - -#ifndef NOISE_SHAPE_H_INCLUDED -#define NOISE_SHAPE_H_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct noise_shape_ctx_s { - int sos_count; /* number of second order sections */ - const float *bbaa; /* filter coefficients, owned by user */ - float *t1, *t2; /* filter state, owned by ns library */ -} noise_shape_ctx; - -/** - * initializes a noise_shaper context - * returns an error code or 0 - */ -extern int noise_shape_init( - noise_shape_ctx *ctx, - int sos_count, - const float *coeffs); - -/** - * destroys a noise_shaper context - */ -extern void noise_shape_destroy( - noise_shape_ctx *ctx); - -/** - * initializes a noise_shaper context so that its state - * is a copy of a given context - * returns an error code or 0 - */ -extern int noise_shape_clone( - const noise_shape_ctx *from, noise_shape_ctx *to); - -/** - * computes the next "noise shaping sample". Note: This call - * alters the internal state. xxx_get and xxx_update must be - * called in an alternating manner. - */ -extern float noise_shape_get( - noise_shape_ctx *ctx); - -/** - * updates the noise shaper's state with the - * last quantization error - */ -extern void noise_shape_update( - noise_shape_ctx *ctx, float qerror); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* NOISE_SHAPE_H_INCLUDED */ - diff --git a/src/pcm/dsd2pcm/noiseshape.hpp b/src/pcm/dsd2pcm/noiseshape.hpp deleted file mode 100644 index 58515b158..000000000 --- a/src/pcm/dsd2pcm/noiseshape.hpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - -Copyright 2009, 2011 Sebastian Gesemann. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are -permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other materials - provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY SEBASTIAN GESEMANN ''AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SEBASTIAN GESEMANN OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those of the -authors and should not be interpreted as representing official policies, either expressed -or implied, of Sebastian Gesemann. - - */ - -#ifndef NOISE_SHAPE_HXX_INCLUDED -#define NOISE_SHAPE_HXX_INCLUDED - -#include -#include "noiseshape.h" - -/** - * C++ wrapper for the noiseshape C library - */ - -class noise_shaper -{ - noise_shape_ctx ctx; -public: - noise_shaper(int sos_count, const float *bbaa) - { - noise_shape_init(&ctx, sos_count, bbaa); - } - - noise_shaper(noise_shaper const& x) - { - noise_shape_clone(&x.ctx,&ctx); - } - - ~noise_shaper() - { noise_shape_destroy(&ctx); } - - noise_shaper& operator=(noise_shaper const& x) - { - if (this != &x) { - noise_shape_destroy(&ctx); - noise_shape_clone(&x.ctx,&ctx); - } - return *this; - } - - float get() { return noise_shape_get(&ctx); } - - void update(float error) { noise_shape_update(&ctx,error); } -}; - -#endif /* NOISE_SHAPE_HXX_INCLUDED */ - diff --git a/src/pcm/meson.build b/src/pcm/meson.build index 99e1e019e..1f8bf6c38 100644 --- a/src/pcm/meson.build +++ b/src/pcm/meson.build @@ -30,19 +30,6 @@ if get_option('dsd') 'PcmDsd.cxx', 'dsd2pcm/dsd2pcm.c', ] - - executable( - 'dsd2pcm', - 'dsd2pcm/main.cpp', - 'dsd2pcm/dsd2pcm.c', - 'dsd2pcm/noiseshape.c', - include_directories: inc, - dependencies: [ - util_dep, - ], - build_by_default: get_option('test'), - install: false, - ) endif libsamplerate_dep = dependency('samplerate', version: '>= 0.1.3', required: get_option('libsamplerate'))