summaryrefslogtreecommitdiff
path: root/libavcodec/tests/avcodec.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-09-24 05:15:02 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-09-26 13:03:56 +0200
commit0d97317429520b97d5817d713d6ffe7de78d0068 (patch)
treef5a07bf4d45814e5f2564941358206c399941cf6 /libavcodec/tests/avcodec.c
parent136865413c04760aeeda6079002bc3c1f9ae230a (diff)
downloadffmpeg-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.c36
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) {