source: trunk/include/camera.h @ 1797

Revision 1797, 20.4 KB checked in by philmoz, 14 months ago (diff)

Add option to disable the 'zoom assist' button on the SX30 and SX40.

  • Property svn:eol-style set to native
Line 
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_R31                   // Define for cameras with DryOS release R31 or greater -> G10
25    #undef  CAM_DRYOS_2_3_R39                   // Define for cameras with DryOS release R39 or greater
26    #undef  CAM_DRYOS_2_3_R47                   // Define for cameras with DryOS release R47 or greater -> Cameras can boot from FAT32
27
28    #undef  CAM_HAS_CMOS                        // Camera has CMOS sensor
29    #undef  CAM_SWIVEL_SCREEN                   // Camera has rotated LCD screen
30    #define CAM_USE_ZOOM_FOR_MF             1   // Zoom lever can be used for manual focus adjustments
31    #undef  CAM_ADJUSTABLE_ALT_BUTTON           // ALT-button can be set from menu
32    #define CAM_REMOTE                      1   // Camera supports USB-remote
33    #undef  SYNCHABLE_REMOTE_NOT_ENABLED        // Disable support for synchable remote switch (in kbd.c) TODO only used by one camera ???
34    #define CAM_SYNCH                       1   // Camera supports SDM precision synch
35    #undef  CAM_MULTIPART                       // Camera supports SD-card multipartitioning
36    #define CAM_HAS_ZOOM_LEVER              1   // Camera has dedicated zoom buttons
37    #undef  CAM_DRAW_EXPOSITION                 // Output expo-pair on screen (for cameras which (sometimes) don't do that)
38    #define CAM_HAS_ERASE_BUTTON            1   // Camera has dedicated erase button
39    #define CAM_HAS_IRIS_DIAPHRAGM          1   // Camera has real diaphragm mechanism (http://en.wikipedia.org/wiki/Diaphragm_%28optics%29)
40    #undef  CAM_HAS_ND_FILTER                   // Camera has build-in ND filter
41    #define CAM_CAN_SD_OVER_NOT_IN_MF       1   // Camera allows subject distance (focus) override when not in manual focus mode
42    #undef  CAM_CAN_SD_OVER_IN_AF_LOCK          // Camera allows subject distance (focus) override when in AF Lock mode
43    #define CAM_CAN_SD_OVERRIDE             1   // Camera allows to do subject distance override
44    #define CAM_HAS_MANUAL_FOCUS            1   // Camera has manual focus mode
45    #define CAM_HAS_USER_TV_MODES           1   // Camera has tv-priority or manual modes with ability to set tv value
46    #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
47    #define CAM_CAN_UNLOCK_OPTICAL_ZOOM_IN_VIDEO 1 // Camera can unlock optical zoom in video (if it is locked)
48    #undef  CAM_FEATURE_FEATHER                 // Cameras with "feather" or touch wheel.
49    #define CAM_HAS_IS                      1   // Camera has image stabilizer
50    #undef  CAM_HAS_JOGDIAL                     // Camera has a "jog dial"
51
52    #undef  CAM_CONSOLE_LOG_ENABLED             // Development: internal camera stdout -> A/stdout.txt
53    #define CAM_CHDK_HAS_EXT_VIDEO_MENU     1   // In CHDK for this camera realized adjustable video compression
54    #undef  CAM_CAN_MUTE_MICROPHONE             // Camera has function to mute microphone
55
56    #define CAM_EMUL_KEYPRESS_DELAY         40  // Delay to interpret <alt>-button press as longpress
57    #define CAM_EMUL_KEYPRESS_DURATION      5   // Length of keypress emulation
58
59    #define CAM_MENU_BORDERWIDTH            30  // Defines the width of the border on each side of the CHDK menu. The CHDK menu will have this
60                                                // many pixels left blank to the on each side. Should not be less than 10 to allow room for the
61                                                // scroll bar on the right.
62    #define CAM_DETECT_SCREEN_ERASE         1   // Define this to add 'guard' pixel to the screen bitmap to help detect if the firmware has erase the screen
63                                                // If the guard pixel changes the CHDK ALT menu is forced to redraw.
64                                                // Take care not to place CHDK OSD elements over the guard pixel.
65                                                // The guard pixel is the first pixel of the top row in the screen bitmap.
66
67    #undef  CAM_TOUCHSCREEN_UI                  // Define to enable touch screen U/I (e.g. IXUS 310 HS)
68    #define CAM_TS_BUTTON_BORDER            0   // Define this to leave a border on each side of the OSD display for touch screen buttons.
69                                                // Used on the IXUS 310 to stop the OSD from overlapping the on screen buttons on each side
70    #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)
71
72    #undef  CAM_AF_SCAN_DURING_VIDEO_RECORD     // CHDK can make single AF scan during video record
73    #undef  CAM_HAS_VIDEO_BUTTON                // Camera can take stills in video mode, and vice versa
74    #undef  CAM_EV_IN_VIDEO                     // CHDK can change exposure in video mode
75    #define CAM_VIDEO_CONTROL               1   // pause / unpause video recordings
76    #undef  CAM_VIDEO_QUALITY_ONLY              // Override Video Bitrate is not supported
77    #undef  CAM_CHDK_HAS_EXT_VIDEO_TIME         // Camera can override time limit of video record -> sx220/230
78
79    #define ZOOM_OVERRIDE                   0   // Shall zoom-override be used? default 0 becoz not implemented right now
80
81    #undef  CAM_REAR_CURTAIN                    // Camera do not have front/rear curtain flash sync in menu
82    #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!)
83    #undef  CAM_EXT_TV_RANGE                    // CHDK can make exposure time longer than 64s
84    #define CAM_CHDK_PTP                    1   // include CHDK PTP support
85
86    #define CAM_UNCACHED_BIT                0x10000000 // bit indicating the uncached memory
87
88    #define CAM_MAKE                        "Canon"
89    #define CAM_SENSOR_BITS_PER_PIXEL       10  // Bits per pixel. 10 is standard, 12 is supported except for curves
90    #define CAM_WHITE_LEVEL                 ((1<<CAM_SENSOR_BITS_PER_PIXEL)-1)      // 10bpp = 1023 ((1<<10)-1), 12bpp = 4095 ((1<<12)-1)
91    #define CAM_BLACK_LEVEL                 ((1<<(CAM_SENSOR_BITS_PER_PIXEL-5))-1)  // 10bpp = 31 ((1<<5)-1),    12bpp = 127 ((1<<7)-1)
92
93    #define CAM_BITMAP_PALETTE              1   // which color set is used for this camera
94
95    #undef  CAM_HAS_VARIABLE_ASPECT             // can switch between 16:9 and 4:3
96
97    // Older cameras had a screen/bitmap buffer that was 360 pixels wide (or 480 for wide screen models)
98    // CHDK was built around this 360 pixel wide display model
99    // Newer cameras have a 720 pixel wide bitmap (960 for wide screen cameras)
100    // To accomadate this the CHDK co-ordinate system assumes a 360/480 wide buffer and the
101    // pixel drawing routines draw every pixel twice to scale the image up to the actual buffer size
102    // Define CAM_USES_ASPECT_CORRECTION with a value of 1 to enable this scaled display
103    #define CAM_USES_ASPECT_CORRECTION      0
104    #define CAM_SCREEN_WIDTH                360 // Width of bitmap screen in CHDK co-ordinates (360 or 480)
105    #define CAM_SCREEN_HEIGHT               240 // Height of bitmap screen in CHDK co-ordinates (always 240 on all cameras so far)
106    #define CAM_BITMAP_WIDTH                360 // Actual width of bitmap screen in bytes (may be larger than displayed area)
107    #define CAM_BITMAP_HEIGHT               240 // Actual height of bitmap screen in rows (240 or 270)
108
109    #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
110
111    #undef CAM_QUALITY_OVERRIDE                 // define this in platform_camera.h to enable 'Super Fine' JPEG compression mode
112                                                // used to allow super fine JPEG option on cameras where this has been removed
113                                                // from the Canon menu. Note: may not actually work on all cameras.
114
115    #undef  CAM_ZEBRA_ASPECT_ADJUST             // zebra needs to account for real bitmap size being different from what lib.c reports
116                                                // also used by some cameras with normal bitmap layouts for memory saving ?
117    #undef  CAM_ZEBRA_NOBUF                     // zebra draws directly on bitmap buffer. Requires above as well
118   
119    #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
120   
121    #undef  CAM_KEY_CLICK_DELAY                 // additional delay between press and release for scripted click
122    #define CAM_KEY_PRESS_DELAY             20  // delay after a press - TODO can we combine this with above ?
123    #define CAM_KEY_RELEASE_DELAY           20  // delay after a release - TODO do we really need to wait after release ?
124
125    #undef  CAM_STARTUP_CRASH_FILE_OPEN_FIX     // enable fix for camera intermittently crash at startup when opening the conf / font files
126                                                // Some cameras throw "ASSERT!! FsIoNotify.c Line xxx    Task name: SpyTask" in ROMLOG
127   
128    // RAW & DNG related values
129    #define DNG_SUPPORT                     1   // Camera supports DNG format for saving of RAW images
130    #define DEFAULT_RAW_EXT                 1   // extension to use for raw (see raw_exts in conf.c)
131    #define DNG_BADPIXEL_VALUE_LIMIT        0   // Max value of 'bad' pixel - this value or lower is considered a defective pixel on the sensor
132    #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)
133    #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)
134    #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)
135    #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)
136    #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)
137    #undef  CAM_ACTIVE_AREA_Y1                  // Define usable area of the sensor - needs to be divisible by 2 - "
138    #undef  CAM_ACTIVE_AREA_X2                  // Define usable area of the sensor - needs to be divisible by 4 - "
139    #undef  CAM_ACTIVE_AREA_Y2                  // Define usable area of the sensor - needs to be divisible by 2 = "
140    #undef  cam_CFAPattern                      // Camera Bayer sensor data layout (DNG colors are messed up if not correct)
141                                                //   should be 0x01000201 = [Green Blue Red Green], 0x02010100 = [Red Green Green Blue] or 0x01020001 = [Green Red Blue Green]
142    #undef  CAM_COLORMATRIX1                    // DNG color profile matrix
143    #undef  cam_CalibrationIlluminant1          // DNG color profile illuminant - set it to 17 for standard light A
144    #undef  CAM_DNG_EXPOSURE_BIAS               // Specify DNG exposure bias value (to override default of -0.5 in the dng.c code)
145    #undef  DNG_EXT_FROM                        // Extension in the cameras known extensions to replace with .DNG to allow DNG
146                                                // files to be transfered over standard PTP. Only applicable to older cameras
147
148    #undef  CAM_DNG_LENS_INFO                   // Define this to include camera lens information in DNG files
149                                                // Value should be an array of 4 DNG 'RATIONAL' values specifying
150                                                //   - min focal length in mm
151                                                //   - max focal length in mm
152                                                //   - max aperture at min focal length
153                                                //   - max aperture at max focal length
154                                                // E.G - SX30 = { 43,10, 1505,10, 27,10, 58,10 }
155                                                //            = 4.3 - 150.5mm, f/2.7 - f.5.8
156                                                // Each pair of integers is one 'RATIONAL' value (numerator,denominator)
157
158    #undef  PARAM_CAMERA_NAME                   // parameter number for GetParameterData to get camera name
159    #undef  PARAM_DISPLAY_MODE1                 // param number for LCD display mode when camera in playback
160    #undef  PARAM_DISPLAY_MODE2                 // param number for LCD display mode when camera in record view hold mode
161    #undef  CAM_FIRMWARE_MEMINFO                // Use 'GetMemInfo' (dryos) or 'memPartInfoGet'/'memPartFindMax' (vxworks)
162                                                // function in firmware to get free memory details
163                                                // GetMemInfo should be found correctly by the gensig/finsig signature
164                                                // finder for all dryos based cameras.
165
166    #undef  CAM_NO_MEMPARTINFO                  // VXWORKS camera does not have memPartInfoGet, fall back to memPartFindMax
167
168    #undef  CAM_DRIVE_MODE_FROM_TIMER_MODE      // use PROPCASE_TIMER_MODE to check for multiple shot custom timer.
169                                                // Used to enabled bracketing in custom timer, required on many recent cameras
170                                                // see http://chdk.setepontos.com/index.php/topic,3994.405.html
171
172    #undef  CAM_AV_OVERRIDE_IRIS_FIX            // for cameras that require _MoveIrisWithAv function to override Av (for bracketing).
173
174    #undef  CAM_DISABLE_RAW_IN_LOW_LIGHT_MODE   // For cameras with 'low light' mode that does not work with raw define this
175    #undef  CAM_DISABLE_RAW_IN_HQ_BURST         // For cameras with 'HQ Burst' mode that does not work with raw define this
176    #undef  CAM_DISABLE_RAW_IN_HANDHELD_NIGHT_SCN // For cameras with 'HandHeld Night Scene' mode that does not work with raw define this
177    #undef  CAM_ISO_LIMIT_IN_HQ_BURST           // Defines max ISO override value for HQ Burst mode (higher values crash camera)
178   
179    #undef  CAM_HAS_GPS                         // for cameras with GPS reseiver: includes the GPS coordinates in in DNG file
180
181    #undef  CHDK_COLOR_BASE                     // Start color index for CHDK colors loaded into camera palette.
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
187    #define CAM_USB_EVENTID         0x902       // Levent ID for USB control. Changed to 0x202 in DryOS R49 so needs to be overridable.
188
189    #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
190
191    #undef  USE_REAL_AUTOISO                    // Define this to use real-iso instead of marketing-iso as values of autoiso mechanizm
192    #undef  OVEREXP_COMPENSATE_OVERALL          // Define this to make overexposure_compensation work for all scenes, instead of day-light only
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
197        #undef  DRAW_ON_ACTIVE_BITMAP_BUFFER_ONLY       // Draw pixels on active bitmap buffer only. Requires active_bitmap_buffer location in stubs_min.S or stubs_entry.S.
198       
199    #undef  CAM_ZOOM_ASSIST_BUTTON_CONTROL      // Activate menu option to enable/disable the zoom assist button on the SX30/SX40
200                                                // For other cameras, requires additional support code in kbd.c (see the SX30 or SX40 version)
201
202//----------------------------------------------------------
203// Overridden values for each camera
204//----------------------------------------------------------
205
206// Include the settings file for the camera model currently being compiled.
207#include "platform_camera.h"
208
209//==========================================================
210// END of Camera-dependent settings
211//==========================================================
212
213// For newer cameras where the screen bitmap is double the width we need to scale
214// the CHDK horizontal (X) co-ordinates
215#if CAM_USES_ASPECT_CORRECTION
216    #define ASPECT_XCORRECTION(x)   ((x)<<1)    // See comments for CAM_USES_ASPECT_CORRECTION above
217#else
218    #define ASPECT_XCORRECTION(x)   (x)         // See comments for CAM_USES_ASPECT_CORRECTION above
219#endif
220
221// curves only work in 10bpp for now
222#if CAM_SENSOR_BITS_PER_PIXEL != 10
223    #undef OPT_CURVES
224#endif
225
226#ifndef OPT_PTP
227    #undef CAM_CHDK_PTP
228#endif
229
230//==========================================================
231// Data Structure to store camera specific information
232// Used by modules to ensure module code is platform independent
233
234typedef struct {
235        int api_version;                        // version of this structure
236
237    int bits_per_pixel;
238    int black_level;
239    int white_level;
240    int raw_rows, raw_rowpix, raw_rowlen, raw_size;
241    union                       // DNG JPEG info
242    {
243        struct
244        {
245            int x, y;           // DNG JPEG top left corner
246            int width, height;  // DNG JPEG size
247        } jpeg;
248        struct
249        {
250            int origin[2];
251            int size[2];
252        } crop;
253    };
254    union                       // DNG active sensor area (Y1, X1, Y2, X2)
255    {
256        struct
257        {
258            int y1, x1, y2, x2;
259        } active_area;
260        int dng_active_area[4];
261    };
262    int lens_info[8];           // DNG Lens Info
263    int exposure_bias[2];       // DNG Exposure Bias
264    int color_matrix1[18];      // DNG Color Matrix
265    int cfa_pattern, calibration_illuminant1;
266} _cam_sensor;
267
268extern _cam_sensor camera_sensor;
269
270// if this struct changed, please change gui_version.common_api
271typedef struct
272{
273    unsigned int    width, height, size;                        // Size of bitmap screen in CHDK co-ordinates
274    unsigned int    buffer_width, buffer_height, buffer_size;   // Physical size of bitmap screen
275    int             edge_hmargin, ts_button_border;             // margin and touch-screen adjustment values
276    int             zebra_nobuf, zebra_aspect_adjust;           // zebra feature settings
277    int             has_variable_aspect;                        // zebra feature settings
278} _cam_screen;
279
280extern _cam_screen camera_screen;
281
282typedef struct
283{
284        int api_version;                        // version of this structure
285
286    struct
287    {
288        int camera_name;
289    } params;
290    struct
291    {
292        int gps;
293        int orientation_sensor;
294        int tv;
295        int av;
296        int min_av;
297        int ev_correction_2;
298        int flash_mode;
299        int flash_fire;
300        int metering_mode;
301        int wb_adj;
302        int aspect_ratio;
303        int shooting;
304    } props;
305    int rombaseaddr, maxramaddr;
306} _cam_info;
307
308extern _cam_info camera_info;
309
310//==========================================================
311
312#endif /* CAMERA_H */
Note: See TracBrowser for help on using the repository browser.