[FFmpeg-devel] [PATCH 1/4] [RFC]lavu/opt: add pointer option

Lukasz Marek lukasz.m.luki at gmail.com
Mon Feb 3 01:02:48 CET 2014


Signed-off-by: Lukasz Marek <lukasz.m.luki at gmail.com>
---
 libavutil/opt.c | 16 ++++++++++++++++
 libavutil/opt.h |  2 ++
 2 files changed, 18 insertions(+)

diff --git a/libavutil/opt.c b/libavutil/opt.c
index 6ecc14e..77241e4 100644
--- a/libavutil/opt.c
+++ b/libavutil/opt.c
@@ -614,6 +614,22 @@ int av_opt_set_channel_layout(void *obj, const char *name, int64_t cl, int searc
     return 0;
 }
 
+int av_opt_set_pointer(void *obj, const char *name, void *ptr, int search_flags)
+{
+    void *target_obj;
+    const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj);
+
+    if (!o || !target_obj)
+        return AVERROR_OPTION_NOT_FOUND;
+    if (o->type != AV_OPT_TYPE_POINTER) {
+        av_log(obj, AV_LOG_ERROR,
+               "The value set by option '%s' is not a pointer.\n", o->name);
+        return AVERROR(EINVAL);
+    }
+    *(void **)(((uint8_t *)target_obj) + o->offset) = ptr;
+    return 0;
+}
+
 #if FF_API_OLD_AVOPTIONS
 /**
  *
diff --git a/libavutil/opt.h b/libavutil/opt.h
index 14faa6e..27c6a47 100644
--- a/libavutil/opt.h
+++ b/libavutil/opt.h
@@ -234,6 +234,7 @@ enum AVOptionType{
     AV_OPT_TYPE_DURATION   = MKBETAG('D','U','R',' '),
     AV_OPT_TYPE_COLOR      = MKBETAG('C','O','L','R'),
     AV_OPT_TYPE_CHANNEL_LAYOUT = MKBETAG('C','H','L','A'),
+    AV_OPT_TYPE_POINTER    = MKBETAG('P','T','R',' '),
 #if FF_API_OLD_AVOPTIONS
     FF_OPT_TYPE_FLAGS = 0,
     FF_OPT_TYPE_INT,
@@ -659,6 +660,7 @@ int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, i
 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);
 int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags);
+int av_opt_set_pointer(void *obj, const char *name, void *ptr, int search_flags);
 
 /**
  * Set a binary option to an integer list.
-- 
1.8.3.2



More information about the ffmpeg-devel mailing list