Mercurial > libavcodec.hg
comparison h263dec.c @ 498:0b4450c15067 libavcodec
dc scale simplification/optimization
author | michaelni |
---|---|
date | Tue, 18 Jun 2002 00:46:02 +0000 |
parents | 20108840b0e5 |
children | cd170daf9e4c |
comparison
equal
deleted
inserted
replaced
497:5b33d11bd1fb | 498:0b4450c15067 |
---|---|
74 case CODEC_ID_WMV1: | 74 case CODEC_ID_WMV1: |
75 s->h263_msmpeg4 = 1; | 75 s->h263_msmpeg4 = 1; |
76 s->h263_pred = 1; | 76 s->h263_pred = 1; |
77 s->msmpeg4_version=4; | 77 s->msmpeg4_version=4; |
78 break; | 78 break; |
79 case CODEC_ID_WMV2: | |
80 s->h263_msmpeg4 = 1; | |
81 s->h263_pred = 1; | |
82 s->msmpeg4_version=5; | |
83 break; | |
79 case CODEC_ID_H263I: | 84 case CODEC_ID_H263I: |
80 s->h263_intel = 1; | 85 s->h263_intel = 1; |
81 break; | 86 break; |
82 default: | 87 default: |
83 return -1; | 88 return -1; |
89 if (avctx->codec->id != CODEC_ID_H263 && avctx->codec->id != CODEC_ID_MPEG4) | 94 if (avctx->codec->id != CODEC_ID_H263 && avctx->codec->id != CODEC_ID_MPEG4) |
90 if (MPV_common_init(s) < 0) | 95 if (MPV_common_init(s) < 0) |
91 return -1; | 96 return -1; |
92 | 97 |
93 if (s->h263_msmpeg4) | 98 if (s->h263_msmpeg4) |
94 msmpeg4_decode_init_vlc(s); | 99 ff_msmpeg4_decode_init(s); |
95 else | 100 else |
96 h263_decode_init_vlc(s); | 101 h263_decode_init_vlc(s); |
97 | 102 |
98 return 0; | 103 return 0; |
99 } | 104 } |
167 return -1; | 172 return -1; |
168 } | 173 } |
169 | 174 |
170 if(ret==FRAME_SKIPED) return 0; | 175 if(ret==FRAME_SKIPED) return 0; |
171 /* skip if the header was thrashed */ | 176 /* skip if the header was thrashed */ |
172 if (ret < 0) | 177 if (ret < 0){ |
178 fprintf(stderr, "header damaged\n"); | |
173 return -1; | 179 return -1; |
180 } | |
174 /* skip b frames if we dont have reference frames */ | 181 /* skip b frames if we dont have reference frames */ |
175 if(s->num_available_buffers<2 && s->pict_type==B_TYPE) return 0; | 182 if(s->num_available_buffers<2 && s->pict_type==B_TYPE) return 0; |
176 /* skip b frames if we are in a hurry */ | 183 /* skip b frames if we are in a hurry */ |
177 if(s->hurry_up && s->pict_type==B_TYPE) return 0; | 184 if(s->hurry_up && s->pict_type==B_TYPE) return 0; |
178 | 185 |
213 if(s->msmpeg4_version==1){ | 220 if(s->msmpeg4_version==1){ |
214 s->last_dc[0]= | 221 s->last_dc[0]= |
215 s->last_dc[1]= | 222 s->last_dc[1]= |
216 s->last_dc[2]= 128; | 223 s->last_dc[2]= 128; |
217 } | 224 } |
225 | |
226 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ]; | |
227 s->c_dc_scale= s->c_dc_scale_table[ s->qscale ]; | |
218 | 228 |
219 s->block_index[0]= s->block_wrap[0]*(s->mb_y*2 + 1) - 1; | 229 s->block_index[0]= s->block_wrap[0]*(s->mb_y*2 + 1) - 1; |
220 s->block_index[1]= s->block_wrap[0]*(s->mb_y*2 + 1); | 230 s->block_index[1]= s->block_wrap[0]*(s->mb_y*2 + 1); |
221 s->block_index[2]= s->block_wrap[0]*(s->mb_y*2 + 2) - 1; | 231 s->block_index[2]= s->block_wrap[0]*(s->mb_y*2 + 2) - 1; |
222 s->block_index[3]= s->block_wrap[0]*(s->mb_y*2 + 2); | 232 s->block_index[3]= s->block_wrap[0]*(s->mb_y*2 + 2); |
243 s->mb_x, s->mb_y, get_bits_count(&s->gb), s->next_resync_pos); | 253 s->mb_x, s->mb_y, get_bits_count(&s->gb), s->next_resync_pos); |
244 ff_conceal_past_errors(s, 1); | 254 ff_conceal_past_errors(s, 1); |
245 } | 255 } |
246 } | 256 } |
247 s->qscale= s->next_resync_qscale; | 257 s->qscale= s->next_resync_qscale; |
258 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ]; | |
259 s->c_dc_scale= s->c_dc_scale_table[ s->qscale ]; | |
260 | |
248 s->gb= s->next_resync_gb; | 261 s->gb= s->next_resync_gb; |
249 s->resync_mb_x= s->mb_x; //we know that the marker is here cuz mb_num_left was the distance to it | 262 s->resync_mb_x= s->mb_x; //we know that the marker is here cuz mb_num_left was the distance to it |
250 s->resync_mb_y= s->mb_y; | 263 s->resync_mb_y= s->mb_y; |
251 s->first_slice_line=1; | 264 s->first_slice_line=1; |
252 | 265 |
263 } | 276 } |
264 } | 277 } |
265 | 278 |
266 //fprintf(stderr,"\nFrame: %d\tMB: %d",avctx->frame_number, (s->mb_y * s->mb_width) + s->mb_x); | 279 //fprintf(stderr,"\nFrame: %d\tMB: %d",avctx->frame_number, (s->mb_y * s->mb_width) + s->mb_x); |
267 /* DCT & quantize */ | 280 /* DCT & quantize */ |
268 if (s->h263_pred && !(s->msmpeg4_version==1 || s->msmpeg4_version==2)) { | |
269 /* old ffmpeg encoded msmpeg4v3 workaround */ | |
270 if(s->workaround_bugs==1 && s->msmpeg4_version==3) | |
271 ff_old_msmpeg4_dc_scale(s); | |
272 else | |
273 h263_dc_scale(s); | |
274 } else { | |
275 /* default quantization values */ | |
276 s->y_dc_scale = 8; | |
277 s->c_dc_scale = 8; | |
278 } | |
279 | |
280 if(s->decoding_error!=DECODING_DESYNC){ | 281 if(s->decoding_error!=DECODING_DESYNC){ |
281 int last_error= s->decoding_error; | 282 int last_error= s->decoding_error; |
282 clear_blocks(s->block[0]); | 283 clear_blocks(s->block[0]); |
283 | 284 |
284 s->mv_dir = MV_DIR_FORWARD; | 285 s->mv_dir = MV_DIR_FORWARD; |
519 h263_decode_end, | 520 h263_decode_end, |
520 h263_decode_frame, | 521 h263_decode_frame, |
521 CODEC_CAP_DRAW_HORIZ_BAND, | 522 CODEC_CAP_DRAW_HORIZ_BAND, |
522 }; | 523 }; |
523 | 524 |
525 AVCodec wmv2_decoder = { | |
526 "wmv2", | |
527 CODEC_TYPE_VIDEO, | |
528 CODEC_ID_WMV2, | |
529 sizeof(MpegEncContext), | |
530 h263_decode_init, | |
531 NULL, | |
532 h263_decode_end, | |
533 h263_decode_frame, | |
534 CODEC_CAP_DRAW_HORIZ_BAND, | |
535 }; | |
536 | |
524 AVCodec h263i_decoder = { | 537 AVCodec h263i_decoder = { |
525 "h263i", | 538 "h263i", |
526 CODEC_TYPE_VIDEO, | 539 CODEC_TYPE_VIDEO, |
527 CODEC_ID_H263I, | 540 CODEC_ID_H263I, |
528 sizeof(MpegEncContext), | 541 sizeof(MpegEncContext), |