[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