Mercurial > mplayer.hg
changeset 2584:6d20d5d5829f
15/16bit in C speedup
author | michael |
---|---|
date | Wed, 31 Oct 2001 00:26:29 +0000 |
parents | 3dce775d82cb |
children | bd52b78f12dc |
files | postproc/swscale.c postproc/swscale_template.c |
diffstat | 2 files changed, 100 insertions(+), 60 deletions(-) [+] |
line wrap: on
line diff
--- a/postproc/swscale.c Wed Oct 31 00:25:28 2001 +0000 +++ b/postproc/swscale.c Wed Oct 31 00:26:29 2001 +0000 @@ -98,6 +98,13 @@ // clipping helper table for C implementations: static unsigned char clip_table[768]; +static unsigned short clip_table16b[768]; +static unsigned short clip_table16g[768]; +static unsigned short clip_table16r[768]; +static unsigned short clip_table15b[768]; +static unsigned short clip_table15g[768]; +static unsigned short clip_table15r[768]; + // yuv->rgb conversion tables: static int yuvtab_2568[256]; static int yuvtab_3343[256]; @@ -702,9 +709,9 @@ int V=((uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19); ((uint16_t*)dest)[i] = - (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) | - ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<3)&0x07E0) | - ((clip_table[(Y + yuvtab_3343[V]) >>13]<<8)&0xF800); + clip_table16b[(Y + yuvtab_40cf[U]) >>13] | + clip_table16g[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13] | + clip_table16r[(Y + yuvtab_3343[V]) >>13]; } } else if(dstbpp==15) @@ -716,9 +723,9 @@ int V=((uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19); ((uint16_t*)dest)[i] = - (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) | - ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<2)&0x03E0) | - ((clip_table[(Y + yuvtab_3343[V]) >>13]<<7)&0x7C00); + clip_table15b[(Y + yuvtab_40cf[U]) >>13] | + clip_table15g[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13] | + clip_table15r[(Y + yuvtab_3343[V]) >>13]; } } #endif @@ -846,14 +853,14 @@ int Cr= yuvtab_3343[V]; ((uint16_t*)dest)[i] = - (clip_table[(Y1 + Cb) >>13]>>3) | - ((clip_table[(Y1 + Cg) >>13]<<3)&0x07E0) | - ((clip_table[(Y1 + Cr) >>13]<<8)&0xF800); + clip_table16b[(Y1 + Cb) >>13] | + clip_table16g[(Y1 + Cg) >>13] | + clip_table16r[(Y1 + Cr) >>13]; ((uint16_t*)dest)[i+1] = - (clip_table[(Y2 + Cb) >>13]>>3) | - ((clip_table[(Y2 + Cg) >>13]<<3)&0x07E0) | - ((clip_table[(Y2 + Cr) >>13]<<8)&0xF800); + clip_table16b[(Y2 + Cb) >>13] | + clip_table16g[(Y2 + Cg) >>13] | + clip_table16r[(Y2 + Cr) >>13]; } } else if(dstbpp==15) @@ -870,13 +877,14 @@ int Cr= yuvtab_3343[V]; ((uint16_t*)dest)[i] = - (clip_table[(Y1 + Cb) >>13]>>3) | - ((clip_table[(Y1 + Cg) >>13]<<2)&0x03E0) | - ((clip_table[(Y1 + Cr) >>13]<<7)&0x7C00); + clip_table15b[(Y1 + Cb) >>13] | + clip_table15g[(Y1 + Cg) >>13] | + clip_table15r[(Y1 + Cr) >>13]; + ((uint16_t*)dest)[i+1] = - (clip_table[(Y2 + Cb) >>13]>>3) | - ((clip_table[(Y2 + Cg) >>13]<<2)&0x03E0) | - ((clip_table[(Y2 + Cr) >>13]<<7)&0x7C00); + clip_table15b[(Y2 + Cb) >>13] | + clip_table15g[(Y2 + Cg) >>13] | + clip_table15r[(Y2 + Cr) >>13]; } } #endif @@ -1075,14 +1083,14 @@ int Cr= yuvtab_3343[V]; ((uint16_t*)dest)[i] = - (clip_table[(Y1 + Cb) >>13]>>3) | - ((clip_table[(Y1 + Cg) >>13]<<3)&0x07E0) | - ((clip_table[(Y1 + Cr) >>13]<<8)&0xF800); + clip_table16b[(Y1 + Cb) >>13] | + clip_table16g[(Y1 + Cg) >>13] | + clip_table16r[(Y1 + Cr) >>13]; ((uint16_t*)dest)[i+1] = - (clip_table[(Y2 + Cb) >>13]>>3) | - ((clip_table[(Y2 + Cg) >>13]<<3)&0x07E0) | - ((clip_table[(Y2 + Cr) >>13]<<8)&0xF800); + clip_table16b[(Y2 + Cb) >>13] | + clip_table16g[(Y2 + Cg) >>13] | + clip_table16r[(Y2 + Cr) >>13]; } } else if(dstbpp==15) @@ -1099,13 +1107,14 @@ int Cr= yuvtab_3343[V]; ((uint16_t*)dest)[i] = - (clip_table[(Y1 + Cb) >>13]>>3) | - ((clip_table[(Y1 + Cg) >>13]<<2)&0x03E0) | - ((clip_table[(Y1 + Cr) >>13]<<7)&0x7C00); + clip_table15b[(Y1 + Cb) >>13] | + clip_table15g[(Y1 + Cg) >>13] | + clip_table15r[(Y1 + Cr) >>13]; + ((uint16_t*)dest)[i+1] = - (clip_table[(Y2 + Cb) >>13]>>3) | - ((clip_table[(Y2 + Cg) >>13]<<2)&0x03E0) | - ((clip_table[(Y2 + Cr) >>13]<<7)&0x7C00); + clip_table15b[(Y2 + Cb) >>13] | + clip_table15g[(Y2 + Cg) >>13] | + clip_table15r[(Y2 + Cr) >>13]; } } #endif @@ -1666,4 +1675,15 @@ yuvtab_40cf[i]=0x40cf*(i-128); } + for(i=0; i<768; i++) + { + int v= clip_table[i]; + clip_table16b[i]= v>>3; + clip_table16g[i]= (v<<3)&0x07E0; + clip_table16r[i]= (v<<8)&0xF800; + clip_table15b[i]= v>>3; + clip_table15g[i]= (v<<2)&0x03E0; + clip_table15r[i]= (v<<7)&0x7C00; + } + }
--- a/postproc/swscale_template.c Wed Oct 31 00:25:28 2001 +0000 +++ b/postproc/swscale_template.c Wed Oct 31 00:26:29 2001 +0000 @@ -98,6 +98,13 @@ // clipping helper table for C implementations: static unsigned char clip_table[768]; +static unsigned short clip_table16b[768]; +static unsigned short clip_table16g[768]; +static unsigned short clip_table16r[768]; +static unsigned short clip_table15b[768]; +static unsigned short clip_table15g[768]; +static unsigned short clip_table15r[768]; + // yuv->rgb conversion tables: static int yuvtab_2568[256]; static int yuvtab_3343[256]; @@ -702,9 +709,9 @@ int V=((uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19); ((uint16_t*)dest)[i] = - (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) | - ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<3)&0x07E0) | - ((clip_table[(Y + yuvtab_3343[V]) >>13]<<8)&0xF800); + clip_table16b[(Y + yuvtab_40cf[U]) >>13] | + clip_table16g[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13] | + clip_table16r[(Y + yuvtab_3343[V]) >>13]; } } else if(dstbpp==15) @@ -716,9 +723,9 @@ int V=((uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19); ((uint16_t*)dest)[i] = - (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) | - ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<2)&0x03E0) | - ((clip_table[(Y + yuvtab_3343[V]) >>13]<<7)&0x7C00); + clip_table15b[(Y + yuvtab_40cf[U]) >>13] | + clip_table15g[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13] | + clip_table15r[(Y + yuvtab_3343[V]) >>13]; } } #endif @@ -846,14 +853,14 @@ int Cr= yuvtab_3343[V]; ((uint16_t*)dest)[i] = - (clip_table[(Y1 + Cb) >>13]>>3) | - ((clip_table[(Y1 + Cg) >>13]<<3)&0x07E0) | - ((clip_table[(Y1 + Cr) >>13]<<8)&0xF800); + clip_table16b[(Y1 + Cb) >>13] | + clip_table16g[(Y1 + Cg) >>13] | + clip_table16r[(Y1 + Cr) >>13]; ((uint16_t*)dest)[i+1] = - (clip_table[(Y2 + Cb) >>13]>>3) | - ((clip_table[(Y2 + Cg) >>13]<<3)&0x07E0) | - ((clip_table[(Y2 + Cr) >>13]<<8)&0xF800); + clip_table16b[(Y2 + Cb) >>13] | + clip_table16g[(Y2 + Cg) >>13] | + clip_table16r[(Y2 + Cr) >>13]; } } else if(dstbpp==15) @@ -870,13 +877,14 @@ int Cr= yuvtab_3343[V]; ((uint16_t*)dest)[i] = - (clip_table[(Y1 + Cb) >>13]>>3) | - ((clip_table[(Y1 + Cg) >>13]<<2)&0x03E0) | - ((clip_table[(Y1 + Cr) >>13]<<7)&0x7C00); + clip_table15b[(Y1 + Cb) >>13] | + clip_table15g[(Y1 + Cg) >>13] | + clip_table15r[(Y1 + Cr) >>13]; + ((uint16_t*)dest)[i+1] = - (clip_table[(Y2 + Cb) >>13]>>3) | - ((clip_table[(Y2 + Cg) >>13]<<2)&0x03E0) | - ((clip_table[(Y2 + Cr) >>13]<<7)&0x7C00); + clip_table15b[(Y2 + Cb) >>13] | + clip_table15g[(Y2 + Cg) >>13] | + clip_table15r[(Y2 + Cr) >>13]; } } #endif @@ -1075,14 +1083,14 @@ int Cr= yuvtab_3343[V]; ((uint16_t*)dest)[i] = - (clip_table[(Y1 + Cb) >>13]>>3) | - ((clip_table[(Y1 + Cg) >>13]<<3)&0x07E0) | - ((clip_table[(Y1 + Cr) >>13]<<8)&0xF800); + clip_table16b[(Y1 + Cb) >>13] | + clip_table16g[(Y1 + Cg) >>13] | + clip_table16r[(Y1 + Cr) >>13]; ((uint16_t*)dest)[i+1] = - (clip_table[(Y2 + Cb) >>13]>>3) | - ((clip_table[(Y2 + Cg) >>13]<<3)&0x07E0) | - ((clip_table[(Y2 + Cr) >>13]<<8)&0xF800); + clip_table16b[(Y2 + Cb) >>13] | + clip_table16g[(Y2 + Cg) >>13] | + clip_table16r[(Y2 + Cr) >>13]; } } else if(dstbpp==15) @@ -1099,13 +1107,14 @@ int Cr= yuvtab_3343[V]; ((uint16_t*)dest)[i] = - (clip_table[(Y1 + Cb) >>13]>>3) | - ((clip_table[(Y1 + Cg) >>13]<<2)&0x03E0) | - ((clip_table[(Y1 + Cr) >>13]<<7)&0x7C00); + clip_table15b[(Y1 + Cb) >>13] | + clip_table15g[(Y1 + Cg) >>13] | + clip_table15r[(Y1 + Cr) >>13]; + ((uint16_t*)dest)[i+1] = - (clip_table[(Y2 + Cb) >>13]>>3) | - ((clip_table[(Y2 + Cg) >>13]<<2)&0x03E0) | - ((clip_table[(Y2 + Cr) >>13]<<7)&0x7C00); + clip_table15b[(Y2 + Cb) >>13] | + clip_table15g[(Y2 + Cg) >>13] | + clip_table15r[(Y2 + Cr) >>13]; } } #endif @@ -1666,4 +1675,15 @@ yuvtab_40cf[i]=0x40cf*(i-128); } + for(i=0; i<768; i++) + { + int v= clip_table[i]; + clip_table16b[i]= v>>3; + clip_table16g[i]= (v<<3)&0x07E0; + clip_table16r[i]= (v<<8)&0xF800; + clip_table15b[i]= v>>3; + clip_table15g[i]= (v<<2)&0x03E0; + clip_table15r[i]= (v<<7)&0x7C00; + } + }