You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
libavcodec/jpeg2000dec.c: Modify image dimensions
Reduce image size of the image if all components have a non zero sample separation. This is to replicate the output of opj_decompress. Improves: p1_01.j2k Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
committed by
Michael Niedermayer
parent
b35968e060
commit
2760de16bc
@@ -269,6 +269,8 @@ static int get_siz(Jpeg2000DecoderContext *s)
|
|||||||
const enum AVPixelFormat *possible_fmts = NULL;
|
const enum AVPixelFormat *possible_fmts = NULL;
|
||||||
int possible_fmts_nb = 0;
|
int possible_fmts_nb = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
int o_dimx, o_dimy; //original image dimensions.
|
||||||
|
int dimx, dimy;
|
||||||
|
|
||||||
if (bytestream2_get_bytes_left(&s->g) < 36) {
|
if (bytestream2_get_bytes_left(&s->g) < 36) {
|
||||||
av_log(s->avctx, AV_LOG_ERROR, "Insufficient space for SIZ\n");
|
av_log(s->avctx, AV_LOG_ERROR, "Insufficient space for SIZ\n");
|
||||||
@@ -371,11 +373,18 @@ static int get_siz(Jpeg2000DecoderContext *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* compute image size with reduction factor */
|
/* compute image size with reduction factor */
|
||||||
ret = ff_set_dimensions(s->avctx,
|
o_dimx = ff_jpeg2000_ceildivpow2(s->width - s->image_offset_x,
|
||||||
ff_jpeg2000_ceildivpow2(s->width - s->image_offset_x,
|
s->reduction_factor);
|
||||||
s->reduction_factor),
|
o_dimy = ff_jpeg2000_ceildivpow2(s->height - s->image_offset_y,
|
||||||
ff_jpeg2000_ceildivpow2(s->height - s->image_offset_y,
|
s->reduction_factor);
|
||||||
s->reduction_factor));
|
dimx = ff_jpeg2000_ceildiv(o_dimx, s->cdx[0]);
|
||||||
|
dimy = ff_jpeg2000_ceildiv(o_dimy, s->cdy[0]);
|
||||||
|
for (i = 1; i < s->ncomponents; i++) {
|
||||||
|
dimx = FFMAX(dimx, ff_jpeg2000_ceildiv(o_dimx, s->cdx[i]));
|
||||||
|
dimy = FFMAX(dimy, ff_jpeg2000_ceildiv(o_dimy, s->cdy[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ff_set_dimensions(s->avctx, dimx, dimy);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user