]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/af_asetnsamples.c
lavfi: move color filter to testsrc, factorize
[ffmpeg] / libavfilter / af_asetnsamples.c
index 73ed5344a98fe45f3b8762633dff5e52630bba74..8805d53a9714831d42c3a634698537c8c35a3144 100644 (file)
  */
 
 #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)