[FFmpeg-cvslog] swr/resample: move templating parameters to template itself.

Clément Bœsch git at videolan.org
Thu Nov 15 21:27:07 CET 2012


ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Wed Nov 14 22:37:30 2012 +0100| [8ea8833979d2ffa9b7a792a2a758144d9b2c3da2] | committer: Clément Bœsch

swr/resample: move templating parameters to template itself.

It has various benefits such as allowing some refactoring, clarifying
the code in the inclusion part, and making the template understandable
in standalone.

This commit is based on the templating method used by Justin Ruggles for
libavresample.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8ea8833979d2ffa9b7a792a2a758144d9b2c3da2
---

 libswresample/resample.c          |  127 +++++--------------------------------
 libswresample/resample_template.c |   67 +++++++++++++++++++
 2 files changed, 82 insertions(+), 112 deletions(-)

diff --git a/libswresample/resample.c b/libswresample/resample.c
index bf412dd..1b1bd5f 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){
diff --git a/libswresample/resample_template.c b/libswresample/resample_template.c
index 2ce97fa..855296f 100644
--- a/libswresample/resample_template.c
+++ b/libswresample/resample_template.c
@@ -25,6 +25,62 @@
  * @author Michael Niedermayer <michaelni at gmx.at>
  */
 
+#if defined(TEMPLATE_RESAMPLE_DBL)
+#    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
+
+#elif defined(TEMPLATE_RESAMPLE_FLT)
+#    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
+
+#elif defined(TEMPLATE_RESAMPLE_S32)
+#    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
+
+#elif    defined(TEMPLATE_RESAMPLE_S16)      \
+      || defined(TEMPLATE_RESAMPLE_S16_MMX2) \
+      || defined(TEMPLATE_RESAMPLE_S16_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
+
+#    if defined(TEMPLATE_RESAMPLE_S16)
+#        define RENAME(N) N ## _int16
+#    elif defined(TEMPLATE_RESAMPLE_S16_MMX2)
+#        define COMMON_CORE COMMON_CORE_INT16_MMX2
+#        define RENAME(N) N ## _int16_mmx2
+#    elif defined(TEMPLATE_RESAMPLE_S16_SSSE3)
+#        define COMMON_CORE COMMON_CORE_INT16_SSSE3
+#        define RENAME(N) N ## _int16_ssse3
+#    endif
+
+#endif
+
 int RENAME(swri_resample)(ResampleContext *c, DELEM *dst, const DELEM *src, int *consumed, int src_size, int dst_size, int update_ctx){
     int dst_index, i;
     int index= c->index;
@@ -149,3 +205,14 @@ av_log(NULL, AV_LOG_DEBUG, "%d %d %d\n", c->dst_incr, c->ideal_dst_incr, c->comp
 
     return dst_index;
 }
+
+#undef COMMON_CORE
+#undef RENAME
+#undef FILTER_SHIFT
+#undef DELEM
+#undef FELEM
+#undef FELEM2
+#undef FELEML
+#undef FELEM_MAX
+#undef FELEM_MIN
+#undef OUT



More information about the ffmpeg-cvslog mailing list