diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-07-01 10:01:25 +0200 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2013-07-02 20:05:46 +0200 |
commit | 33e665a6abf1bfe45bc2d9484f1dd2dcdfb2324a (patch) | |
tree | 45876faa241867fce2c8f5f4edd5aa2949e69a41 | |
parent | db13e02c6f0355fabd540e77b61ade127d6411ff (diff) | |
download | ffmpeg-33e665a6abf1bfe45bc2d9484f1dd2dcdfb2324a.tar.gz |
jpeg2000: Update pixel format support
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
-rw-r--r-- | libavcodec/jpeg2000dec.c | 50 |
1 files changed, 20 insertions, 30 deletions
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) }; |