diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-09-24 05:15:02 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-09-26 13:03:56 +0200 |
commit | 0d97317429520b97d5817d713d6ffe7de78d0068 (patch) | |
tree | f5a07bf4d45814e5f2564941358206c399941cf6 /libavcodec/tests/avcodec.c | |
parent | 136865413c04760aeeda6079002bc3c1f9ae230a (diff) | |
download | ffmpeg-0d97317429520b97d5817d713d6ffe7de78d0068.tar.gz |
avcodec/tests/avcodec: Add basic sanity checks for AVCodec properties
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec/tests/avcodec.c')
-rw-r--r-- | libavcodec/tests/avcodec.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libavcodec/tests/avcodec.c b/libavcodec/tests/avcodec.c index 9232647ff0..2b8a9a5d0f 100644 --- a/libavcodec/tests/avcodec.c +++ b/libavcodec/tests/avcodec.c @@ -18,12 +18,48 @@ #include "libavcodec/avcodec.h" +static const char *get_type_string(enum AVMediaType type) +{ + const char *ret = av_get_media_type_string(type); + return ret ? ret : "unknown"; +} + +#define AV_LOG(...) av_log(NULL, AV_LOG_FATAL, __VA_ARGS__) +#define ERR_INTERNAL(msg, ...) \ +do { \ + AV_LOG(msg, codec->name __VA_ARGS__); \ + ret = 1; \ +} while (0) +#define ERR(msg) ERR_INTERNAL(msg, ) +#define ERR_EXT(msg, ...) ERR_INTERNAL(msg, , __VA_ARGS__) + int main(void){ void *iter = NULL; const AVCodec *codec = NULL; int ret = 0; while (codec = av_codec_iterate(&iter)) { + if (!codec->name) { + AV_LOG("Codec for format %s has no name\n", + avcodec_get_name(codec->id)); + ret = 1; + continue; + } + if (codec->type != AVMEDIA_TYPE_VIDEO && + codec->type != AVMEDIA_TYPE_AUDIO && + codec->type != AVMEDIA_TYPE_SUBTITLE) + ERR_EXT("Codec %s has unsupported type %s\n", + get_type_string(codec->type)); + if (codec->type != AVMEDIA_TYPE_AUDIO) { + if (codec->channel_layouts || codec->sample_fmts || + codec->supported_samplerates) + ERR("Non-audio codec %s has audio-only fields set\n"); + } + if (codec->type != AVMEDIA_TYPE_VIDEO) { + if (codec->pix_fmts || codec->supported_framerates) + ERR("Non-video codec %s has video-only fields set\n"); + } + if (av_codec_is_encoder(codec)) { if (codec->type == AVMEDIA_TYPE_AUDIO) { if (!codec->sample_fmts) { |