summaryrefslogtreecommitdiff
path: root/libavcodec/mjpegdec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-09-06 02:31:32 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-09-06 02:31:32 +0200
commitb155fb08b8fe0c91dad406e740ec6d3cc25f3f82 (patch)
treef47c7a5eb42de7f5d75760d72c297f230ad2c79b /libavcodec/mjpegdec.c
parentc407c73457df8002142dfb043486a102e79b17b2 (diff)
avcodec/mjpegdec: move shift_output() to its own function
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/mjpegdec.c')
-rw-r--r--libavcodec/mjpegdec.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
index 856947b656..2528b795fe 100644
--- a/libavcodec/mjpegdec.c
+++ b/libavcodec/mjpegdec.c
@@ -1044,6 +1044,20 @@ static av_always_inline void mjpeg_copy_block(MJpegDecodeContext *s,
}
}
+static void shift_output(MJpegDecodeContext *s, uint8_t *ptr, int linesize)
+{
+ int block_x, block_y;
+ if (s->bits > 8) {
+ for (block_y=0; block_y<8; block_y++)
+ for (block_x=0; block_x<8; block_x++)
+ *(uint16_t*)(ptr + 2*block_x + block_y*linesize) <<= 16 - s->bits;
+ } else {
+ for (block_y=0; block_y<8; block_y++)
+ for (block_x=0; block_x<8; block_x++)
+ *(ptr + block_x + block_y*linesize) <<= 8 - s->bits;
+ }
+}
+
static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah,
int Al, const uint8_t *mb_bitmask,
const AVFrame *reference)
@@ -1123,18 +1137,8 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah,
return AVERROR_INVALIDDATA;
}
s->dsp.idct_put(ptr, linesize[c], s->block);
- if (s->bits & 7) {
- int block_x, block_y;
- if (s->bits > 8) {
- for (block_y=0; block_y<8; block_y++)
- for (block_x=0; block_x<8; block_x++)
- *(uint16_t*)(ptr + 2*block_x + block_y*linesize[c]) <<= 16 - s->bits;
- } else {
- for (block_y=0; block_y<8; block_y++)
- for (block_x=0; block_x<8; block_x++)
- *(ptr + 2*block_x + block_y*linesize[c]) <<= 8 - s->bits;
- }
- }
+ if (s->bits & 7)
+ shift_output(s, ptr, linesize[c]);
}
} else {
int block_idx = s->block_stride[c] * (v * mb_y + y) +