lavr: use 8.8 instead of 10.6 as the 16-bit fixed-point mixing coeff type
This commit is contained in:
		@@ -13,6 +13,9 @@ libavutil:     2011-04-18
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
API changes, most recent first:
 | 
					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
 | 
					2012-04-25 - 3527a73 - lavu 51.29.0 - cpu.h
 | 
				
			||||||
  Add av_parse_cpu_flags()
 | 
					  Add av_parse_cpu_flags()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@
 | 
				
			|||||||
#include "audio_data.h"
 | 
					#include "audio_data.h"
 | 
				
			||||||
#include "audio_mix.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,
 | 
					void ff_audio_mix_set_func(AudioMix *am, enum AVSampleFormat fmt,
 | 
				
			||||||
                           enum AVMixCoeffType coeff_type, int in_channels,
 | 
					                           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(FLTP, FLT, float,   float,   float,   sum)
 | 
				
			||||||
MIX_FUNC_GENERIC(S16P, FLT, int16_t, float,   float,   av_clip_int16(lrintf(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, 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 */
 | 
					/* 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,
 | 
					    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));
 | 
					                          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,
 | 
					    ff_audio_mix_set_func(am, AV_SAMPLE_FMT_S16P, AV_MIX_COEFF_TYPE_Q8,
 | 
				
			||||||
                          0, 0, 1, 1, "C", MIX_FUNC_NAME(S16P, Q6));
 | 
					                          0, 0, 1, 1, "C", MIX_FUNC_NAME(S16P, Q8));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* channel-specific C versions */
 | 
					    /* channel-specific C versions */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -320,7 +320,7 @@ void ff_audio_mix_close(AudioMix *am)
 | 
				
			|||||||
        av_free(am->matrix[0]);
 | 
					        av_free(am->matrix[0]);
 | 
				
			||||||
        am->matrix = NULL;
 | 
					        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_q15, 0, sizeof(am->matrix_q15));
 | 
				
			||||||
    memset(am->matrix_flt, 0, sizeof(am->matrix_flt));
 | 
					    memset(am->matrix_flt, 0, sizeof(am->matrix_flt));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,7 +47,7 @@ typedef struct AudioMix {
 | 
				
			|||||||
    mix_func *mix;
 | 
					    mix_func *mix;
 | 
				
			||||||
    mix_func *mix_generic;
 | 
					    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];
 | 
					    int32_t *matrix_q15[AVRESAMPLE_MAX_CHANNELS];
 | 
				
			||||||
    float   *matrix_flt[AVRESAMPLE_MAX_CHANNELS];
 | 
					    float   *matrix_flt[AVRESAMPLE_MAX_CHANNELS];
 | 
				
			||||||
    void   **matrix;
 | 
					    void   **matrix;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -257,14 +257,14 @@ int avresample_get_matrix(AVAudioResampleContext *avr, double *matrix,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (avr->mix_coeff_type) {
 | 
					    switch (avr->mix_coeff_type) {
 | 
				
			||||||
    case AV_MIX_COEFF_TYPE_Q6:
 | 
					    case AV_MIX_COEFF_TYPE_Q8:
 | 
				
			||||||
        if (!avr->am->matrix_q6[0]) {
 | 
					        if (!avr->am->matrix_q8[0]) {
 | 
				
			||||||
            av_log(avr, AV_LOG_ERROR, "matrix is not set\n");
 | 
					            av_log(avr, AV_LOG_ERROR, "matrix is not set\n");
 | 
				
			||||||
            return AVERROR(EINVAL);
 | 
					            return AVERROR(EINVAL);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        for (o = 0; o < out_channels; o++)
 | 
					        for (o = 0; o < out_channels; o++)
 | 
				
			||||||
            for (i = 0; i < in_channels; i++)
 | 
					            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;
 | 
					        break;
 | 
				
			||||||
    case AV_MIX_COEFF_TYPE_Q15:
 | 
					    case AV_MIX_COEFF_TYPE_Q15:
 | 
				
			||||||
        if (!avr->am->matrix_q15[0]) {
 | 
					        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;
 | 
					    avr->am->matrix = (void **)avr->am->matrix_## type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (avr->mix_coeff_type) {
 | 
					    switch (avr->mix_coeff_type) {
 | 
				
			||||||
    case AV_MIX_COEFF_TYPE_Q6:
 | 
					    case AV_MIX_COEFF_TYPE_Q8:
 | 
				
			||||||
        CONVERT_MATRIX(q6, av_clip_int16(lrint(64.0 * v)))
 | 
					        CONVERT_MATRIX(q8, av_clip_int16(lrint(256.0 * v)))
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case AV_MIX_COEFF_TYPE_Q15:
 | 
					    case AV_MIX_COEFF_TYPE_Q15:
 | 
				
			||||||
        CONVERT_MATRIX(q15, av_clipl_int32(llrint(32768.0 * v)))
 | 
					        CONVERT_MATRIX(q15, av_clipl_int32(llrint(32768.0 * v)))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,7 +39,7 @@ typedef struct AVAudioResampleContext AVAudioResampleContext;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/** Mixing Coefficient Types */
 | 
					/** Mixing Coefficient Types */
 | 
				
			||||||
enum AVMixCoeffType {
 | 
					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_Q15,  /** 32-bit 17.15 fixed-point                    */
 | 
				
			||||||
    AV_MIX_COEFF_TYPE_FLT,  /** floating-point                              */
 | 
					    AV_MIX_COEFF_TYPE_FLT,  /** floating-point                              */
 | 
				
			||||||
    AV_MIX_COEFF_TYPE_NB,   /** Number of coeff types. Not part of ABI      */
 | 
					    AV_MIX_COEFF_TYPE_NB,   /** Number of coeff types. Not part of ABI      */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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_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 },
 | 
					    { "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 },
 | 
					    { "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" },
 | 
					    { "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" },
 | 
				
			||||||
        { "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" },
 | 
					        { "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" },
 | 
					        { "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" },
 | 
					        { "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 },
 | 
					    { "center_mix_level",       "Center Mix Level",         OFFSET(center_mix_level),       AV_OPT_TYPE_DOUBLE, { M_SQRT1_2             }, -32.0,                32.0,                   PARAM },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define LIBAVRESAMPLE_VERSION_MAJOR  0
 | 
					#define LIBAVRESAMPLE_VERSION_MAJOR  0
 | 
				
			||||||
#define LIBAVRESAMPLE_VERSION_MINOR  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, \
 | 
					#define LIBAVRESAMPLE_VERSION_INT  AV_VERSION_INT(LIBAVRESAMPLE_VERSION_MAJOR, \
 | 
				
			||||||
                                                  LIBAVRESAMPLE_VERSION_MINOR, \
 | 
					                                                  LIBAVRESAMPLE_VERSION_MINOR, \
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user