comparison h263.c @ 692:852b5a416161 libavcodec

fixing ac prediction encoding with adaptive quantization
author michaelni
date Tue, 24 Sep 2002 09:15:46 +0000
parents a1c69cb685b3
children 3525da287ee2
comparison
equal deleted inserted replaced
691:199b324b2693 692:852b5a416161
279 INT16 *ac_val, *ac_val1; 279 INT16 *ac_val, *ac_val1;
280 280
281 ac_val = s->ac_val[0][0] + s->block_index[n] * 16; 281 ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
282 ac_val1= ac_val; 282 ac_val1= ac_val;
283 if(dir[n]){ 283 if(dir[n]){
284 const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width;
285 /* top prediction */
284 ac_val-= s->block_wrap[n]*16; 286 ac_val-= s->block_wrap[n]*16;
285 for(i=1; i<8; i++){ 287 if(s->mb_y==0 || s->qscale == s->qscale_table[xy] || n==2 || n==3){
286 const int level= block[n][block_permute_op(i )]; 288 /* same qscale */
287 score0+= ABS(level); 289 for(i=1; i<8; i++){
288 score1+= ABS(level - ac_val[i+8]); 290 const int level= block[n][block_permute_op(i )];
289 ac_val1[i ]= block[n][block_permute_op(i<<3)]; 291 score0+= ABS(level);
290 ac_val1[i+8]= level; 292 score1+= ABS(level - ac_val[i+8]);
293 ac_val1[i ]= block[n][block_permute_op(i<<3)];
294 ac_val1[i+8]= level;
295 }
296 }else{
297 /* different qscale, we must rescale */
298 for(i=1; i<8; i++){
299 const int level= block[n][block_permute_op(i )];
300 score0+= ABS(level);
301 score1+= ABS(level - ROUNDED_DIV(ac_val[i + 8]*s->qscale_table[xy], s->qscale));
302 ac_val1[i ]= block[n][block_permute_op(i<<3)];
303 ac_val1[i+8]= level;
304 }
291 } 305 }
292 }else{ 306 }else{
307 const int xy= s->mb_x-1 + s->mb_y*s->mb_width;
308 /* left prediction */
293 ac_val-= 16; 309 ac_val-= 16;
294 for(i=1; i<8; i++){ 310 if(s->mb_x==0 || s->qscale == s->qscale_table[xy] || n==1 || n==3){
295 const int level= block[n][block_permute_op(i<<3)]; 311 /* same qscale */
296 score0+= ABS(level); 312 for(i=1; i<8; i++){
297 score1+= ABS(level - ac_val[i]); 313 const int level= block[n][block_permute_op(i<<3)];
298 ac_val1[i ]= level; 314 score0+= ABS(level);
299 ac_val1[i+8]= block[n][block_permute_op(i )]; 315 score1+= ABS(level - ac_val[i]);
316 ac_val1[i ]= level;
317 ac_val1[i+8]= block[n][block_permute_op(i )];
318 }
319 }else{
320 /* different qscale, we must rescale */
321 for(i=1; i<8; i++){
322 const int level= block[n][block_permute_op(i<<3)];
323 score0+= ABS(level);
324 score1+= ABS(level - ROUNDED_DIV(ac_val[i]*s->qscale_table[xy], s->qscale));
325 ac_val1[i ]= level;
326 ac_val1[i+8]= block[n][block_permute_op(i )];
327 }
300 } 328 }
301 } 329 }
302 } 330 }
303 331
304 return score0 > score1 ? 1 : 0; 332 return score0 > score1 ? 1 : 0;
1676 1704
1677 /* find prediction */ 1705 /* find prediction */
1678 ac_val = s->ac_val[0][0] + s->block_index[n] * 16; 1706 ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
1679 1707
1680 if (dir == 0) { 1708 if (dir == 0) {
1709 const int xy= s->mb_x-1 + s->mb_y*s->mb_width;
1681 /* left prediction */ 1710 /* left prediction */
1682 ac_val -= 16; 1711 ac_val -= 16;
1683 for(i=1;i<8;i++) { 1712 if(s->mb_x==0 || s->qscale == s->qscale_table[xy] || n==1 || n==3){
1684 block[block_permute_op(i*8)] -= ac_val[i]; 1713 /* same qscale */
1714 for(i=1;i<8;i++) {
1715 block[block_permute_op(i*8)] -= ac_val[i];
1716 }
1717 }else{
1718 /* different qscale, we must rescale */
1719 for(i=1;i<8;i++) {
1720 block[block_permute_op(i*8)] -= ROUNDED_DIV(ac_val[i]*s->qscale_table[xy], s->qscale);
1721 }
1685 } 1722 }
1686 } else { 1723 } else {
1724 const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width;
1687 /* top prediction */ 1725 /* top prediction */
1688 ac_val -= 16 * s->block_wrap[n]; 1726 ac_val -= 16 * s->block_wrap[n];
1689 for(i=1;i<8;i++) { 1727 if(s->mb_y==0 || s->qscale == s->qscale_table[xy] || n==2 || n==3){
1690 block[block_permute_op(i)] -= ac_val[i + 8]; 1728 /* same qscale */
1729 for(i=1;i<8;i++) {
1730 block[block_permute_op(i)] -= ac_val[i + 8];
1731 }
1732 }else{
1733 /* different qscale, we must rescale */
1734 for(i=1;i<8;i++) {
1735 block[block_permute_op(i)] -= ROUNDED_DIV(ac_val[i + 8]*s->qscale_table[xy], s->qscale);
1736 }
1691 } 1737 }
1692 } 1738 }
1693 } 1739 }
1694 1740
1695 static inline void mpeg4_encode_dc(PutBitContext * s, int level, int n) 1741 static inline void mpeg4_encode_dc(PutBitContext * s, int level, int n)