[FFmpeg-devel] [PATCH 4/8] lavu/opt: extend AVOptionRange by second value
Lukasz Marek
lukasz.m.luki2 at gmail.com
Sat Mar 29 19:06:28 CET 2014
>> opt.c | 33 ++++++++++++++++++++++++---------
>> opt.h | 13 +++++++++++--
>> 2 files changed, 35 insertions(+), 11 deletions(-)
>> e560f163c6f61b5819e9f382615877e0bdfe12fe 0001-lavu-opt-extend-AVOptionRange-by-extra-values.patch
>> From 702508c0c97812ed72deaa133140291fe3637196 Mon Sep 17 00:00:00 2001
>> From: Lukasz Marek <lukasz.m.luki at gmail.com>
>> Date: Sat, 22 Feb 2014 23:32:57 +0100
>> Subject: [PATCH] lavu/opt: extend AVOptionRange by extra values
>>
>> TODO: micro bump
>>
>> AVOptionRange is not flexible enough to store AV_OPT_TYPE_IMAGE_SIZE
>> ranges. Current implementation can only store pixel count.
>> This patch aims to keep backward compatibility and extend
>> AVOptionRange with possibility to store width/height ranges.
>>
>> Signed-off-by: Lukasz Marek <lukasz.m.luki at gmail.com>
>> ---
>> libavutil/opt.c | 33 ++++++++++++++++++++++++---------
>> libavutil/opt.h | 13 +++++++++++--
>> 2 files changed, 35 insertions(+), 11 deletions(-)
>>
>> diff --git a/libavutil/opt.c b/libavutil/opt.c
>> index 652a2dd..77d20b9 100644
>> --- a/libavutil/opt.c
>> +++ b/libavutil/opt.c
>> @@ -1511,6 +1511,7 @@ void *av_opt_ptr(const AVClass *class, void *obj, const char *name)
>>
>> int av_opt_query_ranges(AVOptionRanges **ranges_arg, void *obj, const char *key, int flags)
>> {
>> + int ret, i;
>> const AVClass *c = *(AVClass**)obj;
>> int (*callback)(AVOptionRanges **, void *obj, const char *key, int flags) = NULL;
>>
>> @@ -1520,7 +1521,14 @@ int av_opt_query_ranges(AVOptionRanges **ranges_arg, void *obj, const char *key,
>> if (!callback)
>> callback = av_opt_query_ranges_default;
>>
>> - return callback(ranges_arg, obj, key, flags);
>> + ret = callback(ranges_arg, obj, key, flags);
>> + if (ret >= 0) {
>> + if (!(flags & AV_OPT_MULTI_COMPINENT_RANGE))
>> + ret = 1;
>
>> + for (i = 0; i < ret; i++)
>> + (*ranges_arg)[i].nb_components = ret;
>
> doesnt this depends on sizeof(AVOptionRanges) ?
> sizeof(AVOptionRanges) is not and cannot be part of the public ABI
> so iam not sure how this can be accessed by a user
Yes, it does depend on sizeof(AVOptionRanges)
>> /**
>> + * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than
>> + * one instance of AVOptionRanges.
>> + */
>> +#define AV_OPT_MULTI_COMPINENT_RANGE 0x0004
>
> what is a compInent ?
> also how and where were the ranges defined for multi component options
> before?
> If there where not defined at all then a change is possibly not a
> API/ABI break and this can be simplified away
It is not documented yet.
> also what do multiple component ranges mean exactly?
> range1: 320,640
> range2: 240,480
>
> means 320x240 || 640x480
> or
> means 320x240 || 320x480 || 640x240 || 640x480
> (this should be documented, and one of these looks insufficient)
I have first option in mind. Each AVOptionRanges must have the same
value on nb_ranges. So valid ranges are:
{ AVOptionRanges[0].range[0], AVOptionRanges[1].range[0], ... },
{ AVOptionRanges[0].range[1], AVOptionRanges[1].range[1], ... },
...
Please elaborate, because it don't know what case you have in mind this
time.
> also you can put any N-Dimensional array in a 1d array like:
> ranges[component*nb_ranges + range] or
> ranges[componen + range*nb_components]
This may help to get rid of sizeof(AVOptionRanges) dependency, thanks
for hint.
I will fix it somehow, but please answer for question above.
More information about the ffmpeg-devel
mailing list