---
 libavcodec/dnxhddec.c | 44 +++++++++++++++++++-------------------------
 1 file changed, 19 insertions(+), 25 deletions(-)

diff --git a/libavcodec/dnxhddec.c b/libavcodec/dnxhddec.c
index 50747ea..08e2e51 100644
--- a/libavcodec/dnxhddec.c
+++ b/libavcodec/dnxhddec.c
@@ -25,16 +25,17 @@
 #include "libavutil/imgutils.h"
 #include "libavutil/timer.h"
 #include "avcodec.h"
+#include "bitstream.h"
 #include "blockdsp.h"
-#include "get_bits.h"
 #include "dnxhddata.h"
 #include "idctdsp.h"
 #include "internal.h"
 #include "thread.h"
+#include "vlc.h"
 
 typedef struct DNXHDContext {
     AVCodecContext *avctx;
-    GetBitContext gb;
+    BitstreamContext bb;
     BlockDSPContext bdsp;
     int cid;                            ///< compression id
     unsigned int width, height;
@@ -230,7 +231,7 @@ static av_always_inline void 
dnxhd_decode_dct_block(DNXHDContext *ctx,
     int i, j, index1, index2, len;
     int level, component, sign;
     const uint8_t *weight_matrix;
-    OPEN_READER(bs, &ctx->gb);
+    BitstreamContext in_bb = ctx->bb;
 
     if (!ctx->is_444) {
         if (n & 2) {
@@ -249,37 +250,30 @@ static av_always_inline void 
dnxhd_decode_dct_block(DNXHDContext *ctx,
         }
     }
 
-    UPDATE_CACHE(bs, &ctx->gb);
-    GET_VLC(len, bs, &ctx->gb, ctx->dc_vlc.table, DNXHD_DC_VLC_BITS, 1);
+    len = bitstream_read_vlc(&in_bb, ctx->dc_vlc.table, DNXHD_DC_VLC_BITS, 1);
     if (len) {
-        level = GET_CACHE(bs, &ctx->gb);
-        LAST_SKIP_BITS(bs, &ctx->gb, len);
-        sign  = ~level >> 31;
-        level = (NEG_USR32(sign ^ level, len) ^ sign) - sign;
+        level = bitstream_read_xbits(&in_bb, len);
         ctx->last_dc[component] += level;
     }
     block[0] = ctx->last_dc[component];
 
     for (i = 1; ; i++) {
-        UPDATE_CACHE(bs, &ctx->gb);
-        GET_VLC(index1, bs, &ctx->gb, ctx->ac_vlc.table,
-                DNXHD_VLC_BITS, 2);
+        index1 = bitstream_read_vlc(&in_bb, ctx->ac_vlc.table,
+                                    DNXHD_VLC_BITS, 2);
         level = ctx->cid_table->ac_level[index1];
         if (!level) /* EOB */
             break;
 
-        sign = SHOW_SBITS(bs, &ctx->gb, 1);
-        SKIP_BITS(bs, &ctx->gb, 1);
+        sign = bitstream_read_signed(&in_bb, 1);
 
         if (ctx->cid_table->ac_index_flag[index1]) {
-            level += SHOW_UBITS(bs, &ctx->gb, index_bits) << 6;
-            SKIP_BITS(bs, &ctx->gb, index_bits);
+            level = level + (bitstream_read(&in_bb, index_bits) << 6);
         }
 
         if (ctx->cid_table->ac_run_flag[index1]) {
-            UPDATE_CACHE(bs, &ctx->gb);
-            GET_VLC(index2, bs, &ctx->gb, ctx->run_vlc.table,
-                    DNXHD_VLC_BITS, 2);
+            index2 = bitstream_read_vlc(&in_bb, ctx->run_vlc.table,
+                                        DNXHD_VLC_BITS, 2);
+
             i += ctx->cid_table->run[index2];
         }
 
@@ -296,8 +290,8 @@ static av_always_inline void 
dnxhd_decode_dct_block(DNXHDContext *ctx,
 
         block[j] = (level ^ sign) - sign;
     }
+    ctx->bb = in_bb;
 
-    CLOSE_READER(bs, &ctx->gb);
 }
 
 static void dnxhd_decode_dct_block_8(DNXHDContext *ctx, int16_t *block,
@@ -330,12 +324,12 @@ static int dnxhd_decode_macroblock(DNXHDContext *ctx, 
AVFrame *frame,
     int interlaced_mb = 0;
 
     if (ctx->mbaff) {
-        interlaced_mb = get_bits1(&ctx->gb);
-        qscale = get_bits(&ctx->gb, 10);
+        interlaced_mb = bitstream_read_bit(&ctx->bb);
+        qscale = bitstream_read(&ctx->bb, 10);
     } else {
-        qscale = get_bits(&ctx->gb, 11);
+        qscale = bitstream_read(&ctx->bb, 11);
     }
-    skip_bits1(&ctx->gb);
+    bitstream_skip(&ctx->bb, 1);
 
     for (i = 0; i < 8; i++) {
         ctx->bdsp.clear_block(ctx->blocks[i]);
@@ -412,7 +406,7 @@ static int dnxhd_decode_macroblocks(DNXHDContext *ctx, 
AVFrame *frame,
         ctx->last_dc[0] =
         ctx->last_dc[1] =
         ctx->last_dc[2] = 1 << (ctx->bit_depth + 2); // for levels 
+2^(bitdepth-1)
-        init_get_bits(&ctx->gb, buf + ctx->mb_scan_index[y], (buf_size - 
ctx->mb_scan_index[y]) << 3);
+        bitstream_init(&ctx->bb, buf + ctx->mb_scan_index[y], (buf_size - 
ctx->mb_scan_index[y]) << 3);
         for (x = 0; x < ctx->mb_width; x++) {
             //START_TIMER;
             dnxhd_decode_macroblock(ctx, frame, x, y);
-- 
2.1.4

_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to