]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/avf_concat.c
lavfi/volume_justin: add support to option shorthands and introspection
[ffmpeg] / libavfilter / avf_concat.c
index f13e8d0120e94d0ad1ebd72920e68f8d817cfbdc..6be2c537788a9af50bccf7997085be6fde587483 100644 (file)
@@ -23,8 +23,9 @@
  * concat audio-video filter
  */
 
-#include "libavutil/audioconvert.h"
 #include "libavutil/avassert.h"
+#include "libavutil/avstring.h"
+#include "libavutil/channel_layout.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #define FF_BUFQUEUE_SIZE 256
@@ -178,16 +179,7 @@ static void push_frame(AVFilterContext *ctx, unsigned in_no,
         in->pts = av_rescale(in->pts, in->nb_frames, in->nb_frames - 1);
 
     buf->pts += cat->delta_ts;
-    switch (buf->type) {
-    case AVMEDIA_TYPE_VIDEO:
-        ff_start_frame(outlink, buf);
-        ff_draw_slice(outlink, 0, outlink->h, 1);
-        ff_end_frame(outlink);
-        break;
-    case AVMEDIA_TYPE_AUDIO:
-        ff_filter_samples(outlink, buf);
-        break;
-    }
+    ff_filter_frame(outlink, buf);
 }
 
 static void process_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
@@ -227,24 +219,7 @@ static AVFilterBufferRef *get_audio_buffer(AVFilterLink *inlink, int perms,
     return ff_get_audio_buffer(outlink, perms, nb_samples);
 }
 
-static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
-{
-    return 0;
-}
-
-static int draw_slice(AVFilterLink *inlink, int y, int h, int dir)
-{
-    return 0;
-}
-
-static int end_frame(AVFilterLink *inlink)
-{
-    process_frame(inlink, inlink->cur_buf);
-    inlink->cur_buf = NULL;
-    return 0;
-}
-
-static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
+static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
 {
     process_frame(inlink, buf);
     return 0; /* enhancement: handle error return */
@@ -297,7 +272,7 @@ static void send_silence(AVFilterContext *ctx, unsigned in_no, unsigned out_no)
         av_samples_set_silence(buf->extended_data, 0, frame_nb_samples,
                                nb_channels, outlink->format);
         buf->pts = base_pts + av_rescale_q(sent, rate_tb, outlink->time_base);
-        ff_filter_samples(outlink, buf);
+        ff_filter_frame(outlink, buf);
         sent       += frame_nb_samples;
         nb_samples -= frame_nb_samples;
     }
@@ -370,7 +345,6 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
     ConcatContext *cat = ctx->priv;
     int ret;
     unsigned seg, type, str;
-    char name[32];
 
     cat->class = &concat_class;
     av_opt_set_defaults(cat);
@@ -389,16 +363,9 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
                     .min_perms        = AV_PERM_READ | AV_PERM_PRESERVE,
                     .get_video_buffer = get_video_buffer,
                     .get_audio_buffer = get_audio_buffer,
+                    .filter_frame     = filter_frame,
                 };
-                snprintf(name, sizeof(name), "in%d:%c%d", seg, "va"[type], str);
-                pad.name = av_strdup(name);
-                if (type == AVMEDIA_TYPE_VIDEO) {
-                    pad.start_frame = start_frame;
-                    pad.draw_slice  = draw_slice;
-                    pad.end_frame   = end_frame;
-                } else {
-                    pad.filter_samples = filter_samples;
-                }
+                pad.name = av_asprintf("in%d:%c%d", seg, "va"[type], str);
                 ff_insert_inpad(ctx, ctx->nb_inputs, &pad);
             }
         }
@@ -411,8 +378,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
                 .config_props  = config_output,
                 .request_frame = request_frame,
             };
-            snprintf(name, sizeof(name), "out:%c%d", "va"[type], str);
-            pad.name = av_strdup(name);
+            pad.name = av_asprintf("out:%c%d", "va"[type], str);
             ff_insert_outpad(ctx, ctx->nb_outputs, &pad);
         }
     }
@@ -445,7 +411,7 @@ AVFilter avfilter_avf_concat = {
     .uninit        = uninit,
     .query_formats = query_formats,
     .priv_size     = sizeof(ConcatContext),
-    .inputs        = (const AVFilterPad[]) { { .name = NULL } },
-    .outputs       = (const AVFilterPad[]) { { .name = NULL } },
+    .inputs        = NULL,
+    .outputs       = NULL,
     .priv_class    = &concat_class,
 };