annotate mpeg4video.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 31033caa5344
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10803
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
1 /*
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
2 * MPEG4 decoder / encoder common code.
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
3 * Copyright (c) 2000,2001 Fabrice Bellard
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
4 * Copyright (c) 2002-2010 Michael Niedermayer <michaelni@gmx.at>
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
5 *
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
6 * This file is part of FFmpeg.
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
7 *
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
12 *
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
16 * Lesser General Public License for more details.
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
17 *
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
21 */
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
22
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
23 #include "mpegvideo.h"
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
24 #include "mpeg4video.h"
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
25 #include "mpeg4data.h"
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
26
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
27 uint8_t ff_mpeg4_static_rl_table_store[3][2][2*MAX_RUN + MAX_LEVEL + 3];
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
28
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
29 int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s){
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
30 switch(s->pict_type){
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
31 case FF_I_TYPE:
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
32 return 16;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
33 case FF_P_TYPE:
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
34 case FF_S_TYPE:
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
35 return s->f_code+15;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
36 case FF_B_TYPE:
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
37 return FFMAX3(s->f_code, s->b_code, 2) + 15;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
38 default:
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
39 return -1;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
40 }
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
41 }
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
42
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
43 void ff_mpeg4_clean_buffers(MpegEncContext *s)
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
44 {
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
45 int c_wrap, c_xy, l_wrap, l_xy;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
46
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
47 l_wrap= s->b8_stride;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
48 l_xy= (2*s->mb_y-1)*l_wrap + s->mb_x*2 - 1;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
49 c_wrap= s->mb_stride;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
50 c_xy= (s->mb_y-1)*c_wrap + s->mb_x - 1;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
51
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
52 #if 0
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
53 /* clean DC */
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
54 memsetw(s->dc_val[0] + l_xy, 1024, l_wrap*2+1);
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
55 memsetw(s->dc_val[1] + c_xy, 1024, c_wrap+1);
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
56 memsetw(s->dc_val[2] + c_xy, 1024, c_wrap+1);
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
57 #endif
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
58
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
59 /* clean AC */
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
60 memset(s->ac_val[0] + l_xy, 0, (l_wrap*2+1)*16*sizeof(int16_t));
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
61 memset(s->ac_val[1] + c_xy, 0, (c_wrap +1)*16*sizeof(int16_t));
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
62 memset(s->ac_val[2] + c_xy, 0, (c_wrap +1)*16*sizeof(int16_t));
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
63
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
64 /* clean MV */
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
65 // we can't clear the MVs as they might be needed by a b frame
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
66 // memset(s->motion_val + l_xy, 0, (l_wrap*2+1)*2*sizeof(int16_t));
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
67 // memset(s->motion_val, 0, 2*sizeof(int16_t)*(2 + s->mb_width*2)*(2 + s->mb_height*2));
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
68 s->last_mv[0][0][0]=
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
69 s->last_mv[0][0][1]=
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
70 s->last_mv[1][0][0]=
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
71 s->last_mv[1][0][1]= 0;
4605bd2fdb7f Split the mpeg4 encoder and decoder off h263.c
michael
parents:
diff changeset
72 }
10824
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
73
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
74 #define tab_size ((signed)FF_ARRAY_ELEMS(s->direct_scale_mv[0]))
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
75 #define tab_bias (tab_size/2)
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
76
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
77 //used by mpeg4 and rv10 decoder
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
78 void ff_mpeg4_init_direct_mv(MpegEncContext *s){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
79 int i;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
80 for(i=0; i<tab_size; i++){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
81 s->direct_scale_mv[0][i] = (i-tab_bias)*s->pb_time/s->pp_time;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
82 s->direct_scale_mv[1][i] = (i-tab_bias)*(s->pb_time-s->pp_time)/s->pp_time;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
83 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
84 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
85
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
86 static inline void ff_mpeg4_set_one_direct_mv(MpegEncContext *s, int mx, int my, int i){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
87 int xy= s->block_index[i];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
88 uint16_t time_pp= s->pp_time;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
89 uint16_t time_pb= s->pb_time;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
90 int p_mx, p_my;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
91
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
92 p_mx= s->next_picture.motion_val[0][xy][0];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
93 if((unsigned)(p_mx + tab_bias) < tab_size){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
94 s->mv[0][i][0] = s->direct_scale_mv[0][p_mx + tab_bias] + mx;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
95 s->mv[1][i][0] = mx ? s->mv[0][i][0] - p_mx
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
96 : s->direct_scale_mv[1][p_mx + tab_bias];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
97 }else{
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
98 s->mv[0][i][0] = p_mx*time_pb/time_pp + mx;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
99 s->mv[1][i][0] = mx ? s->mv[0][i][0] - p_mx
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
100 : p_mx*(time_pb - time_pp)/time_pp;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
101 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
102 p_my= s->next_picture.motion_val[0][xy][1];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
103 if((unsigned)(p_my + tab_bias) < tab_size){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
104 s->mv[0][i][1] = s->direct_scale_mv[0][p_my + tab_bias] + my;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
105 s->mv[1][i][1] = my ? s->mv[0][i][1] - p_my
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
106 : s->direct_scale_mv[1][p_my + tab_bias];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
107 }else{
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
108 s->mv[0][i][1] = p_my*time_pb/time_pp + my;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
109 s->mv[1][i][1] = my ? s->mv[0][i][1] - p_my
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
110 : p_my*(time_pb - time_pp)/time_pp;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
111 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
112 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
113
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
114 #undef tab_size
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
115 #undef tab_bias
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
116
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
117 /**
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
118 *
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
119 * @return the mb_type
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
120 */
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
121 int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
122 const int mb_index= s->mb_x + s->mb_y*s->mb_stride;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
123 const int colocated_mb_type= s->next_picture.mb_type[mb_index];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
124 uint16_t time_pp;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
125 uint16_t time_pb;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
126 int i;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
127
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
128 //FIXME avoid divides
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
129 // try special case with shifts for 1 and 3 B-frames?
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
130
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
131 if(IS_8X8(colocated_mb_type)){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
132 s->mv_type = MV_TYPE_8X8;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
133 for(i=0; i<4; i++){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
134 ff_mpeg4_set_one_direct_mv(s, mx, my, i);
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
135 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
136 return MB_TYPE_DIRECT2 | MB_TYPE_8x8 | MB_TYPE_L0L1;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
137 } else if(IS_INTERLACED(colocated_mb_type)){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
138 s->mv_type = MV_TYPE_FIELD;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
139 for(i=0; i<2; i++){
11531
31033caa5344 Change ref_index structure so it matches how its organized in h264.
michael
parents: 10824
diff changeset
140 int field_select= s->next_picture.ref_index[0][4*mb_index + 2*i];
10824
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
141 s->field_select[0][i]= field_select;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
142 s->field_select[1][i]= i;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
143 if(s->top_field_first){
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
144 time_pp= s->pp_field_time - field_select + i;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
145 time_pb= s->pb_field_time - field_select + i;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
146 }else{
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
147 time_pp= s->pp_field_time + field_select - i;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
148 time_pb= s->pb_field_time + field_select - i;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
149 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
150 s->mv[0][i][0] = s->p_field_mv_table[i][0][mb_index][0]*time_pb/time_pp + mx;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
151 s->mv[0][i][1] = s->p_field_mv_table[i][0][mb_index][1]*time_pb/time_pp + my;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
152 s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->p_field_mv_table[i][0][mb_index][0]
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
153 : s->p_field_mv_table[i][0][mb_index][0]*(time_pb - time_pp)/time_pp;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
154 s->mv[1][i][1] = my ? s->mv[0][i][1] - s->p_field_mv_table[i][0][mb_index][1]
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
155 : s->p_field_mv_table[i][0][mb_index][1]*(time_pb - time_pp)/time_pp;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
156 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
157 return MB_TYPE_DIRECT2 | MB_TYPE_16x8 | MB_TYPE_L0L1 | MB_TYPE_INTERLACED;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
158 }else{
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
159 ff_mpeg4_set_one_direct_mv(s, mx, my, 0);
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
160 s->mv[0][1][0] = s->mv[0][2][0] = s->mv[0][3][0] = s->mv[0][0][0];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
161 s->mv[0][1][1] = s->mv[0][2][1] = s->mv[0][3][1] = s->mv[0][0][1];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
162 s->mv[1][1][0] = s->mv[1][2][0] = s->mv[1][3][0] = s->mv[1][0][0];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
163 s->mv[1][1][1] = s->mv[1][2][1] = s->mv[1][3][1] = s->mv[1][0][1];
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
164 if((s->avctx->workaround_bugs & FF_BUG_DIRECT_BLOCKSIZE) || !s->quarter_sample)
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
165 s->mv_type= MV_TYPE_16X16;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
166 else
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
167 s->mv_type= MV_TYPE_8X8;
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
168 return MB_TYPE_DIRECT2 | MB_TYPE_16x16 | MB_TYPE_L0L1; //Note see prev line
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
169 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
170 }
82d006235248 Move 3 direct MV related functions that i left out from h263.c to mpeg4video.c.
michael
parents: 10803
diff changeset
171