summaryrefslogtreecommitdiff
path: root/libavcodec/utvideodec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2017-06-27 21:47:31 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2017-06-28 14:08:21 +0200
commit1835c5e7a4fd3a1e7c8a51ed410cecbfe6804ade (patch)
tree0a9918309f03f675187d8d9208376e61709dba78 /libavcodec/utvideodec.c
parentb12a36170b1314a991cff0d618a96259d4b172f4 (diff)
downloadffmpeg-1835c5e7a4fd3a1e7c8a51ed410cecbfe6804ade.tar.gz
avcodec/utvideodec: Move bitstream end check out of inner loop
This is not needed when the buffer is large enough for the worst case of a line 2% faster vlc reading Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/utvideodec.c')
-rw-r--r--libavcodec/utvideodec.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
index 44841aaa65..815b71cfb6 100644
--- a/libavcodec/utvideodec.c
+++ b/libavcodec/utvideodec.c
@@ -196,11 +196,6 @@ static int decode_plane10(UtvideoContext *c, int plane_no,
prev = 0x200;
for (j = sstart; j < send; j++) {
for (i = 0; i < width * step; i += step) {
- if (get_bits_left(&gb) <= 0) {
- av_log(c->avctx, AV_LOG_ERROR,
- "Slice decoding ran out of bits\n");
- goto fail;
- }
pix = get_vlc2(&gb, vlc.table, vlc.bits, 3);
if (pix < 0) {
av_log(c->avctx, AV_LOG_ERROR, "Decoding error\n");
@@ -214,6 +209,11 @@ static int decode_plane10(UtvideoContext *c, int plane_no,
dest[i] = pix;
}
dest += stride;
+ if (get_bits_left(&gb) < 0) {
+ av_log(c->avctx, AV_LOG_ERROR,
+ "Slice decoding ran out of bits\n");
+ goto fail;
+ }
}
if (get_bits_left(&gb) > 32)
av_log(c->avctx, AV_LOG_WARNING,
@@ -302,11 +302,6 @@ static int decode_plane(UtvideoContext *c, int plane_no,
prev = 0x80;
for (j = sstart; j < send; j++) {
for (i = 0; i < width * step; i += step) {
- if (get_bits_left(&gb) <= 0) {
- av_log(c->avctx, AV_LOG_ERROR,
- "Slice decoding ran out of bits\n");
- goto fail;
- }
pix = get_vlc2(&gb, vlc.table, vlc.bits, 3);
if (pix < 0) {
av_log(c->avctx, AV_LOG_ERROR, "Decoding error\n");
@@ -318,6 +313,11 @@ static int decode_plane(UtvideoContext *c, int plane_no,
}
dest[i] = pix;
}
+ if (get_bits_left(&gb) < 0) {
+ av_log(c->avctx, AV_LOG_ERROR,
+ "Slice decoding ran out of bits\n");
+ goto fail;
+ }
dest += stride;
}
if (get_bits_left(&gb) > 32)
@@ -610,6 +610,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
c->frame_pred = (c->frame_info >> 8) & 3;
+ max_slice_size += 4*avctx->width;
+
av_fast_malloc(&c->slice_bits, &c->slice_bits_size,
max_slice_size + AV_INPUT_BUFFER_PADDING_SIZE);