If reduce_factor value greater than number of decomposition level: raise a
warning and set decomposition level to the lowest value.
---
Minor version bump due to option interface changer.
Replace patches :jpeg2000: add check of lowres size.
libavcodec/jpeg2000dec.c | 34 ++++++++++++++++++----------------
libavcodec/version.h | 2 +-
2 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c
index 11211d3..478cc72 100644
--- a/libavcodec/jpeg2000dec.c
+++ b/libavcodec/jpeg2000dec.c
@@ -87,8 +87,7 @@ typedef struct Jpeg2000DecoderContext {
Jpeg2000Tile *tile;
/*options parameters*/
- int16_t lowres;
- int16_t reduction_factor;
+ int16_t reduce_factor;
} Jpeg2000DecoderContext;
/* get_bits functions for JPEG2000 packet bitstream
@@ -203,12 +202,6 @@ static int get_siz(Jpeg2000DecoderContext *s)
return AVERROR(ENOMEM);
}
- /* compute image size with reduction factor */
- s->avctx->width = ff_jpeg2000_ceildivpow2(s->width - s->image_offset_x,
- s->reduction_factor);
- s->avctx->height = ff_jpeg2000_ceildivpow2(s->height - s->image_offset_y,
- s->reduction_factor);
-
switch (s->avctx->profile) {
case FF_PROFILE_JPEG2000_DCINEMA_2K:
case FF_PROFILE_JPEG2000_DCINEMA_4K:
@@ -251,13 +244,24 @@ static int get_cox(Jpeg2000DecoderContext *s,
Jpeg2000CodingStyle *c)
if (s->buf_end - s->buf < 5)
return AVERROR(EINVAL);
- c->nreslevels = bytestream_get_byte(&s->buf) + 1; // num of resolution
levels - 1
+ c->nreslevels = bytestream_get_byte(&s->buf) + 1; // num of resolution
levels
/* compute number of resolution levels to decode */
- if (c->nreslevels < s->reduction_factor)
+ if (c->nreslevels <= s->reduce_factor) {
+ av_log(s->avctx, AV_LOG_WARNING,
+ "Cannot set reduce_factor to %d, so set to minimum value for
this file(%d)\n",
+ s->reduce_factor, c->nreslevels - 1);
c->nreslevels2decode = 1;
- else
- c->nreslevels2decode = c->nreslevels - s->reduction_factor;
+ s->reduce_factor = c->nreslevels - 1;
+ } else
+ c->nreslevels2decode = c->nreslevels - s->reduce_factor;
+
+ /* compute image size with reduction factor */
+ s->avctx->width = ff_jpeg2000_ceildivpow2(s->width - s->image_offset_x,
+ s->reduce_factor);
+ s->avctx->height = ff_jpeg2000_ceildivpow2(s->height - s->image_offset_y,
+ s->reduce_factor);
+
c->log2_cblk_width = bytestream_get_byte(&s->buf) + 2; // cblk width
c->log2_cblk_height = bytestream_get_byte(&s->buf) + 2; // cblk height
@@ -1261,8 +1265,6 @@ static int jpeg2000_decode_frame(AVCodecContext *avctx,
void *data,
s->buf_end = s->buf_start + avpkt->size;
s->curtileno = 0; // TODO: only one tile in DCI JP2K. to implement for
more tiles
- // reduction factor, i.e number of resolution levels to skip
- s->reduction_factor = s->lowres;
if (s->buf_end - s->buf < 2)
return AVERROR(EINVAL);
@@ -1315,8 +1317,8 @@ static void jpeg2000_init_static_data(AVCodec *codec)
#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
static const AVOption options[] = {
- { "lowres", "Lower the decoding resolution by a power of two",
- OFFSET(lowres), AV_OPT_TYPE_INT, { .i64 = 0 }, 0,
JPEG2000_MAX_RESLEVELS - 1, VD },
+ { "reduce_factor", "Number of highest resolution level to discard. The
image resolution is divided by 2^reduce_factor",
+ OFFSET(reduce_factor), AV_OPT_TYPE_INT, { .i64 = 0 }, 0,
JPEG2000_MAX_RESLEVELS - 1, VD },
{ NULL },
};
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 2dc0f4d..afc2d35 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -27,7 +27,7 @@
*/
#define LIBAVCODEC_VERSION_MAJOR 55
-#define LIBAVCODEC_VERSION_MINOR 4
+#define LIBAVCODEC_VERSION_MINOR 5
#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
--
1.7.9.5
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel