AVOptions: add flags for read/read-only options
This commit is contained in:
parent
6bb8720f00
commit
c3ecd968f0
@ -13,6 +13,10 @@ libavutil: 2013-12-xx
|
||||
|
||||
API changes, most recent first:
|
||||
|
||||
2014-xx-xx - xxxxxxx - lavu 53.04.0 - opt.h
|
||||
Add AV_OPT_FLAG_EXPORT and AV_OPT_FLAG_READONLY to mark options meant (only)
|
||||
for reading.
|
||||
|
||||
2014-xx-xx - xxxxxxx - lavu 53.03.01 - opt.h
|
||||
Deprecate unused AV_OPT_FLAG_METADATA.
|
||||
|
||||
|
@ -213,7 +213,7 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
|
||||
const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj);
|
||||
if (!o || !target_obj)
|
||||
return AVERROR_OPTION_NOT_FOUND;
|
||||
if (!val)
|
||||
if (!val || o->flags & AV_OPT_FLAG_READONLY)
|
||||
return AVERROR(EINVAL);
|
||||
|
||||
dst = ((uint8_t*)target_obj) + o->offset;
|
||||
@ -235,7 +235,7 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
|
||||
#define OPT_EVAL_NUMBER(name, opttype, vartype)\
|
||||
int av_opt_eval_ ## name(void *obj, const AVOption *o, const char *val, vartype *name ## _out)\
|
||||
{\
|
||||
if (!o || o->type != opttype)\
|
||||
if (!o || o->type != opttype || o->flags & AV_OPT_FLAG_READONLY)\
|
||||
return AVERROR(EINVAL);\
|
||||
return set_string_number(obj, obj, o, val, name ## _out);\
|
||||
}
|
||||
@ -256,6 +256,9 @@ static int set_number(void *obj, const char *name, double num, int den, int64_t
|
||||
if (!o || !target_obj)
|
||||
return AVERROR_OPTION_NOT_FOUND;
|
||||
|
||||
if (o->flags & AV_OPT_FLAG_READONLY)
|
||||
return AVERROR(EINVAL);
|
||||
|
||||
dst = ((uint8_t*)target_obj) + o->offset;
|
||||
return write_number(obj, o, dst, num, den, intnum);
|
||||
}
|
||||
@ -286,7 +289,7 @@ int av_opt_set_bin(void *obj, const char *name, const uint8_t *val, int len, int
|
||||
if (!o || !target_obj)
|
||||
return AVERROR_OPTION_NOT_FOUND;
|
||||
|
||||
if (o->type != AV_OPT_TYPE_BINARY)
|
||||
if (o->type != AV_OPT_TYPE_BINARY || o->flags & AV_OPT_FLAG_READONLY)
|
||||
return AVERROR(EINVAL);
|
||||
|
||||
ptr = av_malloc(len);
|
||||
@ -479,6 +482,8 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit,
|
||||
av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM ) ? 'V' : '.');
|
||||
av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM ) ? 'A' : '.');
|
||||
av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.');
|
||||
av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_EXPORT) ? 'X' : '.');
|
||||
av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_READONLY) ? 'R' : '.');
|
||||
|
||||
if (opt->help)
|
||||
av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help);
|
||||
@ -505,6 +510,9 @@ void av_opt_set_defaults(void *s)
|
||||
{
|
||||
const AVOption *opt = NULL;
|
||||
while ((opt = av_opt_next(s, opt)) != NULL) {
|
||||
if (opt->flags & AV_OPT_FLAG_READONLY)
|
||||
continue;
|
||||
|
||||
switch (opt->type) {
|
||||
case AV_OPT_TYPE_CONST:
|
||||
/* Nothing to be done here */
|
||||
|
@ -268,6 +268,15 @@ typedef struct AVOption {
|
||||
#define AV_OPT_FLAG_AUDIO_PARAM 8
|
||||
#define AV_OPT_FLAG_VIDEO_PARAM 16
|
||||
#define AV_OPT_FLAG_SUBTITLE_PARAM 32
|
||||
/**
|
||||
* The option is inteded for exporting values to the caller.
|
||||
*/
|
||||
#define AV_OPT_FLAG_EXPORT 64
|
||||
/**
|
||||
* The option may not be set through the AVOptions API, only read.
|
||||
* This flag only makes sense when AV_OPT_FLAG_EXPORT is also set.
|
||||
*/
|
||||
#define AV_OPT_FLAG_READONLY 128
|
||||
//FIXME think about enc-audio, ... style flags
|
||||
|
||||
/**
|
||||
|
@ -54,8 +54,8 @@
|
||||
*/
|
||||
|
||||
#define LIBAVUTIL_VERSION_MAJOR 53
|
||||
#define LIBAVUTIL_VERSION_MINOR 3
|
||||
#define LIBAVUTIL_VERSION_MICRO 1
|
||||
#define LIBAVUTIL_VERSION_MINOR 4
|
||||
#define LIBAVUTIL_VERSION_MICRO 0
|
||||
|
||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||
LIBAVUTIL_VERSION_MINOR, \
|
||||
|
Loading…
Reference in New Issue
Block a user