| 1 | // camera.h |
|---|
| 2 | |
|---|
| 3 | // This file contains the default values for various settings that may change across camera models. |
|---|
| 4 | // Setting values specific to each camera model can be found in the platform/XXX/platform_camera.h file for camera. |
|---|
| 5 | |
|---|
| 6 | // If adding a new settings value put a suitable default value in here, along with documentation on |
|---|
| 7 | // what the setting does and how to determine the correct value. |
|---|
| 8 | // If the setting should not have a default value then add it here using the '#undef' directive |
|---|
| 9 | // along with appropriate documentation. |
|---|
| 10 | |
|---|
| 11 | #ifndef CAMERA_H |
|---|
| 12 | #define CAMERA_H |
|---|
| 13 | |
|---|
| 14 | //========================================================== |
|---|
| 15 | // Camera-dependent settings |
|---|
| 16 | //========================================================== |
|---|
| 17 | |
|---|
| 18 | //---------------------------------------------------------- |
|---|
| 19 | // Default values |
|---|
| 20 | //---------------------------------------------------------- |
|---|
| 21 | |
|---|
| 22 | #undef CAM_DRYOS // Camera is DryOS-based |
|---|
| 23 | #undef CAM_PROPSET // Camera's properties group (the generation) |
|---|
| 24 | #undef CAM_DRYOS_2_3_R39 // Define for cameras with DryOS release R39 or greater |
|---|
| 25 | #undef CAM_DRYOS_2_3_R47 // Define for cameras with DryOS release R47 or greater |
|---|
| 26 | |
|---|
| 27 | #undef CAM_SWIVEL_SCREEN // Camera has rotated LCD screen |
|---|
| 28 | #define CAM_USE_ZOOM_FOR_MF 1 // Zoom lever can be used for manual focus adjustments |
|---|
| 29 | #undef CAM_ADJUSTABLE_ALT_BUTTON // ALT-button can be set from menu |
|---|
| 30 | #define CAM_REMOTE 1 // Camera supports USB-remote |
|---|
| 31 | #undef SYNCHABLE_REMOTE_NOT_ENABLED // Disable support for synchable remote switch (in kbd.c) TODO only used by one camera ??? |
|---|
| 32 | #define CAM_SYNCH 1 // Camera supports SDM precision synch |
|---|
| 33 | #undef CAM_MULTIPART // Camera supports SD-card multipartitioning |
|---|
| 34 | #define CAM_HAS_ZOOM_LEVER 1 // Camera has dedicated zoom buttons |
|---|
| 35 | #undef CAM_DRAW_EXPOSITION // Output expo-pair on screen (for cameras which (sometimes) don't do that) |
|---|
| 36 | #define CAM_HAS_ERASE_BUTTON 1 // Camera has dedicated erase button |
|---|
| 37 | #define CAM_HAS_IRIS_DIAPHRAGM 1 // Camera has real diaphragm mechanism (http://en.wikipedia.org/wiki/Diaphragm_%28optics%29) |
|---|
| 38 | #undef CAM_HAS_ND_FILTER // Camera has build-in ND filter |
|---|
| 39 | #define CAM_CAN_SD_OVER_NOT_IN_MF 1 // Camera allows subject distance (focus) override when not in manual focus mode |
|---|
| 40 | #undef CAM_CAN_SD_OVER_IN_AF_LOCK // Camera allows subject distance (focus) override when in AF Lock mode |
|---|
| 41 | #define CAM_CAN_SD_OVERRIDE 1 // Camera allows to do subject distance override |
|---|
| 42 | #define CAM_HAS_MANUAL_FOCUS 1 // Camera has manual focus mode |
|---|
| 43 | #define CAM_HAS_USER_TV_MODES 1 // Camera has tv-priority or manual modes with ability to set tv value |
|---|
| 44 | #undef CAM_SHOW_OSD_IN_SHOOT_MENU // On some cameras Canon shoot menu has additional functionality and useful in this case to see CHDK OSD in this mode |
|---|
| 45 | #define CAM_CAN_UNLOCK_OPTICAL_ZOOM_IN_VIDEO 1 // Camera can unlock optical zoom in video (if it is locked) |
|---|
| 46 | #undef CAM_FEATURE_FEATHER // Cameras with "feather" or touch wheel. |
|---|
| 47 | #define CAM_HAS_IS 1 // Camera has image stabilizer |
|---|
| 48 | #undef CAM_HAS_JOGDIAL // Camera has a "jog dial" |
|---|
| 49 | |
|---|
| 50 | #undef CAM_CONSOLE_LOG_ENABLED // Development: internal camera stdout -> A/stdout.txt |
|---|
| 51 | #define CAM_CHDK_HAS_EXT_VIDEO_MENU 1 // In CHDK for this camera realized adjustable video compression |
|---|
| 52 | #undef CAM_CAN_MUTE_MICROPHONE // Camera has function to mute microphone |
|---|
| 53 | |
|---|
| 54 | #define CAM_EMUL_KEYPRESS_DELAY 40 // Delay to interpret <alt>-button press as longpress |
|---|
| 55 | #define CAM_EMUL_KEYPRESS_DURATION 5 // Length of keypress emulation |
|---|
| 56 | |
|---|
| 57 | #define CAM_MENU_BORDERWIDTH 30 // Defines the width of the border on each side of the CHDK menu. The CHDK menu will have this |
|---|
| 58 | // many pixels left blank to the on each side. Should not be less than 10 to allow room for the |
|---|
| 59 | // scroll bar on the right. |
|---|
| 60 | |
|---|
| 61 | #undef CAM_DETECT_SCREEN_ERASE // Define this to add 'guard' pixel to the screen bitmap to help detect if the firmware has erase the screen |
|---|
| 62 | // If the guard pixel changes the CHDK ALT menu is forced to redraw. |
|---|
| 63 | // Take care not to place CHDK OSD elements over the guard pixel. |
|---|
| 64 | // The guard pixel is the first pixel of the top row in the screen bitmap. |
|---|
| 65 | |
|---|
| 66 | #undef CAM_TOUCHSCREEN_UI // Define to enable touch screen U/I (e.g. IXUS 310 HS) |
|---|
| 67 | #define CAM_TS_BUTTON_BORDER 0 // Define this to leave a border on each side of the OSD display for touch screen buttons. |
|---|
| 68 | // Used on the IXUS 310 to stop the OSD from overlapping the on screen buttons on each side |
|---|
| 69 | #define CAM_DISP_ALT_TEXT 1 // Display the '<ALT>' message at the bottom of the screen in ALT mode (IXUS 310 changes button color instead) |
|---|
| 70 | |
|---|
| 71 | #undef CAM_AF_SCAN_DURING_VIDEO_RECORD // CHDK can make single AF scan during video record |
|---|
| 72 | #undef CAM_HAS_VIDEO_BUTTON // Camera can take stills in video mode, and vice versa |
|---|
| 73 | #undef CAM_EV_IN_VIDEO // CHDK can change exposure in video mode |
|---|
| 74 | #define CAM_VIDEO_CONTROL 1 // pause / unpause video recordings |
|---|
| 75 | #undef CAM_VIDEO_QUALITY_ONLY // Override Video Bitrate is not supported |
|---|
| 76 | |
|---|
| 77 | #define ZOOM_OVERRIDE 0 // Shall zoom-override be used? default 0 becoz not implemented right now |
|---|
| 78 | |
|---|
| 79 | #undef CAM_REAR_CURTAIN // Camera do not have front/rear curtain flash sync in menu |
|---|
| 80 | #undef CAM_BRACKETING // Cameras that have bracketing (focus & ev) in original firmware already, most likely s- & g-series (propcase for digic III not found yet!) |
|---|
| 81 | #undef CAM_EXT_TV_RANGE // CHDK can make exposure time longer than 64s |
|---|
| 82 | #define CAM_CHDK_PTP 1 // include CHDK PTP support |
|---|
| 83 | |
|---|
| 84 | #define CAM_UNCACHED_BIT 0x10000000 // bit indicating the uncached memory |
|---|
| 85 | |
|---|
| 86 | #define CAM_MAKE "Canon" |
|---|
| 87 | #define CAM_SENSOR_BITS_PER_PIXEL 10 // Bits per pixel. 10 is standard, 12 is supported except for curves |
|---|
| 88 | #define CAM_WHITE_LEVEL ((1<<CAM_SENSOR_BITS_PER_PIXEL)-1) // 10bpp = 1023 ((1<<10)-1), 12bpp = 4095 ((1<<12)-1) |
|---|
| 89 | #define CAM_BLACK_LEVEL ((1<<(CAM_SENSOR_BITS_PER_PIXEL-5))-1) // 10bpp = 31 ((1<<5)-1), 12bpp = 127 ((1<<7)-1) |
|---|
| 90 | |
|---|
| 91 | #define CAM_BITMAP_PALETTE 1 // which color set is used for this camera |
|---|
| 92 | |
|---|
| 93 | #undef CAM_HAS_VARIABLE_ASPECT // can switch between 16:9 and 4:3 |
|---|
| 94 | |
|---|
| 95 | // by nandoide sept-2009 |
|---|
| 96 | // zebra adjust buffer height: show use at sx200is: needed for save memory space |
|---|
| 97 | #define ZEBRA_HMARGIN0 0 |
|---|
| 98 | |
|---|
| 99 | // Older cameras had a screen/bitmap buffer that was 360 pixels wide (or 480 for wide screen models) |
|---|
| 100 | // CHDK was built around this 360 pixel wide display model |
|---|
| 101 | // Newer cameras have a 720 pixel wide bitmap (960 for wide screen cameras) |
|---|
| 102 | // To accomadate this the CHDK co-ordinate system assumes a 360/480 wide buffer and the |
|---|
| 103 | // pixel drawing routines draw every pixel twice to scale the image up to the actual buffer size |
|---|
| 104 | // Define CAM_USES_ASPECT_CORRECTION with a value of 1 to enable this scaled display |
|---|
| 105 | #define CAM_USES_ASPECT_CORRECTION 0 |
|---|
| 106 | #define CAM_SCREEN_WIDTH 360 // Width of bitmap screen in CHDK co-ordinates (360 or 480) |
|---|
| 107 | #define CAM_SCREEN_HEIGHT 240 // Height of bitmap screen in CHDK co-ordinates (always 240 on all cameras so far) |
|---|
| 108 | #define CAM_BITMAP_WIDTH 360 // Actual width of bitmap screen in bytes (may be larger than displayed area) |
|---|
| 109 | #define CAM_BITMAP_HEIGHT 240 // Actual height of bitmap screen in rows (240 or 270) |
|---|
| 110 | |
|---|
| 111 | #define EDGE_HMARGIN 0 // define sup and inf screen margins on edge overlay without overlay. Necessary to save memory buffer space. sx200is needs values other than 0 |
|---|
| 112 | // end of section by nandoid |
|---|
| 113 | |
|---|
| 114 | #undef CAM_QUALITY_OVERRIDE // define this in platform_camera.h to enable 'Super Fine' JPEG compression mode |
|---|
| 115 | // used to allow super fine JPEG option on cameras where this has been removed |
|---|
| 116 | // from the Canon menu. Note: may not actually work on all cameras. |
|---|
| 117 | |
|---|
| 118 | #undef CAM_ZEBRA_ASPECT_ADJUST // zebra needs to account for real bitmap size being different from what lib.c reports |
|---|
| 119 | // also used by some cameras with normal bitmap layouts for memory saving ? |
|---|
| 120 | #undef CAM_ZEBRA_NOBUF // zebra draws directly on bitmap buffer. Requires above as well |
|---|
| 121 | |
|---|
| 122 | #undef CAM_DATE_FOLDER_NAMING // set if camera uses date based folder naming (Option "Create Folder" in Canon Menu) and get_target_dir_name is implemented |
|---|
| 123 | |
|---|
| 124 | #undef CAM_KEY_CLICK_DELAY // additional delay between press and release for scripted click |
|---|
| 125 | #define CAM_KEY_PRESS_DELAY 20 // delay after a press - TODO can we combine this with above ? |
|---|
| 126 | #define CAM_KEY_RELEASE_DELAY 20 // delay after a release - TODO do we really need to wait after release ? |
|---|
| 127 | |
|---|
| 128 | #undef CAM_DATE_FOLDER_NAMING // Camera uses date for naming image folders |
|---|
| 129 | |
|---|
| 130 | #undef CAM_STARTUP_CRASH_FILE_OPEN_FIX // enable fix for camera intermittently crash at startup when opening the conf / font files |
|---|
| 131 | // Some cameras throw "ASSERT!! FsIoNotify.c Line xxx Task name: SpyTask" in ROMLOG |
|---|
| 132 | // see http://chdk.setepontos.com/index.php?topic=6179.0 |
|---|
| 133 | |
|---|
| 134 | // RAW & DNG related values |
|---|
| 135 | #define DNG_SUPPORT 1 // Camera supports DNG format for saving of RAW images |
|---|
| 136 | #define DEFAULT_RAW_EXT 1 // extension to use for raw (see raw_exts in conf.c) |
|---|
| 137 | #undef CAM_RAW_ROWPIX // Number of pixels in RAW row (physical size of the sensor Note : as of July 2011, this value can be found in stub_entry.S for dryos cameras) |
|---|
| 138 | #undef CAM_RAW_ROWS // Number of rows in RAW (physical size of the sensor Note : as of July 2011, this value can be found in stub_entry.S for dryos cameras) |
|---|
| 139 | #undef CAM_JPEG_WIDTH // Default crop size (width) stored in DNG (to match camera JPEG size. From dimensions of the largest size jpeg your camera produces) |
|---|
| 140 | #undef CAM_JPEG_HEIGHT // Default crop size (height) stored in DNG (to match camera JPEG size. From dimensions of the largest size jpeg your camera produces) |
|---|
| 141 | #undef CAM_ACTIVE_AREA_X1 // Define usable area of the sensor - needs to be divisible by 4 - calibrate using a CHDK RAW image converted with rawconvert.exe (eg :rawconvert -12to8 -pgm -w=4480 -h=3348 photo.crw photo.pgm) |
|---|
| 142 | #undef CAM_ACTIVE_AREA_Y1 // Define usable area of the sensor - needs to be divisible by 2 - " |
|---|
| 143 | #undef CAM_ACTIVE_AREA_X2 // Define usable area of the sensor - needs to be divisible by 4 - " |
|---|
| 144 | #undef CAM_ACTIVE_AREA_Y2 // Define usable area of the sensor - needs to be divisible by 2 = " |
|---|
| 145 | #undef cam_CFAPattern // Camera Bayer sensor data layout (DNG colors are messed up if not correct - should be either 0x01000201 = [Green Blue Red Green] or 0x02010100 = [Red Green Green Blue] |
|---|
| 146 | #undef CAM_COLORMATRIX1 // DNG color profile matrix |
|---|
| 147 | #undef cam_CalibrationIlluminant1 // DNG color profile illuminant - set it to 17 for standard light A |
|---|
| 148 | #undef CAM_DNG_EXPOSURE_BIAS // Specify DNG exposure bias value (to override default of -0.5 in the dng.c code) |
|---|
| 149 | #undef DNG_EXT_FROM // Extension in the cameras known extensions to replace with .DNG to allow DNG |
|---|
| 150 | // files to be transfered over standard PTP. Only applicable to older cameras |
|---|
| 151 | |
|---|
| 152 | #undef CAM_DNG_LENS_INFO // Define this to include camera lens information in DNG files |
|---|
| 153 | // Value should be an array of 4 DNG 'RATIONAL' values specifying |
|---|
| 154 | // - min focal length in mm |
|---|
| 155 | // - max focal length in mm |
|---|
| 156 | // - max aperture at min focal length |
|---|
| 157 | // - max aperture at max focal length |
|---|
| 158 | // E.G - SX30 = { 43,10, 1505,10, 27,10, 58,10 } |
|---|
| 159 | // = 4.3 - 150.5mm, f/2.7 - f.5.8 |
|---|
| 160 | // Each pair of integers is one 'RATIONAL' value (numerator,denominator) |
|---|
| 161 | |
|---|
| 162 | #undef PARAM_CAMERA_NAME // parameter number for GetParameterData to get camera name |
|---|
| 163 | #undef PARAM_DISPLAY_MODE1 // param number for LCD display mode when camera in playback |
|---|
| 164 | #undef PARAM_DISPLAY_MODE2 // param number for LCD display mode when camera in record view hold mode |
|---|
| 165 | #undef CAM_FIRMWARE_MEMINFO // Use 'GetMemInfo' (dryos) or 'memPartInfoGet'/'memPartFindMax' (vxworks) |
|---|
| 166 | // function in firmware to get free memory details |
|---|
| 167 | // GetMemInfo should be found correctly by the gensig/finsig signature |
|---|
| 168 | // finder for all dryos based cameras. |
|---|
| 169 | |
|---|
| 170 | #undef CAM_NO_MEMPARTINFO // VXWORKS camera does not have memPartInfoGet, fall back to memPartFindMax |
|---|
| 171 | |
|---|
| 172 | |
|---|
| 173 | #undef CAM_DRIVE_MODE_FROM_TIMER_MODE // use PROPCASE_TIMER_MODE to check for multiple shot custom timer. |
|---|
| 174 | // Used to enabled bracketing in custom timer, required on many recent cameras |
|---|
| 175 | // see http://chdk.setepontos.com/index.php/topic,3994.405.html |
|---|
| 176 | |
|---|
| 177 | #undef CAM_AV_OVERRIDE_IRIS_FIX // for cameras that require _MoveIrisWithAv function to override Av (for bracketing). |
|---|
| 178 | |
|---|
| 179 | #undef CAM_DISABLE_RAW_IN_LOW_LIGHT_MODE // For cameras with 'low light' mode that does not work with raw define this |
|---|
| 180 | #undef CAM_DISABLE_RAW_IN_HQ_BURST // For cameras with 'HQ Burst' mode that does not work with raw define this |
|---|
| 181 | #undef CAM_DISABLE_RAW_IN_HANDHELD_NIGHT_SCN // For cameras with 'HandHeld Night Scene' mode that does not work with raw define this |
|---|
| 182 | |
|---|
| 183 | #undef CAM_LOAD_CUSTOM_COLORS // Define to enable loading CHDK custom colors into the camera color palette |
|---|
| 184 | // requires load_chdk_palette() and vid_get_bitmap_active_palette() to be defined |
|---|
| 185 | // correctly for the camera along with |
|---|
| 186 | #undef CAM_USE_COLORED_ICONS // If the color palette contains enough shades of red, green, yellow and grey |
|---|
| 187 | // defined then enable this use the better icons (from CHDK-DE). See gui_batt.c |
|---|
| 188 | // and gui_space.c. |
|---|
| 189 | |
|---|
| 190 | #define CAM_USB_EVENTID 0x902 // Levent ID for USB control. Changed to 0x202 in DryOS R49 so needs to be overridable. |
|---|
| 191 | |
|---|
| 192 | //---------------------------------------------------------- |
|---|
| 193 | // Override Default values for Camera if necessary |
|---|
| 194 | //---------------------------------------------------------- |
|---|
| 195 | |
|---|
| 196 | // Include the settings file for the camera model currently being compiled. |
|---|
| 197 | #include "platform_camera.h" |
|---|
| 198 | |
|---|
| 199 | //========================================================== |
|---|
| 200 | // END of Camera-dependent settings |
|---|
| 201 | //========================================================== |
|---|
| 202 | |
|---|
| 203 | // For newer cameras where the screen bitmap is double the width we need to scale |
|---|
| 204 | // the CHDK horizontal (X) co-ordinates |
|---|
| 205 | #if CAM_USES_ASPECT_CORRECTION |
|---|
| 206 | #define ASPECT_XCORRECTION(x) ((x)<<1) // See comments for CAM_USES_ASPECT_CORRECTION above |
|---|
| 207 | #else |
|---|
| 208 | #define ASPECT_XCORRECTION(x) (x) // See comments for CAM_USES_ASPECT_CORRECTION above |
|---|
| 209 | #endif |
|---|
| 210 | |
|---|
| 211 | // curves only work in 10bpp for now |
|---|
| 212 | #if CAM_SENSOR_BITS_PER_PIXEL != 10 |
|---|
| 213 | #undef OPT_CURVES |
|---|
| 214 | #endif |
|---|
| 215 | |
|---|
| 216 | #ifndef OPT_PTP |
|---|
| 217 | #undef CAM_CHDK_PTP |
|---|
| 218 | #endif |
|---|
| 219 | |
|---|
| 220 | //========================================================== |
|---|
| 221 | // Data Structure to store camera specific information |
|---|
| 222 | // Used by modules to ensure module code is platform independent |
|---|
| 223 | |
|---|
| 224 | typedef struct { |
|---|
| 225 | int bits_per_pixel; |
|---|
| 226 | int black_level; |
|---|
| 227 | int white_level; |
|---|
| 228 | int raw_rows, raw_rowpix, raw_rowlen, raw_size; |
|---|
| 229 | union // DNG JPEG info |
|---|
| 230 | { |
|---|
| 231 | struct |
|---|
| 232 | { |
|---|
| 233 | int x, y; // DNG JPEG top left corner |
|---|
| 234 | int width, height; // DNG JPEG size |
|---|
| 235 | } jpeg; |
|---|
| 236 | struct |
|---|
| 237 | { |
|---|
| 238 | int origin[2]; |
|---|
| 239 | int size[2]; |
|---|
| 240 | } crop; |
|---|
| 241 | }; |
|---|
| 242 | union // DNG active sensor area (Y1, X1, Y2, X2) |
|---|
| 243 | { |
|---|
| 244 | struct |
|---|
| 245 | { |
|---|
| 246 | int y1, x1, y2, x2; |
|---|
| 247 | } active_area; |
|---|
| 248 | int dng_active_area[4]; |
|---|
| 249 | }; |
|---|
| 250 | int lens_info[8]; // DNG Lens Info |
|---|
| 251 | int exposure_bias[2]; // DNG Exposure Bias |
|---|
| 252 | int color_matrix1[18]; // DNG Color Matrix |
|---|
| 253 | int cfa_pattern, calibration_illuminant1; |
|---|
| 254 | } _cam_sensor; |
|---|
| 255 | |
|---|
| 256 | extern _cam_sensor camera_sensor; |
|---|
| 257 | |
|---|
| 258 | typedef struct |
|---|
| 259 | { |
|---|
| 260 | unsigned int width, height, size; // Size of bitmap screen in CHDK co-ordinates |
|---|
| 261 | unsigned int buffer_width, buffer_height, buffer_size; // Physical size of bitmap screen |
|---|
| 262 | int edge_hmargin, ts_button_border; // margin and touch-screen adjustment values |
|---|
| 263 | } _cam_screen; |
|---|
| 264 | |
|---|
| 265 | extern _cam_screen camera_screen; |
|---|
| 266 | |
|---|
| 267 | typedef struct |
|---|
| 268 | { |
|---|
| 269 | struct |
|---|
| 270 | { |
|---|
| 271 | int camera_name; |
|---|
| 272 | } params; |
|---|
| 273 | struct |
|---|
| 274 | { |
|---|
| 275 | int gps; |
|---|
| 276 | int orientation_sensor; |
|---|
| 277 | int tv; |
|---|
| 278 | int av; |
|---|
| 279 | int min_av; |
|---|
| 280 | int ev_correction_2; |
|---|
| 281 | int flash_mode; |
|---|
| 282 | int flash_fire; |
|---|
| 283 | int metering_mode; |
|---|
| 284 | int wb_adj; |
|---|
| 285 | } props; |
|---|
| 286 | } _cam_info; |
|---|
| 287 | |
|---|
| 288 | extern _cam_info camera_info; |
|---|
| 289 | |
|---|
| 290 | //========================================================== |
|---|
| 291 | |
|---|
| 292 | #endif /* CAMERA_H */ |
|---|