X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=libsamplerate%2Fsrc%2Fcommon.h;fp=libsamplerate%2Fsrc%2Fcommon.h;h=10b35366945a55d04ee01afc042d3487a0723007;hb=8529da432e52c7903e8ef3488e60725a099e6e63;hp=0000000000000000000000000000000000000000;hpb=27013d8f68878b8ed2d3f747e26f562d08d7d678;p=audio-libsamplerate.git diff --git a/libsamplerate/src/common.h b/libsamplerate/src/common.h new file mode 100644 index 0000000..10b3536 --- /dev/null +++ b/libsamplerate/src/common.h @@ -0,0 +1,160 @@ +/* +** Copyright (c) 2002-2016, Erik de Castro Lopo +** All rights reserved. +** +** This code is released under 2-clause BSD license. Please see the +** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING +*/ + +#ifndef COMMON_H_INCLUDED +#define COMMON_H_INCLUDED + +#ifdef HAVE_STDINT_H +#include +#elif (SIZEOF_INT == 4) +typedef int int32_t ; +#elif (SIZEOF_LONG == 4) +typedef long int32_t ; +#endif + +#define SRC_MAX_RATIO 256 +#define SRC_MAX_RATIO_STR "256" + +#define SRC_MIN_RATIO_DIFF (1e-20) + +#define MAX(a,b) (((a) > (b)) ? (a) : (b)) +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) + +#define ARRAY_LEN(x) ((int) (sizeof (x) / sizeof ((x) [0]))) +#define OFFSETOF(type,member) ((int) (&((type*) 0)->member)) + +#define MAKE_MAGIC(a,b,c,d,e,f) ((a) + ((b) << 4) + ((c) << 8) + ((d) << 12) + ((e) << 16) + ((f) << 20)) + +/* +** Inspiration : http://sourcefrog.net/weblog/software/languages/C/unused.html +*/ +#ifdef UNUSED +#elif defined (__GNUC__) +# define UNUSED(x) UNUSED_ ## x __attribute__ ((unused)) +#elif defined (__LCLINT__) +# define UNUSED(x) /*@unused@*/ x +#else +# define UNUSED(x) x +#endif + +#ifdef __GNUC__ +# define WARN_UNUSED __attribute__ ((warn_unused_result)) +#else +# define WARN_UNUSED +#endif + + +#include "samplerate.h" + +enum +{ SRC_FALSE = 0, + SRC_TRUE = 1, + + SRC_MODE_PROCESS = 555, + SRC_MODE_CALLBACK = 556 +} ; + +enum +{ SRC_ERR_NO_ERROR = 0, + + SRC_ERR_MALLOC_FAILED, + SRC_ERR_BAD_STATE, + SRC_ERR_BAD_DATA, + SRC_ERR_BAD_DATA_PTR, + SRC_ERR_NO_PRIVATE, + SRC_ERR_BAD_SRC_RATIO, + SRC_ERR_BAD_PROC_PTR, + SRC_ERR_SHIFT_BITS, + SRC_ERR_FILTER_LEN, + SRC_ERR_BAD_CONVERTER, + SRC_ERR_BAD_CHANNEL_COUNT, + SRC_ERR_SINC_BAD_BUFFER_LEN, + SRC_ERR_SIZE_INCOMPATIBILITY, + SRC_ERR_BAD_PRIV_PTR, + SRC_ERR_BAD_SINC_STATE, + SRC_ERR_DATA_OVERLAP, + SRC_ERR_BAD_CALLBACK, + SRC_ERR_BAD_MODE, + SRC_ERR_NULL_CALLBACK, + SRC_ERR_NO_VARIABLE_RATIO, + SRC_ERR_SINC_PREPARE_DATA_BAD_LEN, + SRC_ERR_BAD_INTERNAL_STATE, + + /* This must be the last error number. */ + SRC_ERR_MAX_ERROR +} ; + +typedef struct SRC_PRIVATE_tag +{ double last_ratio, last_position ; + + int error ; + int channels ; + + /* SRC_MODE_PROCESS or SRC_MODE_CALLBACK */ + int mode ; + + /* Pointer to data to converter specific data. */ + void *private_data ; + + /* Varispeed process function. */ + int (*vari_process) (struct SRC_PRIVATE_tag *psrc, SRC_DATA *data) ; + + /* Constant speed process function. */ + int (*const_process) (struct SRC_PRIVATE_tag *psrc, SRC_DATA *data) ; + + /* State reset. */ + void (*reset) (struct SRC_PRIVATE_tag *psrc) ; + + /* Data specific to SRC_MODE_CALLBACK. */ + src_callback_t callback_func ; + void *user_callback_data ; + long saved_frames ; + const float *saved_data ; +} SRC_PRIVATE ; + +/* In src_sinc.c */ +const char* sinc_get_name (int src_enum) ; +const char* sinc_get_description (int src_enum) ; + +int sinc_set_converter (SRC_PRIVATE *psrc, int src_enum) ; + +/* In src_linear.c */ +const char* linear_get_name (int src_enum) ; +const char* linear_get_description (int src_enum) ; + +int linear_set_converter (SRC_PRIVATE *psrc, int src_enum) ; + +/* In src_zoh.c */ +const char* zoh_get_name (int src_enum) ; +const char* zoh_get_description (int src_enum) ; + +int zoh_set_converter (SRC_PRIVATE *psrc, int src_enum) ; + +/*---------------------------------------------------------- +** Common static inline functions. +*/ + +static inline double +fmod_one (double x) +{ double res ; + + res = x - lrint (x) ; + if (res < 0.0) + return res + 1.0 ; + + return res ; +} /* fmod_one */ + +static inline int +is_bad_src_ratio (double ratio) +{ return (ratio < (1.0 / SRC_MAX_RATIO) || ratio > (1.0 * SRC_MAX_RATIO)) ; +} /* is_bad_src_ratio */ + + +#endif /* COMMON_H_INCLUDED */ +