diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2021-03-01 17:22:31 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2021-03-03 16:46:09 +0100 |
commit | 6a3f345c1ab78428b970775a6632362b8515dd04 (patch) | |
tree | 73e34c0144e9ea1362c35643b0f5376b40fbba38 | |
parent | 2ff40b98ecbd9befadddc8fe665a391f99bfca32 (diff) | |
download | ffmpeg-6a3f345c1ab78428b970775a6632362b8515dd04.tar.gz |
avformat/frmdec: Simplify finding pixel format
The fourccs used by the Megalux Frame format to determine the pixel
format are actually no fourccs at all as they are a single byte.
Furthermore, their range is continuous (1-5), so they are actually
ordinary indices. So treat them as such and don't use PixelFormatTags
for them.
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r-- | libavformat/frmdec.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/libavformat/frmdec.c b/libavformat/frmdec.c index 9a962f37fa..1bc3a83e11 100644 --- a/libavformat/frmdec.c +++ b/libavformat/frmdec.c @@ -29,13 +29,12 @@ #include "libavutil/intreadwrite.h" #include "avformat.h" -static const PixelFormatTag frm_pix_fmt_tags[] = { - { AV_PIX_FMT_RGB555, 1 }, - { AV_PIX_FMT_RGB0, 2 }, - { AV_PIX_FMT_RGB24, 3 }, - { AV_PIX_FMT_BGR0, 4 }, - { AV_PIX_FMT_BGRA, 5 }, - { AV_PIX_FMT_NONE, 0 }, +static const enum AVPixelFormat frm_pix_fmt_tags[] = { + AV_PIX_FMT_RGB555, + AV_PIX_FMT_RGB0, + AV_PIX_FMT_RGB24, + AV_PIX_FMT_BGR0, + AV_PIX_FMT_BGRA, }; typedef struct { @@ -55,6 +54,8 @@ static int frm_read_header(AVFormatContext *avctx) { AVIOContext *pb = avctx->pb; AVStream *st = avformat_new_stream(avctx, 0); + unsigned idx; + if (!st) return AVERROR(ENOMEM); @@ -62,9 +63,10 @@ static int frm_read_header(AVFormatContext *avctx) st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; avio_skip(pb, 3); - st->codecpar->format = avpriv_find_pix_fmt(frm_pix_fmt_tags, avio_r8(pb)); - if (!st->codecpar->format) + idx = avio_r8(pb) - 1; + if (idx >= FF_ARRAY_ELEMS(frm_pix_fmt_tags)) return AVERROR_INVALIDDATA; + st->codecpar->format = frm_pix_fmt_tags[idx]; st->codecpar->codec_tag = 0; st->codecpar->width = avio_rl16(pb); |