comparison snow.c @ 4001:34fdffe98bd0 libavcodec

Rename ABS macro to FFABS.
author diego
date Wed, 11 Oct 2006 23:17:58 +0000
parents c8c591fe26f8
children 5bce97c30a69
comparison
equal deleted inserted replaced
4000:eeab02251056 4001:34fdffe98bd0
588 588
589 static inline void put_symbol(RangeCoder *c, uint8_t *state, int v, int is_signed){ 589 static inline void put_symbol(RangeCoder *c, uint8_t *state, int v, int is_signed){
590 int i; 590 int i;
591 591
592 if(v){ 592 if(v){
593 const int a= ABS(v); 593 const int a= FFABS(v);
594 const int e= av_log2(a); 594 const int e= av_log2(a);
595 #if 1 595 #if 1
596 const int el= FFMIN(e, 10); 596 const int el= FFMIN(e, 10);
597 put_rac(c, state+0, 0); 597 put_rac(c, state+0, 0);
598 598
1664 int py= y>>1; 1664 int py= y>>1;
1665 if(px<b->parent->width && py<b->parent->height) 1665 if(px<b->parent->width && py<b->parent->height)
1666 p= parent[px + py*2*stride]; 1666 p= parent[px + py*2*stride];
1667 } 1667 }
1668 if(/*ll|*/l|lt|t|rt|p){ 1668 if(/*ll|*/l|lt|t|rt|p){
1669 int context= av_log2(/*ABS(ll) + */3*ABS(l) + ABS(lt) + 2*ABS(t) + ABS(rt) + ABS(p)); 1669 int context= av_log2(/*FFABS(ll) + */3*FFABS(l) + FFABS(lt) + 2*FFABS(t) + FFABS(rt) + FFABS(p));
1670 1670
1671 put_rac(&s->c, &b->state[0][context], !!v); 1671 put_rac(&s->c, &b->state[0][context], !!v);
1672 }else{ 1672 }else{
1673 if(!run){ 1673 if(!run){
1674 run= runs[run_index++]; 1674 run= runs[run_index++];
1680 run--; 1680 run--;
1681 assert(!v); 1681 assert(!v);
1682 } 1682 }
1683 } 1683 }
1684 if(v){ 1684 if(v){
1685 int context= av_log2(/*ABS(ll) + */3*ABS(l) + ABS(lt) + 2*ABS(t) + ABS(rt) + ABS(p)); 1685 int context= av_log2(/*FFABS(ll) + */3*FFABS(l) + FFABS(lt) + 2*FFABS(t) + FFABS(rt) + FFABS(p));
1686 int l2= 2*ABS(l) + (l<0); 1686 int l2= 2*FFABS(l) + (l<0);
1687 int t2= 2*ABS(t) + (t<0); 1687 int t2= 2*FFABS(t) + (t<0);
1688 1688
1689 put_symbol2(&s->c, b->state[context + 2], ABS(v)-1, context-4); 1689 put_symbol2(&s->c, b->state[context + 2], FFABS(v)-1, context-4);
1690 put_rac(&s->c, &b->state[0][16 + 1 + 3 + quant3bA[l2&0xFF] + 3*quant3bA[t2&0xFF]], v<0); 1690 put_rac(&s->c, &b->state[0][16 + 1 + 3 + quant3bA[l2&0xFF] + 3*quant3bA[t2&0xFF]], v<0);
1691 } 1691 }
1692 } 1692 }
1693 } 1693 }
1694 } 1694 }
1747 if(x>>1 == parent_xc->x){ 1747 if(x>>1 == parent_xc->x){
1748 p= parent_xc->coeff; 1748 p= parent_xc->coeff;
1749 } 1749 }
1750 } 1750 }
1751 if(/*ll|*/l|lt|t|rt|p){ 1751 if(/*ll|*/l|lt|t|rt|p){
1752 int context= av_log2(/*ABS(ll) + */3*(l>>1) + (lt>>1) + (t&~1) + (rt>>1) + (p>>1)); 1752 int context= av_log2(/*FFABS(ll) + */3*(l>>1) + (lt>>1) + (t&~1) + (rt>>1) + (p>>1));
1753 1753
1754 v=get_rac(&s->c, &b->state[0][context]); 1754 v=get_rac(&s->c, &b->state[0][context]);
1755 if(v){ 1755 if(v){
1756 v= 2*(get_symbol2(&s->c, b->state[context + 2], context-4) + 1); 1756 v= 2*(get_symbol2(&s->c, b->state[context + 2], context-4) + 1);
1757 v+=get_rac(&s->c, &b->state[0][16 + 1 + 3 + quant3bA[l&0xFF] + 3*quant3bA[t&0xFF]]); 1757 v+=get_rac(&s->c, &b->state[0][16 + 1 + 3 + quant3bA[l&0xFF] + 3*quant3bA[t&0xFF]]);
2014 int16_t last_mv[3][2]; 2014 int16_t last_mv[3][2];
2015 int qpel= !!(s->avctx->flags & CODEC_FLAG_QPEL); //unused 2015 int qpel= !!(s->avctx->flags & CODEC_FLAG_QPEL); //unused
2016 const int shift= 1+qpel; 2016 const int shift= 1+qpel;
2017 MotionEstContext *c= &s->m.me; 2017 MotionEstContext *c= &s->m.me;
2018 int ref_context= av_log2(2*left->ref) + av_log2(2*top->ref); 2018 int ref_context= av_log2(2*left->ref) + av_log2(2*top->ref);
2019 int mx_context= av_log2(2*ABS(left->mx - top->mx)); 2019 int mx_context= av_log2(2*FFABS(left->mx - top->mx));
2020 int my_context= av_log2(2*ABS(left->my - top->my)); 2020 int my_context= av_log2(2*FFABS(left->my - top->my));
2021 int s_context= 2*left->level + 2*top->level + tl->level + tr->level; 2021 int s_context= 2*left->level + 2*top->level + tl->level + tr->level;
2022 int ref, best_ref, ref_score, ref_mx, ref_my; 2022 int ref, best_ref, ref_score, ref_mx, ref_my;
2023 2023
2024 assert(sizeof(s->block_state) >= 256); 2024 assert(sizeof(s->block_state) >= 256);
2025 if(s->keyframe){ 2025 if(s->keyframe){
2227 int pl = left->color[0]; 2227 int pl = left->color[0];
2228 int pcb= left->color[1]; 2228 int pcb= left->color[1];
2229 int pcr= left->color[2]; 2229 int pcr= left->color[2];
2230 int pmx, pmy; 2230 int pmx, pmy;
2231 int ref_context= av_log2(2*left->ref) + av_log2(2*top->ref); 2231 int ref_context= av_log2(2*left->ref) + av_log2(2*top->ref);
2232 int mx_context= av_log2(2*ABS(left->mx - top->mx)) + 16*!!b->ref; 2232 int mx_context= av_log2(2*FFABS(left->mx - top->mx)) + 16*!!b->ref;
2233 int my_context= av_log2(2*ABS(left->my - top->my)) + 16*!!b->ref; 2233 int my_context= av_log2(2*FFABS(left->my - top->my)) + 16*!!b->ref;
2234 int s_context= 2*left->level + 2*top->level + tl->level + tr->level; 2234 int s_context= 2*left->level + 2*top->level + tl->level + tr->level;
2235 2235
2236 if(s->keyframe){ 2236 if(s->keyframe){
2237 set_blocks(s, level, x, y, pl, pcb, pcr, 0, 0, 0, BLOCK_INTRA); 2237 set_blocks(s, level, x, y, pl, pcb, pcr, 0, 0, 0, BLOCK_INTRA);
2238 return; 2238 return;
2291 int cr= left->color[2]; 2291 int cr= left->color[2];
2292 int mx= mid_pred(left->mx, top->mx, tr->mx); 2292 int mx= mid_pred(left->mx, top->mx, tr->mx);
2293 int my= mid_pred(left->my, top->my, tr->my); 2293 int my= mid_pred(left->my, top->my, tr->my);
2294 int ref = 0; 2294 int ref = 0;
2295 int ref_context= av_log2(2*left->ref) + av_log2(2*top->ref); 2295 int ref_context= av_log2(2*left->ref) + av_log2(2*top->ref);
2296 int mx_context= av_log2(2*ABS(left->mx - top->mx)) + 0*av_log2(2*ABS(tr->mx - top->mx)); 2296 int mx_context= av_log2(2*FFABS(left->mx - top->mx)) + 0*av_log2(2*FFABS(tr->mx - top->mx));
2297 int my_context= av_log2(2*ABS(left->my - top->my)) + 0*av_log2(2*ABS(tr->my - top->my)); 2297 int my_context= av_log2(2*FFABS(left->my - top->my)) + 0*av_log2(2*FFABS(tr->my - top->my));
2298 2298
2299 type= get_rac(&s->c, &s->block_state[1 + left->type + top->type]) ? BLOCK_INTRA : 0; 2299 type= get_rac(&s->c, &s->block_state[1 + left->type + top->type]) ? BLOCK_INTRA : 0;
2300 2300
2301 if(type){ 2301 if(type){
2302 pred_mv(s, &mx, &my, 0, left, top, tr); 2302 pred_mv(s, &mx, &my, 0, left, top, tr);
2906 BlockNode *left = x ? &s->block[index-1] : &null_block; 2906 BlockNode *left = x ? &s->block[index-1] : &null_block;
2907 BlockNode *top = y ? &s->block[index-b_stride] : &null_block; 2907 BlockNode *top = y ? &s->block[index-b_stride] : &null_block;
2908 BlockNode *tl = y && x ? &s->block[index-b_stride-1] : left; 2908 BlockNode *tl = y && x ? &s->block[index-b_stride-1] : left;
2909 BlockNode *tr = y && x+w<b_stride ? &s->block[index-b_stride+w] : tl; 2909 BlockNode *tr = y && x+w<b_stride ? &s->block[index-b_stride+w] : tl;
2910 int dmx, dmy; 2910 int dmx, dmy;
2911 // int mx_context= av_log2(2*ABS(left->mx - top->mx)); 2911 // int mx_context= av_log2(2*FFABS(left->mx - top->mx));
2912 // int my_context= av_log2(2*ABS(left->my - top->my)); 2912 // int my_context= av_log2(2*FFABS(left->my - top->my));
2913 2913
2914 if(x<0 || x>=b_stride || y>=b_height) 2914 if(x<0 || x>=b_stride || y>=b_height)
2915 return 0; 2915 return 0;
2916 /* 2916 /*
2917 1 0 0 2917 1 0 0
2921 00001XXXX 15-30 8-15 2921 00001XXXX 15-30 8-15
2922 */ 2922 */
2923 //FIXME try accurate rate 2923 //FIXME try accurate rate
2924 //FIXME intra and inter predictors if surrounding blocks arent the same type 2924 //FIXME intra and inter predictors if surrounding blocks arent the same type
2925 if(b->type & BLOCK_INTRA){ 2925 if(b->type & BLOCK_INTRA){
2926 return 3+2*( av_log2(2*ABS(left->color[0] - b->color[0])) 2926 return 3+2*( av_log2(2*FFABS(left->color[0] - b->color[0]))
2927 + av_log2(2*ABS(left->color[1] - b->color[1])) 2927 + av_log2(2*FFABS(left->color[1] - b->color[1]))
2928 + av_log2(2*ABS(left->color[2] - b->color[2]))); 2928 + av_log2(2*FFABS(left->color[2] - b->color[2])));
2929 }else{ 2929 }else{
2930 pred_mv(s, &dmx, &dmy, b->ref, left, top, tr); 2930 pred_mv(s, &dmx, &dmy, b->ref, left, top, tr);
2931 dmx-= b->mx; 2931 dmx-= b->mx;
2932 dmy-= b->my; 2932 dmy-= b->my;
2933 return 2*(1 + av_log2(2*ABS(dmx)) //FIXME kill the 2* can be merged in lambda 2933 return 2*(1 + av_log2(2*FFABS(dmx)) //FIXME kill the 2* can be merged in lambda
2934 + av_log2(2*ABS(dmy)) 2934 + av_log2(2*FFABS(dmy))
2935 + av_log2(2*b->ref)); 2935 + av_log2(2*b->ref));
2936 } 2936 }
2937 } 2937 }
2938 2938
2939 static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, const uint8_t *obmc_edged){ 2939 static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, const uint8_t *obmc_edged){
4561 4561
4562 ff_spatial_dwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count); 4562 ff_spatial_dwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count);
4563 ff_spatial_idwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count); 4563 ff_spatial_idwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count);
4564 4564
4565 for(i=0; i<width*height; i++) 4565 for(i=0; i<width*height; i++)
4566 if(ABS(buffer[0][i] - buffer[1][i])>20) printf("fsck: %d %d %d\n",i, buffer[0][i], buffer[1][i]); 4566 if(FFABS(buffer[0][i] - buffer[1][i])>20) printf("fsck: %d %d %d\n",i, buffer[0][i], buffer[1][i]);
4567 4567
4568 #if 0 4568 #if 0
4569 printf("testing AC coder\n"); 4569 printf("testing AC coder\n");
4570 memset(s.header_state, 0, sizeof(s.header_state)); 4570 memset(s.header_state, 0, sizeof(s.header_state));
4571 ff_init_range_encoder(&s.c, buffer[0], 256*256); 4571 ff_init_range_encoder(&s.c, buffer[0], 256*256);
4572 ff_init_cabac_states(&s.c, ff_h264_lps_range, ff_h264_mps_state, ff_h264_lps_state, 64); 4572 ff_init_cabac_states(&s.c, ff_h264_lps_range, ff_h264_mps_state, ff_h264_lps_state, 64);
4573 4573
4574 for(i=-256; i<256; i++){ 4574 for(i=-256; i<256; i++){
4575 START_TIMER 4575 START_TIMER
4576 put_symbol(&s.c, s.header_state, i*i*i/3*ABS(i), 1); 4576 put_symbol(&s.c, s.header_state, i*i*i/3*FFABS(i), 1);
4577 STOP_TIMER("put_symbol") 4577 STOP_TIMER("put_symbol")
4578 } 4578 }
4579 ff_rac_terminate(&s.c); 4579 ff_rac_terminate(&s.c);
4580 4580
4581 memset(s.header_state, 0, sizeof(s.header_state)); 4581 memset(s.header_state, 0, sizeof(s.header_state));
4585 for(i=-256; i<256; i++){ 4585 for(i=-256; i<256; i++){
4586 int j; 4586 int j;
4587 START_TIMER 4587 START_TIMER
4588 j= get_symbol(&s.c, s.header_state, 1); 4588 j= get_symbol(&s.c, s.header_state, 1);
4589 STOP_TIMER("get_symbol") 4589 STOP_TIMER("get_symbol")
4590 if(j!=i*i*i/3*ABS(i)) printf("fsck: %d != %d\n", i, j); 4590 if(j!=i*i*i/3*FFABS(i)) printf("fsck: %d != %d\n", i, j);
4591 } 4591 }
4592 #endif 4592 #endif
4593 { 4593 {
4594 int level, orientation, x, y; 4594 int level, orientation, x, y;
4595 int64_t errors[8][4]; 4595 int64_t errors[8][4];
4614 ff_spatial_idwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count); 4614 ff_spatial_idwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count);
4615 for(y=0; y<height; y++){ 4615 for(y=0; y<height; y++){
4616 for(x=0; x<width; x++){ 4616 for(x=0; x<width; x++){
4617 int64_t d= buffer[0][x + y*width]; 4617 int64_t d= buffer[0][x + y*width];
4618 error += d*d; 4618 error += d*d;
4619 if(ABS(width/2-x)<9 && ABS(height/2-y)<9 && level==2) printf("%8lld ", d); 4619 if(FFABS(width/2-x)<9 && FFABS(height/2-y)<9 && level==2) printf("%8lld ", d);
4620 } 4620 }
4621 if(ABS(height/2-y)<9 && level==2) printf("\n"); 4621 if(FFABS(height/2-y)<9 && level==2) printf("\n");
4622 } 4622 }
4623 error= (int)(sqrt(error)+0.5); 4623 error= (int)(sqrt(error)+0.5);
4624 errors[level][orientation]= error; 4624 errors[level][orientation]= error;
4625 if(g) g=ff_gcd(g, error); 4625 if(g) g=ff_gcd(g, error);
4626 else g= error; 4626 else g= error;
4667 #endif 4667 #endif
4668 for(y=0; y<height; y++){ 4668 for(y=0; y<height; y++){
4669 for(x=0; x<width; x++){ 4669 for(x=0; x<width; x++){
4670 int64_t d= buffer[0][x + y*width]; 4670 int64_t d= buffer[0][x + y*width];
4671 error += d*d; 4671 error += d*d;
4672 if(ABS(width/2-x)<9 && ABS(height/2-y)<9) printf("%8lld ", d); 4672 if(FFABS(width/2-x)<9 && FFABS(height/2-y)<9) printf("%8lld ", d);
4673 } 4673 }
4674 if(ABS(height/2-y)<9) printf("\n"); 4674 if(FFABS(height/2-y)<9) printf("\n");
4675 } 4675 }
4676 } 4676 }
4677 4677
4678 } 4678 }
4679 return 0; 4679 return 0;