|
|
|
@ -20,7 +20,7 @@ |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#include "avcodec.h" |
|
|
|
|
#include "get_bits.h" |
|
|
|
|
#include "bitstream.h" |
|
|
|
|
#include "internal.h" |
|
|
|
|
|
|
|
|
|
typedef struct AvsContext { |
|
|
|
@ -57,7 +57,7 @@ avs_decode_frame(AVCodecContext * avctx, |
|
|
|
|
int i, j, x, y, stride, ret, vect_w = 3, vect_h = 3; |
|
|
|
|
AvsVideoSubType sub_type; |
|
|
|
|
AvsBlockType type; |
|
|
|
|
GetBitContext change_map; |
|
|
|
|
BitstreamContext change_map; |
|
|
|
|
|
|
|
|
|
if ((ret = ff_reget_buffer(avctx, p)) < 0) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n"); |
|
|
|
@ -125,13 +125,13 @@ avs_decode_frame(AVCodecContext * avctx, |
|
|
|
|
int map_size = ((318 / vect_w + 7) / 8) * (198 / vect_h); |
|
|
|
|
if (buf_end - table < map_size) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
init_get_bits(&change_map, table, map_size * 8); |
|
|
|
|
bitstream_init(&change_map, table, map_size * 8); |
|
|
|
|
table += map_size; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (y=0; y<198; y+=vect_h) { |
|
|
|
|
for (x=0; x<318; x+=vect_w) { |
|
|
|
|
if (sub_type == AVS_I_FRAME || get_bits1(&change_map)) { |
|
|
|
|
if (sub_type == AVS_I_FRAME || bitstream_read_bit(&change_map)) { |
|
|
|
|
if (buf_end - table < 1) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
vect = &buf[*table++ * (vect_w * vect_h)]; |
|
|
|
@ -145,7 +145,7 @@ avs_decode_frame(AVCodecContext * avctx, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (sub_type != AVS_I_FRAME) |
|
|
|
|
align_get_bits(&change_map); |
|
|
|
|
bitstream_align(&change_map); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ((ret = av_frame_ref(picture, p)) < 0) |
|
|
|
|