summaryrefslogtreecommitdiff
path: root/libavcodec/jpeg2000dec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-07-01 10:01:25 +0200
committerLuca Barbato <lu_zero@gentoo.org>2013-07-02 20:05:46 +0200
commit33e665a6abf1bfe45bc2d9484f1dd2dcdfb2324a (patch)
tree45876faa241867fce2c8f5f4edd5aa2949e69a41 /libavcodec/jpeg2000dec.c
parentdb13e02c6f0355fabd540e77b61ade127d6411ff (diff)
jpeg2000: Update pixel format support
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavcodec/jpeg2000dec.c')
-rw-r--r--libavcodec/jpeg2000dec.c50
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)
};