On 20/05/16 22:11, Alexandra Hájková wrote:
> ---
> libavcodec/h263.h | 3 ++-
> libavcodec/h263dec.c | 54 +++++++++++++++++++------------------
> libavcodec/intelh263dec.c | 69
> ++++++++++++++++++++++++-----------------------
> 3 files changed, 65 insertions(+), 61 deletions(-)
>
> diff --git a/libavcodec/h263.h b/libavcodec/h263.h
> index 42c78f4..5377813 100644
> --- a/libavcodec/h263.h
> +++ b/libavcodec/h263.h
> @@ -22,10 +22,11 @@
>
> #include <stdint.h>
> #include "libavutil/rational.h"
> -#include "get_bits.h"
> +#include "bitstream.h"
> #include "mpegvideo.h"
> #include "h263data.h"
> #include "rl.h"
> +#include "vlc.h"
>
> #if !FF_API_ASPECT_EXTENDED
> #define FF_ASPECT_EXTENDED 15
> diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
> index e4a7227..0335ebb 100644
> --- a/libavcodec/h263dec.c
> +++ b/libavcodec/h263dec.c
> @@ -27,6 +27,7 @@
>
> #include "libavutil/cpu.h"
> #include "avcodec.h"
> +#include "bitstream.h"
> #include "error_resilience.h"
> #include "flv.h"
> #include "h263.h"
> @@ -146,7 +147,7 @@ av_cold int ff_h263_decode_end(AVCodecContext *avctx)
> */
> static int get_consumed_bytes(MpegEncContext *s, int buf_size)
> {
> - int pos = (get_bits_count(&s->gb) + 7) >> 3;
> + int pos = (bitstream_tell(&s->bc) + 7) >> 3;
>
> if (s->divx_packed || s->avctx->hwaccel) {
> /* We would have to scan through the whole buf to handle the weird
> @@ -177,7 +178,7 @@ static int decode_slice(MpegEncContext *s)
> const int mb_size = 16;
> int ret;
>
> - s->last_resync_gb = s->gb;
> + s->last_resync_bc = s->bc;
> s->first_slice_line = 1;
> s->resync_mb_x = s->mb_x;
> s->resync_mb_y = s->mb_y;
> @@ -185,10 +186,10 @@ static int decode_slice(MpegEncContext *s)
> ff_set_qscale(s, s->qscale);
>
> if (s->avctx->hwaccel) {
> - const uint8_t *start = s->gb.buffer + get_bits_count(&s->gb) / 8;
> + const uint8_t *start = s->bc.buffer + bitstream_tell(&s->bc) / 8;
> const uint8_t *end = ff_h263_find_resync_marker(start + 1,
> - s->gb.buffer_end);
> - skip_bits_long(&s->gb, 8 * (end - start));
> + s->bc.buffer_end);
> + bitstream_skip(&s->bc, 8 * (end - start));
> return s->avctx->hwaccel->decode_slice(s->avctx, start, end - start);
> }
>
> @@ -237,7 +238,7 @@ static int decode_slice(MpegEncContext *s)
> s->mv_dir = MV_DIR_FORWARD;
> s->mv_type = MV_TYPE_16X16;
> ff_dlog(s, "%d %06X\n",
> - get_bits_count(&s->gb), show_bits(&s->gb, 24));
> + bitstream_tell(&s->bc), bitstream_peek(&s->bc, 24));
> ret = s->decode_mb(s, s->block);
>
> if (s->pict_type != AV_PICTURE_TYPE_B)
> @@ -292,29 +293,30 @@ static int decode_slice(MpegEncContext *s)
>
> if (s->codec_id == AV_CODEC_ID_MPEG4 &&
> (s->workaround_bugs & FF_BUG_AUTODETECT) &&
> - get_bits_left(&s->gb) >= 48 &&
> - show_bits(&s->gb, 24) == 0x4010 &&
> + bitstream_bits_left(&s->bc) >= 48 &&
> + bitstream_peek(&s->bc, 24) == 0x4010 &&
> !s->data_partitioning)
> s->padding_bug_score += 32;
>
> /* try to detect the padding bug */
> if (s->codec_id == AV_CODEC_ID_MPEG4 &&
> (s->workaround_bugs & FF_BUG_AUTODETECT) &&
> - get_bits_left(&s->gb) >= 0 &&
> - get_bits_left(&s->gb) < 48 &&
> + bitstream_bits_left(&s->bc) >= 0 &&
> + bitstream_bits_left(&s->bc) < 48 &&
> !s->data_partitioning) {
> - const int bits_count = get_bits_count(&s->gb);
> - const int bits_left = s->gb.size_in_bits - bits_count;
> + const int bits_count = bitstream_tell(&s->bc);
> + const int bits_left = bitstream_bits_left(&s->bc);
> + //printf("h263: bits_left %d\n", bits_left);
>
> if (bits_left == 0) {
> s->padding_bug_score += 16;
> } else if (bits_left != 1) {
> - int v = show_bits(&s->gb, 8);
> + int v = bitstream_peek(&s->bc, 8);
> v |= 0x7F >> (7 - (bits_count & 7));
>
> if (v == 0x7F && bits_left <= 8)
> s->padding_bug_score--;
> - else if (v == 0x7F && ((get_bits_count(&s->gb) + 8) & 8) &&
> + else if (v == 0x7F && ((bitstream_tell(&s->bc) + 8) & 8) &&
> bits_left <= 16)
> s->padding_bug_score += 4;
> else
> @@ -332,7 +334,7 @@ static int decode_slice(MpegEncContext *s)
>
> // handle formats which don't have unique end markers
> if (s->msmpeg4_version || (s->workaround_bugs & FF_BUG_NO_PADDING)) { //
> FIXME perhaps solve this more cleanly
> - int left = get_bits_left(&s->gb);
> + int left = bitstream_bits_left(&s->bc);
> int max_extra = 7;
>
> /* no markers in M$ crap */
> @@ -350,7 +352,7 @@ static int decode_slice(MpegEncContext *s)
> if (left > max_extra)
> av_log(s->avctx, AV_LOG_ERROR,
> "discarding %d junk bits at end, next would be %X\n",
> - left, show_bits(&s->gb, 24));
> + left, bitstream_peek(&s->bc, 24));
> else if (left < 0)
> av_log(s->avctx, AV_LOG_ERROR, "overreading %d bits\n", -left);
> else
> @@ -362,7 +364,7 @@ static int decode_slice(MpegEncContext *s)
>
> av_log(s->avctx, AV_LOG_ERROR,
> "slice end not reached but screenspace end (%d left %06X, score=
> %d)\n",
> - get_bits_left(&s->gb), show_bits(&s->gb, 24),
> s->padding_bug_score);
> + bitstream_bits_left(&s->bc), bitstream_peek(&s->bc, 24),
> s->padding_bug_score);
>
> ff_er_add_slice(&s->er, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y,
> ER_MB_END & part_mask);
> @@ -412,10 +414,10 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void
> *data, int *got_frame,
> }
>
> if (s->bitstream_buffer_size && (s->divx_packed || buf_size < 20)) //
> divx 5.01+/xvid frame reorder
> - ret = init_get_bits8(&s->gb, s->bitstream_buffer,
> + ret = bitstream_init8(&s->bc, s->bitstream_buffer,
> s->bitstream_buffer_size);
> else
> - ret = init_get_bits8(&s->gb, buf, buf_size);
> + ret = bitstream_init8(&s->bc, buf, buf_size);
> s->bitstream_buffer_size = 0;
>
> if (ret < 0)
> @@ -432,15 +434,15 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void
> *data, int *got_frame,
> ret = ff_msmpeg4_decode_picture_header(s);
> } else if (CONFIG_MPEG4_DECODER && avctx->codec_id == AV_CODEC_ID_MPEG4)
> {
> if (s->avctx->extradata_size && s->picture_number == 0) {
> - GetBitContext gb;
> + BitstreamContext bc;
>
> - ret = init_get_bits8(&gb, s->avctx->extradata,
> + ret = bitstream_init8(&bc, s->avctx->extradata,
> s->avctx->extradata_size);
> if (ret < 0)
> return ret;
> - ff_mpeg4_decode_picture_header(avctx->priv_data, &gb);
> + ff_mpeg4_decode_picture_header(avctx->priv_data, &bc);
> }
> - ret = ff_mpeg4_decode_picture_header(avctx->priv_data, &s->gb);
> + ret = ff_mpeg4_decode_picture_header(avctx->priv_data, &s->bc);
> } else if (CONFIG_H263I_DECODER && s->codec_id == AV_CODEC_ID_H263I) {
> ret = ff_intel_h263_decode_picture_header(s);
> } else if (CONFIG_FLV_DECODER && s->h263_flv) {
> @@ -562,8 +564,8 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void
> *data, int *got_frame,
> ff_thread_finish_setup(avctx);
>
> if (avctx->hwaccel) {
> - ret = avctx->hwaccel->start_frame(avctx, s->gb.buffer,
> - s->gb.buffer_end - s->gb.buffer);
> + ret = avctx->hwaccel->start_frame(avctx, s->bc.buffer,
> + s->bc.buffer_end - s->bc.buffer);
> if (ret < 0 )
> return ret;
> }
> @@ -589,7 +591,7 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void
> *data, int *got_frame,
> while (s->mb_y < s->mb_height) {
> if (s->msmpeg4_version) {
> if (s->slice_height == 0 || s->mb_x != 0 ||
> - (s->mb_y % s->slice_height) != 0 || get_bits_left(&s->gb) <
> 0)
> + (s->mb_y % s->slice_height) != 0 ||
> bitstream_bits_left(&s->bc) < 0)
> break;
> } else {
> int prev_x = s->mb_x, prev_y = s->mb_y;
> diff --git a/libavcodec/intelh263dec.c b/libavcodec/intelh263dec.c
> index cd1971f..9f7a078 100644
> --- a/libavcodec/intelh263dec.c
> +++ b/libavcodec/intelh263dec.c
> @@ -18,6 +18,7 @@
> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
> USA
> */
>
> +#include "bitstream.h"
> #include "mpegutils.h"
> #include "mpegvideo.h"
> #include "h263.h"
> @@ -28,47 +29,47 @@ int ff_intel_h263_decode_picture_header(MpegEncContext *s)
> {
> int format;
>
> - if (get_bits_left(&s->gb) == 64) { /* special dummy frames */
> + if (bitstream_bits_left(&s->bc) == 64) { /* special dummy frames */
> return FRAME_SKIPPED;
> }
>
> /* picture header */
> - if (get_bits_long(&s->gb, 22) != 0x20) {
> + if (bitstream_read(&s->bc, 22) != 0x20) {
> av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
> return -1;
> }
> - s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
> + s->picture_number = bitstream_read(&s->bc, 8); /* picture timestamp */
>
> - if (get_bits1(&s->gb) != 1) {
> + if (bitstream_read_bit(&s->bc) != 1) {
> av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
> return -1; /* marker */
> }
> - if (get_bits1(&s->gb) != 0) {
> + if (bitstream_read_bit(&s->bc) != 0) {
> av_log(s->avctx, AV_LOG_ERROR, "Bad H.263 id\n");
> - return -1; /* H.263 id */
> + return -1; /* h263 id */
> }
> - skip_bits1(&s->gb); /* split screen off */
> - skip_bits1(&s->gb); /* camera off */
> - skip_bits1(&s->gb); /* freeze picture release off */
> + bitstream_skip(&s->bc, 1); /* split screen off */
> + bitstream_skip(&s->bc, 1); /* camera off */
> + bitstream_skip(&s->bc, 1); /* freeze picture release off */
>
> - format = get_bits(&s->gb, 3);
> + format = bitstream_read(&s->bc, 3);
> if (format == 0 || format == 6) {
> av_log(s->avctx, AV_LOG_ERROR, "Intel H.263 free format not
> supported\n");
> return -1;
> }
> s->h263_plus = 0;
>
> - s->pict_type = AV_PICTURE_TYPE_I + get_bits1(&s->gb);
> + s->pict_type = AV_PICTURE_TYPE_I + bitstream_read_bit(&s->bc);
>
> - s->unrestricted_mv = get_bits1(&s->gb);
> + s->unrestricted_mv = bitstream_read_bit(&s->bc);
> s->h263_long_vectors = s->unrestricted_mv;
>
> - if (get_bits1(&s->gb) != 0) {
> + if (bitstream_read_bit(&s->bc) != 0) {
> av_log(s->avctx, AV_LOG_ERROR, "SAC not supported\n");
> return -1; /* SAC: off */
> }
> - s->obmc= get_bits1(&s->gb);
> - s->pb_frame = get_bits1(&s->gb);
> + s->obmc= bitstream_read_bit(&s->bc);
> + s->pb_frame = bitstream_read_bit(&s->bc);
>
> if (format < 6) {
> s->width = ff_h263_format[format][0];
> @@ -76,31 +77,31 @@ int ff_intel_h263_decode_picture_header(MpegEncContext *s)
> s->avctx->sample_aspect_ratio.num = 12;
> s->avctx->sample_aspect_ratio.den = 11;
> } else {
> - format = get_bits(&s->gb, 3);
> + format = bitstream_read(&s->bc, 3);
> if(format == 0 || format == 7){
> av_log(s->avctx, AV_LOG_ERROR, "Wrong Intel H.263 format\n");
> return -1;
> }
> - if(get_bits(&s->gb, 2))
> + if(bitstream_read(&s->bc, 2))
> av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
> - s->loop_filter = get_bits1(&s->gb);
> - if(get_bits1(&s->gb))
> + s->loop_filter = bitstream_read_bit(&s->bc);
> + if(bitstream_read_bit(&s->bc))
> av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
> - if(get_bits1(&s->gb))
> + if(bitstream_read_bit(&s->bc))
> s->pb_frame = 2;
> - if(get_bits(&s->gb, 5))
> + if(bitstream_read(&s->bc, 5))
> av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
> - if(get_bits(&s->gb, 5) != 1)
> + if(bitstream_read(&s->bc, 5) != 1)
> av_log(s->avctx, AV_LOG_ERROR, "Invalid marker\n");
> }
> if(format == 6){
> - int ar = get_bits(&s->gb, 4);
> - skip_bits(&s->gb, 9); // display width
> - skip_bits1(&s->gb);
> - skip_bits(&s->gb, 9); // display height
> + int ar = bitstream_read(&s->bc, 4);
> + bitstream_skip(&s->bc, 9); // display width
> + bitstream_skip(&s->bc, 1);
> + bitstream_skip(&s->bc, 9); // display height
> if(ar == 15){
> - s->avctx->sample_aspect_ratio.num = get_bits(&s->gb, 8); //
> aspect ratio - width
> - s->avctx->sample_aspect_ratio.den = get_bits(&s->gb, 8); //
> aspect ratio - height
> + s->avctx->sample_aspect_ratio.num = bitstream_read(&s->bc, 8);
> // aspect ratio - width
> + s->avctx->sample_aspect_ratio.den = bitstream_read(&s->bc, 8);
> // aspect ratio - height
> } else {
> s->avctx->sample_aspect_ratio = ff_h263_pixel_aspect[ar];
> }
> @@ -108,17 +109,17 @@ int ff_intel_h263_decode_picture_header(MpegEncContext
> *s)
> av_log(s->avctx, AV_LOG_ERROR, "Invalid aspect ratio.\n");
> }
>
> - s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
> - skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
> + s->chroma_qscale= s->qscale = bitstream_read(&s->bc, 5);
> + bitstream_skip(&s->bc, 1); /* Continuous Presence Multipoint mode: off */
>
> if(s->pb_frame){
> - skip_bits(&s->gb, 3); //temporal reference for B-frame
> - skip_bits(&s->gb, 2); //dbquant
> + bitstream_skip(&s->bc, 3); //temporal reference for B-frame
> + bitstream_skip(&s->bc, 2); //dbquant
> }
>
> /* PEI */
> - while (get_bits1(&s->gb) != 0) {
> - skip_bits(&s->gb, 8);
> + while (bitstream_read_bit(&s->bc) != 0) {
> + bitstream_skip(&s->bc, 8);
> }
> s->f_code = 1;
>
>
Ok.
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel