[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