[FFmpeg-devel] [RFC] encoder profile validation
Marton Balint
cus at passwd.hu
Sat May 16 16:52:22 EEST 2020
Hi,
As you may know, a recent patchset enabled AVCodecContext->profile
constants to reside in encoders.
In order to make a full transition to avctx->profile even in existing
encoders which might use a private profile setting, we have to make sure
only supported avctx->profile values are passed to encoders.
The fact that avctx->profile is not validated is already an issue, and
assertions/segmentation faults can already happen in existing encoders
(e.g.: aac, mpeg) if unsupported values are passed.
AVCodec have a .profiles attribute which supposed to contain the list of
supported profiles. However this is problematic because
- AVCodecContext->profile is not validated against this list
- not all encoders define the list
- even if there is a list it might be defined as NULL_IF_CONFIG_SMALL
- some encoders support more or less than its currently defined list
- AVCodec->profiles contains AVProfiles which supposed to have a textual
representation of each profile, which can cause profile name
duplications/inconsistencies against libavcodec/profiles.c if the list
is different to the one in codecs profile list.
So I'd rather not user AVCodec->profiles for this validation. I am
thinking about two possible solutions:
1) Add a new AVCodec->supported_profiles attribute which is a simple
integer list and validate against this list
or
2) Introdce a new OPT type, AV_OPT_TYPE_ENUM which validates against the
values of its named constants. This has the benefit that the supported
profiles only appear once in the AVClass option list, but it also
means that encoders might not share the supported profiles list via a
#define in libavcodec/profile.h, because they might support different
profiles.
I like the second approach better, but let me know what you think.
Thanks,
Marton
More information about the ffmpeg-devel
mailing list