Mercurial > libavcodec.hg
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] ]; |