changeset 9494:e09e4c095fdb libavcodec

Simplify ipvideo_decode_opcodes by using get_bits, this might be slower but is not performance-critical anyway.
author reimar
date Fri, 17 Apr 2009 19:28:36 +0000
parents f9828d48e19c
children fc15a3b977bf
files interplayvideo.c
diffstat 1 files changed, 5 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/interplayvideo.c	Fri Apr 17 19:21:50 2009 +0000
+++ b/interplayvideo.c	Fri Apr 17 19:28:36 2009 +0000
@@ -42,6 +42,8 @@
 #include "avcodec.h"
 #include "bytestream.h"
 #include "dsputil.h"
+#define ALT_BITSTREAM_READER_LE
+#include "get_bits.h"
 
 #define PALETTE_COUNT 256
 
@@ -566,10 +568,10 @@
 static void ipvideo_decode_opcodes(IpvideoContext *s)
 {
     int x, y;
-    int index = 0;
     unsigned char opcode;
     int ret;
     static int frame = 0;
+    GetBitContext gb;
 
     debug_interplay("------------------ frame %d\n", frame);
     frame++;
@@ -584,15 +586,10 @@
     s->upper_motion_limit_offset = (s->avctx->height - 8) * s->stride
         + s->avctx->width - 8;
 
+    init_get_bits(&gb, s->decoding_map, s->decoding_map_size * 8);
     for (y = 0; y < (s->stride * s->avctx->height); y += s->stride * 8) {
         for (x = y; x < y + s->avctx->width; x += 8) {
-            /* bottom nibble first, then top nibble (which makes it
-             * hard to use a GetBitcontext) */
-            if (index & 1)
-                opcode = s->decoding_map[index >> 1] >> 4;
-            else
-                opcode = s->decoding_map[index >> 1] & 0xF;
-            index++;
+            opcode = get_bits(&gb, 4);
 
             debug_interplay("  block @ (%3d, %3d): encoding 0x%X, data ptr @ %p\n",
                 x - y, y / s->stride, opcode, s->stream_ptr);