[FFmpeg-cvslog] lavr: use 8.8 instead of 10.6 as the 16-bit fixed-point mixing coeff type

Justin Ruggles git at videolan.org
Wed May 2 21:26:51 CEST 2012


ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Thu Apr 26 16:02:37 2012 -0400| [4010d724e1d57858d56bff66fa245f2d5646be6e] | committer: Justin Ruggles

lavr: use 8.8 instead of 10.6 as the 16-bit fixed-point mixing coeff type

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

 doc/APIchanges                   |    3 +++
 libavresample/audio_mix.c        |   10 +++++-----
 libavresample/audio_mix.h        |    2 +-
 libavresample/audio_mix_matrix.c |   10 +++++-----
 libavresample/avresample.h       |    2 +-
 libavresample/options.c          |    4 ++--
 libavresample/version.h          |    2 +-
 7 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 41cd0a1..fd834f1 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,9 @@ libavutil:     2011-04-18
 
 API changes, most recent first:
 
+2012-xx-xx - xxxxxxx - lavr 0.0.1
+  Change AV_MIX_COEFF_TYPE_Q6 to AV_MIX_COEFF_TYPE_Q8.
+
 2012-04-25 - 3527a73 - lavu 51.29.0 - cpu.h
   Add av_parse_cpu_flags()
 
diff --git a/libavresample/audio_mix.c b/libavresample/audio_mix.c
index 34252bf..76f10ea 100644
--- a/libavresample/audio_mix.c
+++ b/libavresample/audio_mix.c
@@ -27,7 +27,7 @@
 #include "audio_data.h"
 #include "audio_mix.h"
 
-static const char *coeff_type_names[] = { "q6", "q15", "flt" };
+static const char *coeff_type_names[] = { "q8", "q15", "flt" };
 
 void ff_audio_mix_set_func(AudioMix *am, enum AVSampleFormat fmt,
                            enum AVMixCoeffType coeff_type, int in_channels,
@@ -89,7 +89,7 @@ static void MIX_FUNC_NAME(fmt, cfmt)(stype **samples, ctype **matrix,       \
 MIX_FUNC_GENERIC(FLTP, FLT, float,   float,   float,   sum)
 MIX_FUNC_GENERIC(S16P, FLT, int16_t, float,   float,   av_clip_int16(lrintf(sum)))
 MIX_FUNC_GENERIC(S16P, Q15, int16_t, int32_t, int64_t, av_clip_int16(sum >> 15))
-MIX_FUNC_GENERIC(S16P, Q6,  int16_t, int16_t, int32_t, av_clip_int16(sum >> 6))
+MIX_FUNC_GENERIC(S16P, Q8,  int16_t, int16_t, int32_t, av_clip_int16(sum >>  8))
 
 /* TODO: templatize the channel-specific C functions */
 
@@ -221,8 +221,8 @@ static int mix_function_init(AudioMix *am)
     ff_audio_mix_set_func(am, AV_SAMPLE_FMT_S16P, AV_MIX_COEFF_TYPE_Q15,
                           0, 0, 1, 1, "C", MIX_FUNC_NAME(S16P, Q15));
 
-    ff_audio_mix_set_func(am, AV_SAMPLE_FMT_S16P, AV_MIX_COEFF_TYPE_Q6,
-                          0, 0, 1, 1, "C", MIX_FUNC_NAME(S16P, Q6));
+    ff_audio_mix_set_func(am, AV_SAMPLE_FMT_S16P, AV_MIX_COEFF_TYPE_Q8,
+                          0, 0, 1, 1, "C", MIX_FUNC_NAME(S16P, Q8));
 
     /* channel-specific C versions */
 
@@ -320,7 +320,7 @@ void ff_audio_mix_close(AudioMix *am)
         av_free(am->matrix[0]);
         am->matrix = NULL;
     }
-    memset(am->matrix_q6,  0, sizeof(am->matrix_q6 ));
+    memset(am->matrix_q8,  0, sizeof(am->matrix_q8 ));
     memset(am->matrix_q15, 0, sizeof(am->matrix_q15));
     memset(am->matrix_flt, 0, sizeof(am->matrix_flt));
 }
