[FFmpeg-devel] [PATCH] jpeg200dec: reset in_tile_headers flag between frames
WATANABE Osamu
owatanab at es.takushoku-u.ac.jp
Fri Oct 25 07:11:45 EEST 2024
It looks good to me. Thank you for catching this.
FYI - The patch has been confirmed to pass all the test cases defined in ISO/IEC 15444-4.
> On Oct 25, 2024, at 9:28, Pierre-Anthony Lemieux <pal at sandflow.com> wrote:
>
> Fixes https://trac.ffmpeg.org/ticket/11266
>
> On Thu, Oct 24, 2024 at 5:23?PM <pal at sandflow.com> wrote:
>>
>> From: Pierre-Anthony Lemieux <pal at palemieux.com>
>>
>> ---
>> libavcodec/jpeg2000dec.c | 19 ++++++++++---------
>> libavcodec/jpeg2000dec.h | 1 -
>> 2 files changed, 10 insertions(+), 10 deletions(-)
>>
>> diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c
>> index 2e09b279dc..5b05ff2455 100644
>> --- a/libavcodec/jpeg2000dec.c
>> +++ b/libavcodec/jpeg2000dec.c
>> @@ -2402,6 +2402,7 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
>> Jpeg2000QuantStyle *qntsty = s->qntsty;
>> Jpeg2000POC *poc = &s->poc;
>> uint8_t *properties = s->properties;
>> + uint8_t in_tile_headers = 0;
>>
>> for (;;) {
>> int len, ret = 0;
>> @@ -2484,7 +2485,7 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
>> ret = get_cap(s, codsty);
>> break;
>> case JPEG2000_COC:
>> - if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> + if (in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> av_log(s->avctx, AV_LOG_ERROR,
>> "COC marker found in a tile header but the codestream belongs to the HOMOGENEOUS set\n");
>> return AVERROR_INVALIDDATA;
>> @@ -2492,7 +2493,7 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
>> ret = get_coc(s, codsty, properties);
>> break;
>> case JPEG2000_COD:
>> - if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> + if (in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> av_log(s->avctx, AV_LOG_ERROR,
>> "COD marker found in a tile header but the codestream belongs to the HOMOGENEOUS set\n");
>> return AVERROR_INVALIDDATA;
>> @@ -2500,7 +2501,7 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
>> ret = get_cod(s, codsty, properties);
>> break;
>> case JPEG2000_RGN:
>> - if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> + if (in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> av_log(s->avctx, AV_LOG_ERROR,
>> "RGN marker found in a tile header but the codestream belongs to the HOMOGENEOUS set\n");
>> return AVERROR_INVALIDDATA;
>> @@ -2512,7 +2513,7 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
>> }
>> break;
>> case JPEG2000_QCC:
>> - if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> + if (in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> av_log(s->avctx, AV_LOG_ERROR,
>> "QCC marker found in a tile header but the codestream belongs to the HOMOGENEOUS set\n");
>> return AVERROR_INVALIDDATA;
>> @@ -2520,7 +2521,7 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
>> ret = get_qcc(s, len, qntsty, properties);
>> break;
>> case JPEG2000_QCD:
>> - if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> + if (in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> av_log(s->avctx, AV_LOG_ERROR,
>> "QCD marker found in a tile header but the codestream belongs to the HOMOGENEOUS set\n");
>> return AVERROR_INVALIDDATA;
>> @@ -2528,7 +2529,7 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
>> ret = get_qcd(s, len, qntsty, properties);
>> break;
>> case JPEG2000_POC:
>> - if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> + if (in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) {
>> av_log(s->avctx, AV_LOG_ERROR,
>> "POC marker found in a tile header but the codestream belongs to the HOMOGENEOUS set\n");
>> return AVERROR_INVALIDDATA;
>> @@ -2536,8 +2537,8 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
>> ret = get_poc(s, len, poc);
>> break;
>> case JPEG2000_SOT:
>> - if (!s->in_tile_headers) {
>> - s->in_tile_headers = 1;
>> + if (!in_tile_headers) {
>> + in_tile_headers = 1;
>> if (s->has_ppm) {
>> bytestream2_init(&s->packed_headers_stream, s->packed_headers, s->packed_headers_size);
>> }
>> @@ -2569,7 +2570,7 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
>> break;
>> case JPEG2000_PPM:
>> // Packed headers, main header
>> - if (s->in_tile_headers) {
>> + if (in_tile_headers) {
>> av_log(s->avctx, AV_LOG_ERROR, "PPM Marker can only be in Main header\n");
>> return AVERROR_INVALIDDATA;
>> }
>> diff --git a/libavcodec/jpeg2000dec.h b/libavcodec/jpeg2000dec.h
>> index 78eba27ed9..fce3823164 100644
>> --- a/libavcodec/jpeg2000dec.h
>> +++ b/libavcodec/jpeg2000dec.h
>> @@ -86,7 +86,6 @@ typedef struct Jpeg2000DecoderContext {
>> uint8_t *packed_headers; // contains packed headers. Used only along with PPM marker
>> int packed_headers_size;
>> GetByteContext packed_headers_stream;
>> - uint8_t in_tile_headers;
>>
>> int cdx[4], cdy[4];
>> int precision;
>> --
>> 2.25.1
>>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list