]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/avfilter.c
lavfi/deshake: small align prettifying.
[ffmpeg] / libavfilter / avfilter.c
index 4d59bba4eec4597893d133864307b8474dc1d784..31580f6175f910feaab94721d09df4fb2cf111d1 100644 (file)
 #include "libavutil/avstring.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/common.h"
+#include "libavutil/imgutils.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/rational.h"
+#include "libavutil/samplefmt.h"
 
+#include "audio.h"
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
@@ -409,6 +412,8 @@ AVFilter *avfilter_get_by_name(const char *name)
 
 int avfilter_register(AVFilter *filter)
 {
+    int i;
+
     if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB) {
         av_log(NULL, AV_LOG_ERROR,
                "Maximum number of registered filters %d reached, "
@@ -417,6 +422,12 @@ int avfilter_register(AVFilter *filter)
         return AVERROR(ENOMEM);
     }
 
+    for(i=0; filter->inputs && filter->inputs[i].name; i++) {
+        const AVFilterPad *input = &filter->inputs[i];
+        av_assert0(     !input->filter_frame
+                    || (!input->start_frame && !input->end_frame && !input->draw_slice));
+    }
+
     registered_avfilters[next_registered_avfilter_idx++] = filter;
     return 0;
 }
@@ -623,3 +634,23 @@ enum AVMediaType avfilter_pad_get_type(AVFilterPad *pads, int pad_idx)
 {
     return pads[pad_idx].type;
 }
+
+int ff_filter_frame(AVFilterLink *link, AVFilterBufferRef *frame)
+{
+    int ret;
+    FF_TPRINTF_START(NULL, filter_frame); ff_tlog_link(NULL, link, 1); ff_tlog(NULL, " "); ff_tlog_ref(NULL, frame, 1);
+
+    switch (link->type) {
+    case AVMEDIA_TYPE_VIDEO:
+        if((ret = ff_start_frame(link, frame)) < 0)
+            return ret;
+        if((ret = ff_draw_slice(link, 0, frame->video->h, 1)) < 0)
+            return ret;
+        if((ret = ff_end_frame(link)) < 0)
+            return ret;
+        return ret;
+    case AVMEDIA_TYPE_AUDIO:
+        return ff_filter_samples(link, frame);
+    default: return AVERROR(EINVAL);
+    }
+}