[FFmpeg-devel] [PATCH] avfilter: make AVFilterFormats compatible with libav.

Nicolas George nicolas.george at normalesup.org
Sat May 19 12:21:00 CEST 2012


The list goes back to being simple integers,
and avfilter_make_format64_list is fixed to work
with the correct structure directly.

Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
---
 libavfilter/avfilter.h |    2 +-
 libavfilter/formats.c  |   24 +++++++++++++-----------
 2 files changed, 14 insertions(+), 12 deletions(-)


Note: tools/lavfi-showfiltfmts.c needs to be fixed too, but it is currently
used only with video filters.


diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index fe7140a..758d8a8 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -260,8 +260,8 @@ void avfilter_unref_bufferp(AVFilterBufferRef **ref);
  * pointer to each of the pointers to itself.
  */
 typedef struct AVFilterFormats {
-    int64_t *formats;           ///< list of media formats
     unsigned format_count;      ///< number of formats
+    int *formats;               ///< list of media formats
 
     unsigned refcount;          ///< number of references to this list
     struct AVFilterFormats ***refs; ///< references to this list
diff --git a/libavfilter/formats.c b/libavfilter/formats.c
index 16e14fa..d0ff717 100644
--- a/libavfilter/formats.c
+++ b/libavfilter/formats.c
@@ -196,18 +196,18 @@ int64_t *ff_copy_int64_list(const int64_t * const list)
     return ret;
 }
 
-#define MAKE_FORMAT_LIST()                                              \
-    AVFilterFormats *formats;                                           \
+#define MAKE_FORMAT_LIST(type, field, count_field)                      \
+    type *formats;                                                      \
     int count = 0;                                                      \
     if (fmts)                                                           \
         for (count = 0; fmts[count] != -1; count++)                     \
             ;                                                           \
-    formats = av_mallocz(sizeof(AVFilterFormats));                      \
+    formats = av_mallocz(sizeof(*formats));                             \
     if (!formats) return NULL;                                          \
-    formats->format_count = count;                                      \
+    formats->count_field = count;                                       \
     if (count) {                                                        \
-        formats->formats = av_malloc(sizeof(*formats->formats)*count);  \
-        if (!formats->formats) {                                        \
+        formats->field = av_malloc(sizeof(*formats->field)*count);      \
+        if (!formats->field) {                                          \
             av_free(formats);                                           \
             return NULL;                                                \
         }                                                               \
@@ -215,7 +215,7 @@ int64_t *ff_copy_int64_list(const int64_t * const list)
 
 AVFilterFormats *avfilter_make_format_list(const int *fmts)
 {
-    MAKE_FORMAT_LIST();
+    MAKE_FORMAT_LIST(AVFilterFormats, formats, format_count);
     while (count--)
         formats->formats[count] = fmts[count];
 
@@ -224,11 +224,13 @@ AVFilterFormats *avfilter_make_format_list(const int *fmts)
 
 AVFilterChannelLayouts *avfilter_make_format64_list(const int64_t *fmts)
 {
-    MAKE_FORMAT_LIST();
+    MAKE_FORMAT_LIST(AVFilterChannelLayouts,
+                     channel_layouts, nb_channel_layouts);
     if (count)
-        memcpy(formats->formats, fmts, sizeof(*formats->formats) * count);
+        memcpy(formats->channel_layouts, fmts,
+               sizeof(*formats->channel_layouts) * count);
 
-    return (AVFilterChannelLayouts*)formats;
+    return formats;
 }
 
 #define ADD_FORMAT(f, fmt, type, list, nb)                  \
@@ -250,7 +252,7 @@ do {                                                        \
 
 int avfilter_add_format(AVFilterFormats **avff, int64_t fmt)
 {
-    ADD_FORMAT(avff, fmt, int64_t, formats, format_count);
+    ADD_FORMAT(avff, fmt, int, formats, format_count);
 }
 
 int ff_add_channel_layout(AVFilterChannelLayouts **l, uint64_t channel_layout)
-- 
1.7.10



More information about the ffmpeg-devel mailing list