source: trunk/include/camera.h @ 1570

Revision 1570, 19.2 KB checked in by philmoz, 16 months ago (diff)

Add support for cameras that allow subject distance overrides greater than the current max value of 65535.

  • Property svn:eol-style set to native
RevLine 
[1140]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
[515]11#ifndef CAMERA_H
12#define CAMERA_H
13
14//==========================================================
15// Camera-dependent settings
16//==========================================================
17
18//----------------------------------------------------------
19// Default values
20//----------------------------------------------------------
[901]21
[1140]22#undef  CAM_DRYOS                               // Camera is DryOS-based
23#undef  CAM_PROPSET                             // Camera's properties group (the generation)
[1253]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
[901]26
[1140]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
[1270]37#define CAM_HAS_IRIS_DIAPHRAGM      1           // Camera has real diaphragm mechanism (http://en.wikipedia.org/wiki/Diaphragm_%28optics%29)
[1140]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
[1457]40#undef  CAM_CAN_SD_OVER_IN_AF_LOCK              // Camera allows subject distance (focus) override when in AF Lock mode
[1140]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"
[515]49
[1140]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
[515]53
[1140]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
[515]56
[1250]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.
[936]60
[1250]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
[1338]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
[1140]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
[577]76
[1140]77#define ZOOM_OVERRIDE               0           // Shall zoom-override be used? default 0 becoz not implemented right now
[1007]78
[1140]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
[515]83
[1140]84#define CAM_UNCACHED_BIT            0x10000000  // bit indicating the uncached memory
[720]85
[1140]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
[1213]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)
[1079]90
[1140]91#define CAM_BITMAP_PALETTE          1           // which color set is used for this camera
[740]92
[1140]93#undef CAM_HAS_VARIABLE_ASPECT                  // can switch between 16:9 and 4:3
[901]94
[1140]95// by nandoide sept-2009
96// zebra adjust buffer height: show use at sx200is: needed for save memory space
97#define ZEBRA_HMARGIN0              0
[740]98
[1365]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
[1527]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)
[901]110
[1140]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
[901]113
[1223]114#undef CAM_QUALITY_OVERRIDE                     // define this in platform_camera.h to enable 'Super Fine' JPEG compression mode
[1260]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.
[901]117
[1140]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
[901]121
[1140]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
[1007]123
[1140]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 ?
[1079]127
[1140]128#undef  CAM_DATE_FOLDER_NAMING                  // Camera uses date for naming image folders
[1105]129
[1270]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
[1140]132                                                // see http://chdk.setepontos.com/index.php?topic=6179.0
[515]133
[1140]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)
[1307]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]
[1140]146#undef  CAM_COLORMATRIX1                        // DNG color profile matrix
[1307]147#undef  cam_CalibrationIlluminant1              // DNG color profile illuminant - set it to 17 for standard light A
[1140]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
[515]151
[1410]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
[1260]162#undef  PARAM_CAMERA_NAME                        // parameter number for GetParameterData to get camera name
[1484]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
[1260]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.
[1175]169
[1260]170#undef CAM_NO_MEMPARTINFO                        // VXWORKS camera does not have memPartInfoGet, fall back to memPartFindMax
[1224]171
172
[1260]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
[1224]176
[1260]177#undef CAM_AV_OVERRIDE_IRIS_FIX                  // for cameras that require _MoveIrisWithAv function to override Av (for bracketing).
[1237]178
[1416]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
[1245]182
[1352]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
[1412]190#define CAM_USB_EVENTID         0x902           // Levent ID for USB control. Changed to 0x202 in DryOS R49 so needs to be overridable.
191
[1570]192#undef CAM_NEED_SET_ZOOM_DELAY                  // Define to add a delay after setting the zoom position before resetting the focus position in shooting_set_zoom
193
194#define CAMERA_MIN_DIST         0               // Define min distance that can be set in _MoveFocusLensToDistance (allow override - e.g. G12 min dist = 1)
195#define CAMERA_MAX_DIST         65535           // Define max distance that can be set in _MoveFocusLensToDistance (allow override for superzooms - SX30/SX40)
196
[901]197//----------------------------------------------------------
[1140]198// Override Default values for Camera if necessary
[925]199//----------------------------------------------------------
200
[1140]201// Include the settings file for the camera model currently being compiled.
202#include "platform_camera.h"
[515]203
204//==========================================================
[901]205// END of Camera-dependent settings
206//==========================================================
[515]207
[1365]208// For newer cameras where the screen bitmap is double the width we need to scale
209// the CHDK horizontal (X) co-ordinates
210#if CAM_USES_ASPECT_CORRECTION
211#define ASPECT_XCORRECTION(x)   ((x)<<1)    // See comments for CAM_USES_ASPECT_CORRECTION above
212#else
213#define ASPECT_XCORRECTION(x)   (x)         // See comments for CAM_USES_ASPECT_CORRECTION above
214#endif
[901]215
[720]216// curves only work in 10bpp for now
217#if CAM_SENSOR_BITS_PER_PIXEL != 10
218#undef OPT_CURVES
219#endif
220
[957]221#ifndef OPT_PTP
222#undef CAM_CHDK_PTP
223#endif
224
[1527]225//==========================================================
226// Data Structure to store camera specific information
227// Used by modules to ensure module code is platform independent
228
229typedef struct {
230        int api_version;                        // version of this structure
231
232    int bits_per_pixel;
233    int black_level;
234    int white_level;
235    int raw_rows, raw_rowpix, raw_rowlen, raw_size;
236    union                       // DNG JPEG info
237    {
238        struct
239        {
240            int x, y;           // DNG JPEG top left corner
241            int width, height;  // DNG JPEG size
242        } jpeg;
243        struct
244        {
245            int origin[2];
246            int size[2];
247        } crop;
248    };
249    union                       // DNG active sensor area (Y1, X1, Y2, X2)
250    {
251        struct
252        {
253            int y1, x1, y2, x2;
254        } active_area;
255        int dng_active_area[4];
256    };
257    int lens_info[8];           // DNG Lens Info
258    int exposure_bias[2];       // DNG Exposure Bias
259    int color_matrix1[18];      // DNG Color Matrix
260    int cfa_pattern, calibration_illuminant1;
261} _cam_sensor;
262
263extern _cam_sensor camera_sensor;
264
265// if this struct changed, please change gui_version.common_api
266typedef struct
267{
268    unsigned int    width, height, size;                        // Size of bitmap screen in CHDK co-ordinates
269    unsigned int    buffer_width, buffer_height, buffer_size;   // Physical size of bitmap screen
270    int             edge_hmargin, ts_button_border;             // margin and touch-screen adjustment values
271} _cam_screen;
272
273extern _cam_screen camera_screen;
274
275typedef struct
276{
277        int api_version;                        // version of this structure
278
279    struct
280    {
281        int camera_name;
282    } params;
283    struct
284    {
285        int gps;
286        int orientation_sensor;
287        int tv;
288        int av;
289        int min_av;
290        int ev_correction_2;
291        int flash_mode;
292        int flash_fire;
293        int metering_mode;
294        int wb_adj;
295    } props;
296    int rombaseaddr, maxramaddr;
297} _cam_info;
298
299extern _cam_info camera_info;
300
301//==========================================================
302
[515]303#endif /* CAMERA_H */
Note: See TracBrowser for help on using the repository browser.