summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-12-05 00:01:46 +0100
committerwm4 <wm4@nowhere>2013-12-05 00:01:46 +0100
commited024aadb6e7be6c3d910045a64db53a6c95e98f (patch)
treef26724d268e13ee8ec8f327ea829b65ccd6fab19
parent2bcfb49a390a928c535cba7cab2b4136f27fceca (diff)
downloadmpv-ed024aadb6e7be6c3d910045a64db53a6c95e98f.tar.bz2
mpv-ed024aadb6e7be6c3d910045a64db53a6c95e98f.tar.xz
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.
-rw-r--r--audio/decode/dec_audio.c17
-rw-r--r--audio/filter/af.c22
-rw-r--r--audio/filter/af.h10
-rw-r--r--audio/filter/af_bs2b.c74
-rw-r--r--audio/filter/af_center.c6
-rw-r--r--audio/filter/af_channels.c6
-rw-r--r--audio/filter/af_convert24.c6
-rw-r--r--audio/filter/af_convertsignendian.c6
-rw-r--r--audio/filter/af_delay.c6
-rw-r--r--audio/filter/af_drc.c7
-rw-r--r--audio/filter/af_dummy.c9
-rw-r--r--audio/filter/af_equalizer.c6
-rw-r--r--audio/filter/af_export.c7
-rw-r--r--audio/filter/af_extrastereo.c18
-rw-r--r--audio/filter/af_format.c6
-rw-r--r--audio/filter/af_hrtf.c6
-rw-r--r--audio/filter/af_karaoke.c6
-rw-r--r--audio/filter/af_ladspa.c10
-rw-r--r--audio/filter/af_lavcac3enc.c10
-rw-r--r--audio/filter/af_lavfi.c10
-rw-r--r--audio/filter/af_lavrresample.c8
-rw-r--r--audio/filter/af_pan.c6
-rw-r--r--audio/filter/af_scaletempo.c8
-rw-r--r--audio/filter/af_sinesuppress.c10
-rw-r--r--audio/filter/af_sub.c6
-rw-r--r--audio/filter/af_surround.c6
-rw-r--r--audio/filter/af_sweep.c6
-rw-r--r--audio/filter/af_volume.c6
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;i<AF_NCH;i++){
for(int j=0;j<KM;j++){
diff --git a/audio/filter/af_export.c b/audio/filter/af_export.c
index c224d3acd7..d39154755b 100644
--- a/audio/filter/af_export.c
+++ b/audio/filter/af_export.c
@@ -162,7 +162,7 @@ static void uninit( struct af_instance* af )
af audio filter instance
data audio data
*/
-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_export_t* s = af->priv; // 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;