X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Faf_asetnsamples.c;h=8805d53a9714831d42c3a634698537c8c35a3144;hb=39a8275fdf4f607023b483a58b255600d5f7a9e7;hp=73ed5344a98fe45f3b8762633dff5e52630bba74;hpb=e847f4128543432a77fb8f85c313646a406c76f6;p=ffmpeg diff --git a/libavfilter/af_asetnsamples.c b/libavfilter/af_asetnsamples.c index 73ed5344a98..8805d53a971 100644 --- a/libavfilter/af_asetnsamples.c +++ b/libavfilter/af_asetnsamples.c @@ -25,10 +25,12 @@ */ #include "libavutil/audio_fifo.h" +#include "libavutil/audioconvert.h" #include "libavutil/avassert.h" #include "libavutil/opt.h" #include "avfilter.h" #include "audio.h" +#include "internal.h" #include "formats.h" typedef struct { @@ -42,7 +44,7 @@ typedef struct { #define OFFSET(x) offsetof(ASNSContext, x) -static const AVOption asns_options[] = { +static const AVOption asetnsamples_options[] = { { "pad", "pad last frame with zeros", OFFSET(pad), AV_OPT_TYPE_INT, {.dbl=1}, 0, 1 }, { "p", "pad last frame with zeros", OFFSET(pad), AV_OPT_TYPE_INT, {.dbl=1}, 0, 1 }, { "nb_out_samples", "set the number of per-frame output samples", OFFSET(nb_out_samples), AV_OPT_TYPE_INT, {.dbl=1024}, 1, INT_MAX }, @@ -50,20 +52,14 @@ static const AVOption asns_options[] = { { NULL } }; -static const AVClass asns_class = { - .class_name = "asetnsamples", - .item_name = av_default_item_name, - .option = asns_options, - .version = LIBAVUTIL_VERSION_INT, - .category = AV_CLASS_CATEGORY_FILTER, -}; +AVFILTER_DEFINE_CLASS(asetnsamples); -static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) +static av_cold int init(AVFilterContext *ctx, const char *args) { ASNSContext *asns = ctx->priv; int err; - asns->class = &asns_class; + asns->class = &asetnsamples_class; av_opt_set_defaults(asns); if ((err = av_set_options_string(asns, args, "=", ":")) < 0) { @@ -72,7 +68,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) } asns->next_out_pts = AV_NOPTS_VALUE; - av_log(ctx, AV_LOG_INFO, "nb_out_samples:%d pad:%d\n", asns->nb_out_samples, asns->pad); + av_log(ctx, AV_LOG_VERBOSE, "nb_out_samples:%d pad:%d\n", asns->nb_out_samples, asns->pad); return 0; } @@ -135,7 +131,7 @@ static int push_samples(AVFilterLink *outlink) return nb_out_samples; } -static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) +static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) { AVFilterContext *ctx = inlink->dst; ASNSContext *asns = ctx->priv; @@ -149,7 +145,7 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) if (ret < 0) { av_log(ctx, AV_LOG_ERROR, "Stretching audio fifo failed, discarded %d samples\n", nb_samples); - return; + return -1; } } av_audio_fifo_write(asns->fifo, (void **)insamples->extended_data, nb_samples); @@ -159,6 +155,7 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) if (av_audio_fifo_size(asns->fifo) >= asns->nb_out_samples) push_samples(outlink); + return 0; } static int request_frame(AVFilterLink *outlink) @@ -169,7 +166,7 @@ static int request_frame(AVFilterLink *outlink) asns->req_fullfilled = 0; do { - ret = avfilter_request_frame(inlink); + ret = ff_request_frame(inlink); } while (!asns->req_fullfilled && ret >= 0); if (ret == AVERROR_EOF)