Mercurial > mplayer.hg
comparison libswscale/swscale_template.c @ 27533:152db2b1a8dd
Factorize rgb/bgr15/16/32->Y by using the preprocessor.
author | michael |
---|---|
date | Wed, 10 Sep 2008 03:42:45 +0000 |
parents | 1ecce17e826f |
children | 275add6845cc |
comparison
equal
deleted
inserted
replaced
27532:1ecce17e826f | 27533:152db2b1a8dd |
---|---|
1841 } | 1841 } |
1842 #endif | 1842 #endif |
1843 assert(src1 == src2); | 1843 assert(src1 == src2); |
1844 } | 1844 } |
1845 | 1845 |
1846 static inline void RENAME(bgr32ToY)(uint8_t *dst, uint8_t *src, long width) | 1846 #define BGR2Y(type, name, shr, shg, shb, maskr, maskg, maskb, RY, GY, BY, S)\ |
1847 { | 1847 static inline void RENAME(name)(uint8_t *dst, uint8_t *src, long width)\ |
1848 int i; | 1848 {\ |
1849 for (i=0; i<width; i++) | 1849 int i;\ |
1850 { | 1850 for (i=0; i<width; i++)\ |
1851 int b= ((uint32_t*)src)[i]&0xFF; | 1851 {\ |
1852 int g= (((uint32_t*)src)[i]>>8)&0xFF; | 1852 int b= (((type*)src)[i]>>shb)&maskb;\ |
1853 int r= (((uint32_t*)src)[i]>>16)&0xFF; | 1853 int g= (((type*)src)[i]>>shg)&maskg;\ |
1854 | 1854 int r= (((type*)src)[i]>>shr)&maskr;\ |
1855 dst[i]= ((RY*r + GY*g + BY*b + (33<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT); | 1855 \ |
1856 } | 1856 dst[i]= (((RY)*r + (GY)*g + (BY)*b + (33<<((S)-1)))>>(S));\ |
1857 } | 1857 }\ |
1858 } | |
1859 | |
1860 BGR2Y(uint32_t, bgr32ToY,16, 0, 0, 0x00FF, 0xFF00, 0x00FF, RY<< 8, GY , BY<< 8, RGB2YUV_SHIFT+8) | |
1861 BGR2Y(uint32_t, rgb32ToY, 0, 0,16, 0x00FF, 0xFF00, 0x00FF, RY<< 8, GY , BY<< 8, RGB2YUV_SHIFT+8) | |
1862 BGR2Y(uint16_t, bgr16ToY, 0, 0, 0, 0x001F, 0x07E0, 0xF800, RY<<11, GY<<5, BY , RGB2YUV_SHIFT+8) | |
1863 BGR2Y(uint16_t, bgr15ToY, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, RY<<10, GY<<5, BY , RGB2YUV_SHIFT+7) | |
1864 BGR2Y(uint16_t, rgb16ToY, 0, 0, 0, 0xF800, 0x07E0, 0x001F, RY , GY<<5, BY<<11, RGB2YUV_SHIFT+8) | |
1865 BGR2Y(uint16_t, rgb15ToY, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, RY , GY<<5, BY<<10, RGB2YUV_SHIFT+7) | |
1866 | |
1858 | 1867 |
1859 static inline void RENAME(bgr32ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) | 1868 static inline void RENAME(bgr32ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) |
1860 { | 1869 { |
1861 int i; | 1870 int i; |
1862 assert(src1 == src2); | 1871 assert(src1 == src2); |
2050 dstV[i]= (RV*r + GV*g + BV*b + (257<<RGB2YUV_SHIFT))>>(RGB2YUV_SHIFT+1); | 2059 dstV[i]= (RV*r + GV*g + BV*b + (257<<RGB2YUV_SHIFT))>>(RGB2YUV_SHIFT+1); |
2051 } | 2060 } |
2052 assert(src1 == src2); | 2061 assert(src1 == src2); |
2053 } | 2062 } |
2054 | 2063 |
2055 static inline void RENAME(rgb16ToY)(uint8_t *dst, uint8_t *src, long width) | |
2056 { | |
2057 int i; | |
2058 for (i=0; i<width; i++) | |
2059 { | |
2060 int d= ((uint16_t*)src)[i]; | |
2061 int b= d&0x1F; | |
2062 int g= (d>>5)&0x3F; | |
2063 int r= (d>>11)&0x1F; | |
2064 | |
2065 dst[i]= (2*RY*r + GY*g + 2*BY*b + (33<<(RGB2YUV_SHIFT-3)))>>(RGB2YUV_SHIFT-2); | |
2066 } | |
2067 } | |
2068 | |
2069 static inline void RENAME(rgb16ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) | 2064 static inline void RENAME(rgb16ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) |
2070 { | 2065 { |
2071 int i; | 2066 int i; |
2072 assert(src1==src2); | 2067 assert(src1==src2); |
2073 for (i=0; i<width; i++) | 2068 for (i=0; i<width; i++) |
2102 dstU[i]= (2*RU*r + GU*g + 2*BU*b + (257<<(RGB2YUV_SHIFT-2)))>>(RGB2YUV_SHIFT+1-2); | 2097 dstU[i]= (2*RU*r + GU*g + 2*BU*b + (257<<(RGB2YUV_SHIFT-2)))>>(RGB2YUV_SHIFT+1-2); |
2103 dstV[i]= (2*RV*r + GV*g + 2*BV*b + (257<<(RGB2YUV_SHIFT-2)))>>(RGB2YUV_SHIFT+1-2); | 2098 dstV[i]= (2*RV*r + GV*g + 2*BV*b + (257<<(RGB2YUV_SHIFT-2)))>>(RGB2YUV_SHIFT+1-2); |
2104 } | 2099 } |
2105 } | 2100 } |
2106 | 2101 |
2107 static inline void RENAME(rgb15ToY)(uint8_t *dst, uint8_t *src, long width) | |
2108 { | |
2109 int i; | |
2110 for (i=0; i<width; i++) | |
2111 { | |
2112 int d= ((uint16_t*)src)[i]; | |
2113 int b= d&0x1F; | |
2114 int g= (d>>5)&0x1F; | |
2115 int r= (d>>10)&0x1F; | |
2116 | |
2117 dst[i]= (RY*r + GY*g + BY*b + (33<<(RGB2YUV_SHIFT-4)))>>(RGB2YUV_SHIFT-3); | |
2118 } | |
2119 } | |
2120 | |
2121 static inline void RENAME(rgb15ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) | 2102 static inline void RENAME(rgb15ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) |
2122 { | 2103 { |
2123 int i; | 2104 int i; |
2124 assert(src1==src2); | 2105 assert(src1==src2); |
2125 for (i=0; i<width; i++) | 2106 for (i=0; i<width; i++) |
2151 int b= d&0x7F; | 2132 int b= d&0x7F; |
2152 int r= (d>>10)&0x7F; | 2133 int r= (d>>10)&0x7F; |
2153 int g= d>>21; | 2134 int g= d>>21; |
2154 dstU[i]= (RU*r + GU*g + BU*b + (257<<(RGB2YUV_SHIFT-3)))>>(RGB2YUV_SHIFT+1-3); | 2135 dstU[i]= (RU*r + GU*g + BU*b + (257<<(RGB2YUV_SHIFT-3)))>>(RGB2YUV_SHIFT+1-3); |
2155 dstV[i]= (RV*r + GV*g + BV*b + (257<<(RGB2YUV_SHIFT-3)))>>(RGB2YUV_SHIFT+1-3); | 2136 dstV[i]= (RV*r + GV*g + BV*b + (257<<(RGB2YUV_SHIFT-3)))>>(RGB2YUV_SHIFT+1-3); |
2156 } | |
2157 } | |
2158 | |
2159 | |
2160 static inline void RENAME(rgb32ToY)(uint8_t *dst, uint8_t *src, long width) | |
2161 { | |
2162 int i; | |
2163 for (i=0; i<width; i++) | |
2164 { | |
2165 int r= ((uint32_t*)src)[i]&0xFF; | |
2166 int g= (((uint32_t*)src)[i]>>8)&0xFF; | |
2167 int b= (((uint32_t*)src)[i]>>16)&0xFF; | |
2168 | |
2169 dst[i]= ((RY*r + GY*g + BY*b + (33<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT); | |
2170 } | 2137 } |
2171 } | 2138 } |
2172 | 2139 |
2173 static inline void RENAME(rgb32ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) | 2140 static inline void RENAME(rgb32ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) |
2174 { | 2141 { |
2253 dstU[i]= (RU*r + GU*g + BU*b + (257<<RGB2YUV_SHIFT))>>(RGB2YUV_SHIFT+1); | 2220 dstU[i]= (RU*r + GU*g + BU*b + (257<<RGB2YUV_SHIFT))>>(RGB2YUV_SHIFT+1); |
2254 dstV[i]= (RV*r + GV*g + BV*b + (257<<RGB2YUV_SHIFT))>>(RGB2YUV_SHIFT+1); | 2221 dstV[i]= (RV*r + GV*g + BV*b + (257<<RGB2YUV_SHIFT))>>(RGB2YUV_SHIFT+1); |
2255 } | 2222 } |
2256 } | 2223 } |
2257 | 2224 |
2258 static inline void RENAME(bgr16ToY)(uint8_t *dst, uint8_t *src, long width) | |
2259 { | |
2260 int i; | |
2261 for (i=0; i<width; i++) | |
2262 { | |
2263 int d= ((uint16_t*)src)[i]; | |
2264 int r= d&0x1F; | |
2265 int g= (d>>5)&0x3F; | |
2266 int b= (d>>11)&0x1F; | |
2267 | |
2268 dst[i]= (2*RY*r + GY*g + 2*BY*b + (33<<(RGB2YUV_SHIFT-3)))>>(RGB2YUV_SHIFT-2); | |
2269 } | |
2270 } | |
2271 | |
2272 static inline void RENAME(bgr16ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) | 2225 static inline void RENAME(bgr16ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) |
2273 { | 2226 { |
2274 int i; | 2227 int i; |
2275 assert(src1 == src2); | 2228 assert(src1 == src2); |
2276 for (i=0; i<width; i++) | 2229 for (i=0; i<width; i++) |
2299 int r= d&0x3F; | 2252 int r= d&0x3F; |
2300 int b= (d>>11)&0x3F; | 2253 int b= (d>>11)&0x3F; |
2301 int g= d>>21; | 2254 int g= d>>21; |
2302 dstU[i]= (2*RU*r + GU*g + 2*BU*b + (257<<(RGB2YUV_SHIFT-2)))>>(RGB2YUV_SHIFT+1-2); | 2255 dstU[i]= (2*RU*r + GU*g + 2*BU*b + (257<<(RGB2YUV_SHIFT-2)))>>(RGB2YUV_SHIFT+1-2); |
2303 dstV[i]= (2*RV*r + GV*g + 2*BV*b + (257<<(RGB2YUV_SHIFT-2)))>>(RGB2YUV_SHIFT+1-2); | 2256 dstV[i]= (2*RV*r + GV*g + 2*BV*b + (257<<(RGB2YUV_SHIFT-2)))>>(RGB2YUV_SHIFT+1-2); |
2304 } | |
2305 } | |
2306 | |
2307 static inline void RENAME(bgr15ToY)(uint8_t *dst, uint8_t *src, long width) | |
2308 { | |
2309 int i; | |
2310 for (i=0; i<width; i++) | |
2311 { | |
2312 int d= ((uint16_t*)src)[i]; | |
2313 int r= d&0x1F; | |
2314 int g= (d>>5)&0x1F; | |
2315 int b= (d>>10)&0x1F; | |
2316 | |
2317 dst[i]= (RY*r + GY*g + BY*b + (33<<(RGB2YUV_SHIFT-4)))>>(RGB2YUV_SHIFT-3); | |
2318 } | 2257 } |
2319 } | 2258 } |
2320 | 2259 |
2321 static inline void RENAME(bgr15ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) | 2260 static inline void RENAME(bgr15ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width) |
2322 { | 2261 { |