comparison wmv2.c @ 2655:ab7bd4722cef libavcodec

fix block corruption caused by clear_blocks() optimization
author michael
date Sun, 08 May 2005 13:04:46 +0000
parents ef44d24680d1
children b866af0c02d6
comparison
equal deleted inserted replaced
2654:ec2b0cba6764 2655:ab7bd4722cef
585 } 585 }
586 586
587 static void wmv2_add_block(Wmv2Context *w, DCTELEM *block1, uint8_t *dst, int stride, int n){ 587 static void wmv2_add_block(Wmv2Context *w, DCTELEM *block1, uint8_t *dst, int stride, int n){
588 MpegEncContext * const s= &w->s; 588 MpegEncContext * const s= &w->s;
589 589
590 if (s->block_last_index[n] >= 0) {
590 switch(w->abt_type_table[n]){ 591 switch(w->abt_type_table[n]){
591 case 0: 592 case 0:
592 if (s->block_last_index[n] >= 0) { 593 s->dsp.idct_add (dst, stride, block1);
593 s->dsp.idct_add (dst, stride, block1);
594 }
595 break; 594 break;
596 case 1: 595 case 1:
597 simple_idct84_add(dst , stride, block1); 596 simple_idct84_add(dst , stride, block1);
598 simple_idct84_add(dst + 4*stride, stride, w->abt_block2[n]); 597 simple_idct84_add(dst + 4*stride, stride, w->abt_block2[n]);
599 memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM)); 598 memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM));
604 memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM)); 603 memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM));
605 break; 604 break;
606 default: 605 default:
607 av_log(s->avctx, AV_LOG_ERROR, "internal error in WMV2 abt\n"); 606 av_log(s->avctx, AV_LOG_ERROR, "internal error in WMV2 abt\n");
608 } 607 }
608 }
609 } 609 }
610 610
611 void ff_wmv2_add_mb(MpegEncContext *s, DCTELEM block1[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr){ 611 void ff_wmv2_add_mb(MpegEncContext *s, DCTELEM block1[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr){
612 Wmv2Context * const w= (Wmv2Context*)s; 612 Wmv2Context * const w= (Wmv2Context*)s;
613 613