---
 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;
 
-- 
2.1.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to