mirror of https://git.ffmpeg.org/ffmpeg.git
af_amix: allow float planar sample format as input
This commit is contained in:
parent
f0ece49e74
commit
ae46fbee1d
|
@ -162,6 +162,7 @@ typedef struct MixContext {
|
|||
|
||||
int nb_channels; /**< number of channels */
|
||||
int sample_rate; /**< sample rate */
|
||||
int planar;
|
||||
AVAudioFifo **fifos; /**< audio fifo for each input */
|
||||
uint8_t *input_state; /**< current state of each input */
|
||||
float *input_scale; /**< mixing scale factor for each input */
|
||||
|
@ -225,6 +226,7 @@ static int config_output(AVFilterLink *outlink)
|
|||
int i;
|
||||
char buf[64];
|
||||
|
||||
s->planar = av_sample_fmt_is_planar(outlink->format);
|
||||
s->sample_rate = outlink->sample_rate;
|
||||
outlink->time_base = (AVRational){ 1, outlink->sample_rate };
|
||||
s->next_pts = AV_NOPTS_VALUE;
|
||||
|
@ -287,12 +289,20 @@ static int output_frame(AVFilterLink *outlink, int nb_samples)
|
|||
|
||||
for (i = 0; i < s->nb_inputs; i++) {
|
||||
if (s->input_state[i] == INPUT_ON) {
|
||||
int planes, plane_size, p;
|
||||
|
||||
av_audio_fifo_read(s->fifos[i], (void **)in_buf->extended_data,
|
||||
nb_samples);
|
||||
s->fdsp.vector_fmac_scalar((float *)out_buf->extended_data[0],
|
||||
(float *) in_buf->extended_data[0],
|
||||
s->input_scale[i],
|
||||
FFALIGN(nb_samples * s->nb_channels, 16));
|
||||
|
||||
planes = s->planar ? s->nb_channels : 1;
|
||||
plane_size = nb_samples * (s->planar ? 1 : s->nb_channels);
|
||||
plane_size = FFALIGN(plane_size, 16);
|
||||
|
||||
for (p = 0; p < planes; p++) {
|
||||
s->fdsp.vector_fmac_scalar((float *)out_buf->extended_data[p],
|
||||
(float *) in_buf->extended_data[p],
|
||||
s->input_scale[i], plane_size);
|
||||
}
|
||||
}
|
||||
}
|
||||
avfilter_unref_buffer(in_buf);
|
||||
|
@ -523,6 +533,7 @@ static int query_formats(AVFilterContext *ctx)
|
|||
{
|
||||
AVFilterFormats *formats = NULL;
|
||||
ff_add_format(&formats, AV_SAMPLE_FMT_FLT);
|
||||
ff_add_format(&formats, AV_SAMPLE_FMT_FLTP);
|
||||
ff_set_common_formats(ctx, formats);
|
||||
ff_set_common_channel_layouts(ctx, ff_all_channel_layouts());
|
||||
ff_set_common_samplerates(ctx, ff_all_samplerates());
|
||||
|
|
Loading…
Reference in New Issue