]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/avfilter.c
Support Etymonix MPEG-2 video codec, fixes issue 1603.
[ffmpeg] / libavfilter / avfilter.c
index 450a6328c7de06a02018a20ec5a182e735501f22..eb0a8682730e999a426d633f130e6d08b0f31666 100644 (file)
@@ -287,13 +287,13 @@ void avfilter_end_frame(AVFilterLink *link)
 
 }
 
-void avfilter_draw_slice(AVFilterLink *link, int y, int h)
+void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
 {
     uint8_t *src[4], *dst[4];
     int i, j, hsub, vsub;
-    void (*draw_slice)(AVFilterLink *, int, int);
+    void (*draw_slice)(AVFilterLink *, int, int, int);
 
-    DPRINTF_START(NULL, draw_slice); dprintf_link(NULL, link, 0); dprintf(NULL, " y:%d h:%d\n", y, h);
+    DPRINTF_START(NULL, draw_slice); dprintf_link(NULL, link, 0); dprintf(NULL, " y:%d h:%d dir:%d\n", y, h, slice_dir);
 
     /* copy the slice if needed for permission reasons */
     if(link->srcpic) {
@@ -325,36 +325,44 @@ void avfilter_draw_slice(AVFilterLink *link, int y, int h)
 
     if(!(draw_slice = link_dpad(link).draw_slice))
         draw_slice = avfilter_default_draw_slice;
-    draw_slice(link, y, h);
+    draw_slice(link, y, h, slice_dir);
 }
 
-AVFilter *first_avfilter = NULL;
+#define MAX_REGISTERED_AVFILTERS_NB 64
+
+static AVFilter *registered_avfilters[MAX_REGISTERED_AVFILTERS_NB + 1];
+
+static int next_registered_avfilter_idx = 0;
 
 AVFilter *avfilter_get_by_name(const char *name)
 {
-    AVFilter *filter;
+    int i;
 
-    for (filter = first_avfilter; filter; filter = filter->next)
-        if (!strcmp(filter->name, name))
-            return filter;
+    for (i = 0; registered_avfilters[i]; i++)
+        if (!strcmp(registered_avfilters[i]->name, name))
+            return registered_avfilters[i];
 
     return NULL;
 }
 
-void avfilter_register(AVFilter *filter)
+int avfilter_register(AVFilter *filter)
 {
-    AVFilter **p;
-    p = &first_avfilter;
-    while (*p)
-        p = &(*p)->next;
+    if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB)
+        return -1;
 
-    *p = filter;
-    filter->next = NULL;
+    registered_avfilters[next_registered_avfilter_idx++] = filter;
+    return 0;
+}
+
+AVFilter **av_filter_next(AVFilter **filter)
+{
+    return filter ? ++filter : &registered_avfilters[0];
 }
 
 void avfilter_uninit(void)
 {
-    first_avfilter = NULL;
+    memset(registered_avfilters, 0, sizeof(registered_avfilters));
+    next_registered_avfilter_idx = 0;
 }
 
 static int pad_count(const AVFilterPad *pads)