X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Favf_concat.c;h=6be2c537788a9af50bccf7997085be6fde587483;hb=402ac72bbc8fcbcce7aa385873c14cf8e0384ca4;hp=f13e8d0120e94d0ad1ebd72920e68f8d817cfbdc;hpb=37e81996dcf3452c48dd134877bf10b5060dacb3;p=ffmpeg diff --git a/libavfilter/avf_concat.c b/libavfilter/avf_concat.c index f13e8d0120e..6be2c537788 100644 --- a/libavfilter/avf_concat.c +++ b/libavfilter/avf_concat.c @@ -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, };