]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/af_channelsplit.c
overlay: clear cur_buf on main input link.
[ffmpeg] / libavfilter / af_channelsplit.c
index 1e2d0119bfa484d335184cae5bb71800cabb8ec6..3db08045c22642381c01bd04781c0e5fb6459639 100644 (file)
@@ -47,7 +47,7 @@ static const AVOption channelsplit_options[] = {
 
 AVFILTER_DEFINE_CLASS(channelsplit);
 
-static int init(AVFilterContext *ctx, const char *arg, void *opaque)
+static int init(AVFilterContext *ctx, const char *arg)
 {
     ChannelSplitContext *s = ctx->priv;
     int nb_channels;
@@ -105,24 +105,29 @@ static int query_formats(AVFilterContext *ctx)
     return 0;
 }
 
-static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
+static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
 {
     AVFilterContext *ctx = inlink->dst;
-    int i;
+    int i, ret = 0;
 
     for (i = 0; i < ctx->nb_outputs; i++) {
         AVFilterBufferRef *buf_out = avfilter_ref_buffer(buf, ~AV_PERM_WRITE);
 
-        if (!buf_out)
-            return;
+        if (!buf_out) {
+            ret = AVERROR(ENOMEM);
+            break;
+        }
 
         buf_out->data[0] = buf_out->extended_data[0] = buf_out->extended_data[i];
         buf_out->audio->channel_layout =
             av_channel_layout_extract_channel(buf->audio->channel_layout, i);
 
-        ff_filter_samples(ctx->outputs[i], buf_out);
+        ret = ff_filter_samples(ctx->outputs[i], buf_out);
+        if (ret < 0)
+            break;
     }
     avfilter_unref_buffer(buf);
+    return ret;
 }
 
 AVFilter avfilter_af_channelsplit = {