Mercurial > libavcodec.hg
comparison h264.c @ 1909:559e92baf533 libavcodec
fix decoding of qp<6
author | michael |
---|---|
date | Fri, 26 Mar 2004 20:28:29 +0000 |
parents | e20fd60b215c |
children | e935af90767b |
comparison
equal
deleted
inserted
replaced
1908:e20fd60b215c | 1909:559e92baf533 |
---|---|
1255 static void h264_add_idct_c(uint8_t *dst, DCTELEM *block, int stride){ | 1255 static void h264_add_idct_c(uint8_t *dst, DCTELEM *block, int stride){ |
1256 int i; | 1256 int i; |
1257 uint8_t *cm = cropTbl + MAX_NEG_CROP; | 1257 uint8_t *cm = cropTbl + MAX_NEG_CROP; |
1258 | 1258 |
1259 block[0] += 32; | 1259 block[0] += 32; |
1260 #if 1 | 1260 |
1261 for(i=0; i<4; i++){ | |
1262 const int z0= block[0 + 4*i] + block[2 + 4*i]; | |
1263 const int z1= block[0 + 4*i] - block[2 + 4*i]; | |
1264 const int z2= (block[1 + 4*i]>>1) - block[3 + 4*i]; | |
1265 const int z3= block[1 + 4*i] + (block[3 + 4*i]>>1); | |
1266 | |
1267 block[0 + 4*i]= z0 + z3; | |
1268 block[1 + 4*i]= z1 + z2; | |
1269 block[2 + 4*i]= z1 - z2; | |
1270 block[3 + 4*i]= z0 - z3; | |
1271 } | |
1272 | |
1261 for(i=0; i<4; i++){ | 1273 for(i=0; i<4; i++){ |
1262 const int z0= block[i + 4*0] + block[i + 4*2]; | 1274 const int z0= block[i + 4*0] + block[i + 4*2]; |
1263 const int z1= block[i + 4*0] - block[i + 4*2]; | 1275 const int z1= block[i + 4*0] - block[i + 4*2]; |
1264 const int z2= (block[i + 4*1]>>1) - block[i + 4*3]; | 1276 const int z2= (block[i + 4*1]>>1) - block[i + 4*3]; |
1265 const int z3= block[i + 4*1] + (block[i + 4*3]>>1); | 1277 const int z3= block[i + 4*1] + (block[i + 4*3]>>1); |
1266 | 1278 |
1267 block[i + 4*0]= z0 + z3; | |
1268 block[i + 4*1]= z1 + z2; | |
1269 block[i + 4*2]= z1 - z2; | |
1270 block[i + 4*3]= z0 - z3; | |
1271 } | |
1272 | |
1273 for(i=0; i<4; i++){ | |
1274 const int z0= block[0 + 4*i] + block[2 + 4*i]; | |
1275 const int z1= block[0 + 4*i] - block[2 + 4*i]; | |
1276 const int z2= (block[1 + 4*i]>>1) - block[3 + 4*i]; | |
1277 const int z3= block[1 + 4*i] + (block[3 + 4*i]>>1); | |
1278 | |
1279 dst[0 + i*stride]= cm[ dst[0 + i*stride] + ((z0 + z3) >> 6) ]; | |
1280 dst[1 + i*stride]= cm[ dst[1 + i*stride] + ((z1 + z2) >> 6) ]; | |
1281 dst[2 + i*stride]= cm[ dst[2 + i*stride] + ((z1 - z2) >> 6) ]; | |
1282 dst[3 + i*stride]= cm[ dst[3 + i*stride] + ((z0 - z3) >> 6) ]; | |
1283 } | |
1284 #else | |
1285 for(i=0; i<4; i++){ | |
1286 const int z0= block[0 + 4*i] + block[2 + 4*i]; | |
1287 const int z1= block[0 + 4*i] - block[2 + 4*i]; | |
1288 const int z2= (block[1 + 4*i]>>1) - block[3 + 4*i]; | |
1289 const int z3= block[1 + 4*i] + (block[3 + 4*i]>>1); | |
1290 | |
1291 block[0 + 4*i]= z0 + z3; | |
1292 block[1 + 4*i]= z1 + z2; | |
1293 block[2 + 4*i]= z1 - z2; | |
1294 block[3 + 4*i]= z0 - z3; | |
1295 } | |
1296 | |
1297 for(i=0; i<4; i++){ | |
1298 const int z0= block[i + 4*0] + block[i + 4*2]; | |
1299 const int z1= block[i + 4*0] - block[i + 4*2]; | |
1300 const int z2= (block[i + 4*1]>>1) - block[i + 4*3]; | |
1301 const int z3= block[i + 4*1] + (block[i + 4*3]>>1); | |
1302 | |
1303 dst[i + 0*stride]= cm[ dst[i + 0*stride] + ((z0 + z3) >> 6) ]; | 1279 dst[i + 0*stride]= cm[ dst[i + 0*stride] + ((z0 + z3) >> 6) ]; |
1304 dst[i + 1*stride]= cm[ dst[i + 1*stride] + ((z1 + z2) >> 6) ]; | 1280 dst[i + 1*stride]= cm[ dst[i + 1*stride] + ((z1 + z2) >> 6) ]; |
1305 dst[i + 2*stride]= cm[ dst[i + 2*stride] + ((z1 - z2) >> 6) ]; | 1281 dst[i + 2*stride]= cm[ dst[i + 2*stride] + ((z1 - z2) >> 6) ]; |
1306 dst[i + 3*stride]= cm[ dst[i + 3*stride] + ((z0 - z3) >> 6) ]; | 1282 dst[i + 3*stride]= cm[ dst[i + 3*stride] + ((z0 - z3) >> 6) ]; |
1307 } | 1283 } |
1308 #endif | |
1309 } | 1284 } |
1310 | 1285 |
1311 #if 0 | 1286 #if 0 |
1312 static void h264_diff_dct_c(DCTELEM *block, uint8_t *src1, uint8_t *src2, int stride){ | 1287 static void h264_diff_dct_c(DCTELEM *block, uint8_t *src1, uint8_t *src2, int stride){ |
1313 int i; | 1288 int i; |
2160 CHECKED_ALLOCZ(h->top_border , s->mb_width * (16+8+8) * sizeof(uint8_t)) | 2135 CHECKED_ALLOCZ(h->top_border , s->mb_width * (16+8+8) * sizeof(uint8_t)) |
2161 | 2136 |
2162 if( h->pps.cabac ) { | 2137 if( h->pps.cabac ) { |
2163 CHECKED_ALLOCZ(h->chroma_pred_mode_table, big_mb_num * sizeof(uint8_t)) | 2138 CHECKED_ALLOCZ(h->chroma_pred_mode_table, big_mb_num * sizeof(uint8_t)) |
2164 CHECKED_ALLOCZ(h->cbp_table, big_mb_num * sizeof(uint16_t)) | 2139 CHECKED_ALLOCZ(h->cbp_table, big_mb_num * sizeof(uint16_t)) |
2165 } else { | |
2166 h->chroma_pred_mode_table = NULL; | |
2167 h->cbp_table = NULL; | |
2168 } | 2140 } |
2169 | 2141 |
2170 memset(h->slice_table_base, -1, big_mb_num * sizeof(uint8_t)); | 2142 memset(h->slice_table_base, -1, big_mb_num * sizeof(uint8_t)); |
2171 h->slice_table= h->slice_table_base + s->mb_stride + 1; | 2143 h->slice_table= h->slice_table_base + s->mb_stride + 1; |
2172 | 2144 |