]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/formats.c
vf_select: check for isnan when setting t from pts
[ffmpeg] / libavfilter / formats.c
index 49977c51fdd938da111823302cf9d74fa1a6a8d3..214718b77911ddf08895e83c2495d88f66907d6a 100644 (file)
@@ -22,6 +22,7 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/audioconvert.h"
 #include "avfilter.h"
+#include "internal.h"
 
 /**
  * Add all refs from a to ret and destroy a.
@@ -30,7 +31,7 @@ static void merge_ref(AVFilterFormats *ret, AVFilterFormats *a)
 {
     int i;
 
-    for(i = 0; i < a->refcount; i ++) {
+    for (i = 0; i < a->refcount; i++) {
         ret->refs[ret->refcount] = a->refs[i];
         *ret->refs[ret->refcount++] = ret;
     }
@@ -52,14 +53,14 @@ AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b)
     /* merge list of formats */
     ret->formats = av_malloc(sizeof(*ret->formats) * FFMIN(a->format_count,
                                                            b->format_count));
-    for(i = 0; i < a->format_count; i ++)
-        for(j = 0; j < b->format_count; j ++)
-            if(a->formats[i] == b->formats[j])
+    for (i = 0; i < a->format_count; i++)
+        for (j = 0; j < b->format_count; j++)
+            if (a->formats[i] == b->formats[j])
                 ret->formats[k++] = a->formats[i];
 
     ret->format_count = k;
     /* check that there was at least one common format */
-    if(!ret->format_count) {
+    if (!ret->format_count) {
         av_free(ret->formats);
         av_free(ret);
         return NULL;
@@ -73,6 +74,17 @@ AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b)
     return ret;
 }
 
+int ff_fmt_is_in(int fmt, const int *fmts)
+{
+    const int *p;
+
+    for (p = fmts; *p != -1; p++) {
+        if (fmt == *p)
+            return 1;
+    }
+    return 0;
+}
+
 #define MAKE_FORMAT_LIST()                                              \
     AVFilterFormats *formats;                                           \
     int count = 0;                                                      \
@@ -83,7 +95,7 @@ AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b)
     if (!formats) return NULL;                                          \
     formats->format_count = count;                                      \
     if (count) {                                                        \
-        formats->formats  = av_malloc(sizeof(*formats->formats)*count); \
+        formats->formats = av_malloc(sizeof(*formats->formats)*count);  \
         if (!formats->formats) {                                        \
             av_free(formats);                                           \
             return NULL;                                                \
@@ -161,6 +173,17 @@ AVFilterFormats *avfilter_all_channel_layouts(void)
     return avfilter_make_format64_list(chlayouts);
 }
 
+AVFilterFormats *avfilter_all_packing_formats(void)
+{
+    static int packing[] = {
+        AVFILTER_PACKED,
+        AVFILTER_PLANAR,
+        -1,
+    };
+
+    return avfilter_make_format_list(packing);
+}
+
 void avfilter_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
 {
     *ref = f;
@@ -171,8 +194,8 @@ void avfilter_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
 static int find_ref_index(AVFilterFormats **ref)
 {
     int i;
-    for(i = 0; i < (*ref)->refcount; i ++)
-        if((*ref)->refs[i] == ref)
+    for (i = 0; i < (*ref)->refcount; i++)
+        if ((*ref)->refs[i] == ref)
             return i;
     return -1;
 }
@@ -186,11 +209,11 @@ void avfilter_formats_unref(AVFilterFormats **ref)
 
     idx = find_ref_index(ref);
 
-    if(idx >= 0)
+    if (idx >= 0)
         memmove((*ref)->refs + idx, (*ref)->refs + idx+1,
             sizeof(AVFilterFormats**) * ((*ref)->refcount-idx-1));
 
-    if(!--(*ref)->refcount) {
+    if (!--(*ref)->refcount) {
         av_free((*ref)->formats);
         av_free((*ref)->refs);
         av_free(*ref);
@@ -203,7 +226,7 @@ void avfilter_formats_changeref(AVFilterFormats **oldref,
 {
     int idx = find_ref_index(oldref);
 
-    if(idx >= 0) {
+    if (idx >= 0) {
         (*oldref)->refs[idx] = newref;
         *newref = *oldref;
         *oldref = NULL;