mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
lavr: add C functions for mixing 2 to 1 channels with s16p format
This commit is contained in:
parent
528995589f
commit
8dfc122719
@ -115,6 +115,50 @@ static void mix_2_to_1_fltp_flt_c(float **samples, float **matrix, int len,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mix_2_to_1_s16p_flt_c(int16_t **samples, float **matrix, int len,
|
||||||
|
int out_ch, int in_ch)
|
||||||
|
{
|
||||||
|
int16_t *src0 = samples[0];
|
||||||
|
int16_t *src1 = samples[1];
|
||||||
|
int16_t *dst = src0;
|
||||||
|
float m0 = matrix[0][0];
|
||||||
|
float m1 = matrix[0][1];
|
||||||
|
|
||||||
|
while (len > 4) {
|
||||||
|
*dst++ = av_clip_int16(lrintf(*src0++ * m0 + *src1++ * m1));
|
||||||
|
*dst++ = av_clip_int16(lrintf(*src0++ * m0 + *src1++ * m1));
|
||||||
|
*dst++ = av_clip_int16(lrintf(*src0++ * m0 + *src1++ * m1));
|
||||||
|
*dst++ = av_clip_int16(lrintf(*src0++ * m0 + *src1++ * m1));
|
||||||
|
len -= 4;
|
||||||
|
}
|
||||||
|
while (len > 0) {
|
||||||
|
*dst++ = av_clip_int16(lrintf(*src0++ * m0 + *src1++ * m1));
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mix_2_to_1_s16p_q8_c(int16_t **samples, int16_t **matrix, int len,
|
||||||
|
int out_ch, int in_ch)
|
||||||
|
{
|
||||||
|
int16_t *src0 = samples[0];
|
||||||
|
int16_t *src1 = samples[1];
|
||||||
|
int16_t *dst = src0;
|
||||||
|
int16_t m0 = matrix[0][0];
|
||||||
|
int16_t m1 = matrix[0][1];
|
||||||
|
|
||||||
|
while (len > 4) {
|
||||||
|
*dst++ = (*src0++ * m0 + *src1++ * m1) >> 8;
|
||||||
|
*dst++ = (*src0++ * m0 + *src1++ * m1) >> 8;
|
||||||
|
*dst++ = (*src0++ * m0 + *src1++ * m1) >> 8;
|
||||||
|
*dst++ = (*src0++ * m0 + *src1++ * m1) >> 8;
|
||||||
|
len -= 4;
|
||||||
|
}
|
||||||
|
while (len > 0) {
|
||||||
|
*dst++ = (*src0++ * m0 + *src1++ * m1) >> 8;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void mix_1_to_2_fltp_flt_c(float **samples, float **matrix, int len,
|
static void mix_1_to_2_fltp_flt_c(float **samples, float **matrix, int len,
|
||||||
int out_ch, int in_ch)
|
int out_ch, int in_ch)
|
||||||
{
|
{
|
||||||
@ -229,6 +273,12 @@ static int mix_function_init(AudioMix *am)
|
|||||||
ff_audio_mix_set_func(am, AV_SAMPLE_FMT_FLTP, AV_MIX_COEFF_TYPE_FLT,
|
ff_audio_mix_set_func(am, AV_SAMPLE_FMT_FLTP, AV_MIX_COEFF_TYPE_FLT,
|
||||||
2, 1, 1, 1, "C", mix_2_to_1_fltp_flt_c);
|
2, 1, 1, 1, "C", mix_2_to_1_fltp_flt_c);
|
||||||
|
|
||||||
|
ff_audio_mix_set_func(am, AV_SAMPLE_FMT_S16P, AV_MIX_COEFF_TYPE_FLT,
|
||||||
|
2, 1, 1, 1, "C", mix_2_to_1_s16p_flt_c);
|
||||||
|
|
||||||
|
ff_audio_mix_set_func(am, AV_SAMPLE_FMT_S16P, AV_MIX_COEFF_TYPE_Q8,
|
||||||
|
2, 1, 1, 1, "C", mix_2_to_1_s16p_q8_c);
|
||||||
|
|
||||||
ff_audio_mix_set_func(am, AV_SAMPLE_FMT_FLTP, AV_MIX_COEFF_TYPE_FLT,
|
ff_audio_mix_set_func(am, AV_SAMPLE_FMT_FLTP, AV_MIX_COEFF_TYPE_FLT,
|
||||||
1, 2, 1, 1, "C", mix_1_to_2_fltp_flt_c);
|
1, 2, 1, 1, "C", mix_1_to_2_fltp_flt_c);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user