@@ -58,26 +58,29 @@ const AVOption *av_opt_next(const void *obj, const AVOption *last)
return NULL;
}
-static const size_t opt_elem_size[] = {
- [AV_OPT_TYPE_FLAGS] = sizeof(unsigned),
- [AV_OPT_TYPE_INT] = sizeof(int),
- [AV_OPT_TYPE_INT64] = sizeof(int64_t),
- [AV_OPT_TYPE_UINT] = sizeof(unsigned),
- [AV_OPT_TYPE_UINT64] = sizeof(uint64_t),
- [AV_OPT_TYPE_DOUBLE] = sizeof(double),
- [AV_OPT_TYPE_FLOAT] = sizeof(float),
- [AV_OPT_TYPE_STRING] = sizeof(char *),
- [AV_OPT_TYPE_RATIONAL] = sizeof(AVRational),
- [AV_OPT_TYPE_BINARY] = sizeof(uint8_t *),
- [AV_OPT_TYPE_DICT] = sizeof(AVDictionary *),
- [AV_OPT_TYPE_IMAGE_SIZE] = sizeof(int[2]),
- [AV_OPT_TYPE_VIDEO_RATE] = sizeof(AVRational),
- [AV_OPT_TYPE_PIXEL_FMT] = sizeof(int),
- [AV_OPT_TYPE_SAMPLE_FMT] = sizeof(int),
- [AV_OPT_TYPE_DURATION] = sizeof(int64_t),
- [AV_OPT_TYPE_COLOR] = sizeof(uint8_t[4]),
- [AV_OPT_TYPE_CHLAYOUT] = sizeof(AVChannelLayout),
- [AV_OPT_TYPE_BOOL] = sizeof(int),
+static const struct {
+ size_t size;
+ const char *name;
+} opt_type_desc[] = {
+ [AV_OPT_TYPE_FLAGS] = { sizeof(unsigned), "<flags>" },
+ [AV_OPT_TYPE_INT] = { sizeof(int), "<int>" },
+ [AV_OPT_TYPE_INT64] = { sizeof(int64_t), "<int64>" },
+ [AV_OPT_TYPE_UINT] = { sizeof(unsigned), "<unsigned>" },
+ [AV_OPT_TYPE_UINT64] = { sizeof(uint64_t), "<uint64>" },
+ [AV_OPT_TYPE_DOUBLE] = { sizeof(double), "<double>" },
+ [AV_OPT_TYPE_FLOAT] = { sizeof(float), "<float>" },
+ [AV_OPT_TYPE_STRING] = { sizeof(char *), "<string>" },
+ [AV_OPT_TYPE_RATIONAL] = { sizeof(AVRational), "<rational>" },
+ [AV_OPT_TYPE_BINARY] = { sizeof(uint8_t *), "<binary>" },
+ [AV_OPT_TYPE_DICT] = { sizeof(AVDictionary *), "<dictionary>" },
+ [AV_OPT_TYPE_IMAGE_SIZE] = { sizeof(int[2]), "<image_size>" },
+ [AV_OPT_TYPE_VIDEO_RATE] = { sizeof(AVRational), "<video_rate>" },
+ [AV_OPT_TYPE_PIXEL_FMT] = { sizeof(int), "<pix_fmt>" },
+ [AV_OPT_TYPE_SAMPLE_FMT] = { sizeof(int), "<sample_fmt>" },
+ [AV_OPT_TYPE_DURATION] = { sizeof(int64_t), "<duration>" },
+ [AV_OPT_TYPE_COLOR] = { sizeof(uint8_t[4]), "<color>" },
+ [AV_OPT_TYPE_CHLAYOUT] = { sizeof(AVChannelLayout),"<channel_layout>" },
+ [AV_OPT_TYPE_BOOL] = { sizeof(int), "<boolean>" },
};
// option is plain old data
@@ -114,7 +117,7 @@ static uint8_t opt_array_sep(const AVOption *o)
static void *opt_array_pelem(const AVOption *o, void *array, unsigned idx)
{
av_assert1(o->type & AV_OPT_TYPE_FLAG_ARRAY);
- return (uint8_t *)array + idx * opt_elem_size[TYPE_BASE(o->type)];
+ return (uint8_t *)array + idx * opt_type_desc[TYPE_BASE(o->type)].size;
}
static unsigned *opt_array_pcount(const void *parray)
@@ -670,7 +673,7 @@ static int opt_set_array(void *obj, void *target_obj, const AVOption *o,
const char *val, void *dst)
{
const AVOptionArrayDef *arr = o->default_val.arr;
- const size_t elem_size = opt_elem_size[TYPE_BASE(o->type)];
+ const size_t elem_size = opt_type_desc[TYPE_BASE(o->type)].size;
const uint8_t sep = opt_array_sep(o);
uint8_t *str = NULL;
@@ -1441,36 +1444,15 @@ static char *get_opt_flags_string(void *obj, const char *unit, int64_t value)
static void log_type(void *av_log_obj, const AVOption *o,
enum AVOptionType parent_type)
{
- const char *desc[] = {
- [AV_OPT_TYPE_FLAGS] = "<flags>",
- [AV_OPT_TYPE_INT] = "<int>",
- [AV_OPT_TYPE_INT64] = "<int64>",
- [AV_OPT_TYPE_UINT] = "<unsigned>",
- [AV_OPT_TYPE_UINT64] = "<uint64>",
- [AV_OPT_TYPE_DOUBLE] = "<double>",
- [AV_OPT_TYPE_FLOAT] = "<float>",
- [AV_OPT_TYPE_STRING] = "<string>",
- [AV_OPT_TYPE_RATIONAL] = "<rational>",
- [AV_OPT_TYPE_BINARY] = "<binary>",
- [AV_OPT_TYPE_DICT] = "<dictionary>",
- [AV_OPT_TYPE_IMAGE_SIZE] = "<image_size>",
- [AV_OPT_TYPE_VIDEO_RATE] = "<video_rate>",
- [AV_OPT_TYPE_PIXEL_FMT] = "<pix_fmt>",
- [AV_OPT_TYPE_SAMPLE_FMT] = "<sample_fmt>",
- [AV_OPT_TYPE_DURATION] = "<duration>",
- [AV_OPT_TYPE_COLOR] = "<color>",
- [AV_OPT_TYPE_CHLAYOUT] = "<channel_layout>",
- [AV_OPT_TYPE_BOOL] = "<boolean>",
- };
const enum AVOptionType type = TYPE_BASE(o->type);
if (o->type == AV_OPT_TYPE_CONST && TYPE_BASE(parent_type) == AV_OPT_TYPE_INT)
av_log(av_log_obj, AV_LOG_INFO, "%-12"PRId64" ", o->default_val.i64);
- else if (type < FF_ARRAY_ELEMS(desc) && desc[type]) {
+ else if (type < FF_ARRAY_ELEMS(opt_type_desc) && opt_type_desc[type].name) {
if (o->type & AV_OPT_TYPE_FLAG_ARRAY)
- av_log(av_log_obj, AV_LOG_INFO, "[%-10s]", desc[type]);
+ av_log(av_log_obj, AV_LOG_INFO, "[%-10s]", opt_type_desc[type].name);
else
- av_log(av_log_obj, AV_LOG_INFO, "%-12s ", desc[type]);
+ av_log(av_log_obj, AV_LOG_INFO, "%-12s ", opt_type_desc[type].name);
}
else
av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "");
@@ -2068,7 +2050,7 @@ static int opt_copy_elem(void *logctx, enum AVOptionType type,
if (dst != src)
return av_channel_layout_copy(dst, src);
} else if (opt_is_pod(type)) {
- size_t size = opt_elem_size[type];
+ size_t size = opt_type_desc[type].size;
memcpy(dst, src, size);
} else {
av_log(logctx, AV_LOG_ERROR, "Unhandled option type: %d\n", type);
@@ -2092,7 +2074,7 @@ static int opt_copy_array(void *logctx, const AVOption *o,
opt_free_array(o, pdst, opt_array_pcount(pdst));
- dst = av_calloc(nb_elems, opt_elem_size[TYPE_BASE(o->type)]);
+ dst = av_calloc(nb_elems, opt_type_desc[TYPE_BASE(o->type)].size);
if (!dst)
return AVERROR(ENOMEM);
@@ -2160,7 +2142,7 @@ int av_opt_get_array(void *obj, const char *name, int search_flags,
unsigned int start_elem, unsigned int nb_elems,
enum AVOptionType out_type, void *out_val)
{
- const size_t elem_size_out = opt_elem_size[TYPE_BASE(out_type)];
+ const size_t elem_size_out = opt_type_desc[TYPE_BASE(out_type)].size;
const AVOption *o;
void *target_obj;
@@ -2248,7 +2230,7 @@ int av_opt_set_array(void *obj, const char *name, int search_flags,
unsigned int start_elem, unsigned int nb_elems,
enum AVOptionType val_type, const void *val)
{
- const size_t elem_size_val = opt_elem_size[TYPE_BASE(val_type)];
+ const size_t elem_size_val = opt_type_desc[TYPE_BASE(val_type)].size;
const AVOption *o;
const AVOptionArrayDef *arr;
@@ -2271,7 +2253,7 @@ int av_opt_set_array(void *obj, const char *name, int search_flags,
arr = o->default_val.arr;
parray = (uint8_t *)target_obj + o->offset;
array_size = opt_array_pcount(parray);
- elem_size = opt_elem_size[TYPE_BASE(o->type)];
+ elem_size = opt_type_desc[TYPE_BASE(o->type)].size;
if (start_elem > *array_size)
return AVERROR(EINVAL);