libavcodec/jpeg2000dec.c: Support for CRG marker

This patch adds support to skip the CRG marker.
The CRG marker, is an informational marker.
Allows samples such as p0_03.j2k to be decoded.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Gautam Ramakrishnan 2020-04-23 00:04:39 +05:30 committed by Michael Niedermayer
parent b4a33387cb
commit 6bd4a26168
1 changed files with 12 additions and 0 deletions

View File

@ -798,6 +798,15 @@ static int get_sot(Jpeg2000DecoderContext *s, int n)
return 0;
}
static int read_crg(Jpeg2000DecoderContext *s, int n)
{
if (s->ncomponents*4 != n - 2) {
av_log(s->avctx, AV_LOG_ERROR, "Invalid CRG marker.\n");
return AVERROR_INVALIDDATA;
}
bytestream2_skip(&s->g, n - 2);
return 0;
}
/* Tile-part lengths: see ISO 15444-1:2002, section A.7.1
* Used to know the number of tile parts and lengths.
* There may be multiple TLMs in the header.
@ -2061,6 +2070,9 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
// the comment is ignored
bytestream2_skip(&s->g, len - 2);
break;
case JPEG2000_CRG:
ret = read_crg(s, len);
break;
case JPEG2000_TLM:
// Tile-part lengths
ret = get_tlm(s, len);