summaryrefslogtreecommitdiff
path: root/libavcodec/exr.c
diff options
context:
space:
mode:
authorMartin Vignali <martin.vignali@gmail.com>2016-06-04 15:38:59 +0200
committerPaul B Mahol <onemda@gmail.com>2016-06-06 15:42:30 +0200
commitdf7cd4176a299a11d7cd7a8acf7d50cb90b48678 (patch)
tree12ccc79b48d24cf6c52b756e3c5e9a9bd3c56f1a /libavcodec/exr.c
parent03152e74dfdc7f438cb4a10402c4de744e807e22 (diff)
avcodec/exr: move channel_line_size to thread data
In order to be used by b44 uncompress.
Diffstat (limited to 'libavcodec/exr.c')
-rw-r--r--libavcodec/exr.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/libavcodec/exr.c b/libavcodec/exr.c
index 4bcb298f97..2d808f497b 100644
--- a/libavcodec/exr.c
+++ b/libavcodec/exr.c
@@ -105,6 +105,8 @@ typedef struct EXRThreadData {
uint16_t *lut;
int ysize, xsize;
+
+ int channel_line_size;
} EXRThreadData;
typedef struct EXRContext {
@@ -992,7 +994,6 @@ static int decode_block(AVCodecContext *avctx, void *tdata,
uint8_t *ptr;
uint32_t data_size, line, col = 0;
uint32_t tileX, tileY, tileLevelX, tileLevelY;
- int channel_line_size;
const uint8_t *src;
int axmax = (avctx->width - (s->xmax + 1)) * 2 * s->desc->nb_components; /* nb pixel to add at the right of the datawindow */
int bxmin = s->xmin * 2 * s->desc->nb_components; /* nb pixel to add at the left of the datawindow */
@@ -1036,8 +1037,8 @@ static int decode_block(AVCodecContext *avctx, void *tdata,
if ((col + td->xsize) != s->xdelta)/* not the last tile of the line */
axmax = 0; /* doesn't add pixel at the right of the datawindow */
- channel_line_size = td->xsize * s->current_channel_offset;/* uncompress size of one line */
- uncompressed_size = channel_line_size * (uint64_t)td->ysize;/* uncompress size of the block */
+ td->channel_line_size = td->xsize * s->current_channel_offset;/* uncompress size of one line */
+ uncompressed_size = td->channel_line_size * (uint64_t)td->ysize;/* uncompress size of the block */
} else {
if (line_offset > buf_size - 8)
return AVERROR_INVALIDDATA;
@@ -1055,8 +1056,8 @@ static int decode_block(AVCodecContext *avctx, void *tdata,
td->ysize = FFMIN(s->scan_lines_per_block, s->ymax - line + 1); /* s->ydelta - line ?? */
td->xsize = s->xdelta;
- channel_line_size = td->xsize * s->current_channel_offset;/* uncompress size of one line */
- uncompressed_size = channel_line_size * (uint64_t)td->ysize;/* uncompress size of the block */
+ td->channel_line_size = td->xsize * s->current_channel_offset;/* uncompress size of one line */
+ uncompressed_size = td->channel_line_size * (uint64_t)td->ysize;/* uncompress size of the block */
if ((s->compression == EXR_RAW && (data_size != uncompressed_size ||
line_offset > buf_size - uncompressed_size)) ||
@@ -1185,11 +1186,11 @@ static int decode_block(AVCodecContext *avctx, void *tdata,
// Zero out the end if xmax+1 is not w
memset(ptr_x, 0, axmax);
- channel_buffer[0] += channel_line_size;
- channel_buffer[1] += channel_line_size;
- channel_buffer[2] += channel_line_size;
+ channel_buffer[0] += td->channel_line_size;
+ channel_buffer[1] += td->channel_line_size;
+ channel_buffer[2] += td->channel_line_size;
if (channel_buffer[3])
- channel_buffer[3] += channel_line_size;
+ channel_buffer[3] += td->channel_line_size;
}
return 0;