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

Reply via email to