summaryrefslogtreecommitdiff
path: root/libavcodec/vp3.c
diff options
context:
space:
mode:
authorStefan Gehrer <stefan.gehrer@gmx.de>2008-06-25 14:14:58 +0000
committerStefan Gehrer <stefan.gehrer@gmx.de>2008-06-25 14:14:58 +0000
commite8e474359144fce0335f27a4f22f22d8f5d5be40 (patch)
treeb6157a34a9bac6e8f0cdc0d04f2499aa4810451a /libavcodec/vp3.c
parent181782ae468fa36c2d41d735f5f3b318183eb8e2 (diff)
make ModeAlphabet read-only and use a custom mode alphabet
only locally in unpack_modes() Originally committed as revision 13964 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/vp3.c')
-rw-r--r--libavcodec/vp3.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
index 1366666c2d..3c06fe4d09 100644
--- a/libavcodec/vp3.c
+++ b/libavcodec/vp3.c
@@ -172,11 +172,8 @@ typedef struct Vp3Fragment {
#define MODE_COPY 8
/* There are 6 preset schemes, plus a free-form scheme */
-static int ModeAlphabet[7][CODING_MODE_COUNT] =
+static const int ModeAlphabet[6][CODING_MODE_COUNT] =
{
- /* this is the custom scheme */
- { 0, 0, 0, 0, 0, 0, 0, 0 },
-
/* scheme 1: Last motion vector dominates */
{ MODE_INTER_LAST_MV, MODE_INTER_PRIOR_LAST,
MODE_INTER_PLUS_MV, MODE_INTER_NO_MV,
@@ -877,6 +874,7 @@ static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
int current_macroblock;
int current_fragment;
int coding_mode;
+ int custom_mode_alphabet[CODING_MODE_COUNT];
debug_vp3(" vp3: unpacking encoding modes\n");
@@ -896,12 +894,17 @@ static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
if (scheme == 0) {
debug_modes(" custom mode alphabet ahead:\n");
for (i = 0; i < 8; i++)
- ModeAlphabet[scheme][get_bits(gb, 3)] = i;
+ custom_mode_alphabet[get_bits(gb, 3)] = i;
}
- for (i = 0; i < 8; i++)
- debug_modes(" mode[%d][%d] = %d\n", scheme, i,
- ModeAlphabet[scheme][i]);
+ for (i = 0; i < 8; i++) {
+ if(scheme)
+ debug_modes(" mode[%d][%d] = %d\n", scheme, i,
+ ModeAlphabet[scheme-1][i]);
+ else
+ debug_modes(" mode[0][%d] = %d\n", i,
+ custom_mode_alphabet[i]);
+ }
/* iterate through all of the macroblocks that contain 1 or more
* coded fragments */
@@ -921,8 +924,11 @@ static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
/* mode 7 means get 3 bits for each coding mode */
if (scheme == 7)
coding_mode = get_bits(gb, 3);
+ else if(scheme == 0)
+ coding_mode = custom_mode_alphabet
+ [get_vlc2(gb, s->mode_code_vlc.table, 3, 3)];
else
- coding_mode = ModeAlphabet[scheme]
+ coding_mode = ModeAlphabet[scheme-1]
[get_vlc2(gb, s->mode_code_vlc.table, 3, 3)];
s->macroblock_coding[current_macroblock] = coding_mode;