Mercurial > libavcodec.hg
comparison h263dec.c @ 296:c1a8a1b4a24b libavcodec
sizeof(s->block) isnt 64*6*2 anymore bugfix
mpeg12 decoding optimization
author | michaelni |
---|---|
date | Thu, 28 Mar 2002 13:41:04 +0000 |
parents | 1fc96b02142e |
children | 764aeec1320e |
comparison
equal
deleted
inserted
replaced
295:6622b0fd036c | 296:c1a8a1b4a24b |
---|---|
154 /* FIXME: In the future H.263+ will have intra prediction */ | 154 /* FIXME: In the future H.263+ will have intra prediction */ |
155 /* and we are gonna need another way to detect MPEG4 */ | 155 /* and we are gonna need another way to detect MPEG4 */ |
156 if (s->mb_y && !s->h263_pred) { | 156 if (s->mb_y && !s->h263_pred) { |
157 s->first_gob_line = h263_decode_gob_header(s); | 157 s->first_gob_line = h263_decode_gob_header(s); |
158 } | 158 } |
159 | |
159 s->block_index[0]= s->block_wrap[0]*(s->mb_y*2 + 1) - 1; | 160 s->block_index[0]= s->block_wrap[0]*(s->mb_y*2 + 1) - 1; |
160 s->block_index[1]= s->block_wrap[0]*(s->mb_y*2 + 1); | 161 s->block_index[1]= s->block_wrap[0]*(s->mb_y*2 + 1); |
161 s->block_index[2]= s->block_wrap[0]*(s->mb_y*2 + 2) - 1; | 162 s->block_index[2]= s->block_wrap[0]*(s->mb_y*2 + 2) - 1; |
162 s->block_index[3]= s->block_wrap[0]*(s->mb_y*2 + 2); | 163 s->block_index[3]= s->block_wrap[0]*(s->mb_y*2 + 2); |
163 s->block_index[4]= s->block_wrap[4]*(s->mb_y + 1) + s->block_wrap[0]*(s->mb_height*2 + 2); | 164 s->block_index[4]= s->block_wrap[4]*(s->mb_y + 1) + s->block_wrap[0]*(s->mb_height*2 + 2); |
181 } else { | 182 } else { |
182 /* default quantization values */ | 183 /* default quantization values */ |
183 s->y_dc_scale = 8; | 184 s->y_dc_scale = 8; |
184 s->c_dc_scale = 8; | 185 s->c_dc_scale = 8; |
185 } | 186 } |
186 | 187 clear_blocks(s->block[0]); |
187 #ifdef HAVE_MMX | 188 |
188 if (mm_flags & MM_MMX) { | |
189 asm volatile( | |
190 "pxor %%mm7, %%mm7 \n\t" | |
191 "movl $-128*6, %%eax \n\t" | |
192 "1: \n\t" | |
193 "movq %%mm7, (%0, %%eax) \n\t" | |
194 "movq %%mm7, 8(%0, %%eax) \n\t" | |
195 "movq %%mm7, 16(%0, %%eax) \n\t" | |
196 "movq %%mm7, 24(%0, %%eax) \n\t" | |
197 "addl $32, %%eax \n\t" | |
198 " js 1b \n\t" | |
199 : : "r" (((int)s->block)+128*6) | |
200 : "%eax" | |
201 ); | |
202 }else{ | |
203 memset(s->block, 0, sizeof(s->block)); | |
204 } | |
205 #else | |
206 memset(s->block, 0, sizeof(s->block)); | |
207 #endif | |
208 s->mv_dir = MV_DIR_FORWARD; | 189 s->mv_dir = MV_DIR_FORWARD; |
209 s->mv_type = MV_TYPE_16X16; | 190 s->mv_type = MV_TYPE_16X16; |
210 if (s->h263_msmpeg4) { | 191 if (s->h263_msmpeg4) { |
211 if (msmpeg4_decode_mb(s, s->block) < 0) { | 192 if (msmpeg4_decode_mb(s, s->block) < 0) { |
212 fprintf(stderr,"\nError at MB: %d\n", (s->mb_y * s->mb_width) + s->mb_x); | 193 fprintf(stderr,"\nError at MB: %d\n", (s->mb_y * s->mb_width) + s->mb_x); |