[FFmpeg-devel] [PATCH 2/2] jpeg2000dec: Support non subsampled 8bit planar pixel formats

Paul B Mahol onemda at gmail.com
Fri Jul 12 13:56:37 CEST 2013


On 7/7/13, Michael Niedermayer <michaelni at gmx.at> wrote:
> Fixes file2.jp2
>
> Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> ---
>  libavcodec/jpeg2000dec.c |   17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)

I guess it should be fine if it matches specification.

>
> diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c
> index c2f9bf6..18d2c85 100644
> --- a/libavcodec/jpeg2000dec.c
> +++ b/libavcodec/jpeg2000dec.c
> @@ -1250,14 +1250,21 @@ static int
> jpeg2000_decode_tile(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile,
>              int32_t *i_datap = comp->i_data;
>              int cbps = s->cbps[compno];
>              int w = tile->comp[compno].coord[0][1] - s->image_offset_x;
> +            int planar = !!picture->data[2];
> +            int pixelsize = planar ? 1 : s->ncomponents;
> +            int plane = 0;
> +
> +            if (planar)
> +                plane = s->cdef[compno] ? s->cdef[compno]-1 :
> (s->ncomponents-1);
> +
>
>              y    = tile->comp[compno].coord[1][0] - s->image_offset_y;
> -            line = picture->data[0] + y * picture->linesize[0];
> +            line = picture->data[plane] + y * picture->linesize[plane];
>              for (; y < tile->comp[compno].coord[1][1] - s->image_offset_y;
> y += s->cdy[compno]) {
>                  uint8_t *dst;
>
>                  x   = tile->comp[compno].coord[0][0] - s->image_offset_x;
> -                dst = line + x * s->ncomponents + compno;
> +                dst = line + x * pixelsize + compno*!planar;
>
>                  if (codsty->transform == FF_DWT97) {
>                      for (; x < w; x += s->cdx[compno]) {
> @@ -1266,7 +1273,7 @@ static int jpeg2000_decode_tile(Jpeg2000DecoderContext
> *s, Jpeg2000Tile *tile,
>                          val = av_clip(val, 0, (1 << cbps) - 1);
>                          *dst = val << (8 - cbps);
>                          datap++;
> -                        dst += s->ncomponents;
> +                        dst += pixelsize;
>                      }
>                  } else {
>                      for (; x < w; x += s->cdx[compno]) {
> @@ -1275,10 +1282,10 @@ static int
> jpeg2000_decode_tile(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile,
>                          val = av_clip(val, 0, (1 << cbps) - 1);
>                          *dst = val << (8 - cbps);
>                          i_datap++;
> -                        dst += s->ncomponents;
> +                        dst += pixelsize;
>                      }
>                  }
> -                line += picture->linesize[0];
> +                line += picture->linesize[plane];
>              }
>          }
>      } else {
> --
> 1.7.9.5
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list