mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-18 07:15:04 +02:00
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
This commit is contained in:
parent
e32e2d56d4
commit
feaf1a7393
@ -963,7 +963,7 @@ static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
|
|||||||
*/
|
*/
|
||||||
static int unpack_vectors(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 coding_mode;
|
||||||
int motion_x[6];
|
int motion_x[6];
|
||||||
int motion_y[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 */
|
* Y fragment, then average for the C fragment vectors */
|
||||||
motion_x[4] = motion_y[4] = 0;
|
motion_x[4] = motion_y[4] = 0;
|
||||||
for (k = 0; k < 4; k++) {
|
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) {
|
if (coding_mode == 0) {
|
||||||
motion_x[k] = motion_vector_table[get_vlc2(gb, s->motion_vector_vlc.table, 6, 2)];
|
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)];
|
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_x = motion_x[k];
|
||||||
last_motion_y = motion_y[k];
|
last_motion_y = motion_y[k];
|
||||||
|
} else {
|
||||||
|
motion_x[k] = 0;
|
||||||
|
motion_y[k] = 0;
|
||||||
|
}
|
||||||
motion_x[4] += motion_x[k];
|
motion_x[4] += motion_x[k];
|
||||||
motion_y[4] += motion_y[k];
|
motion_y[4] += motion_y[k];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user