Changeset 1866
- Timestamp:
- 05/26/12 23:14:42 (13 months ago)
- Location:
- trunk
- Files:
-
- 5 edited
-
core/dng.c (modified) (8 diffs)
-
core/main.c (modified) (1 diff)
-
core/raw.c (modified) (2 diffs)
-
include/camera.h (modified) (2 diffs)
-
platform/g1x/platform_camera.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/core/dng.c
r1863 r1866 110 110 #define GPS_IFD_INDEX 21 // tag 0x8825 111 111 #define DNG_VERSION_INDEX 23 // tag 0xC612 112 #define UNIQUE_CAMERA_MODEL_INDEX 24 // tag 0xC614 112 #define UNIQUE_CAMERA_MODEL_INDEX 25 // tag 0xC614 113 #define COLOR_MATRIX2_INDEX 27 // tag 0xc622 114 #define CALIBRATION1_INDEX 28 // tag 0xc623 115 #define CALIBRATION2_INDEX 29 // tag 0xc624 116 #define ILLUMINANT2_INDEX 38 // tag 0xc65b 117 #define FORWARD_MATRIX1_INDEX 39 // tag 0xc714 118 #define FORWARD_MATRIX2_INDEX 40 // tag 0xc715 113 119 114 120 struct dir_entry ifd0[]={ … … 137 143 {0x9216, T_BYTE, 4, 0x00000001}, // TIFF/EPStandardID: 1.0.0.0 138 144 {0xC612, T_BYTE, 4, 0x00000301}, // DNGVersion: 1.3.0.0 145 {0xC613, T_BYTE, 4, 0x00000101}, // DNGBackwardVersion: 1.1.0.0 139 146 {0xC614, T_ASCII, 32, (int)cam_name}, // UniqueCameraModel. Filled at header generation. 140 147 {0xC621, T_SRATIONAL, 9, (int)&camera_sensor.color_matrix1}, 148 {0xC622, T_SRATIONAL, 9, (int)&camera_sensor.color_matrix2}, 149 {0xC623, T_SRATIONAL, 9, (int)&camera_sensor.camera_calibration1}, 150 {0xC624, T_SRATIONAL, 9, (int)&camera_sensor.camera_calibration2}, 141 151 {0xC627, T_RATIONAL, 3, (int)cam_AnalogBalance}, 142 152 {0xC628, T_RATIONAL, 3, (int)cam_AsShotNeutral}, … … 147 157 {0xC630, T_RATIONAL, 4, (int)&camera_sensor.lens_info}, 148 158 {0xC65A, T_SHORT|T_PTR,1, (int)&camera_sensor.calibration_illuminant1}, 159 {0xC65B, T_SHORT|T_PTR,1, (int)&camera_sensor.calibration_illuminant2}, 160 {0xC714, T_SRATIONAL, 9, (int)&camera_sensor.forward_matrix1}, 161 {0xC715, T_SRATIONAL, 9, (int)&camera_sensor.forward_matrix2}, 149 162 }; 150 163 … … 287 300 ifd0[DNG_VERSION_INDEX].offset = BE(0x01010000); 288 301 ifd1[BADPIXEL_OPCODE_INDEX].type |= T_SKIP; 289 ifd_list[1].count = DIR_SIZE(ifd1) - 1;290 302 } 291 303 else … … 294 306 ifd0[DNG_VERSION_INDEX].offset = BE(0x01030000); 295 307 ifd1[BADPIXEL_OPCODE_INDEX].type &= ~T_SKIP; 296 ifd_list[1].count = DIR_SIZE(ifd1);297 308 } 298 309 … … 310 321 // If no GPS then remove the GPS data from the header - assumes gps_ifd is the last one in ifd_list 311 322 ifd_count--; 312 ifd_list[0].count = DIR_SIZE(ifd0) - 1; // Entry 0x8825 won't be saved so don't count it313 323 ifd0[GPS_IFD_INDEX].type |= T_SKIP; // mark entry so it is skipped 314 324 } … … 325 335 exif_ifd[FLASH_MODE_INDEX].offset = get_flash_mode_for_exif(exif_data.flash_mode, exif_data.flash_fired); 326 336 exif_ifd[SSTIME_INDEX].count = exif_ifd[SSTIME_ORIG_INDEX].count = strlen(cam_subsectime)+1; 337 338 // Skip color matrix and calibration entries that aren't defined for the camera 339 if (camera_sensor.calibration_illuminant2 == 0) 340 { 341 ifd0[ILLUMINANT2_INDEX].type |= T_SKIP; 342 ifd0[COLOR_MATRIX2_INDEX].type |= T_SKIP; 343 } 344 if (camera_sensor.has_calibration1 == 0) ifd0[CALIBRATION1_INDEX].type |= T_SKIP; 345 if (camera_sensor.has_calibration2 == 0) ifd0[CALIBRATION2_INDEX].type |= T_SKIP; 346 if (camera_sensor.has_forwardmatrix1 == 0) ifd0[FORWARD_MATRIX1_INDEX].type |= T_SKIP; 347 if (camera_sensor.has_forwardmatrix2 == 0) ifd0[FORWARD_MATRIX2_INDEX].type |= T_SKIP; 348 349 // fixup up IFD count values, exclude skipped entries 350 for (j=0;j<ifd_count;j++) 351 { 352 ifd_list[j].count = 0; 353 for(i=0; i<ifd_list[j].entry_count; i++) 354 { 355 if ((ifd_list[j].entry[i].type & T_SKIP) == 0) // Exclude skipped entries (e.g. GPS info if camera doesn't have GPS) 356 { 357 ifd_list[j].count++; 358 } 359 } 360 } 327 361 328 362 // calculating offset of RAW data and count of entries for each IFD … … 647 681 for (j=0; j<DNG_TH_WIDTH; j++) 648 682 { 649 x = ((camera_sensor. jpeg.x + (camera_sensor.jpeg.width * j) / DNG_TH_WIDTH) & 0xFFFFFFFE) + xadj;650 y = ((camera_sensor. jpeg.y + (camera_sensor.jpeg.height * i) / DNG_TH_HEIGHT) & 0xFFFFFFFE) + yadj;683 x = ((camera_sensor.active_area.x1 + camera_sensor.jpeg.x + (camera_sensor.jpeg.width * j) / DNG_TH_WIDTH) & 0xFFFFFFFE) + xadj; 684 y = ((camera_sensor.active_area.y1 + camera_sensor.jpeg.y + (camera_sensor.jpeg.height * i) / DNG_TH_HEIGHT) & 0xFFFFFFFE) + yadj; 651 685 652 686 *buf++ = gamma[get_raw_pixel(x,y)>>shift]; // red pixel -
trunk/core/main.c
r1863 r1866 47 47 { -1 , 2 }, 48 48 #endif 49 #if defined(cam_CFAPattern) 50 cam_CFAPattern, 51 #else 52 0, 53 #endif 49 54 #if defined(CAM_COLORMATRIX1) 55 cam_CalibrationIlluminant1, 50 56 { CAM_COLORMATRIX1 }, 51 cam_CFAPattern, cam_CalibrationIlluminant1, 52 #else 53 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 54 0, 0, 57 #else 58 0, 59 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 60 #endif 61 #if defined(CAM_COLORMATRIX2) 62 cam_CalibrationIlluminant2, 63 { CAM_COLORMATRIX2 }, 64 #else 65 0, 66 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 67 #endif 68 #if defined(CAM_CAMERACALIBRATION1) 69 1, 70 { CAM_CAMERACALIBRATION1 }, 71 #else 72 0, 73 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 74 #endif 75 #if defined(CAM_CAMERACALIBRATION2) 76 1, 77 { CAM_CAMERACALIBRATION2 }, 78 #else 79 0, 80 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 81 #endif 82 #if defined(CAM_FORWARDMATRIX1) 83 1, 84 { CAM_FORWARDMATRIX1 }, 85 #else 86 0, 87 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 88 #endif 89 #if defined(CAM_FORWARDMATRIX2) 90 1, 91 { CAM_FORWARDMATRIX2 }, 92 #else 93 0, 94 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 55 95 #endif 56 96 }; -
trunk/core/raw.c
r1810 r1866 213 213 } 214 214 #elif CAM_SENSOR_BITS_PER_PIXEL==14 215 unsigned char* addr=(unsigned char*)get_raw_image_addr()+y*camera_sensor.raw_rowlen+(x/8)*14; 216 switch (x%8) { 217 case 0: addr[ 0]=(addr[0]&0x03)|(value<< 2); addr[ 1]=value>>6; break; 218 case 1: addr[ 0]=(addr[0]&0xFC)|(value>>12); addr[ 2]=(addr[ 2]&0x0F)|(value<< 4); addr[ 3]=value>>4; break; 219 case 2: addr[ 2]=(addr[2]&0xF0)|(value>>10); addr[ 4]=(addr[ 4]&0x3F)|(value<< 6); addr[ 5]=value>>2; break; 220 case 3: addr[ 4]=(addr[4]&0xC0)|(value>> 8); addr[ 7]=value; break; 221 case 4: addr[ 6]=value>>6; addr[ 9]=(addr[ 9]&0x03)|(value<< 2); break; 222 case 5: addr[ 8]=value>>4; addr[ 9]=(addr[ 9]&0x3F)|(value>>12); addr[11]=(addr[11]&0x0F)|(value<<4); break; 223 case 6: addr[10]=value>>2; addr[11]=(addr[11]&0xF0)|(value>>10); addr[13]=(addr[13]&0x3F)|(value<<6); break; 224 case 7: addr[12]=value; addr[13]=(addr[13]&0xC0)|(value>> 8); break; 225 } 215 226 #else 216 227 #error define set_raw_pixel for sensor bit depth … … 235 246 unsigned char* addr=(unsigned char*)get_raw_image_addr()+y*camera_sensor.raw_rowlen+(x/4)*6; 236 247 switch (x%4) { 237 case 0: return ((unsigned short)(addr[1]) << 4) | (addr[0] >> 4);248 case 0: return ((unsigned short)(addr[1]) << 4) | (addr[0] >> 4); 238 249 case 1: return ((unsigned short)(addr[0] & 0x0F) << 8) | (addr[3]); 239 case 2: return ((unsigned short)(addr[2]) << 4) | (addr[5] >> 4);250 case 2: return ((unsigned short)(addr[2]) << 4) | (addr[5] >> 4); 240 251 case 3: return ((unsigned short)(addr[5] & 0x0F) << 8) | (addr[4]); 241 252 } 242 253 #elif CAM_SENSOR_BITS_PER_PIXEL==14 243 return CAM_BLACK_LEVEL; 254 unsigned char* addr=(unsigned char*)get_raw_image_addr()+y*camera_sensor.raw_rowlen+(x/8)*14; 255 switch (x%8) { 256 case 0: return ((unsigned short)(addr[ 1]) << 6) | (addr[ 0] >> 2); 257 case 1: return ((unsigned short)(addr[ 0] & 0x03) << 12) | (addr[ 3] << 4) | (addr[ 2] >> 4); 258 case 2: return ((unsigned short)(addr[ 2] & 0x0F) << 10) | (addr[ 5] << 2) | (addr[ 4] >> 6); 259 case 3: return ((unsigned short)(addr[ 4] & 0x3F) << 8) | (addr[ 7]); 260 case 4: return ((unsigned short)(addr[ 6]) << 6) | (addr[ 9] >> 2); 261 case 5: return ((unsigned short)(addr[ 9] & 0x03) << 12) | (addr[ 8] << 4) | (addr[11] >> 4); 262 case 6: return ((unsigned short)(addr[11] & 0x0F) << 10) | (addr[10] << 2) | (addr[13] >> 6); 263 case 7: return ((unsigned short)(addr[13] & 0x3F) << 8) | (addr[12]); 264 } 244 265 #else 245 266 #error define get_raw_pixel for sensor bit depth -
trunk/include/camera.h
r1863 r1866 143 143 #undef CAM_COLORMATRIX1 // DNG color profile matrix 144 144 #undef cam_CalibrationIlluminant1 // DNG color profile illuminant - set it to 17 for standard light A 145 #undef CAM_COLORMATRIX2 // DNG color profile matrix 2 146 #undef cam_CalibrationIlluminant2 // DNG color profile illuminant 2 - set it to 21 for D65 147 #undef CAM_CAMERACALIBRATION1 // DNG camera calibration matrix 1 148 #undef CAM_CAMERACALIBRATION2 // DNG camera calibration matrix 2 149 #undef CAM_FORWARDMATRIX1 // DNG camera forward matrix 1 150 #undef CAM_FORWARDMATRIX2 // DNG camera forward matrix 2 145 151 #undef CAM_DNG_EXPOSURE_BIAS // Specify DNG exposure bias value (to override default of -0.5 in the dng.c code) 146 152 #undef DNG_EXT_FROM // Extension in the cameras known extensions to replace with .DNG to allow DNG … … 266 272 int lens_info[8]; // DNG Lens Info 267 273 int exposure_bias[2]; // DNG Exposure Bias 274 int cfa_pattern; 275 int calibration_illuminant1; 268 276 int color_matrix1[18]; // DNG Color Matrix 269 int cfa_pattern, calibration_illuminant1; 277 int calibration_illuminant2; 278 int color_matrix2[18]; // DNG Color Matrix 2 279 int has_calibration1; 280 int camera_calibration1[18];// DNG Camera Calibration Matrix 1 281 int has_calibration2; 282 int camera_calibration2[18];// DNG Camera Calibration Matrix 2 283 int has_forwardmatrix1; 284 int forward_matrix1[18]; // DNG Camera Forward Matrix 1 285 int has_forwardmatrix2; 286 int forward_matrix2[18]; // DNG Camera Forward Matrix 1 270 287 } _cam_sensor; 271 288 -
trunk/platform/g1x/platform_camera.h
r1863 r1866 52 52 #define cam_CFAPattern 0x02010100 // Red Green Green Blue 53 53 54 #define CAM_DNG_EXPOSURE_BIAS 0,1 // Specify DNG exposure bias value to 0 (to override default of -0.5 in the dng.c code)55 56 54 #define CAM_DNG_LENS_INFO { 151,10, 604,10, 28,10, 58,10 } // See comments in camera.h 57 55 58 // need fixing *****************************************************59 #define cam_CalibrationIlluminant1 156 //From G1 X native RAW file as converted to DNG by Adobe convertor 57 #define cam_CalibrationIlluminant1 17 // Standard Light A 60 58 #define CAM_COLORMATRIX1 \ 61 544808, 100000, -174047, 100000, -80399, 100000, \ 62 -75055, 100000, 440444, 100000, 11367, 100000, \ 63 -5801, 100000, 71589, 100000, 118914, 100000 59 8138, 10000, -2281, 10000, -659, 10000, \ 60 -3453, 10000, 11006, 10000, 2816, 10000, \ 61 -297, 10000, 1118, 10000, 6471, 10000 62 #define cam_CalibrationIlluminant2 21 // D65 63 #define CAM_COLORMATRIX2 \ 64 7378, 10000, -1255, 10000, -1043, 10000, \ 65 -4088, 10000, 12251, 10000, 2048, 10000, \ 66 -876, 10000, 1946, 10000, 5805, 10000 67 #define CAM_CAMERACALIBRATION1 \ 68 10102, 10000, 0, 10000, 0, 10000, \ 69 0, 10000, 10000, 10000, 0, 10000, \ 70 0, 10000, 00000, 10000, 10233, 10000 71 #define CAM_CAMERACALIBRATION2 \ 72 10102, 10000, 0, 10000, 0, 10000, \ 73 0, 10000, 10000, 10000, 0, 10000, \ 74 0, 10000, 00000, 10000, 10233, 10000 75 #define CAM_FORWARDMATRIX1 \ 76 7310, 10000, 833, 10000, 1500, 10000, \ 77 2013, 10000, 8875, 10000, -888, 10000, \ 78 34, 10000, -4122, 10000, 12339, 10000 79 #define CAM_FORWARDMATRIX2 \ 80 7010, 10000, 1653, 10000, 980, 10000, \ 81 2351, 10000, 9551, 10000, -1902, 10000, \ 82 177, 10000, -2144, 10000, 10218, 10000 64 83 65 84 // Sensor size, DNG image size & cropping
Note: See TracChangeset
for help on using the changeset viewer.