diff --git a/libavresample/audio_mix.h b/libavresample/audio_mix.h
index ffa1b23..61db330 100644
--- a/libavresample/audio_mix.h
+++ b/libavresample/audio_mix.h
@@ -47,7 +47,7 @@ typedef struct AudioMix {
     mix_func *mix;
     mix_func *mix_generic;
 
-    int16_t *matrix_q6[AVRESAMPLE_MAX_CHANNELS];
+    int16_t *matrix_q8[AVRESAMPLE_MAX_CHANNELS];
     int32_t *matrix_q15[AVRESAMPLE_MAX_CHANNELS];
     float   *matrix_flt[AVRESAMPLE_MAX_CHANNELS];
     void   **matrix;
diff --git a/libavresample/audio_mix_matrix.c b/libavresample/audio_mix_matrix.c
index 96c49ef..6135b02 100644
--- a/libavresample/audio_mix_matrix.c
+++ b/libavresample/audio_mix_matrix.c
@@ -257,14 +257,14 @@ int avresample_get_matrix(AVAudioResampleContext *avr, double *matrix,
     }
 
     switch (avr->mix_coeff_type) {
-    case AV_MIX_COEFF_TYPE_Q6:
-        if (!avr->am->matrix_q6[0]) {
+    case AV_MIX_COEFF_TYPE_Q8:
+        if (!avr->am->matrix_q8[0]) {
             av_log(avr, AV_LOG_ERROR, "matrix is not set\n");
             return AVERROR(EINVAL);
         }
         for (o = 0; o < out_channels; o++)
             for (i = 0; i < in_channels; i++)
-                matrix[o * stride + i] = avr->am->matrix_q6[o][i] / 64.0;
+                matrix[o * stride + i] = avr->am->matrix_q8[o][i] / 256.0;
         break;
     case AV_MIX_COEFF_TYPE_Q15:
         if (!avr->am->matrix_q15[0]) {
@@ -325,8 +325,8 @@ int avresample_set_matrix(AVAudioResampleContext *avr, const double *matrix,
     avr->am->matrix = (void **)avr->am->matrix_## type;
 
     switch (avr->mix_coeff_type) {
-    case AV_MIX_COEFF_TYPE_Q6:
-        CONVERT_MATRIX(q6, av_clip_int16(lrint(64.0 * v)))
+    case AV_MIX_COEFF_TYPE_Q8:
+        CONVERT_MATRIX(q8, av_clip_int16(lrint(256.0 * v)))
         break;
     case AV_MIX_COEFF_TYPE_Q15:
         CONVERT_MATRIX(q15, av_clipl_int32(llrint(32768.0 * v)))
diff --git a/libavresample/avresample.h b/libavresample/avresample.h
index 41688ed..7350805 100644
--- a/libavresample/avresample.h
+++ b/libavresample/avresample.h
@@ -39,7 +39,7 @@ typedef struct AVAudioResampleContext AVAudioResampleContext;
 
 /** Mixing Coefficient Types */
 enum AVMixCoeffType {
-    AV_MIX_COEFF_TYPE_Q6,   /** 16-bit 10.6 fixed-point                     */
+    AV_MIX_COEFF_TYPE_Q8,   /** 16-bit 8.8 fixed-point                      */
     AV_MIX_COEFF_TYPE_Q15,  /** 32-bit 17.15 fixed-point                    */
     AV_MIX_COEFF_TYPE_FLT,  /** floating-point                              */
     AV_MIX_COEFF_TYPE_NB,   /** Number of coeff types. Not part of ABI      */
diff --git a/libavresample/options.c b/libavresample/options.c
index 0be1a26..5430c4d 100644
--- a/libavresample/options.c
+++ b/libavresample/options.c
@@ -40,8 +40,8 @@ static const AVOption options[] = {
     { "out_sample_fmt",         "Output Sample Format",     OFFSET(out_sample_fmt),         AV_OPT_TYPE_INT,    { AV_SAMPLE_FMT_S16     }, AV_SAMPLE_FMT_U8,     AV_SAMPLE_FMT_NB-1,     PARAM },
     { "out_sample_rate",        "Output Sample Rate",       OFFSET(out_sample_rate),        AV_OPT_TYPE_INT,    { 48000                 }, 1,                    INT_MAX,                PARAM },
     { "internal_sample_fmt",    "Internal Sample Format",   OFFSET(internal_sample_fmt),    AV_OPT_TYPE_INT,    { AV_SAMPLE_FMT_FLTP    }, AV_SAMPLE_FMT_NONE,   AV_SAMPLE_FMT_NB-1,     PARAM },
-    { "mix_coeff_type",         "Mixing Coefficient Type",  OFFSET(mix_coeff_type),         AV_OPT_TYPE_INT,    { AV_MIX_COEFF_TYPE_FLT }, AV_MIX_COEFF_TYPE_Q6, AV_MIX_COEFF_TYPE_NB-1, PARAM, "mix_coeff_type" },
-        { "q6",  "16-bit 10.6 Fixed-Point",  0, AV_OPT_TYPE_CONST, { AV_MIX_COEFF_TYPE_Q6  }, INT_MIN, INT_MAX, PARAM, "mix_coeff_type" },
+    { "mix_coeff_type",         "Mixing Coefficient Type",  OFFSET(mix_coeff_type),         AV_OPT_TYPE_INT,    { AV_MIX_COEFF_TYPE_FLT }, AV_MIX_COEFF_TYPE_Q8, AV_MIX_COEFF_TYPE_NB-1, PARAM, "mix_coeff_type" },
+        { "q8",  "16-bit 8.8 Fixed-Point",   0, AV_OPT_TYPE_CONST, { AV_MIX_COEFF_TYPE_Q8  }, INT_MIN, INT_MAX, PARAM, "mix_coeff_type" },
         { "q15", "32-bit 17.15 Fixed-Point", 0, AV_OPT_TYPE_CONST, { AV_MIX_COEFF_TYPE_Q15 }, INT_MIN, INT_MAX, PARAM, "mix_coeff_type" },
         { "flt", "Floating-Point",           0, AV_OPT_TYPE_CONST, { AV_MIX_COEFF_TYPE_FLT }, INT_MIN, INT_MAX, PARAM, "mix_coeff_type" },
     { "center_mix_level",       "Center Mix Level",         OFFSET(center_mix_level),       AV_OPT_TYPE_DOUBLE, { M_SQRT1_2             }, -32.0,                32.0,                   PARAM },
diff --git a/libavresample/version.h b/libavresample/version.h
index 4113edc..47504c9 100644
--- a/libavresample/version.h
+++ b/libavresample/version.h
@@ -21,7 +21,7 @@
 
 #define LIBAVRESAMPLE_VERSION_MAJOR  0
 #define LIBAVRESAMPLE_VERSION_MINOR  0
-#define LIBAVRESAMPLE_VERSION_MICRO  0
+#define LIBAVRESAMPLE_VERSION_MICRO  1
 
 #define LIBAVRESAMPLE_VERSION_INT  AV_VERSION_INT(LIBAVRESAMPLE_VERSION_MAJOR, \
                                                   LIBAVRESAMPLE_VERSION_MINOR, \



More information about the ffmpeg-cvslog mailing list