aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/snow.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2004-07-27 17:02:31 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-07-27 17:02:31 +0000
commita8d73e56e6a0e883d203e044ea1e4b2189ef299f (patch)
treec8f38fe786fa3de29cc3623afab3f709a8a5ddf5 /libavcodec/snow.c
parent78486403561c1389045229ee1137415d5e2eb3ae (diff)
downloadffmpeg-a8d73e56e6a0e883d203e044ea1e4b2189ef299f.tar.gz
cleanup
remove ugly and slow vertical scaning code 0.1% bitrate increase (foreman@352x288 qp=1) 0.3% bitrate increase (foreman@352x288 qp=8) Originally committed as revision 3353 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/snow.c')
-rw-r--r--libavcodec/snow.c264
1 files changed, 25 insertions, 239 deletions
diff --git a/libavcodec/snow.c b/libavcodec/snow.c
index 4dc3392fe2..74ed242d26 100644
--- a/libavcodec/snow.c
+++ b/libavcodec/snow.c
@@ -1278,8 +1278,8 @@ static void encode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTELEM *pa
const int w= b->width;
const int h= b->height;
int x, y;
-
-#if 1
+
+#if 0
if(orientation==3 && parent && 0){
int16_t candidate[w*h][2];
uint8_t state[w*h];
@@ -1401,52 +1401,35 @@ static void encode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTELEM *pa
}
#endif
if(1){
- int w, h;
int run=0;
- int last_run=0;
- int last_v=1;
- int last_x=0;
- int runs[b->width*b->height];
+ int runs[w*h];
int run_index=0;
- if(orientation==1){
- w= b->height;
- h= b->width;
- }else{
- w= b->width;
- h= b->height;
- }
-
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(orientation==1) v= src[y + x*stride];
- else v= src[x + y*stride];
+ v= src[x + y*stride];
if(y){
- if(orientation==1) t= src[y - 1 + x*stride];
- else t= src[x + (y-1)*stride];
+ t= src[x + (y-1)*stride];
if(x){
- if(orientation==1) lt= src[y - 1 + (x-1)*stride];
- else lt= src[x - 1 + (y-1)*stride];
+ lt= src[x - 1 + (y-1)*stride];
}
if(x + 1 < w){
- if(orientation==1) rt= src[y - 1 + (x+1)*stride];
- else rt= src[x + 1 + (y-1)*stride];
+ rt= src[x + 1 + (y-1)*stride];
}
}
if(x){
- if(orientation==1) l= src[y + (x-1)*stride];
- else l= src[x - 1 + y*stride];
+ 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= (orientation==1 ? y : x)>>1;
- int py= (orientation==1 ? x : y)>>1;
+ int px= x>>1;
+ int py= y>>1;
if(px<b->parent->width && py<b->parent->height)
p= parent[px + py*2*stride];
}
@@ -1470,32 +1453,27 @@ static void encode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTELEM *pa
for(x=0; x<w; x++){
int v, p=0;
int /*ll=0, */l=0, lt=0, t=0, rt=0;
- if(orientation==1) v= src[y + x*stride];
- else v= src[x + y*stride];
+ v= src[x + y*stride];
if(y){
- if(orientation==1) t= src[y - 1 + x*stride];
- else t= src[x + (y-1)*stride];
+ t= src[x + (y-1)*stride];
if(x){
- if(orientation==1) lt= src[y - 1 + (x-1)*stride];
- else lt= src[x - 1 + (y-1)*stride];
+ lt= src[x - 1 + (y-1)*stride];
}
if(x + 1 < w){
- if(orientation==1) rt= src[y - 1 + (x+1)*stride];
- else rt= src[x + 1 + (y-1)*stride];
+ rt= src[x + 1 + (y-1)*stride];
}
}
if(x){
- if(orientation==1) l= src[y + (x-1)*stride];
- else l= src[x - 1 + y*stride];
+ 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= (orientation==1 ? y : x)>>1;
- int py= (orientation==1 ? x : y)>>1;
+ int px= x>>1;
+ int py= y>>1;
if(px<b->parent->width && py<b->parent->height)
p= parent[px + py*2*stride];
}
@@ -1523,111 +1501,9 @@ static void encode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTELEM *pa
}
return;
}
- if(1){
- int w, h;
- int run=0;
- int last_run=0;
- int last_v=1;
- int last_x=0;
-
- if(orientation==1){
- w= b->height;
- h= b->width;
- }else{
- w= b->width;
- h= b->height;
- }
-
- for(y=0; y<h; y++){
- for(x=0; x<w; x++){
- int v, p;
- if(orientation==1) v= src[y + x*stride];
- else v= src[x + y*stride];
-
- if(v){
- int sec=0, pri=0/*, lt=0, rt=0, pri2=0*/;
-
- if(y){
- if(orientation==1) sec= src[y - 1 + x*stride];
- else sec= src[x + (y-1)*stride];
-/* if(x){
- if(orientation==1) lt= src[y - 1 + (x-1)*stride];
- else lt= src[x - 1 + (y-1)*stride];
- }*/
- }
-/* if (orientation==1 && y + 1 < h && x) rt= src[y + 1 + (x-1)*stride];
- else if (orientation!=1 && x + 1 < w && y) rt= src[x + 1 + (y-1)*stride];*/
- if(x){
- if(orientation==1) pri= src[y + (x-1)*stride];
- else pri= src[x - 1 + y*stride];
-/* if(x > 1){
- if(orientation==1) pri2= src[y + (x-2)*stride];
- else pri2= src[x - 2 + y*stride];
- }*/
- }
-
- put_symbol(&s->c, b->state[ABS(quant7[last_v&0xFF])], run, 0);
-// context= 3*7 + 3 + quant11[last_v&0xFF] /*+ 7*quant3[(run-1)&0xFF]*/;
-// if(parent && orientation!=1) context += 3*7+7*quant3[parent[(x>>1) + (y>>1)*2*stride]&0xFF];
-
-// put_symbol(&s->c, b->state[ABS(quant7[pri&0xFF]) + 4*ABS(quant7[sec&0xFF]) + 8], ABS(v)-1, 0);
- put_symbol(&s->c, b->state[quant13[(ABS(pri) + ABS(sec))&0x7F] + 8], ABS(v)-1, 0);
-
-// context= quant3b[sec&0xFF] + 3*quant3b[pri&0xFF];
-// put_cabac(&s->c, &b->state[7][ABS(context)], (v^context)<0);
- put_cabac(&s->c, &b->state[7][1 + 3 + quant3b[sec&0xFF] + 3*quant3b[pri&0xFF]], v<0);
- last_run=run;
- last_v=v;
-
- run=0;
- }else{
- run++;
- }
- }
- }
- if(run){
- put_symbol(&s->c, b->state[ABS(quant7[last_v&0xFF])], run, 0);
- }
- return;
- }
-
- {
- int run=0;
- int mode=1;
- for(y=0; y<h; y++){
- for(x=0; x<w; x++){
- // int context=5*11*11 + 5*11+5;
- int context=3*7 + 3 + 1;
- int v= src[x + y*stride];
-
- if(mode){
- if(v){
- put_symbol(&s->c, b->state[0], run, 0);
- mode=0;
- run=0;
- }else{
- run++;
- continue;
- }
- }
- if(x /*&& orientation!=1*/) context += quant7[src[x-1 + y*stride ]&0xFF];
- if(y /*&& orientation!=2*/) context += 7*quant7[src[x + y*stride-stride]&0xFF];
-
- // if(x>1) context += 11*11*quant3 [src[x-2 + y*stride ]&0xFF];
- // if(parent) context += 11*11*quant3[parent[(x>>1) + (y>>1)*2*stride]&0xFF];
-
- put_symbol(&s->c, b->state[context], v, 1);
- if(v==0){
- mode=1;
- }
- }
- }
- if(mode && run)
- put_symbol(&s->c, b->state[0], run, 0);
- }
}
-static inline void decode_subbandX(SnowContext *s, SubBand *b, DWTELEM *src, DWTELEM *parent, int stride, int orientation){
+static inline void decode_subband(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;
@@ -1636,21 +1512,11 @@ static inline void decode_subbandX(SnowContext *s, SubBand *b, DWTELEM *src, DWT
START_TIMER
if(1){
- int w,h;
int run;
- int last_run;
for(y=0; y<b->height; y++)
memset(&src[y*stride], 0, b->width*sizeof(DWTELEM));
- if(orientation==1){
- w= b->height;
- h= b->width;
- }else{
- w= b->width;
- h= b->height;
- }
- x=y=0;
run= get_symbol(&s->c, b->state[1], 0);
for(y=0; y<h; y++){
for(x=0; x<w; x++){
@@ -1658,28 +1524,24 @@ static inline void decode_subbandX(SnowContext *s, SubBand *b, DWTELEM *src, DWT
int /*ll=0, */l=0, lt=0, t=0, rt=0;
if(y){
- if(orientation==1) t= src[y - 1 + x*stride];
- else t= src[x + (y-1)*stride];
+ t= src[x + (y-1)*stride];
if(x){
- if(orientation==1) lt= src[y - 1 + (x-1)*stride];
- else lt= src[x - 1 + (y-1)*stride];
+ lt= src[x - 1 + (y-1)*stride];
}
if(x + 1 < w){
- if(orientation==1) rt= src[y - 1 + (x+1)*stride];
- else rt= src[x + 1 + (y-1)*stride];
+ rt= src[x + 1 + (y-1)*stride];
}
}
if(x){
- if(orientation==1) l= src[y + (x-1)*stride];
- else l= src[x - 1 + y*stride];
+ 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= (orientation==1 ? y : x)>>1;
- int py= (orientation==1 ? x : y)>>1;
+ int px= x>>1;
+ int py= y>>1;
if(px<b->parent->width && py<b->parent->height)
p= parent[px + py*2*stride];
}
@@ -1703,8 +1565,7 @@ static inline void decode_subbandX(SnowContext *s, SubBand *b, DWTELEM *src, DWT
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;
- if(orientation==1) src[y + x*stride]= v;
- else src[x + y*stride]= v;
+ src[x + y*stride]= v;
}
}
}
@@ -1714,81 +1575,6 @@ static inline void decode_subbandX(SnowContext *s, SubBand *b, DWTELEM *src, DWT
return;
}
- if(1){
- int w,h;
- int last_run=0;
- int last_v=1;
-
- for(y=0; y<b->height; y++)
- memset(&src[y*stride], 0, b->width*sizeof(DWTELEM));
-
- if(orientation==1){
- w= b->height;
- h= b->width;
- }else{
- w= b->width;
- h= b->height;
- }
- x=y=0;
- for(;;){
- int sec=0, pri=0/*, lt=0, rt=0, pri2=0*/;
-
- last_run= get_symbol(&s->c, b->state[ABS(quant7[last_v&0xFF])], 0);
-
-// context= 3*7 + 3 + quant7[last_v&0xFF]/* + 7*quant7[(last_run-1)&0xFF]*/;
- x += last_run;
- while(x>=w){
- x-= w;
- if(++y>=h) break;
-/* if(orientation!=1)
- memset(&src[y*stride], 0, w*sizeof(DWTELEM));*/
- }
- if(y>=h) break;
- if(y){
- if(orientation==1) sec= src[y - 1 + x*stride];
- else sec= src[x + (y-1)*stride];
-/* if(x){
- if(orientation==1) lt= src[y - 1 + (x-1)*stride];
- else lt= src[x - 1 + (y-1)*stride];
- }*/
- }
-/* if (orientation==1 && y + 1 < h && x) rt= src[y + 1 + (x-1)*stride];
- else if (orientation!=1 && x + 1 < w && y) rt= src[x + 1 + (y-1)*stride];*/
- if(x){
- if(orientation==1) pri= src[y + (x-1)*stride];
- else pri= src[x - 1 + y*stride];
-/* if(x > 1){
- if(orientation==1) pri2= src[y + (x-2)*stride];
- else pri2= src[x - 2 + y*stride];
- }*/
- }
-
- last_v= get_symbol(&s->c, b->state[quant13[(ABS(pri) + ABS(sec))&0x7F] + 8], 0) + 1;
- if(get_cabac(&s->c, &b->state[7][1 + 3 + quant3b[sec&0xFF] + 3*quant3b[pri&0xFF]]))
- last_v= -last_v;
-
- if(orientation==1) src[y + x*stride]= last_v;
- else src[x + y*stride]= last_v;
-
- if(++x==w){
- x=0;
- if(++y>=h) break;
-/* if(orientation!=1)
- memset(&src[y*stride], 0, w*sizeof(DWTELEM));*/
- }
- }
-
- if(level+1 == s->spatial_decomposition_count){
- STOP_TIMER("decode_subband")
- }
-
- return;
- }
-}
-
-static void decode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTELEM *parent, int stride, int orientation){
- if(orientation==1) decode_subbandX(s, b, src, parent, stride, 1);
- else decode_subbandX(s, b, src, parent, stride, 0);
}
static void reset_contexts(SnowContext *s){