| @@ -3,7 +3,7 @@ | |||||
| * Copyright (c) 2006 Industrial Light & Magic, a division of Lucas Digital Ltd. LLC | * Copyright (c) 2006 Industrial Light & Magic, a division of Lucas Digital Ltd. LLC | ||||
| * Copyright (c) 2009 Jimmy Christensen | * Copyright (c) 2009 Jimmy Christensen | ||||
| * | * | ||||
| * B44/B44A, Tile added by Jokyo Images support by CNC - French National Center for Cinema | |||||
| * B44/B44A, Tile, UINT32 added by Jokyo Images support by CNC - French National Center for Cinema | |||||
| * | * | ||||
| * This file is part of FFmpeg. | * This file is part of FFmpeg. | ||||
| * | * | ||||
| @@ -1236,7 +1236,7 @@ static int decode_block(AVCodecContext *avctx, void *tdata, | |||||
| *ptr_x++ = exr_flt2uint(bytestream_get_le32(&a)); | *ptr_x++ = exr_flt2uint(bytestream_get_le32(&a)); | ||||
| } | } | ||||
| } | } | ||||
| } else { | |||||
| } else if (s->pixel_type == EXR_HALF) { | |||||
| // 16-bit | // 16-bit | ||||
| for (x = 0; x < td->xsize; x++) { | for (x = 0; x < td->xsize; x++) { | ||||
| int c; | int c; | ||||
| @@ -1247,6 +1247,15 @@ static int decode_block(AVCodecContext *avctx, void *tdata, | |||||
| if (channel_buffer[3]) | if (channel_buffer[3]) | ||||
| *ptr_x++ = exr_halflt2uint(bytestream_get_le16(&a)); | *ptr_x++ = exr_halflt2uint(bytestream_get_le16(&a)); | ||||
| } | } | ||||
| } else if (s->pixel_type == EXR_UINT) { | |||||
| for (x = 0; x < td->xsize; x++) { | |||||
| for (c = 0; c < rgb_channel_count; c++) { | |||||
| *ptr_x++ = bytestream_get_le32(&rgb[c]) >> 16; | |||||
| } | |||||
| if (channel_buffer[3]) | |||||
| *ptr_x++ = bytestream_get_le32(&a) >> 16; | |||||
| } | |||||
| } | } | ||||
| // Zero out the end if xmax+1 is not w | // Zero out the end if xmax+1 is not w | ||||
| @@ -1648,6 +1657,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, | |||||
| switch (s->pixel_type) { | switch (s->pixel_type) { | ||||
| case EXR_FLOAT: | case EXR_FLOAT: | ||||
| case EXR_HALF: | case EXR_HALF: | ||||
| case EXR_UINT: | |||||
| if (s->channel_offsets[3] >= 0) { | if (s->channel_offsets[3] >= 0) { | ||||
| if (!s->is_luma) { | if (!s->is_luma) { | ||||
| avctx->pix_fmt = AV_PIX_FMT_RGBA64; | avctx->pix_fmt = AV_PIX_FMT_RGBA64; | ||||
| @@ -1662,9 +1672,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, | |||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| case EXR_UINT: | |||||
| avpriv_request_sample(avctx, "32-bit unsigned int"); | |||||
| return AVERROR_PATCHWELCOME; | |||||
| default: | default: | ||||
| av_log(avctx, AV_LOG_ERROR, "Missing channel list.\n"); | av_log(avctx, AV_LOG_ERROR, "Missing channel list.\n"); | ||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||