35 #if FF_API_AVCODEC_RESAMPLE
37 #define MAX_CHANNELS 8
43 return "audioresample";
74 q[0] = (p[0] + p[1]) >> 1;
75 q[1] = (p[2] + p[3]) >> 1;
76 q[2] = (p[4] + p[5]) >> 1;
77 q[3] = (p[6] + p[7]) >> 1;
83 q[0] = (p[0] + p[1]) >> 1;
100 v = p[0]; q[0] =
v; q[1] =
v;
101 v = p[1]; q[2] =
v; q[3] =
v;
102 v = p[2]; q[4] =
v; q[5] =
v;
103 v = p[3]; q[6] =
v; q[7] =
v;
109 v = p[0]; q[0] =
v; q[1] =
v;
128 for (i = 0; i < samples; i++) {
137 l = av_clip_int16(fl + (0.5 * rl) + (0.7 * c));
138 r = av_clip_int16(fr + (0.5 * rr) + (0.7 * c));
149 static void deinterleave(
short **output,
short *input,
int channels,
int samples)
153 for (i = 0; i < samples; i++) {
154 for (j = 0; j < channels; j++) {
155 *output[j]++ = *input++;
160 static void interleave(
short *output,
short **input,
int channels,
int samples)
164 for (i = 0; i < samples; i++) {
165 for (j = 0; j < channels; j++) {
166 *output++ = *input[j]++;
171 static void ac3_5p1_mux(
short *output,
short *input1,
short *input2,
int n)
176 for (i = 0; i <
n; i++) {
180 *output++ = (l / 2) + (r / 2);
188 #define SUPPORT_RESAMPLE(ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8) \
189 ch8<<7 | ch7<<6 | ch6<<5 | ch5<<4 | ch4<<3 | ch3<<2 | ch2<<1 | ch1<<0
204 int output_rate,
int input_rate,
208 int linear,
double cutoff)
214 "Resampling with input channels greater than %d is unsupported.\n",
221 "output channels for %d input channel%s", input_channels,
222 input_channels > 1 ?
"s:" :
":");
236 s->
ratio = (float)output_rate / (
float)input_rate;
254 "Cannot convert %s sample format to s16 sample format\n",
265 "Cannot convert s16 sample format to %s sample format\n",
274 filter_length, log2_phase_count,
290 short *output_bak = NULL;
295 memcpy(output, input, nb_samples * s->
input_channels *
sizeof(
short));
301 int ostride[1] = { 2 };
302 const void *ibuf[1] = { input };
318 if (av_audio_convert(s->
convert_ctx[0], obuf, ostride,
321 "Audio sample format conversion failed\n");
353 if (!bufin[i] || !bufout[i]) {
359 memcpy(bufin[i], s->
temp[i], s->
temp_len *
sizeof(
short));
360 buftmp2[i] = bufin[i] + s->
temp_len;
367 buftmp3[0] = bufout[0];
368 memcpy(buftmp2[0], input, nb_samples *
sizeof(
short));
370 buftmp3[0] = bufout[0];
371 buftmp3[1] = bufout[1];
375 buftmp3[i] = bufout[i];
380 memcpy(buftmp2[0], input, nb_samples *
sizeof(
short));
392 &consumed, nb_samples, lenout, is_last);
393 s->
temp_len = nb_samples - consumed;
395 memcpy(s->
temp[i], bufin[i] + consumed, s->
temp_len *
sizeof(
short));
401 ac3_5p1_mux(output, buftmp3[0], buftmp3[1], nb_samples1);
408 int istride[1] = { 2 };
410 const void *ibuf[1] = { output };
411 void *obuf[1] = { output_bak };
413 if (av_audio_convert(s->
convert_ctx[1], obuf, ostride,
416 "Audio sample format conversion failed\n");