aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2021-03-01 17:22:31 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2021-03-03 16:46:09 +0100
commit6a3f345c1ab78428b970775a6632362b8515dd04 (patch)
tree73e34c0144e9ea1362c35643b0f5376b40fbba38
parent2ff40b98ecbd9befadddc8fe665a391f99bfca32 (diff)
downloadffmpeg-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.c20
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);