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