From 33e665a6abf1bfe45bc2d9484f1dd2dcdfb2324a Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 1 Jul 2013 10:01:25 +0200 Subject: jpeg2000: Update pixel format support Signed-off-by: Luca Barbato --- libavcodec/jpeg2000dec.c | 50 +++++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) (limited to 'libavcodec/jpeg2000dec.c') diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index 07ccbe5c8e..802180f65b 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -235,37 +235,35 @@ static int get_siz(Jpeg2000DecoderContext *s) 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: - /* XYZ color-space for digital cinema profiles */ - s->avctx->pix_fmt = AV_PIX_FMT_XYZ12; + switch (s->ncomponents) { + case 1: + if (s->precision > 8) + s->avctx->pix_fmt = AV_PIX_FMT_GRAY16; + else + s->avctx->pix_fmt = AV_PIX_FMT_GRAY8; break; - default: - /* For other profiles selects color-space according number of - * components and bit depth precision. */ - switch (s->ncomponents) { - case 1: - if (s->precision > 8) - s->avctx->pix_fmt = AV_PIX_FMT_GRAY16; - else - s->avctx->pix_fmt = AV_PIX_FMT_GRAY8; + case 3: + switch (s->avctx->profile) { + case FF_PROFILE_JPEG2000_DCINEMA_2K: + case FF_PROFILE_JPEG2000_DCINEMA_4K: + /* XYZ color-space for digital cinema profiles */ + s->avctx->pix_fmt = AV_PIX_FMT_XYZ12; break; - case 3: + default: if (s->precision > 8) s->avctx->pix_fmt = AV_PIX_FMT_RGB48; else s->avctx->pix_fmt = AV_PIX_FMT_RGB24; break; - case 4: - s->avctx->pix_fmt = AV_PIX_FMT_BGRA; - break; - default: - /* pixel format can not be identified */ - s->avctx->pix_fmt = AV_PIX_FMT_NONE; - break; } break; + case 4: + s->avctx->pix_fmt = AV_PIX_FMT_RGBA; + break; + default: + /* pixel format can not be identified */ + s->avctx->pix_fmt = AV_PIX_FMT_NONE; + break; } return 0; } @@ -1135,11 +1133,6 @@ static int jpeg2000_decode_tile(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, if (tile->codsty[0].mct) mct_decode(s, tile); - if (s->avctx->pix_fmt == AV_PIX_FMT_BGRA) { // RGBA -> BGRA - FFSWAP(float *, tile->comp[0].f_data, tile->comp[2].f_data); - FFSWAP(int *, tile->comp[0].i_data, tile->comp[2].i_data); - } - if (s->precision <= 8) { for (compno = 0; compno < s->ncomponents; compno++) { Jpeg2000Component *comp = tile->comp + compno; @@ -1443,8 +1436,5 @@ AVCodec ff_jpeg2000_decoder = { .init_static_data = jpeg2000_init_static_data, .decode = jpeg2000_decode_frame, .priv_class = &class, - .pix_fmts = (enum AVPixelFormat[]) { AV_PIX_FMT_XYZ12, - AV_PIX_FMT_GRAY8, - -1 }, .profiles = NULL_IF_CONFIG_SMALL(profiles) }; -- cgit v1.2.3