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 {