diff options
Diffstat (limited to 'libswresample/resample.c')
-rw-r--r-- | libswresample/resample.c | 127 |
1 files changed, 15 insertions, 112 deletions
diff --git a/libswresample/resample.c b/libswresample/resample.c index bf412dd268..1b1bd5f22a 100644 --- a/libswresample/resample.c +++ b/libswresample/resample.c @@ -289,132 +289,35 @@ int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensatio return 0; } -#define RENAME(N) N ## _int16 -#define FILTER_SHIFT 15 -#define DELEM int16_t -#define FELEM int16_t -#define FELEM2 int32_t -#define FELEML int64_t -#define FELEM_MAX INT16_MAX -#define FELEM_MIN INT16_MIN -#define OUT(d, v) v = (v + (1<<(FILTER_SHIFT-1)))>>FILTER_SHIFT;\ - d = (unsigned)(v + 32768) > 65535 ? (v>>31) ^ 32767 : v +#define TEMPLATE_RESAMPLE_S16 #include "resample_template.c" +#undef TEMPLATE_RESAMPLE_S16 -#undef RENAME -#undef FELEM -#undef FELEM2 -#undef DELEM -#undef FELEML -#undef OUT -#undef FELEM_MIN -#undef FELEM_MAX -#undef FILTER_SHIFT - - -#define RENAME(N) N ## _int32 -#define FILTER_SHIFT 30 -#define DELEM int32_t -#define FELEM int32_t -#define FELEM2 int64_t -#define FELEML int64_t -#define FELEM_MAX INT32_MAX -#define FELEM_MIN INT32_MIN -#define OUT(d, v) v = (v + (1<<(FILTER_SHIFT-1)))>>FILTER_SHIFT;\ - d = (uint64_t)(v + 0x80000000) > 0xFFFFFFFF ? (v>>63) ^ 0x7FFFFFFF : v +#define TEMPLATE_RESAMPLE_S32 #include "resample_template.c" +#undef TEMPLATE_RESAMPLE_S32 -#undef RENAME -#undef FELEM -#undef FELEM2 -#undef DELEM -#undef FELEML -#undef OUT -#undef FELEM_MIN -#undef FELEM_MAX -#undef FILTER_SHIFT - - -#define RENAME(N) N ## _float -#define FILTER_SHIFT 0 -#define DELEM float -#define FELEM float -#define FELEM2 float -#define FELEML float -#define OUT(d, v) d = v +#define TEMPLATE_RESAMPLE_FLT #include "resample_template.c" +#undef TEMPLATE_RESAMPLE_FLT -#undef RENAME -#undef FELEM -#undef FELEM2 -#undef DELEM -#undef FELEML -#undef OUT -#undef FELEM_MIN -#undef FELEM_MAX -#undef FILTER_SHIFT - - -#define RENAME(N) N ## _double -#define FILTER_SHIFT 0 -#define DELEM double -#define FELEM double -#define FELEM2 double -#define FELEML double -#define OUT(d, v) d = v +#define TEMPLATE_RESAMPLE_DBL #include "resample_template.c" - -#undef RENAME -#undef FELEM -#undef FELEM2 -#undef DELEM -#undef FELEML -#undef OUT -#undef FELEM_MIN -#undef FELEM_MAX -#undef FILTER_SHIFT +#undef TEMPLATE_RESAMPLE_DBL // XXX FIXME the whole C loop should be written in asm so this x86 specific code here isnt needed #if HAVE_MMXEXT_INLINE + #include "x86/resample_mmx.h" -#define COMMON_CORE COMMON_CORE_INT16_MMX2 -#define RENAME(N) N ## _int16_mmx2 -#define FILTER_SHIFT 15 -#define DELEM int16_t -#define FELEM int16_t -#define FELEM2 int32_t -#define FELEML int64_t -#define FELEM_MAX INT16_MAX -#define FELEM_MIN INT16_MIN -#define OUT(d, v) v = (v + (1<<(FILTER_SHIFT-1)))>>FILTER_SHIFT;\ - d = (unsigned)(v + 32768) > 65535 ? (v>>31) ^ 32767 : v -#include "resample_template.c" -#undef COMMON_CORE -#undef RENAME -#undef FELEM -#undef FELEM2 -#undef DELEM -#undef FELEML -#undef OUT -#undef FELEM_MIN -#undef FELEM_MAX -#undef FILTER_SHIFT +#define TEMPLATE_RESAMPLE_S16_MMX2 +#include "resample_template.c" +#undef TEMPLATE_RESAMPLE_S16_MMX2 -#if HAVE_SSSE3_INLINE -#define COMMON_CORE COMMON_CORE_INT16_SSSE3 -#define RENAME(N) N ## _int16_ssse3 -#define FILTER_SHIFT 15 -#define DELEM int16_t -#define FELEM int16_t -#define FELEM2 int32_t -#define FELEML int64_t -#define FELEM_MAX INT16_MAX -#define FELEM_MIN INT16_MIN -#define OUT(d, v) v = (v + (1<<(FILTER_SHIFT-1)))>>FILTER_SHIFT;\ - d = (unsigned)(v + 32768) > 65535 ? (v>>31) ^ 32767 : v +#define TEMPLATE_RESAMPLE_S16_SSSE3 #include "resample_template.c" -#endif +#undef TEMPLATE_RESAMPLE_S16_SSSE3 + #endif // HAVE_MMXEXT_INLINE int swri_multiple_resample(ResampleContext *c, AudioData *dst, int dst_size, AudioData *src, int src_size, int *consumed){ |