From ed024aadb6e7be6c3d910045a64db53a6c95e98f Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 5 Dec 2013 00:01:46 +0100 Subject: audio/filter: change filter callback signature The new signature is actually closer to how it actually works, and someone who is not familiar to the API and how it works might make fewer fatal mistakes with the new signature than the old one. Pretty weird. Do this to sneak in a flags parameter, which will later be used to flush remaining data of at least vf_lavfi. --- audio/decode/dec_audio.c | 17 ++++----- audio/filter/af.c | 22 ++++++----- audio/filter/af.h | 10 ++++- audio/filter/af_bs2b.c | 74 ++++++++++++++++++------------------- audio/filter/af_center.c | 6 +-- audio/filter/af_channels.c | 6 +-- audio/filter/af_convert24.c | 6 +-- audio/filter/af_convertsignendian.c | 6 +-- audio/filter/af_delay.c | 6 +-- audio/filter/af_drc.c | 7 ++-- audio/filter/af_dummy.c | 9 ++--- audio/filter/af_equalizer.c | 6 +-- audio/filter/af_export.c | 7 ++-- audio/filter/af_extrastereo.c | 18 ++++----- audio/filter/af_format.c | 6 +-- audio/filter/af_hrtf.c | 6 +-- audio/filter/af_karaoke.c | 6 +-- audio/filter/af_ladspa.c | 10 ++--- audio/filter/af_lavcac3enc.c | 10 ++--- audio/filter/af_lavfi.c | 10 ++--- audio/filter/af_lavrresample.c | 8 ++-- audio/filter/af_pan.c | 6 +-- audio/filter/af_scaletempo.c | 8 ++-- audio/filter/af_sinesuppress.c | 10 ++--- audio/filter/af_sub.c | 6 +-- audio/filter/af_surround.c | 6 +-- audio/filter/af_sweep.c | 6 +-- audio/filter/af_volume.c | 6 +-- 28 files changed, 152 insertions(+), 152 deletions(-) diff --git a/audio/decode/dec_audio.c b/audio/decode/dec_audio.c index 8cd7783069..b004664474 100644 --- a/audio/decode/dec_audio.c +++ b/audio/decode/dec_audio.c @@ -270,16 +270,15 @@ static int filter_n_bytes(struct dec_audio *da, struct mp_audio_buffer *outbuf, } // Filter - struct mp_audio filter_input; - mp_audio_buffer_peek(da->decode_buffer, &filter_input); - filter_input.rate = da->afilter->input.rate; // due to playback speed change - len = MPMIN(filter_input.samples, len); - filter_input.samples = len; - - struct mp_audio *filter_output = af_play(da->afilter, &filter_input); - if (!filter_output) + struct mp_audio filter_data; + mp_audio_buffer_peek(da->decode_buffer, &filter_data); + filter_data.rate = da->afilter->input.rate; // due to playback speed change + len = MPMIN(filter_data.samples, len); + filter_data.samples = len; + + if (af_filter(da->afilter, &filter_data, 0) < 0) return -1; - mp_audio_buffer_append(outbuf, filter_output); + mp_audio_buffer_append(outbuf, &filter_data); // remove processed data from decoder buffer: mp_audio_buffer_skip(da->decode_buffer, len); diff --git a/audio/filter/af.c b/audio/filter/af.c index d7a0086d5b..f37081c75a 100644 --- a/audio/filter/af.c +++ b/audio/filter/af.c @@ -165,9 +165,9 @@ static int output_control(struct af_instance* af, int cmd, void* arg) return AF_UNKNOWN; } -static struct mp_audio *dummy_play(struct af_instance* af, struct mp_audio* data) +static int dummy_filter(struct af_instance* af, struct mp_audio* data, int f) { - return data; + return 0; } /* Function for creating a new filter of type name.The name may @@ -592,7 +592,7 @@ struct af_stream *af_new(struct MPOpts *opts) *s->first = (struct af_instance) { .info = &in, .control = input_control, - .play = dummy_play, + .filter = dummy_filter, .priv = s, .data = &s->input, .mul = 1.0, @@ -602,7 +602,7 @@ struct af_stream *af_new(struct MPOpts *opts) *s->last = (struct af_instance) { .info = &out, .control = output_control, - .play = dummy_play, + .filter = dummy_filter, .priv = s, .data = &s->filter_output, .mul = 1.0, @@ -687,20 +687,22 @@ struct af_instance *af_add(struct af_stream *s, char *name, char **args) } /* Filter data chunk through the filters in the list. - * Warning: input (audio data and struct fields) will be overwritten. */ -struct mp_audio *af_play(struct af_stream *s, struct mp_audio *data) + * On success, *data is set to the filtered data/format. + * Warning: input audio data will be overwritten. + */ +int af_filter(struct af_stream *s, struct mp_audio *data, int flags) { struct af_instance *af = s->first; assert(mp_audio_config_equals(af->data, data)); // Iterate through all filters while (af) { - data = af->play(af, data); - if (!data) - return NULL; + int r = af->filter(af, data, flags); + if (r < 0) + return r; assert(mp_audio_config_equals(af->data, data)); af = af->next; } - return data; + return 0; } // Calculate average ratio of filter output samples to input samples. diff --git a/audio/filter/af.h b/audio/filter/af.h index 2d29d3f3ae..fb7f2b3b1d 100644 --- a/audio/filter/af.h +++ b/audio/filter/af.h @@ -40,6 +40,9 @@ struct af_instance; #define AF_FLAGS_REENTRANT 0x00000000 #define AF_FLAGS_NOT_REENTRANT 0x00000001 +// Flags for af->filter() +#define AF_FILTER_FLAG_EOF 1 + /* Audio filter information not specific for current instance, but for a specific filter */ struct af_info { @@ -58,7 +61,10 @@ struct af_instance { const struct af_info *info; int (*control)(struct af_instance *af, int cmd, void *arg); void (*uninit)(struct af_instance *af); - struct mp_audio * (*play)(struct af_instance *af, struct mp_audio *data); + /* flags is a bit mask of AF_FILTER_FLAG_* values + * returns 0 on success, negative value on error + */ + int (*filter)(struct af_instance *af, struct mp_audio *data, int flags); void *priv; struct mp_audio *data; // configuration and buffer for outgoing data stream struct af_instance *next; @@ -121,7 +127,7 @@ void af_destroy(struct af_stream *s); int af_init(struct af_stream *s); void af_uninit(struct af_stream *s); struct af_instance *af_add(struct af_stream *s, char *name, char **args); -struct mp_audio *af_play(struct af_stream *s, struct mp_audio *data); +int af_filter(struct af_stream *s, struct mp_audio *data, int flags); struct af_instance *af_control_any_rev(struct af_stream *s, int cmd, void *arg); void af_control_all(struct af_stream *s, int cmd, void *arg); diff --git a/audio/filter/af_bs2b.c b/audio/filter/af_bs2b.c index c4f826e856..aaada29a74 100644 --- a/audio/filter/af_bs2b.c +++ b/audio/filter/af_bs2b.c @@ -37,33 +37,33 @@ struct af_bs2b { t_bs2bdp filter; ///< instance of a library filter }; -#define PLAY(name, type) \ -static struct mp_audio *play_##name(struct af_instance *af, struct mp_audio *data) \ +#define FILTER(name, type) \ +static int filter_##name(struct af_instance *af, struct mp_audio *data, int f) \ { \ /* filter is called for all pairs of samples available in the buffer */ \ bs2b_cross_feed_##name(((struct af_bs2b*)(af->priv))->filter, \ (type*)(data->planes[0]), data->samples); \ \ - return data; \ + return 0; \ } -PLAY(f, float) -PLAY(fbe, float) -PLAY(fle, float) -PLAY(s32be, int32_t) -PLAY(u32be, uint32_t) -PLAY(s32le, int32_t) -PLAY(u32le, uint32_t) -PLAY(s24be, bs2b_int24_t) -PLAY(u24be, bs2b_uint24_t) -PLAY(s24le, bs2b_int24_t) -PLAY(u24le, bs2b_uint24_t) -PLAY(s16be, int16_t) -PLAY(u16be, uint16_t) -PLAY(s16le, int16_t) -PLAY(u16le, uint16_t) -PLAY(s8, int8_t) -PLAY(u8, uint8_t) +FILTER(f, float) +FILTER(fbe, float) +FILTER(fle, float) +FILTER(s32be, int32_t) +FILTER(u32be, uint32_t) +FILTER(s32le, int32_t) +FILTER(u32le, uint32_t) +FILTER(s24be, bs2b_int24_t) +FILTER(u24be, bs2b_uint24_t) +FILTER(s24le, bs2b_int24_t) +FILTER(u24le, bs2b_uint24_t) +FILTER(s16be, int16_t) +FILTER(u16be, uint16_t) +FILTER(s16le, int16_t) +FILTER(u16le, uint16_t) +FILTER(s8, int8_t) +FILTER(u8, uint8_t) /// Initialization and runtime control @@ -86,55 +86,55 @@ static int control(struct af_instance *af, int cmd, void *arg) and assign corresponding handlers */ switch (format) { case AF_FORMAT_FLOAT_BE: - af->play = play_fbe; + af->filter = filter_fbe; break; case AF_FORMAT_FLOAT_LE: - af->play = play_fle; + af->filter = filter_fle; break; case AF_FORMAT_S32_BE: - af->play = play_s32be; + af->filter = filter_s32be; break; case AF_FORMAT_U32_BE: - af->play = play_u32be; + af->filter = filter_u32be; break; case AF_FORMAT_S32_LE: - af->play = play_s32le; + af->filter = filter_s32le; break; case AF_FORMAT_U32_LE: - af->play = play_u32le; + af->filter = filter_u32le; break; case AF_FORMAT_S24_BE: - af->play = play_s24be; + af->filter = filter_s24be; break; case AF_FORMAT_U24_BE: - af->play = play_u24be; + af->filter = filter_u24be; break; case AF_FORMAT_S24_LE: - af->play = play_s24le; + af->filter = filter_s24le; break; case AF_FORMAT_U24_LE: - af->play = play_u24le; + af->filter = filter_u24le; break; case AF_FORMAT_S16_BE: - af->play = play_s16be; + af->filter = filter_s16be; break; case AF_FORMAT_U16_BE: - af->play = play_u16be; + af->filter = filter_u16be; break; case AF_FORMAT_S16_LE: - af->play = play_s16le; + af->filter = filter_s16le; break; case AF_FORMAT_U16_LE: - af->play = play_u16le; + af->filter = filter_u16le; break; case AF_FORMAT_S8: - af->play = play_s8; + af->filter = filter_s8; break; case AF_FORMAT_U8: - af->play = play_u8; + af->filter = filter_u8; break; default: - af->play = play_f; + af->filter = filter_f; mp_audio_set_format(af->data, AF_FORMAT_FLOAT); break; } diff --git a/audio/filter/af_center.c b/audio/filter/af_center.c index 65c1526dd3..d1095e611c 100644 --- a/audio/filter/af_center.c +++ b/audio/filter/af_center.c @@ -59,7 +59,7 @@ static int control(struct af_instance* af, int cmd, void* arg) } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int filter(struct af_instance* af, struct mp_audio* data, int flags) { struct mp_audio* c = data; // Current working data af_center_t* s = af->priv; // Setup for this instance @@ -75,13 +75,13 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) a[i+ch] = (a[i]/2) + (a[i+1]/2); } - return c; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control=control; - af->play=play; + af->filter=filter; return AF_OK; } diff --git a/audio/filter/af_channels.c b/audio/filter/af_channels.c index 3277dff7a6..8edaa4285a 100644 --- a/audio/filter/af_channels.c +++ b/audio/filter/af_channels.c @@ -180,7 +180,7 @@ static int control(struct af_instance* af, int cmd, void* arg) } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int filter(struct af_instance* af, struct mp_audio* data, int flags) { struct mp_audio* c = data; // Current working data struct mp_audio* l = af->data; // Local data @@ -201,13 +201,13 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) c->planes[0] = l->planes[0]; mp_audio_set_channels(c, &l->channels); - return c; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control=control; - af->play=play; + af->filter=filter; af_channels_t *s = af->priv; // If router scan commandline for routing pairs diff --git a/audio/filter/af_convert24.c b/audio/filter/af_convert24.c index ddd30875cc..6990fbd421 100644 --- a/audio/filter/af_convert24.c +++ b/audio/filter/af_convert24.c @@ -70,7 +70,7 @@ static int control(struct af_instance *af, int cmd, void *arg) #define SHIFT(x) (((x)+1)*8) #endif -static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) +static int filter(struct af_instance *af, struct mp_audio *data, int flags) { mp_audio_realloc_min(af->data, data->samples); @@ -98,13 +98,13 @@ static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) } data->planes[0] = out->planes[0]; - return data; + return 0; } static int af_open(struct af_instance *af) { af->control = control; - af->play = play; + af->filter = filter; return AF_OK; } diff --git a/audio/filter/af_convertsignendian.c b/audio/filter/af_convertsignendian.c index 7ab99c9c74..7bfaf0f978 100644 --- a/audio/filter/af_convertsignendian.c +++ b/audio/filter/af_convertsignendian.c @@ -99,7 +99,7 @@ static void si2us(void *data, int len, int bps, bool le) } while (i += bps); } -static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) +static int filter(struct af_instance *af, struct mp_audio *data, int flags) { int infmt = data->format; int outfmt = af->data->format; @@ -113,13 +113,13 @@ static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) (outfmt & AF_FORMAT_END_MASK) == AF_FORMAT_LE); mp_audio_set_format(data, outfmt); - return data; + return 0; } static int af_open(struct af_instance *af) { af->control = control; - af->play = play; + af->filter = filter; return AF_OK; } diff --git a/audio/filter/af_delay.c b/audio/filter/af_delay.c index 6dac83a74f..b2c03697fd 100644 --- a/audio/filter/af_delay.c +++ b/audio/filter/af_delay.c @@ -97,7 +97,7 @@ static void uninit(struct af_instance* af) } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int filter(struct af_instance* af, struct mp_audio* data, int flags) { struct mp_audio* c = data; // Current working data af_delay_t* s = af->priv; // Setup for this instance @@ -152,14 +152,14 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) } } s->ri = ri; - return c; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control=control; af->uninit=uninit; - af->play=play; + af->filter=filter; af_delay_t *s = af->priv; int n = 1; int i = 0; diff --git a/audio/filter/af_drc.c b/audio/filter/af_drc.c index 103080c1a1..0edb99f469 100644 --- a/audio/filter/af_drc.c +++ b/audio/filter/af_drc.c @@ -272,8 +272,7 @@ static void method2_float(af_drc_t *s, struct mp_audio *c) s->idx = (s->idx + 1) % NSAMPLES; } -// Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int filter(struct af_instance* af, struct mp_audio* data, int flags) { af_drc_t *s = af->priv; @@ -291,14 +290,14 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) else method1_float(s, data); } - return data; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ int i = 0; af->control=control; - af->play=play; + af->filter=filter; af_drc_t *priv = af->priv; priv->mul = MUL_INIT; diff --git a/audio/filter/af_dummy.c b/audio/filter/af_dummy.c index d1cb054413..d024d0343f 100644 --- a/audio/filter/af_dummy.c +++ b/audio/filter/af_dummy.c @@ -41,18 +41,15 @@ static int control(struct af_instance* af, int cmd, void* arg) } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int filter(struct af_instance* af, struct mp_audio* data, int flags) { - // Do something necessary to get rid of annoying warning during compile - if(!af) - mp_msg(MSGT_AFILTER, MSGL_ERR, "EEEK: Argument af == NULL in af_dummy.c play()."); - return data; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control=control; - af->play=play; + af->filter=filter; return AF_OK; } diff --git a/audio/filter/af_equalizer.c b/audio/filter/af_equalizer.c index c62adf92be..c14fc8451d 100644 --- a/audio/filter/af_equalizer.c +++ b/audio/filter/af_equalizer.c @@ -142,7 +142,7 @@ static int control(struct af_instance* af, int cmd, void* arg) } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int filter(struct af_instance* af, struct mp_audio* data, int flags) { struct mp_audio* c = data; // Current working data af_equalizer_t* s = (af_equalizer_t*)af->priv; // Setup @@ -177,13 +177,13 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) out+=nch; } } - return c; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control=control; - af->play=play; + af->filter=filter; af_equalizer_t *priv = af->priv; for(int i=0;ipriv; // Setup for this instance @@ -199,8 +199,7 @@ static struct mp_audio* play( struct af_instance* af, struct mp_audio* data ) &(s->count), sizeof(s->count)); } - // We don't modify data, just export it - return data; + return 0; } /* Allocate memory and set function pointers @@ -211,7 +210,7 @@ static int af_open( struct af_instance* af ) { af->control = control; af->uninit = uninit; - af->play = play; + af->filter = filter; af_export_t *priv = af->priv; if (!priv->filename || !priv->filename[0]) diff --git a/audio/filter/af_extrastereo.c b/audio/filter/af_extrastereo.c index ed05941ece..92cc4dd216 100644 --- a/audio/filter/af_extrastereo.c +++ b/audio/filter/af_extrastereo.c @@ -35,8 +35,8 @@ typedef struct af_extrastereo_s float mul; }af_extrastereo_t; -static struct mp_audio* play_s16(struct af_instance* af, struct mp_audio* data); -static struct mp_audio* play_float(struct af_instance* af, struct mp_audio* data); +static int play_s16(struct af_instance* af, struct mp_audio* data, int f); +static int play_float(struct af_instance* af, struct mp_audio* data, int f); // Initialization and runtime control static int control(struct af_instance* af, int cmd, void* arg) @@ -51,11 +51,11 @@ static int control(struct af_instance* af, int cmd, void* arg) mp_audio_set_num_channels(af->data, 2); if (af->data->format == AF_FORMAT_FLOAT) { - af->play = play_float; + af->filter = play_float; }// else { mp_audio_set_format(af->data, AF_FORMAT_S16); - af->play = play_s16; + af->filter = play_s16; } return af_test_output(af,(struct mp_audio*)arg); @@ -65,7 +65,7 @@ static int control(struct af_instance* af, int cmd, void* arg) } // Filter data through filter -static struct mp_audio* play_s16(struct af_instance* af, struct mp_audio* data) +static int play_s16(struct af_instance* af, struct mp_audio* data, int f) { af_extrastereo_t *s = af->priv; register int i = 0; @@ -84,10 +84,10 @@ static struct mp_audio* play_s16(struct af_instance* af, struct mp_audio* data) a[i + 1] = MPCLAMP(r, SHRT_MIN, SHRT_MAX); } - return data; + return 0; } -static struct mp_audio* play_float(struct af_instance* af, struct mp_audio* data) +static int play_float(struct af_instance* af, struct mp_audio* data, int f) { af_extrastereo_t *s = af->priv; register int i = 0; @@ -106,13 +106,13 @@ static struct mp_audio* play_float(struct af_instance* af, struct mp_audio* data a[i + 1] = af_softclip(r); } - return data; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control=control; - af->play=play_s16; + af->filter=play_s16; return AF_OK; } diff --git a/audio/filter/af_format.c b/audio/filter/af_format.c index 5b941951cb..552587b56e 100644 --- a/audio/filter/af_format.c +++ b/audio/filter/af_format.c @@ -96,16 +96,16 @@ static int control(struct af_instance *af, int cmd, void *arg) return AF_UNKNOWN; } -static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) +static int filter(struct af_instance *af, struct mp_audio *data, int flags) { mp_audio_copy_config(data, af->data); - return data; + return 0; } static int af_open(struct af_instance *af) { af->control = control; - af->play = play; + af->filter = filter; force_in_params(af, af->data); force_out_params(af, af->data); diff --git a/audio/filter/af_hrtf.c b/audio/filter/af_hrtf.c index 0092d0dc85..83495f4fcb 100644 --- a/audio/filter/af_hrtf.c +++ b/audio/filter/af_hrtf.c @@ -353,7 +353,7 @@ frequencies). 2. A bass compensation is introduced to ensure that 0-200 Hz are not damped (without any real 3D acoustical image, however). */ -static struct mp_audio* play(struct af_instance *af, struct mp_audio *data) +static int filter(struct af_instance *af, struct mp_audio *data, int flags) { af_hrtf_t *s = af->priv; short *in = data->planes[0]; // Input audio data @@ -538,7 +538,7 @@ static struct mp_audio* play(struct af_instance *af, struct mp_audio *data) data->planes[0] = af->data->planes[0]; mp_audio_set_num_channels(data, 2); - return data; + return 0; } static int allocate(af_hrtf_t *s) @@ -571,7 +571,7 @@ static int af_open(struct af_instance* af) af->control = control; af->uninit = uninit; - af->play = play; + af->filter = filter; s = af->priv; diff --git a/audio/filter/af_karaoke.c b/audio/filter/af_karaoke.c index 07ef0579bc..bddb218dde 100644 --- a/audio/filter/af_karaoke.c +++ b/audio/filter/af_karaoke.c @@ -42,7 +42,7 @@ static int control(struct af_instance* af, int cmd, void* arg) } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int play(struct af_instance* af, struct mp_audio* data, int flags) { struct mp_audio* c = data; // Current working data float* a = c->planes[0]; // Audio data @@ -62,13 +62,13 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) a[i+1]=a[i]; } - return c; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control = control; - af->play = play; + af->filter = play; return AF_OK; } diff --git a/audio/filter/af_ladspa.c b/audio/filter/af_ladspa.c index 1d7f9c9fa5..3a05ced3cd 100644 --- a/audio/filter/af_ladspa.c +++ b/audio/filter/af_ladspa.c @@ -564,7 +564,7 @@ static void uninit(struct af_instance *af) { * \return Either AF_ERROR or AF_OK */ -static struct mp_audio* play(struct af_instance *af, struct mp_audio *data) { +static int filter(struct af_instance *af, struct mp_audio *data, int flags) { af_ladspa_t *setup = af->priv; const LADSPA_Descriptor *pdes = setup->plugin_descriptor; float *audio = (float*)data->planes[0]; @@ -574,7 +574,7 @@ static struct mp_audio* play(struct af_instance *af, struct mp_audio *data) { int i, p; if (setup->status !=AF_OK) - return data; + return -1; /* See if it's the first call. If so, setup inbufs/outbufs, instantiate * plugin, connect ports and activate plugin @@ -720,7 +720,7 @@ static struct mp_audio* play(struct af_instance *af, struct mp_audio *data) { /* done */ - return data; + return 0; } /* ------------------------------------------------------------------------- */ @@ -736,12 +736,12 @@ static int af_open(struct af_instance *af) { af->control=control; af->uninit=uninit; - af->play=play; + af->filter=filter; af_ladspa_t *setup = af->priv; setup->status = AF_ERROR; /* will be set to AF_OK if - * all went OK and play() + * all went OK and filter() * should proceed. */ diff --git a/audio/filter/af_lavcac3enc.c b/audio/filter/af_lavcac3enc.c index a441dbe17d..a27418f2f7 100644 --- a/audio/filter/af_lavcac3enc.c +++ b/audio/filter/af_lavcac3enc.c @@ -151,7 +151,7 @@ static void uninit(struct af_instance* af) } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* audio) +static int filter(struct af_instance* af, struct mp_audio* audio, int flags) { struct mp_audio *out = af->data; af_ac3enc_t *s = af->priv; @@ -188,7 +188,7 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* audio) AVFrame *frame = avcodec_alloc_frame(); if (!frame) { mp_msg(MSGT_AFILTER, MSGL_FATAL, "[libaf] Could not allocate memory \n"); - return NULL; + return -1; } frame->nb_samples = s->in_samples; frame->format = s->lavc_actx->sample_fmt; @@ -202,7 +202,7 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* audio) ret = avcodec_encode_audio2(s->lavc_actx, &s->pkt, frame, &ok); if (ret < 0 || !ok) { mp_msg(MSGT_AFILTER, MSGL_FATAL, "[lavac3enc] Encode failed.\n"); - return NULL; + return -1; } avcodec_free_frame(&frame); @@ -245,7 +245,7 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* audio) mp_audio_buffer_append(s->pending, audio); *audio = *out; - return audio; + return 0; } static int af_open(struct af_instance* af){ @@ -253,7 +253,7 @@ static int af_open(struct af_instance* af){ af_ac3enc_t *s = af->priv; af->control=control; af->uninit=uninit; - af->play=play; + af->filter=filter; s->lavc_acodec = avcodec_find_encoder_by_name("ac3"); if (!s->lavc_acodec) { diff --git a/audio/filter/af_lavfi.c b/audio/filter/af_lavfi.c index 6ef5bf6f80..7f0aad2c36 100644 --- a/audio/filter/af_lavfi.c +++ b/audio/filter/af_lavfi.c @@ -206,7 +206,7 @@ static int control(struct af_instance *af, int cmd, void *arg) return AF_UNKNOWN; } -static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) +static int filter(struct af_instance *af, struct mp_audio *data, int flags) { struct priv *p = af->priv; struct mp_audio *r = af->data; @@ -231,7 +231,7 @@ static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) if (av_buffersrc_add_frame(p->in, frame) < 0) { av_frame_free(&frame); - return NULL; + return -1; } av_frame_free(&frame); @@ -270,7 +270,7 @@ static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) } *data = *r; - return data; + return 0; } static void uninit(struct af_instance *af) @@ -282,9 +282,7 @@ static int af_open(struct af_instance *af) { af->control = control; af->uninit = uninit; - af->play = play; - struct priv *priv = af->priv; - af->data = talloc_zero(priv, struct mp_audio), + af->filter = filter; // Removing this requires fixing AVFrame.data vs. AVFrame.extended_data assert(MP_NUM_CHANNELS <= AV_NUM_DATA_POINTERS); return AF_OK; diff --git a/audio/filter/af_lavrresample.c b/audio/filter/af_lavrresample.c index 95a5547ab5..7386c27fa6 100644 --- a/audio/filter/af_lavrresample.c +++ b/audio/filter/af_lavrresample.c @@ -331,7 +331,7 @@ static void do_reorder(struct mp_audio *mpa, int *reorder) } #endif -static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) +static int filter(struct af_instance *af, struct mp_audio *data, int flags) { struct af_resample *s = af->priv; struct mp_audio *in = data; @@ -354,7 +354,7 @@ static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) (uint8_t **) out->planes, out->samples * out->sstride, out->samples, (uint8_t **) in->planes, in->samples * in->sstride, in->samples); if (out->samples < 0) - return NULL; // error + return -1; // error } *data = *out; @@ -378,7 +378,7 @@ static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) do_reorder(data, s->reorder_out); #endif - return data; + return 0; } static int af_open(struct af_instance *af) @@ -387,7 +387,7 @@ static int af_open(struct af_instance *af) af->control = control; af->uninit = uninit; - af->play = play; + af->filter = filter; if (s->opts.cutoff <= 0.0) s->opts.cutoff = af_resample_default_cutoff(s->opts.filter_size); diff --git a/audio/filter/af_pan.c b/audio/filter/af_pan.c index 56e72ed557..800221e4bf 100644 --- a/audio/filter/af_pan.c +++ b/audio/filter/af_pan.c @@ -108,7 +108,7 @@ static int control(struct af_instance* af, int cmd, void* arg) } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int filter(struct af_instance* af, struct mp_audio* data, int flags) { struct mp_audio* c = data; // Current working data struct mp_audio* l = af->data; // Local data @@ -141,13 +141,13 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) c->planes[0] = l->planes[0]; set_channels(c, l->nch); - return c; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control=control; - af->play=play; + af->filter=filter; af_pan_t *s = af->priv; int n = 0; int j,k; diff --git a/audio/filter/af_scaletempo.c b/audio/filter/af_scaletempo.c index f7e58f0923..960aaf8c2e 100644 --- a/audio/filter/af_scaletempo.c +++ b/audio/filter/af_scaletempo.c @@ -211,13 +211,13 @@ static void output_overlap_s16(af_scaletempo_t *s, void *buf_out, } // Filter data through filter -static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) +static int filter(struct af_instance *af, struct mp_audio *data, int flags) { af_scaletempo_t *s = af->priv; if (s->scale == 1.0) { af->delay = 0; - return data; + return 0; } mp_audio_realloc_min(af->data, @@ -261,7 +261,7 @@ static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) data->planes[0] = af->data->planes[0]; data->samples = (pout - (int8_t *)af->data->planes[0]) / af->data->sstride; - return data; + return 0; } // Initialization and runtime control @@ -458,7 +458,7 @@ static int af_open(struct af_instance *af) af->control = control; af->uninit = uninit; - af->play = play; + af->filter = filter; s->speed_tempo = !!(s->speed_opt & SCALE_TEMPO); s->speed_pitch = !!(s->speed_opt & SCALE_PITCH); diff --git a/audio/filter/af_sinesuppress.c b/audio/filter/af_sinesuppress.c index eee27afd40..c78f209b39 100644 --- a/audio/filter/af_sinesuppress.c +++ b/audio/filter/af_sinesuppress.c @@ -41,7 +41,7 @@ typedef struct af_sinesuppress_s double pos; }af_sinesuppress_t; -static struct mp_audio* play_s16(struct af_instance* af, struct mp_audio* data); +static int play_s16(struct af_instance* af, struct mp_audio* data, int f); //static struct mp_audio* play_float(struct af_instance* af, struct mp_audio* data); // Initialization and runtime control @@ -64,7 +64,7 @@ static int control(struct af_instance* af, int cmd, void* arg) #endif { mp_audio_set_format(af->data, AF_FORMAT_S16); - af->play = play_s16; + af->filter = play_s16; } return af_test_output(af,(struct mp_audio*)arg); @@ -74,7 +74,7 @@ static int control(struct af_instance* af, int cmd, void* arg) } // Filter data through filter -static struct mp_audio* play_s16(struct af_instance* af, struct mp_audio* data) +static int play_s16(struct af_instance* af, struct mp_audio* data, int f) { af_sinesuppress_t *s = af->priv; register int i = 0; @@ -101,7 +101,7 @@ static struct mp_audio* play_s16(struct af_instance* af, struct mp_audio* data) mp_msg(MSGT_AFILTER, MSGL_V, "[sinesuppress] f:%8.2f: amp:%8.2f\n", s->freq, sqrt(s->real*s->real + s->imag*s->imag) / s->ref); - return data; + return 0; } #if 0 @@ -131,7 +131,7 @@ static struct mp_audio* play_float(struct af_instance* af, struct mp_audio* data // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control=control; - af->play=play_s16; + af->filter=play_s16; return AF_OK; } diff --git a/audio/filter/af_sub.c b/audio/filter/af_sub.c index 426323cccf..ff88272b34 100644 --- a/audio/filter/af_sub.c +++ b/audio/filter/af_sub.c @@ -99,7 +99,7 @@ static int control(struct af_instance* af, int cmd, void* arg) #endif // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int filter(struct af_instance* af, struct mp_audio* data, int flags) { struct mp_audio* c = data; // Current working data af_sub_t* s = af->priv; // Setup for this instance @@ -117,13 +117,13 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) IIR(x , s->w[1], s->q[1], a[i+ch]); } - return c; + return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control=control; - af->play=play; + af->filter=filter; return AF_OK; } diff --git a/audio/filter/af_surround.c b/audio/filter/af_surround.c index bd5e9965ba..69ea015e31 100644 --- a/audio/filter/af_surround.c +++ b/audio/filter/af_surround.c @@ -142,7 +142,7 @@ static float steering_matrix[][12] = { //static int amp_L = 0, amp_R = 0, amp_C = 0, amp_S = 0; // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data){ +static int filter(struct af_instance* af, struct mp_audio* data, int flags){ af_surround_t* s = (af_surround_t*)af->priv; float* m = steering_matrix[0]; float* in = data->planes[0]; // Input audio data @@ -219,12 +219,12 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data){ data->planes[0] = af->data->planes[0]; mp_audio_set_channels_old(data, af->data->nch); - return data; + return 0; } static int af_open(struct af_instance* af){ af->control=control; - af->play=play; + af->filter=filter; return AF_OK; } diff --git a/audio/filter/af_sweep.c b/audio/filter/af_sweep.c index 93e259d4a1..af5fc71b78 100644 --- a/audio/filter/af_sweep.c +++ b/audio/filter/af_sweep.c @@ -49,7 +49,7 @@ static int control(struct af_instance* af, int cmd, void* arg) } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static int filter(struct af_instance* af, struct mp_audio* data, int f) { af_sweept *s = af->priv; int i, j; @@ -64,12 +64,12 @@ static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) if(2*s->x*s->delta >= 3.141592) s->x=0; } - return data; + return 0; } static int af_open(struct af_instance* af){ af->control=control; - af->play=play; + af->filter=filter; return AF_OK; } diff --git a/audio/filter/af_volume.c b/audio/filter/af_volume.c index 1b4d28fa44..06a1f7dd3c 100644 --- a/audio/filter/af_volume.c +++ b/audio/filter/af_volume.c @@ -91,19 +91,19 @@ static void filter_plane(struct af_instance *af, void *ptr, int num_samples) } } -static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) +static int filter(struct af_instance *af, struct mp_audio *data, int f) { for (int n = 0; n < data->num_planes; n++) filter_plane(af, data->planes[n], data->samples * data->spf); - return data; + return 0; } static int af_open(struct af_instance *af) { struct priv *s = af->priv; af->control = control; - af->play = play; + af->filter = filter; af_from_dB(1, &s->cfg_volume, &s->level, 20.0, -200.0, 60.0); return AF_OK; } -- cgit v1.2.3