X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fsink_buffer.c;h=88fefba0d9cd6e301e04a8c8fedfcf921ee79200;hb=e5550c0d0971e393ba221cd69506acd2c2dab89c;hp=7d3958856f3c80b77ade245b241c08c041ed4520;hpb=2581d9bcbb2e45fa1f8538d038099f6e673d9566;p=ffmpeg diff --git a/libavfilter/sink_buffer.c b/libavfilter/sink_buffer.c index 7d3958856f3..88fefba0d9c 100644 --- a/libavfilter/sink_buffer.c +++ b/libavfilter/sink_buffer.c @@ -23,8 +23,8 @@ * buffer sink */ -#include "libavutil/audioconvert.h" #include "libavutil/avassert.h" +#include "libavutil/channel_layout.h" #include "libavutil/fifo.h" #include "avfilter.h" #include "buffersink.h" @@ -33,7 +33,7 @@ AVBufferSinkParams *av_buffersink_params_alloc(void) { - static const int pixel_fmts[] = { -1 }; + static const int pixel_fmts[] = { AV_PIX_FMT_NONE }; AVBufferSinkParams *params = av_malloc(sizeof(AVBufferSinkParams)); if (!params) return NULL; @@ -44,7 +44,7 @@ AVBufferSinkParams *av_buffersink_params_alloc(void) AVABufferSinkParams *av_abuffersink_params_alloc(void) { - static const int sample_fmts[] = { -1 }; + static const int sample_fmts[] = { AV_SAMPLE_FMT_NONE }; static const int64_t channel_layouts[] = { -1 }; AVABufferSinkParams *params = av_malloc(sizeof(AVABufferSinkParams)); @@ -234,6 +234,16 @@ static int vsink_query_formats(AVFilterContext *ctx) return 0; } +static const AVFilterPad ffbuffersink_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .end_frame = end_frame, + .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, + }, + { NULL }, +}; + AVFilter avfilter_vsink_ffbuffersink = { .name = "ffbuffersink", .description = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them available to the end of the filter graph."), @@ -242,13 +252,18 @@ AVFilter avfilter_vsink_ffbuffersink = { .uninit = vsink_uninit, .query_formats = vsink_query_formats, + .inputs = ffbuffersink_inputs, + .outputs = NULL, +}; - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .end_frame = end_frame, - .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, - { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = NULL }}, +static const AVFilterPad buffersink_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .end_frame = end_frame, + .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, + }, + { NULL }, }; AVFilter avfilter_vsink_buffersink = { @@ -259,16 +274,11 @@ AVFilter avfilter_vsink_buffersink = { .uninit = vsink_uninit, .query_formats = vsink_query_formats, - - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .end_frame = end_frame, - .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, - { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = NULL }}, + .inputs = buffersink_inputs, + .outputs = NULL, }; -static int filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) +static int filter_frame(AVFilterLink *link, AVFilterBufferRef *samplesref) { end_frame(link); return 0; @@ -328,6 +338,16 @@ static int asink_query_formats(AVFilterContext *ctx) return 0; } +static const AVFilterPad ffabuffersink_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .filter_frame = filter_frame, + .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, + }, + { NULL }, +}; + AVFilter avfilter_asink_ffabuffersink = { .name = "ffabuffersink", .description = NULL_IF_CONFIG_SMALL("Buffer audio frames, and make them available to the end of the filter graph."), @@ -335,13 +355,18 @@ AVFilter avfilter_asink_ffabuffersink = { .uninit = asink_uninit, .priv_size = sizeof(BufferSinkContext), .query_formats = asink_query_formats, + .inputs = ffabuffersink_inputs, + .outputs = NULL, +}; - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .filter_samples = filter_samples, - .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, - { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = NULL }}, +static const AVFilterPad abuffersink_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .filter_frame = filter_frame, + .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, + }, + { NULL }, }; AVFilter avfilter_asink_abuffersink = { @@ -351,13 +376,8 @@ AVFilter avfilter_asink_abuffersink = { .uninit = asink_uninit, .priv_size = sizeof(BufferSinkContext), .query_formats = asink_query_formats, - - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .filter_samples = filter_samples, - .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, - { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = NULL }}, + .inputs = abuffersink_inputs, + .outputs = NULL, }; /* Libav compatibility API */ @@ -372,13 +392,13 @@ int av_buffersink_read(AVFilterContext *ctx, AVFilterBufferRef **buf) if (ctx->filter-> inputs[0].start_frame == avfilter_vsink_buffer. inputs[0].start_frame || - ctx->filter-> inputs[0].filter_samples == - avfilter_asink_abuffer.inputs[0].filter_samples) + ctx->filter-> inputs[0].filter_frame == + avfilter_asink_abuffer.inputs[0].filter_frame) return ff_buffersink_read_compat(ctx, buf); av_assert0(ctx->filter-> inputs[0].end_frame == avfilter_vsink_ffbuffersink. inputs[0].end_frame || - ctx->filter-> inputs[0].filter_samples == - avfilter_asink_ffabuffersink.inputs[0].filter_samples); + ctx->filter-> inputs[0].filter_frame == + avfilter_asink_ffabuffersink.inputs[0].filter_frame); ret = av_buffersink_get_buffer_ref(ctx, &tbuf, buf ? 0 : AV_BUFFERSINK_FLAG_PEEK); @@ -399,11 +419,11 @@ int av_buffersink_read_samples(AVFilterContext *ctx, AVFilterBufferRef **buf, AVFilterLink *link = ctx->inputs[0]; int nb_channels = av_get_channel_layout_nb_channels(link->channel_layout); - if (ctx->filter-> inputs[0].filter_samples == - avfilter_asink_abuffer.inputs[0].filter_samples) + if (ctx->filter-> inputs[0].filter_frame == + avfilter_asink_abuffer.inputs[0].filter_frame) return ff_buffersink_read_samples_compat(ctx, buf, nb_samples); - av_assert0(ctx->filter-> inputs[0].filter_samples == - avfilter_asink_ffabuffersink.inputs[0].filter_samples); + av_assert0(ctx->filter-> inputs[0].filter_frame == + avfilter_asink_ffabuffersink.inputs[0].filter_frame); tbuf = ff_get_audio_buffer(link, AV_PERM_WRITE, nb_samples); if (!tbuf)