[FFmpeg-cvslog] flashsv: Convert to the new bitstream reader
Alexandra Hájková
git at videolan.org
Mon Apr 3 21:38:39 EEST 2017
ffmpeg | branch: master | Alexandra Hájková <alexandra at khirnov.net> | Sun Apr 10 11:08:09 2016 +0200| [692ba4fe6445581cee4d414ee29538f1dce7fd8e] | committer: Anton Khirnov
flashsv: Convert to the new bitstream reader
Signed-off-by: Anton Khirnov <anton at khirnov.net>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=692ba4fe6445581cee4d414ee29538f1dce7fd8e
---
libavcodec/flashsv.c | 57 ++++++++++++++++++++++++++--------------------------
1 file changed, 29 insertions(+), 28 deletions(-)
diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c
index 2cf8f3f..20fa7bc 100644
--- a/libavcodec/flashsv.c
+++ b/libavcodec/flashsv.c
@@ -38,9 +38,10 @@
#include <zlib.h>
#include "libavutil/intreadwrite.h"
+
#include "avcodec.h"
+#include "bitstream.h"
#include "bytestream.h"
-#include "get_bits.h"
#include "internal.h"
typedef struct BlockInfo {
@@ -175,7 +176,7 @@ static int flashsv2_prime(FlashSVContext *s, uint8_t *src, int size)
}
static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt,
- GetBitContext *gb, int block_size,
+ BitstreamContext *bc, int block_size,
int width, int height, int x_pos, int y_pos,
int blk_idx)
{
@@ -194,7 +195,7 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt,
if (ret < 0)
return ret;
}
- s->zstream.next_in = avpkt->data + get_bits_count(gb) / 8;
+ s->zstream.next_in = avpkt->data + bitstream_tell(bc) / 8;
s->zstream.avail_in = block_size;
s->zstream.next_out = s->tmpblock;
s->zstream.avail_out = s->block_size * 3;
@@ -210,7 +211,7 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt,
}
if (s->is_keyframe) {
- s->blocks[blk_idx].pos = s->keyframedata + (get_bits_count(gb) / 8);
+ s->blocks[blk_idx].pos = s->keyframedata + (bitstream_tell(bc) / 8);
s->blocks[blk_idx].size = block_size;
}
@@ -233,7 +234,7 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt,
x_pos, s->diff_height, width,
s->frame->linesize[0], s->pal);
}
- skip_bits_long(gb, 8 * block_size); /* skip the consumed bits */
+ bitstream_skip(bc, 8 * block_size); /* skip the consumed bits */
return 0;
}
@@ -259,7 +260,7 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data,
int buf_size = avpkt->size;
FlashSVContext *s = avctx->priv_data;
int h_blocks, v_blocks, h_part, v_part, i, j, ret;
- GetBitContext gb;
+ BitstreamContext bc;
/* no supplementary picture */
if (buf_size == 0)
@@ -267,21 +268,21 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data,
if (buf_size < 4)
return -1;
- init_get_bits(&gb, avpkt->data, buf_size * 8);
+ bitstream_init(&bc, avpkt->data, buf_size * 8);
/* start to parse the bitstream */
- s->block_width = 16 * (get_bits(&gb, 4) + 1);
- s->image_width = get_bits(&gb, 12);
- s->block_height = 16 * (get_bits(&gb, 4) + 1);
- s->image_height = get_bits(&gb, 12);
+ s->block_width = 16 * (bitstream_read(&bc, 4) + 1);
+ s->image_width = bitstream_read(&bc, 12);
+ s->block_height = 16 * (bitstream_read(&bc, 4) + 1);
+ s->image_height = bitstream_read(&bc, 12);
if (s->ver == 2) {
- skip_bits(&gb, 6);
- if (get_bits1(&gb)) {
+ bitstream_skip(&bc, 6);
+ if (bitstream_read_bit(&bc)) {
avpriv_request_sample(avctx, "iframe");
return AVERROR_PATCHWELCOME;
}
- if (get_bits1(&gb)) {
+ if (bitstream_read_bit(&bc)) {
avpriv_request_sample(avctx, "Custom palette");
return AVERROR_PATCHWELCOME;
}
@@ -371,7 +372,7 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data,
int has_diff = 0;
/* get the size of the compressed zlib chunk */
- int size = get_bits(&gb, 16);
+ int size = bitstream_read(&bc, 16);
s->color_depth = 0;
s->zlibprime_curr = 0;
@@ -379,17 +380,17 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data,
s->diff_start = 0;
s->diff_height = cur_blk_height;
- if (8 * size > get_bits_left(&gb)) {
+ if (8 * size > bitstream_bits_left(&bc)) {
av_frame_unref(s->frame);
return AVERROR_INVALIDDATA;
}
if (s->ver == 2 && size) {
- skip_bits(&gb, 3);
- s->color_depth = get_bits(&gb, 2);
- has_diff = get_bits1(&gb);
- s->zlibprime_curr = get_bits1(&gb);
- s->zlibprime_prev = get_bits1(&gb);
+ bitstream_skip(&bc, 3);
+ s->color_depth = bitstream_read(&bc, 2);
+ has_diff = bitstream_read_bit(&bc);
+ s->zlibprime_curr = bitstream_read_bit(&bc);
+ s->zlibprime_prev = bitstream_read_bit(&bc);
if (s->color_depth != 0 && s->color_depth != 2) {
av_log(avctx, AV_LOG_ERROR,
@@ -404,8 +405,8 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data,
"Inter frame without keyframe\n");
return AVERROR_INVALIDDATA;
}
- s->diff_start = get_bits(&gb, 8);
- s->diff_height = get_bits(&gb, 8);
+ s->diff_start = bitstream_read(&bc, 8);
+ s->diff_height = bitstream_read(&bc, 8);
if (s->diff_start + s->diff_height > cur_blk_height) {
av_log(avctx, AV_LOG_ERROR,
"Block parameters invalid: %d + %d > %d\n",
@@ -422,8 +423,8 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data,
av_log(avctx, AV_LOG_DEBUG, "%dx%d zlibprime_prev\n", i, j);
if (s->zlibprime_curr) {
- int col = get_bits(&gb, 8);
- int row = get_bits(&gb, 8);
+ int col = bitstream_read(&bc, 8);
+ int row = bitstream_read(&bc, 8);
av_log(avctx, AV_LOG_DEBUG, "%dx%d zlibprime_curr %dx%d\n",
i, j, col, row);
size -= 2;
@@ -451,7 +452,7 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data,
/* skip unchanged blocks, which have size 0 */
if (size) {
- if (flashsv_decode_block(avctx, avpkt, &gb, size,
+ if (flashsv_decode_block(avctx, avpkt, &bc, size,
cur_blk_width, cur_blk_height,
x_pos, y_pos,
i + j * (h_blocks + !!h_part)))
@@ -477,9 +478,9 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data,
*got_frame = 1;
- if ((get_bits_count(&gb) / 8) != buf_size)
+ if ((bitstream_tell(&bc) / 8) != buf_size)
av_log(avctx, AV_LOG_ERROR, "buffer not fully consumed (%d != %d)\n",
- buf_size, (get_bits_count(&gb) / 8));
+ buf_size, (bitstream_tell(&bc) / 8));
/* report that the buffer was completely consumed */
return buf_size;
More information about the ffmpeg-cvslog
mailing list