comparison mdec.c @ 1437:ba444d478ffe libavcodec

more fixes
author michaelni
date Mon, 01 Sep 2003 17:05:28 +0000
parents b57e910e4235
children 6339c2b322e6
comparison
equal deleted inserted replaced
1436:b57e910e4235 1437:ba444d478ffe
63 const uint16_t *quant_matrix= ff_mpeg1_default_intra_matrix; 63 const uint16_t *quant_matrix= ff_mpeg1_default_intra_matrix;
64 const int qscale= a->qscale; 64 const int qscale= a->qscale;
65 65
66 /* DC coef */ 66 /* DC coef */
67 if(a->version==2){ 67 if(a->version==2){
68 block[0]= get_sbits(&a->gb, 10); 68 block[0]= 2*get_sbits(&a->gb, 10) + 1024;
69 }else{ 69 }else{
70 component = (n <= 3 ? 0 : n - 4 + 1); 70 component = (n <= 3 ? 0 : n - 4 + 1);
71 diff = decode_dc(&a->gb, component); 71 diff = decode_dc(&a->gb, component);
72 if (diff >= 0xffff) 72 if (diff >= 0xffff)
73 return -1; 73 return -1;
87 break; 87 break;
88 } else if(level != 0) { 88 } else if(level != 0) {
89 i += run; 89 i += run;
90 j = scantable[i]; 90 j = scantable[i];
91 level= (level*qscale*quant_matrix[j])>>3; 91 level= (level*qscale*quant_matrix[j])>>3;
92 level= (level-1)|1; 92 // level= (level-1)|1;
93 level = (level ^ SHOW_SBITS(re, &a->gb, 1)) - SHOW_SBITS(re, &a->gb, 1); 93 level = (level ^ SHOW_SBITS(re, &a->gb, 1)) - SHOW_SBITS(re, &a->gb, 1);
94 LAST_SKIP_BITS(re, &a->gb, 1); 94 LAST_SKIP_BITS(re, &a->gb, 1);
95 } else { 95 } else {
96 /* escape */ 96 /* escape */
97 run = SHOW_UBITS(re, &a->gb, 6)+1; LAST_SKIP_BITS(re, &a->gb, 6); 97 run = SHOW_UBITS(re, &a->gb, 6)+1; LAST_SKIP_BITS(re, &a->gb, 6);
98 UPDATE_CACHE(re, &a->gb); 98 UPDATE_CACHE(re, &a->gb);
99 level = SHOW_SBITS(re, &a->gb, 10); SKIP_BITS(re, &a->gb, 10); 99 level = SHOW_SBITS(re, &a->gb, 10); SKIP_BITS(re, &a->gb, 10);
100 i += run; 100 i += run;
101 j = scantable[i]; 101 j = scantable[i];
102 /* if(level<0){ 102 if(level<0){
103 level= -level; 103 level= -level;
104 level= (level*qscale*quant_matrix[j])>>4; 104 level= (level*qscale*quant_matrix[j])>>3;
105 level= (level-1)|1; 105 level= (level-1)|1;
106 level= -level; 106 level= -level;
107 }else{*/ 107 }else{
108 level= (level*qscale*quant_matrix[j])>>4; 108 level= (level*qscale*quant_matrix[j])>>3;
109 /* level= (level-1)|1; 109 level= (level-1)|1;
110 }*/ 110 }
111 } 111 }
112 if (i > 63){ 112 if (i > 63){
113 fprintf(stderr, "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y); 113 fprintf(stderr, "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
114 return -1; 114 return -1;
115 } 115 }
122 return 0; 122 return 0;
123 } 123 }
124 124
125 static inline int decode_mb(MDECContext *a, DCTELEM block[6][64]){ 125 static inline int decode_mb(MDECContext *a, DCTELEM block[6][64]){
126 int i; 126 int i;
127 const int block_index[6]= {5,6,0,1,2,3};
127 128
128 a->dsp.clear_blocks(block[0]); 129 a->dsp.clear_blocks(block[0]);
129 130
130 for(i=5; i>=0; i--){ 131 for(i=0; i<6; i++){
131 if( mdec_decode_block_intra(a, block[i], i) < 0) 132 if( mdec_decode_block_intra(a, block[ block_index[i] ], block_index[i]) < 0)
132 return -1; 133 return -1;
133 } 134 }
134 return 0; 135 return 0;
135 } 136 }
136 137