Browse Source

theoradec: skip decoding of uncoded MV in 4MV code

Thusnelda, the new experimental Theora encoder is using this Theora feature
that was previously not exploited.
fixes issue579

Originally committed as revision 15166 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Aurelien Jacobs 16 years ago
parent
commit
feaf1a7393
1 changed files with 9 additions and 1 deletions
  1. +9
    -1
      libavcodec/vp3.c

+ 9
- 1
libavcodec/vp3.c View File

@@ -963,7 +963,7 @@ static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
*/
static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
{
int i, j, k;
int i, j, k, l;
int coding_mode;
int motion_x[6];
int motion_y[6];
@@ -1047,6 +1047,10 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
* Y fragment, then average for the C fragment vectors */
motion_x[4] = motion_y[4] = 0;
for (k = 0; k < 4; k++) {
for (l = 0; l < s->coded_fragment_list_index; l++)
if (s->coded_fragment_list[l] == s->macroblock_fragments[6*current_macroblock + k])
break;
if (l < s->coded_fragment_list_index) {
if (coding_mode == 0) {
motion_x[k] = motion_vector_table[get_vlc2(gb, s->motion_vector_vlc.table, 6, 2)];
motion_y[k] = motion_vector_table[get_vlc2(gb, s->motion_vector_vlc.table, 6, 2)];
@@ -1056,6 +1060,10 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
}
last_motion_x = motion_x[k];
last_motion_y = motion_y[k];
} else {
motion_x[k] = 0;
motion_y[k] = 0;
}
motion_x[4] += motion_x[k];
motion_y[4] += motion_y[k];
}


Loading…
Cancel
Save