Mercurial > libavcodec.hg
diff snow.c @ 2160:11e1425b3a66 libavcodec
cleanup
author | michael |
---|---|
date | Mon, 02 Aug 2004 18:01:03 +0000 |
parents | 7f42295c1517 |
children | ec7789e19e43 |
line wrap: on
line diff
--- a/snow.c Mon Aug 02 17:53:57 2004 +0000 +++ b/snow.c Mon Aug 02 18:01:03 2004 +0000 @@ -1849,181 +1849,6 @@ } } -static void encode_subband_dzr(SnowContext *s, SubBand *b, DWTELEM *src, DWTELEM *parent, int stride, int orientation){ - const int level= b->level; - const int w= b->width; - const int h= b->height; - int x, y; - - if(1){ - int run[16]={0}; - int runs[16][w*h]; //FIXME do something about the size - int run_index[16]={0}; - int positions[2][w]; - int distances[2][w]; - int dist_count=0; - int i; - - for(y=0; y<h; y++){ - int * pos = positions[ y&1]; - int *last_pos = positions[(y&1)^1]; - int * dist= distances[ y&1]; - int *last_dist= distances[(y&1)^1]; - int dist_index=0; - int last_dist_index=0; - - for(x=0; x<w; x++){ - int p=0, l=0, lt=0, t=0, rt=0; - int v= src[x + y*stride]; - - if(y){ - t= src[x + (y-1)*stride]; - if(x){ - lt= src[x - 1 + (y-1)*stride]; - } - if(x + 1 < w){ - rt= src[x + 1 + (y-1)*stride]; - } - } - if(x){ - l= src[x - 1 + y*stride]; - } - if(parent){ - int px= x>>1; - int py= y>>1; - if(px<b->parent->width && py<b->parent->height) - p= parent[px + py*2*stride]; - } - if(last_dist_index < dist_count && last_pos[last_dist_index] == x){ - if(dist_index==0 || x - pos[dist_index-1] > dist[dist_index-1] - last_dist[last_dist_index]){ - pos[dist_index]= x; - dist[dist_index++]= last_dist[last_dist_index]; - } - last_dist_index++; - } - - if(!(l|lt|t|rt|p)){ - int cur_dist=w>>1; - int run_class; - - if(last_dist_index < dist_count) - cur_dist= last_pos[last_dist_index] - x + y - last_dist[last_dist_index]; - if(dist_index) - cur_dist= FFMIN(cur_dist, x - pos[dist_index-1] + y - dist[dist_index-1]); - assert(cur_dist>=2); - run_class= av_log2(cur_dist+62); - - if(v){ - runs[run_class][run_index[run_class]++]= run[run_class]; - run[run_class]=0; - }else{ - run[run_class]++; - } - } - if(v){ - while(dist_index && x - pos[dist_index-1] <= y - dist[dist_index-1]) - dist_index--; - pos[dist_index]= x; - dist[dist_index++]= y; - } - } - dist_count= dist_index; - } - for(i=0; i<12; i++){ - runs[i][run_index[i]++]= run[i]; - run_index[i]=0; - run[i]=0; - } - - dist_count=0; - - for(y=0; y<h; y++){ - int * pos = positions[ y&1]; - int *last_pos = positions[(y&1)^1]; - int * dist= distances[ y&1]; - int *last_dist= distances[(y&1)^1]; - int dist_index=0; - int last_dist_index=0; - - for(x=0; x<w; x++){ - int p=0, l=0, lt=0, t=0, rt=0; - int v= src[x + y*stride]; - - if(y){ - t= src[x + (y-1)*stride]; - if(x){ - lt= src[x - 1 + (y-1)*stride]; - } - if(x + 1 < w){ - rt= src[x + 1 + (y-1)*stride]; - } - } - if(x){ - l= src[x - 1 + y*stride]; - } - if(parent){ - int px= x>>1; - int py= y>>1; - if(px<b->parent->width && py<b->parent->height) - p= parent[px + py*2*stride]; - } - if(last_dist_index < dist_count && last_pos[last_dist_index] == x){ - if(dist_index==0 || x - pos[dist_index-1] > dist[dist_index-1] - last_dist[last_dist_index]){ - pos[dist_index]= x; - dist[dist_index++]= last_dist[last_dist_index]; - } - last_dist_index++; - } - if(l|lt|t|rt|p){ - int context= av_log2(/*ABS(ll) + */3*ABS(l) + ABS(lt) + 2*ABS(t) + ABS(rt) + ABS(p)); - - put_cabac(&s->c, &b->state[0][context], !!v); - }else{ - int cur_dist=w>>1; - int run_class; - - if(last_dist_index < dist_count) - cur_dist= last_pos[last_dist_index] - x + y - last_dist[last_dist_index]; - if(dist_index) - cur_dist= FFMIN(cur_dist, x - pos[dist_index-1] + y - dist[dist_index-1]); - assert(cur_dist>=2); - assert(!dist_index || (pos[dist_index-1] >= 0 && pos[dist_index-1] <w)); - assert(last_dist_index >= dist_count || (last_pos[last_dist_index] >= 0 && last_pos[last_dist_index] <w)); - assert(!dist_index || dist[dist_index-1] <= y); - assert(last_dist_index >= dist_count || last_dist[last_dist_index] < y); - assert(cur_dist <= y + FFMAX(x, w-x-1)); - run_class= av_log2(cur_dist+62); - - if(!run_index[run_class]){ - run[run_class]= runs[run_class][run_index[run_class]++]; - put_symbol(&s->c, b->state[run_class+1], run[run_class], 0); - } - if(!run[run_class]){ - run[run_class]= runs[run_class][run_index[run_class]++]; - put_symbol(&s->c, b->state[run_class+1], run[run_class], 0); - assert(v); - }else{ - run[run_class]--; - assert(!v); - } - } - if(v){ - int context= av_log2(/*ABS(ll) + */3*ABS(l) + ABS(lt) + 2*ABS(t) + ABS(rt) + ABS(p)); - - put_symbol(&s->c, b->state[context + 16], ABS(v)-1, 0); - put_cabac(&s->c, &b->state[0][16 + 1 + 3 + quant3b[l&0xFF] + 3*quant3b[t&0xFF]], v<0); - - while(dist_index && x - pos[dist_index-1] <= y - dist[dist_index-1]) - dist_index--; - pos[dist_index]= x; - dist[dist_index++]= y; - } - } - dist_count= dist_index; - } - } -} - static void encode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTELEM *parent, int stride, int orientation){ // encode_subband_qtree(s, b, src, parent, stride, orientation); // encode_subband_z0run(s, b, src, parent, stride, orientation); @@ -2124,88 +1949,6 @@ } return; #endif -#if 0 - int tree[10][w*h]; //FIXME space waste ... - int treedim[10][2]; - int lev; - const int max_level= av_log2(2*FFMAX(w,h)-1); - int w2=w, h2=h; - memset(tree, 0, sizeof(tree)); - -// assert(w%2==0 && h%2==0); - - for(lev=max_level; lev>=0; lev--){ - treedim[lev][0]= w2; - treedim[lev][1]= h2; - w2= (w2+1)>>1; - h2= (h2+1)>>1; - } - - for(lev=0; lev<=max_level; lev++){ - w2= treedim[lev][0]; - h2= treedim[lev][1]; - for(y=0; y<h2; y++){ - for(x=0; x<w2; x++){ - int l= 0, t=0; - int context; - if(lev && !tree[lev-1][x/2 + y/2*w]) - continue; - - if(x) l= tree[lev][x - 1 + y*w]; - if(y) t= tree[lev][x + (y-1)*w]; - - context= lev + 8*(!!l) + 16*(!!t); - tree[lev][x + y*w]= get_cabac(&s->c, &b->state[98][context]); - } - } - } - if(1){ - for(y=0; y<b->height; y++) - memset(&src[y*stride], 0, b->width*sizeof(DWTELEM)); - - for(y=0; y<h; y++){ - for(x=0; x<w; x++){ - int v, p=0; - int /*ll=0, */l=0, lt=0, t=0, rt=0; - - if(y){ - t= src[x + (y-1)*stride]; - if(x){ - lt= src[x - 1 + (y-1)*stride]; - } - if(x + 1 < w){ - rt= src[x + 1 + (y-1)*stride]; - } - } - if(x){ - l= src[x - 1 + y*stride]; - /*if(x > 1){ - if(orientation==1) ll= src[y + (x-2)*stride]; - else ll= src[x - 2 + y*stride]; - }*/ - } - if(parent){ - int px= x>>1; - int py= y>>1; - if(px<b->parent->width && py<b->parent->height) - p= parent[px + py*2*stride]; - } - if(tree[max_level][x + y*w]){ - int context= av_log2(/*ABS(ll) + */3*ABS(l) + ABS(lt) + 2*ABS(t) + ABS(rt) + ABS(p)); - v= get_symbol(&s->c, b->state[context + 2], 0) + 1; - if(get_cabac(&s->c, &b->state[0][16 + 1 + 3 + quant3b[l&0xFF] + 3*quant3b[t&0xFF]])) - v= -v; - src[x + y*stride]= v; - } - } - } - if(level+1 == s->spatial_decomposition_count){ - STOP_TIMER("decode_subband") - } - - return; - } -#endif if(1){ int run; @@ -2770,7 +2513,7 @@ } s->plane[plane_index].width = w; s->plane[plane_index].height= h; -av_log(NULL, AV_LOG_DEBUG, "%d %d\n", w, h); +//av_log(NULL, AV_LOG_DEBUG, "%d %d\n", w, h); for(level=s->spatial_decomposition_count-1; level>=0; level--){ for(orientation=level ? 1 : 0; orientation<4; orientation++){ SubBand *b= &s->plane[plane_index].band[level][orientation]; @@ -3127,31 +2870,6 @@ int bits= put_bits_count(&s->c.pb); //FIXME optimize -#if QPRED - memset(s->pred_buffer, 0, sizeof(DWTELEM)*w*h); - predict_plane(s, s->pred_buffer, plane_index, 1); - spatial_dwt(s, s->pred_buffer, w, h, w); - for(level=0; level<s->spatial_decomposition_count; level++){ - for(orientation=level ? 1 : 0; orientation<4; orientation++){ - SubBand *b= &p->band[level][orientation]; - int delta= ((int)s->pred_buffer - (int)s->spatial_dwt_buffer)/sizeof(DWTELEM); - - quantize (s, b, b->buf + delta, b->stride, s->qbias); - dequantize(s, b, b->buf + delta, b->stride); - } - } - for(y=0; y<h; y++){ - for(x=0; x<w; x++){ - s->spatial_dwt_buffer[y*w + x]= pict->data[plane_index][y*pict->linesize[plane_index] + x]<<8; - } - } - spatial_dwt(s, s->spatial_dwt_buffer, w, h, w); - for(y=0; y<h; y++){ - for(x=0; x<w; x++){ - s->spatial_dwt_buffer[y*w + x]-= s->pred_buffer[y*w + x]; - } - } -#else if(pict->data[plane_index]) //FIXME gray hack for(y=0; y<h; y++){ for(x=0; x<w; x++){ @@ -3160,7 +2878,6 @@ } predict_plane(s, s->spatial_dwt_buffer, plane_index, 0); spatial_dwt(s, s->spatial_dwt_buffer, w, h, w); -#endif for(level=0; level<s->spatial_decomposition_count; level++){ for(orientation=level ? 1 : 0; orientation<4; orientation++){ @@ -3185,17 +2902,8 @@ } } -#if QPRED - for(y=0; y<h; y++){ - for(x=0; x<w; x++){ - s->spatial_dwt_buffer[y*w + x]+= s->pred_buffer[y*w + x]; - } - } - spatial_idwt(s, s->spatial_dwt_buffer, w, h, w); -#else spatial_idwt(s, s->spatial_dwt_buffer, w, h, w); predict_plane(s, s->spatial_dwt_buffer, plane_index, 1); -#endif //FIXME optimize for(y=0; y<h; y++){ for(x=0; x<w; x++){ @@ -3332,29 +3040,8 @@ } } -#if QPRED - memset(s->pred_buffer, 0, sizeof(DWTELEM)*w*h); - predict_plane(s, s->pred_buffer, plane_index, 1); - spatial_dwt(s, s->pred_buffer, w, h, w); - for(level=0; level<s->spatial_decomposition_count; level++){ - for(orientation=level ? 1 : 0; orientation<4; orientation++){ - SubBand *b= &p->band[level][orientation]; - int delta= ((int)s->pred_buffer - (int)s->spatial_dwt_buffer)/sizeof(DWTELEM); - - quantize (s, b, b->buf + delta, b->stride, s->qbias); - dequantize(s, b, b->buf + delta, b->stride); - } - } - for(y=0; y<h; y++){ - for(x=0; x<w; x++){ - s->spatial_dwt_buffer[y*w + x]+= s->pred_buffer[y*w + x]; - } - } - spatial_idwt(s, s->spatial_dwt_buffer, w, h, w); -#else spatial_idwt(s, s->spatial_dwt_buffer, w, h, w); predict_plane(s, s->spatial_dwt_buffer, plane_index, 1); -#endif //FIXME optimize for(y=0; y<h; y++){