Changeset 530
- Timestamp:
- 10/08/08 07:28:08 (5 years ago)
- Location:
- trunk/core
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/core/curves.c
r515 r530 71 71 } 72 72 73 74 void curveRGB_apply() { 75 short i,j; 76 unsigned short pixVal0, pixVal1, pixVal2, col; 77 unsigned char *src; 78 79 // Set pointer to picture raw data in memory 80 src = (unsigned char *) hook_raw_image_addr(); 81 82 // Loop through picture rows 83 col = CAM_RAW_ROWPIX-48; 84 src += 8 * (CAM_RAW_ROWPIX * 10 / 8); // skip 8 first rows 85 for (i=CAM_RAW_ROWS - 8; i;i-=2){ // skip 8 first rows 86 // for (i=CAM_RAW_ROWS; i;i-=2){ // No skip 8 first rows 87 // Loop through picture columns 88 // for (j=CAM_RAW_ROWPIX; j; j-=8, src+=10){ // No skip 8 first and 40 last columns 89 src += 10; // Skip columns 90 for (j=col; j; j-=8, src+=10){ // Skip columns 91 //Skip first 8 columns and 40 last columns 92 pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 93 pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 94 pixVal0 = curve0[pixVal0]; 95 pixVal1 = curve1[pixVal1]; 96 *(src+1) = (unsigned char) ((pixVal0>>2)); // 0 97 *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1 98 99 pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2)); 100 pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5])); 101 pixVal2 = curve0[pixVal2]; 102 pixVal0 = curve1[pixVal0]; 103 *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2 104 *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0) 105 *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0) 106 107 pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6)); 108 pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4)); 109 pixVal0 = curve0[pixVal0]; 110 pixVal1 = curve1[pixVal1]; 111 *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0 112 *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1) 113 114 pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2)); 115 pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8])); 116 pixVal2 = curve0[pixVal2]; 117 pixVal0 = curve1[pixVal0]; 118 *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2) 119 *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0) 120 *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0) } 121 } 122 src += 60; // skip columns 40+8 123 // for (j=CAM_RAW_ROWPIX;j; j-=8, src+=10){ // No skip 124 for (j=col; j; j-=8, src+=10){ 125 pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 126 pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 127 pixVal0 = curve2[pixVal0]; 128 pixVal1 = curve3[pixVal1]; 129 *(src+1) = (unsigned char) ((pixVal0>>2)); // 0 130 *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1 131 132 pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2)); 133 pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5])); 134 pixVal2 = curve2[pixVal2]; 135 pixVal0 = curve3[pixVal0]; 136 *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2 137 *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0) 138 *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0) 139 140 pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6)); 141 pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4)); 142 pixVal0 = curve2[pixVal0]; 143 pixVal1 = curve3[pixVal1]; 144 *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0 145 *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1) 146 147 pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2)); 148 pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8])); 149 pixVal2 = curve2[pixVal2]; 150 pixVal0 = curve3[pixVal0]; 151 *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2) 152 *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0) 153 *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0) 154 } 155 src += 50; // skip columns 156 } 157 } 158 159 160 void curveL_apply() { 161 short i,j; 162 unsigned short pixVal0, pixVal1, pixVal2, y, col; 163 unsigned char *src; 164 165 // Set pointer to picture raw data in memory 166 src = (unsigned char *) hook_raw_image_addr(); 167 168 // Loop through picture rows 169 col = CAM_RAW_ROWPIX-48; 170 src += 8 * (CAM_RAW_ROWPIX * 10 / 8); // skip 8 first rows 171 for (i=CAM_RAW_ROWS - 8; i;i-=2){ // skip 8 first rows 172 // for (i=CAM_RAW_ROWS; i;i-=2){ // No skip 8 first rows 173 // Loop through picture columns 174 // for (j=CAM_RAW_ROWPIX; j; j-=8, src+=10){ // No skip 8 first and 40 last columns 175 src += 10; // Skip columns 176 for (j=col; j; j-=8, src+=10){ // Skip columns 177 //Skip first 8 columns and 40 last columns 178 pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 179 pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 180 pixVal0 = RBLACK( pixVal0 ); 181 pixVal1 = RBLACK( pixVal1 ); 182 y = LUM(pixVal0,pixVal1); 183 pixVal0 = CURVE0( pixVal0, y ) + BLACK; 184 pixVal1 = CURVE1( pixVal1, y ) + BLACK; 185 pixVal0 = LIM( pixVal0 ); 186 pixVal1 = LIM( pixVal1 ); 187 *(src+1) = (unsigned char) ((pixVal0>>2)); // 0 188 *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1 189 190 pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2)); 191 pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5])); 192 pixVal2 = RBLACK( pixVal2 ); 193 pixVal0 = RBLACK( pixVal0 ); 194 y = LUM(pixVal2,pixVal0); 195 pixVal2 = CURVE0( pixVal2, y ) + BLACK; 196 pixVal0 = CURVE1( pixVal0, y ) + BLACK; 197 pixVal2 = LIM( pixVal2 ); 198 pixVal0 = LIM( pixVal0 ); 199 *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2 200 *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0) 201 *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0) 202 203 pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6)); 204 pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4)); 205 pixVal0 = RBLACK( pixVal0 ); 206 pixVal1 = RBLACK( pixVal1 ); 207 y = LUM(pixVal0,pixVal1); 208 pixVal0 = CURVE0( pixVal0, y ) + BLACK; 209 pixVal1 = CURVE1( pixVal1, y ) + BLACK; 210 pixVal0 = LIM( pixVal0 ); 211 pixVal1 = LIM( pixVal1 ); 212 *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0 213 *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1) 214 215 pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2)); 216 pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8])); 217 pixVal2 = RBLACK( pixVal2 ); 218 pixVal0 = RBLACK( pixVal0 ); 219 y = LUM(pixVal2,pixVal0); 220 pixVal2 = CURVE0( pixVal2, y ) + BLACK; 221 pixVal0 = CURVE1( pixVal0, y ) + BLACK; 222 pixVal2 = LIM( pixVal2 ); 223 pixVal0 = LIM( pixVal0 ); 224 *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2) 225 *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0) 226 *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0) } 227 } 228 src += 60; // skip columns 40+8 229 // for (j=CAM_RAW_ROWPIX;j; j-=8, src+=10){ // No skip 230 for (j=col; j; j-=8, src+=10){ 231 pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 232 pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 233 pixVal0 = RBLACK( pixVal0 ); 234 pixVal1 = RBLACK( pixVal1 ); 235 y = LUM(pixVal0,pixVal1); 236 pixVal0 = CURVE2( pixVal0, y ) + BLACK; 237 pixVal1 = CURVE3( pixVal1, y ) + BLACK; 238 pixVal0 = LIM( pixVal0 ); 239 pixVal1 = LIM( pixVal1 ); 240 *(src+1) = (unsigned char) ((pixVal0>>2)); // 0 241 *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1 242 243 pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2)); 244 pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5])); 245 pixVal2 = RBLACK( pixVal2 ); 246 pixVal0 = RBLACK( pixVal0 ); 247 y = LUM(pixVal2,pixVal0); 248 pixVal2 = CURVE2( pixVal2, y ) + BLACK; 249 pixVal0 = CURVE3( pixVal0, y ) + BLACK; 250 pixVal2 = LIM( pixVal2 ); 251 pixVal0 = LIM( pixVal0 ); 252 *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2 253 *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0) 254 *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0) 255 256 pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6)); 257 pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4)); 258 pixVal0 = RBLACK( pixVal0 ); 259 pixVal1 = RBLACK( pixVal1 ); 260 y = LUM(pixVal0,pixVal1); 261 pixVal0 = CURVE2( pixVal0, y ) + BLACK; 262 pixVal1 = CURVE3( pixVal1, y ) + BLACK; 263 pixVal0 = LIM( pixVal0 ); 264 pixVal1 = LIM( pixVal1 ); 265 *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0 266 *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1) 267 268 pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2)); 269 pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8])); 270 pixVal2 = RBLACK( pixVal2 ); 271 pixVal0 = RBLACK( pixVal0 ); 272 y = LUM(pixVal2,pixVal0); 273 pixVal2 = CURVE2( pixVal2, y ) + BLACK; 274 pixVal0 = CURVE3( pixVal0, y ) + BLACK; 275 pixVal2 = LIM( pixVal2 ); 276 pixVal0 = LIM( pixVal0 ); 277 *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2) 278 *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0) 279 *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0) 280 } 281 src += 50; // skip columns 282 } 283 } 284 285 /* 286 DR curves 287 - DR curve unidimension: gray scale only 288 */ 289 #define DRCURVE0( a, b ) (((a) * curve0[b]) >> 12) 290 #define DRCURVE1( a, b ) (((a) * curve1[b]) >> 12) 291 #define DRCURVE2( a, b ) (((a) * curve2[b]) >> 12) 292 #define DRCURVE3( a, b ) (((a) * curve3[b]) >> 12) 293 294 unsigned short drcurve0[DRCURVE_CNT][CURVE_SIZE]; // Dynamic range curves are only gray scale for now... 295 //unsigned short drcurve1[DRCURVE_CNT][CURVE_SIZE]; 296 //unsigned short drcurve2[DRCURVE_CNT][CURVE_SIZE]; 297 //unsigned short drcurve3[DRCURVE_CNT][CURVE_SIZE]; 298 73 299 //------------------------------------------------------------------- 74 300 // Curve to be loaded upon power up … … 92 318 } 93 319 94 95 void curveRGB_apply() {96 short i,j;97 unsigned short pixVal0, pixVal1, pixVal2, col;98 unsigned char *src;99 100 // Set pointer to picture raw data in memory101 src = (unsigned char *) hook_raw_image_addr();102 103 // Loop through picture rows104 col = CAM_RAW_ROWPIX-48;105 src += 8 * (CAM_RAW_ROWPIX * 10 / 8); // skip 8 first rows106 for (i=CAM_RAW_ROWS - 8; i;i-=2){ // skip 8 first rows107 // for (i=CAM_RAW_ROWS; i;i-=2){ // No skip 8 first rows108 // Loop through picture columns109 // for (j=CAM_RAW_ROWPIX; j; j-=8, src+=10){ // No skip 8 first and 40 last columns110 src += 10; // Skip columns111 for (j=col; j; j-=8, src+=10){ // Skip columns112 //Skip first 8 columns and 40 last columns113 pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6));114 pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4));115 pixVal0 = curve0[pixVal0];116 pixVal1 = curve1[pixVal1];117 *(src+1) = (unsigned char) ((pixVal0>>2)); // 0118 *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1119 120 pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2));121 pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5]));122 pixVal2 = curve0[pixVal2];123 pixVal0 = curve1[pixVal0];124 *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2125 *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0)126 *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0)127 128 pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6));129 pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4));130 pixVal0 = curve0[pixVal0];131 pixVal1 = curve1[pixVal1];132 *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0133 *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1)134 135 pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2));136 pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8]));137 pixVal2 = curve0[pixVal2];138 pixVal0 = curve1[pixVal0];139 *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2)140 *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0)141 *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0) }142 }143 src += 60; // skip columns 40+8144 // for (j=CAM_RAW_ROWPIX;j; j-=8, src+=10){ // No skip145 for (j=col; j; j-=8, src+=10){146 pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6));147 pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4));148 pixVal0 = curve2[pixVal0];149 pixVal1 = curve3[pixVal1];150 *(src+1) = (unsigned char) ((pixVal0>>2)); // 0151 *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1152 153 pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2));154 pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5]));155 pixVal2 = curve2[pixVal2];156 pixVal0 = curve3[pixVal0];157 *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2158 *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0)159 *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0)160 161 pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6));162 pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4));163 pixVal0 = curve2[pixVal0];164 pixVal1 = curve3[pixVal1];165 *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0166 *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1)167 168 pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2));169 pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8]));170 pixVal2 = curve2[pixVal2];171 pixVal0 = curve3[pixVal0];172 *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2)173 *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0)174 *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0)175 }176 src += 50; // skip columns177 }178 }179 180 181 void curveL_apply() {182 short i,j;183 unsigned short pixVal0, pixVal1, pixVal2, y, col;184 unsigned char *src;185 186 // Set pointer to picture raw data in memory187 src = (unsigned char *) hook_raw_image_addr();188 189 // Loop through picture rows190 col = CAM_RAW_ROWPIX-48;191 src += 8 * (CAM_RAW_ROWPIX * 10 / 8); // skip 8 first rows192 for (i=CAM_RAW_ROWS - 8; i;i-=2){ // skip 8 first rows193 // for (i=CAM_RAW_ROWS; i;i-=2){ // No skip 8 first rows194 // Loop through picture columns195 // for (j=CAM_RAW_ROWPIX; j; j-=8, src+=10){ // No skip 8 first and 40 last columns196 src += 10; // Skip columns197 for (j=col; j; j-=8, src+=10){ // Skip columns198 //Skip first 8 columns and 40 last columns199 pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6));200 pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4));201 pixVal0 = RBLACK( pixVal0 );202 pixVal1 = RBLACK( pixVal1 );203 y = LUM(pixVal0,pixVal1);204 pixVal0 = CURVE0( pixVal0, y ) + BLACK;205 pixVal1 = CURVE1( pixVal1, y ) + BLACK;206 pixVal0 = LIM( pixVal0 );207 pixVal1 = LIM( pixVal1 );208 *(src+1) = (unsigned char) ((pixVal0>>2)); // 0209 *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1210 211 pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2));212 pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5]));213 pixVal2 = RBLACK( pixVal2 );214 pixVal0 = RBLACK( pixVal0 );215 y = LUM(pixVal2,pixVal0);216 pixVal2 = CURVE0( pixVal2, y ) + BLACK;217 pixVal0 = CURVE1( pixVal0, y ) + BLACK;218 pixVal2 = LIM( pixVal2 );219 pixVal0 = LIM( pixVal0 );220 *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2221 *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0)222 *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0)223 224 pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6));225 pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4));226 pixVal0 = RBLACK( pixVal0 );227 pixVal1 = RBLACK( pixVal1 );228 y = LUM(pixVal0,pixVal1);229 pixVal0 = CURVE0( pixVal0, y ) + BLACK;230 pixVal1 = CURVE1( pixVal1, y ) + BLACK;231 pixVal0 = LIM( pixVal0 );232 pixVal1 = LIM( pixVal1 );233 *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0234 *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1)235 236 pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2));237 pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8]));238 pixVal2 = RBLACK( pixVal2 );239 pixVal0 = RBLACK( pixVal0 );240 y = LUM(pixVal2,pixVal0);241 pixVal2 = CURVE0( pixVal2, y ) + BLACK;242 pixVal0 = CURVE1( pixVal0, y ) + BLACK;243 pixVal2 = LIM( pixVal2 );244 pixVal0 = LIM( pixVal0 );245 *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2)246 *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0)247 *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0) }248 }249 src += 60; // skip columns 40+8250 // for (j=CAM_RAW_ROWPIX;j; j-=8, src+=10){ // No skip251 for (j=col; j; j-=8, src+=10){252 pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6));253 pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4));254 pixVal0 = RBLACK( pixVal0 );255 pixVal1 = RBLACK( pixVal1 );256 y = LUM(pixVal0,pixVal1);257 pixVal0 = CURVE2( pixVal0, y ) + BLACK;258 pixVal1 = CURVE3( pixVal1, y ) + BLACK;259 pixVal0 = LIM( pixVal0 );260 pixVal1 = LIM( pixVal1 );261 *(src+1) = (unsigned char) ((pixVal0>>2)); // 0262 *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1263 264 pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2));265 pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5]));266 pixVal2 = RBLACK( pixVal2 );267 pixVal0 = RBLACK( pixVal0 );268 y = LUM(pixVal2,pixVal0);269 pixVal2 = CURVE2( pixVal2, y ) + BLACK;270 pixVal0 = CURVE3( pixVal0, y ) + BLACK;271 pixVal2 = LIM( pixVal2 );272 pixVal0 = LIM( pixVal0 );273 *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2274 *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0)275 *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0)276 277 pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6));278 pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4));279 pixVal0 = RBLACK( pixVal0 );280 pixVal1 = RBLACK( pixVal1 );281 y = LUM(pixVal0,pixVal1);282 pixVal0 = CURVE2( pixVal0, y ) + BLACK;283 pixVal1 = CURVE3( pixVal1, y ) + BLACK;284 pixVal0 = LIM( pixVal0 );285 pixVal1 = LIM( pixVal1 );286 *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0287 *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1)288 289 pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2));290 pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8]));291 pixVal2 = RBLACK( pixVal2 );292 pixVal0 = RBLACK( pixVal0 );293 y = LUM(pixVal2,pixVal0);294 pixVal2 = CURVE2( pixVal2, y ) + BLACK;295 pixVal0 = CURVE3( pixVal0, y ) + BLACK;296 pixVal2 = LIM( pixVal2 );297 pixVal0 = LIM( pixVal0 );298 *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2)299 *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0)300 *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0)301 }302 src += 50; // skip columns303 }304 }305 306 /*307 DR curves308 - DR curve unidimension: gray scale only309 */310 #define DRCURVE0( a, b ) (((a) * curve0[b]) >> 12)311 #define DRCURVE1( a, b ) (((a) * curve1[b]) >> 12)312 #define DRCURVE2( a, b ) (((a) * curve2[b]) >> 12)313 #define DRCURVE3( a, b ) (((a) * curve3[b]) >> 12)314 315 unsigned short drcurve0[DRCURVE_CNT][CURVE_SIZE]; // Dynamic range curves are only gray scale for now...316 //unsigned short drcurve1[DRCURVE_CNT][CURVE_SIZE];317 //unsigned short drcurve2[DRCURVE_CNT][CURVE_SIZE];318 //unsigned short drcurve3[DRCURVE_CNT][CURVE_SIZE];319 320 320 321 void drcurve_apply(const int ci) { -
trunk/core/curves.h
r515 r530 13 13 extern void drcurve_load(const char *fn); 14 14 extern void curve_apply(); 15 extern unsigned short drcurve0[][];16 15 // extern void default_curve(int n); 17 16 //-------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.