diff options
Diffstat (limited to 'audio/filter/af_karaoke.c')
-rw-r--r-- | audio/filter/af_karaoke.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/audio/filter/af_karaoke.c b/audio/filter/af_karaoke.c index 3187a41f2f..f69b936811 100644 --- a/audio/filter/af_karaoke.c +++ b/audio/filter/af_karaoke.c @@ -41,10 +41,15 @@ static int control(struct af_instance* af, int cmd, void* arg) return AF_UNKNOWN; } -// Filter data through filter -static int play(struct af_instance* af, struct mp_audio* data, int flags) +static int filter_frame(struct af_instance *af, struct mp_audio *c) { - struct mp_audio* c = data; // Current working data + if (!c) + return 0; + if (af_make_writeable(af, c) < 0) { + talloc_free(c); + return 0; + } + float* a = c->planes[0]; // Audio data int nch = c->nch; // Number of channels int len = c->samples*nch; // Number of samples in current audio block @@ -62,13 +67,14 @@ static int play(struct af_instance* af, struct mp_audio* data, int flags) a[i+1]=a[i]; } + af_add_output_frame(af, c); return 0; } // Allocate memory and set function pointers static int af_open(struct af_instance* af){ af->control = control; - af->filter = play; + af->filter_frame = filter_frame; return AF_OK; } |