[FFmpeg-devel] [PATCH 2/4] lavu: add helper functions for integer lists.

Nicolas George nicolas.george at normalesup.org
Thu Mar 28 17:18:26 CET 2013


Add av_int_list_length() to compute a list length.
Add av_opt_set_int_list() to set a binary option.

Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
---
 doc/APIchanges      |    4 ++++
 libavutil/avutil.h  |   19 +++++++++++++++++++
 libavutil/opt.h     |   12 ++++++++++++
 libavutil/utils.c   |   19 +++++++++++++++++++
 libavutil/version.h |    4 ++--
 5 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 255f914..ce0093d 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,10 @@ libavutil:     2012-10-22
 
 API changes, most recent first:
 
+2013-03-28 - xxxxxxx - lavu 25.23.100 - avutil.h,opt.h
+  Add av_int_list_length()
+  and av_opt_set_int_list().
+
 2013-03-20 - xxxxxxx - lavu 52.22.100 - opt.h
   Add AV_OPT_TYPE_DURATION value to AVOptionType enum.
 
diff --git a/libavutil/avutil.h b/libavutil/avutil.h
index 78deff1..54bbd9d 100644
--- a/libavutil/avutil.h
+++ b/libavutil/avutil.h
@@ -253,6 +253,25 @@ static inline void *av_x_if_null(const void *p, const void *x)
 }
 
 /**
+ * Compute the length of an integer list.
+ * @param elsize  size of the list elements (1, 2, 4 or 8)
+ * @param term    list terminator (usually 0 or -1)
+ * @param list    pointer to the list
+ * @return  length of the list, in elements, not counting the terminator
+ */
+unsigned av_int_list_length_for_size(unsigned elsize,
+                                     const void *list, uint64_t term);
+
+/**
+ * Compute the length of an integer list.
+ * @param term  list terminator (usually 0 or -1)
+ * @param list  pointer to the list
+ * @return  length of the list, in elements, not counting the terminator
+ */
+#define av_int_list_length(list, term) \
+    av_int_list_length_for_size(sizeof(*list), list, term)
+
+/**
  * @}
  * @}
  */
diff --git a/libavutil/opt.h b/libavutil/opt.h
index 30f729e..6803a74 100644
--- a/libavutil/opt.h
+++ b/libavutil/opt.h
@@ -656,6 +656,18 @@ int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_
 int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags);
 int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags);
 int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags);
+
+/**
+ * Set a binary option to an integer list.
+ * @param obj    object to set the option
+ * @param name   name of the option (must be binary)
+ * @param val    pointer to an integer list with the correct type
+ * @param term   list terminator (usually 0 or -1)
+ * @param flags  search flags
+ */
+#define av_opt_set_int_list(obj, name, val, term, flags) \
+    av_opt_set_bin(obj, name, (const uint8_t *)val, \
+                   av_int_list_length(val, term) * sizeof(*val), flags)
 /**
  * @}
  */
diff --git a/libavutil/utils.c b/libavutil/utils.c
index fbfbc49..291c736 100644
--- a/libavutil/utils.c
+++ b/libavutil/utils.c
@@ -79,3 +79,22 @@ char av_get_picture_type_char(enum AVPictureType pict_type)
     default:                 return '?';
     }
 }
+
+unsigned av_int_list_length_for_size(unsigned elsize,
+                                     const void *list, uint64_t term)
+{
+    unsigned i;
+
+    if (!list)
+        return 0;
+#define LIST_LENGTH(type) \
+    { type t = term, *l = list; for (i = 0; l[i] != t; i++); }
+    switch (elsize) {
+    case 1: LIST_LENGTH(uint8_t);  break;
+    case 2: LIST_LENGTH(uint16_t); break;
+    case 4: LIST_LENGTH(uint32_t); break;
+    case 8: LIST_LENGTH(uint64_t); break;
+    default: av_assert0(!"valid element size");
+    }
+    return i;
+}
diff --git a/libavutil/version.h b/libavutil/version.h
index ee99008..5bb3d07 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -75,8 +75,8 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  52
-#define LIBAVUTIL_VERSION_MINOR  22
-#define LIBAVUTIL_VERSION_MICRO 101
+#define LIBAVUTIL_VERSION_MINOR  23
+#define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                LIBAVUTIL_VERSION_MINOR, \
-- 
1.7.10.4



More information about the ffmpeg-devel mailing list