[FFmpeg-devel] [PATCH] jpeg200dec: reset in_tile_headers flag between frames

Pierre-Anthony Lemieux pal at sandflow.com
Fri Oct 25 03:28:32 EEST 2024


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
>


More information about the ffmpeg-devel mailing list