comparison mpegvideo.c @ 249:42a0b7b16738 libavcodec

- Bug fixes in H.263+ Advanced INTRA Coding decoder. - H.263+ should be able to decode streams with AIC now :)
author pulento
date Tue, 19 Feb 2002 19:23:34 +0000
parents 56ee684c48bb
children 75091bfc577b
comparison
equal deleted inserted replaced
248:56ee684c48bb 249:42a0b7b16738
743 //printf("[%02d][%02d] %d\n",mb_x,mb_y,s->qscale); 743 //printf("[%02d][%02d] %d\n",mb_x,mb_y,s->qscale);
744 #endif 744 #endif
745 745
746 /* update DC predictors for P macroblocks */ 746 /* update DC predictors for P macroblocks */
747 if (!s->mb_intra) { 747 if (!s->mb_intra) {
748 if (s->h263_pred) { 748 if (s->h263_pred || s->h263_aic) {
749 if(s->mbintra_table[mb_x + mb_y*s->mb_width]) 749 if(s->mbintra_table[mb_x + mb_y*s->mb_width])
750 { 750 {
751 int wrap, xy, v; 751 int wrap, xy, v;
752 s->mbintra_table[mb_x + mb_y*s->mb_width]=0; 752 s->mbintra_table[mb_x + mb_y*s->mb_width]=0;
753 wrap = 2 * s->mb_width + 2; 753 wrap = 2 * s->mb_width + 2;
754 xy = 2 * mb_x + 1 + (2 * mb_y + 1) * wrap; 754 xy = 2 * mb_x + 1 + (2 * mb_y + 1) * wrap;
755 v = 1024; 755 v = 1024;
756 756
757 s->dc_val[0][xy] = v; 757 s->dc_val[0][xy] = v;
758 s->dc_val[0][xy + 1] = v; 758 s->dc_val[0][xy + 1] = v;
759 s->dc_val[0][xy + wrap] = v; 759 s->dc_val[0][xy + wrap] = v;
760 s->dc_val[0][xy + 1 + wrap] = v; 760 s->dc_val[0][xy + 1 + wrap] = v;
761 /* ac pred */ 761 /* ac pred */
762 memset(s->ac_val[0][xy], 0, 16 * sizeof(INT16)); 762 memset(s->ac_val[0][xy], 0, 16 * sizeof(INT16));
782 s->last_dc[0] = 128 << s->intra_dc_precision; 782 s->last_dc[0] = 128 << s->intra_dc_precision;
783 s->last_dc[1] = 128 << s->intra_dc_precision; 783 s->last_dc[1] = 128 << s->intra_dc_precision;
784 s->last_dc[2] = 128 << s->intra_dc_precision; 784 s->last_dc[2] = 128 << s->intra_dc_precision;
785 } 785 }
786 } 786 }
787 else if (s->h263_pred) 787 else if (s->h263_pred || s->h263_aic)
788 s->mbintra_table[mb_x + mb_y*s->mb_width]=1; 788 s->mbintra_table[mb_x + mb_y*s->mb_width]=1;
789 789
790 /* update motion predictor */ 790 /* update motion predictor */
791 if (s->out_format == FMT_H263) { 791 if (s->out_format == FMT_H263) {
792 int xy, wrap, motion_x, motion_y; 792 int xy, wrap, motion_x, motion_y;
1325 static void dct_unquantize_h263_c(MpegEncContext *s, 1325 static void dct_unquantize_h263_c(MpegEncContext *s,
1326 DCTELEM *block, int n, int qscale) 1326 DCTELEM *block, int n, int qscale)
1327 { 1327 {
1328 int i, level, qmul, qadd; 1328 int i, level, qmul, qadd;
1329 int nCoeffs; 1329 int nCoeffs;
1330 1330
1331 if (s->mb_intra) { 1331 if (s->mb_intra) {
1332 if (n < 4) 1332 if (!s->h263_aic) {
1333 block[0] = block[0] * s->y_dc_scale; 1333 if (n < 4)
1334 else 1334 block[0] = block[0] * s->y_dc_scale;
1335 block[0] = block[0] * s->c_dc_scale; 1335 else
1336 block[0] = block[0] * s->c_dc_scale;
1337 }
1336 i = 1; 1338 i = 1;
1337 nCoeffs= 64; //does not allways use zigzag table 1339 nCoeffs= 64; //does not allways use zigzag table
1338 } else { 1340 } else {
1339 i = 0; 1341 i = 0;
1340 nCoeffs= zigzag_end[ s->block_last_index[n] ]; 1342 nCoeffs= zigzag_end[ s->block_last_index[n] ];