another bitstream extraction to optimize: fixed-length motion vectors
authorMike Melanson <mike@multimedia.cx>
Sat, 21 May 2005 01:12:41 +0000 (01:12 +0000)
committerMike Melanson <mike@multimedia.cx>
Sat, 21 May 2005 01:12:41 +0000 (01:12 +0000)
Originally committed as revision 4286 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/vp3.c
libavcodec/vp3data.h

index 1f0718e..160dcfb 100644 (file)
@@ -1540,9 +1540,15 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
                         motion_y[0] = get_motion_vector_vlc(gb);
 #endif
                     } else {
+#if 1
+                        motion_x[0] = fixed_motion_vector_table[get_bits(gb, 6)];
+                        motion_y[0] = fixed_motion_vector_table[get_bits(gb, 6)];
+#else
                         motion_x[0] = get_motion_vector_fixed(gb);
                         motion_y[0] = get_motion_vector_fixed(gb);
+#endif
                     }
+
                     for (k = 1; k < 6; k++) {
                         motion_x[k] = motion_x[0];
                         motion_y[k] = motion_y[0];
@@ -1572,8 +1578,13 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
                             motion_y[k] = get_motion_vector_vlc(gb);
 #endif
                         } else {
+#if 1
+                            motion_x[k] = fixed_motion_vector_table[get_bits(gb, 6)];
+                            motion_y[k] = fixed_motion_vector_table[get_bits(gb, 6)];
+#else
                             motion_x[k] = get_motion_vector_fixed(gb);
                             motion_y[k] = get_motion_vector_fixed(gb);
+#endif
                         }
                         motion_x[4] += motion_x[k];
                         motion_y[4] += motion_y[k];
index 9fa1ffa..8bead2f 100644 (file)
@@ -163,6 +163,17 @@ static const int motion_vector_table[63] = {
     24, -24, 25, -25, 26, -26, 27, -27, 28, -28, 29, -29, 30, -30, 31, -31
 };
 
+static const int8_t fixed_motion_vector_table[64] = {
+   0,   0,   1,  -1,   2,  -2,   3,  -3,   
+   4,  -4,   5,  -5,   6,  -6,   7,  -7,
+   8,  -8,   9,  -9,  10, -10,  11, -11,
+  12, -12,  13, -13,  14, -14,  15, -15,
+  16, -16,  17, -17,  18, -18,  19, -19,
+  20, -20,  21, -21,  22, -22,  23, -23,
+  24, -24,  25, -25,  26, -26,  27, -27,
+  28, -28,  29, -29,  30, -30,  31, -31
+};
+
 /* only tokens 0..6 indicate eob runs */
 static const int eob_run_base[7] = {
     1, 2, 3, 4, 8, 16, 0