CHDK Wiki
No edit summary
No edit summary
 
(27 intermediate revisions by 3 users not shown)
Line 1: Line 1:
   
{| border="2" cellpadding="1" cellspacing="1" class="article-table" style="margin: 0px auto; width: 500px; height: 500px;"
+
{| border="2" cellpadding="1" cellspacing="1" class="article-table" style="margin: 0px auto; height: 500px;"
 
|+CHDK set_focus() Mode Compatability Chart
 
|+CHDK set_focus() Mode Compatability Chart
 
|-
 
|-
Line 15: Line 15:
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| A570
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| A590
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"|
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
 
| style="text-align:center;vertical-align:middle;"| A720
 
| style="text-align:center;vertical-align:middle;"| A720
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| A810
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| A1100
  +
| style="text-align:center;vertical-align:middle;"| N
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| N
  +
| style="text-align:center;vertical-align:middle;"|N
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
* camera needs testing per [http://chdk.setepontos.com/index.php?topic=11078.msg108859#msg108859 Setting focus from scripts or menus]
 
|-
 
|-
 
| style="text-align:center;vertical-align:middle;"| A1200
 
| style="text-align:center;vertical-align:middle;"| A1200
Line 28: Line 57:
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| N
 
| style="text-align:center;vertical-align:middle;"| N
  +
| style="text-align:center;vertical-align:middle;"|N
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| A3400
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| N*
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"|Y
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|* crashes
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| D10
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
 
| style="text-align:center;vertical-align:middle;"| G10
 
| style="text-align:center;vertical-align:middle;"| G10
Line 35: Line 78:
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| G12
  +
| style="text-align:center;vertical-align:middle;"| N*
  +
| style="text-align:center;vertical-align:middle;"| N*
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"|N*
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|* all pass if #defines changed
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| G15
  +
| style="text-align:center;vertical-align:middle;"| N
  +
| style="text-align:center;vertical-align:middle;"| N
  +
| style="text-align:center;vertical-align:middle;"| N
  +
| style="text-align:center;vertical-align:middle;"|Y
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| G1X
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"|N*
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|* all pass if #defines changed
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| IXUS110_SD960
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"|Y
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
 
| style="text-align:center;vertical-align:middle;"| IXUS120_SD940
 
| style="text-align:center;vertical-align:middle;"| IXUS120_SD940
Line 42: Line 113:
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"| IXUS240HS
+
| style="text-align:center;vertical-align:middle;"| IXUS140HS_ELPH130
| style="text-align:center;vertical-align:middle;"| ?
+
| style="text-align:center;vertical-align:middle;"| N*
| style="text-align:center;vertical-align:middle;"| crash
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"| ?
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
 
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|* crash
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"| SX230HS
+
| style="text-align:center;vertical-align:middle;"| IXUS240_ELPH320HS
| style="text-align:center;vertical-align:middle;"| N
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"| N
+
| style="text-align:center;vertical-align:middle;"| N*
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|* crash
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"| SX50
+
| style="text-align:center;vertical-align:middle;"| IXUS310_ELPH500HS
| style="text-align:center;vertical-align:middle;"| N
+
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"|Y
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| IXUS700_SD500
  +
| style="text-align:center;vertical-align:middle;"| N*
  +
| style="text-align:center;vertical-align:middle;"| N*
  +
| style="text-align:center;vertical-align:middle;"| N*
  +
| style="text-align:center;vertical-align:middle;"|N*
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|* SD override disabled in source
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| IXUS870_SD880
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"| Y
  +
| style="text-align:center;vertical-align:middle;"|Y
  +
| style="text-align:left;vertical-align:middle;font-size:9px;"|
  +
|-
  +
| style="text-align:center;vertical-align:middle;"| IXUS970_SD890
  +
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"| N
 
| style="text-align:center;vertical-align:middle;"| N
 
| style="text-align:center;vertical-align:middle;"| N
 
| style="text-align:center;vertical-align:middle;"| N
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| S100
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
  +
| style="text-align:center;vertical-align:middle;"| SX20
  +
| style="text-align:center;vertical-align:middle;"| N
  +
| style="text-align:center;vertical-align:middle;"| N
  +
| style="text-align:center;vertical-align:middle;"| Y
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX30
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX40HS
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N*
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|N*
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|* all but set_focus_only pass if #defines changed
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX100IS
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX150IS
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX160IS
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX200IS
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N*
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N*
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N*
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|N*
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|* all pass if camera is Canon MF mode prior to test starting
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX220HS
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX230HS
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N*
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N*
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|*CAM_CAN_SD_OVER_NOT_IN_MF crashes, CAM_CAN_SD_OVER_IN_AF_LOCK enables set_aflock
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX240HS
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| SX50
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"| N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|SX510HS
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|N*
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|N
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:center;vertical-align:middle;"|Y
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|*passes with #undef  CAM_CAN_SD_OVER_NOT_IN_MF && #define CAM_CAN_SD_OVER_IN_AF_LOCK
 
|-
 
|-
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
Line 162: Line 254:
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
Line 169: Line 261:
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
Line 176: Line 268:
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
Line 183: Line 275:
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|-
 
|-
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
Line 190: Line 282:
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
 
| style="text-align:center;vertical-align:middle;"|
| style="text-align:center;vertical-align:middle;"|
+
| style="text-align:left;vertical-align:middle;font-size:9px;"|
 
|}
 
|}
 
 
 
 
 
CAM_CAN_SD_OVERRIDE 1 // Camera allows to do subject distance override
 
in gui.c :
 
enables SD bracketing menu & submenu item
 
enables SD override menu & submenu items
 
changes debugging shortcuts if cam does not have an erase button
 
in shooting.c
 
shooting_can_focus() , shooting_get_common_focus_mode()
 
in gui_osd.c
 
enables SD override shortcuts if cam does not have MF
 
CAM_CAN_SD_OVER_NOT_IN_MF 1 // Camera allows subject distance (focus) override when not in manual focus mode
 
in shooting.c
 
shooting_can_focus()
 
CAM_CAN_SD_OVER_IN_AF_LOCK // Camera allows subject distance (focus) override when in AF Lock mode
 
// exact meaning: SD override works in AF lock or movie mode
 
in shooting.c
 
shooting_can_focus()
 
CAM_CAN_SD_OVER_IN_AF_LOCK_ONLY // Camera allows subject distance (focus) override only when in AF Lock mode OR in movie mode
 
in shooting.c
 
shooting_can_focus()
 
 
CAM_HAS_MANUAL_FOCUS 1 // Camera has manual focus mode
 
in gui_osd.c
 
enables SD shortcuts if cam does not have MF
 
in gui.c
 
enables short cut display in alt help screen
 
enables shortcut key detection in gui_chdk_kbd_process()
 
in shooting.c
 
shooting_get_common_focus_mode() :
 
in camera_info.c camera_info.h
 
sets manual focus to 1 in the camera_info structure (0 by default)
 
in luascript.c ubasic.c
 
in luaCB_set_focus() via camera_info setting
 
.
 
// Focus mode (0=Auto, 1=macro, 2=portrait, 3=Infinity, 4=MF 5=super macro)
 
short shooting_get_focus_mode() { return shooting_get_prop(PROPCASE_FOCUS_MODE); }
 
.
 
short shooting_get_common_focus_mode()
 
{
 
#if !CAM_HAS_MANUAL_FOCUS && CAM_CAN_SD_OVERRIDE
 
return conf.subj_dist_override_koef;
 
#elif !CAM_CAN_SD_OVERRIDE
 
return 0;
 
#else
 
return shooting_get_focus_mode();
 
#endif
 
}
 
.
 
short shooting_can_focus()
 
{
 
#if !CAM_CAN_SD_OVER_NOT_IN_MF && CAM_CAN_SD_OVERRIDE
 
#if CAM_CAN_SD_OVER_IN_AF_LOCK_ONLY
 
if (shooting_get_prop(PROPCASE_AF_LOCK))
 
return 1;
 
else if (!camera_info.state.mode_video)
 
return 0;
 
#elif CAM_CAN_SD_OVER_IN_AF_LOCK
 
if (shooting_get_prop(PROPCASE_AF_LOCK))
 
return 1;
 
#elif CAM_HAS_VIDEO_BUTTON
 
return shooting_get_common_focus_mode();
 
#endif
 
return (shooting_get_common_focus_mode() || camera_info.state.mode_video);
 
#elif !CAM_CAN_SD_OVERRIDE
 
return camera_info.state.mode_video;
 
#elif defined (CAMERA_ixus800_sd700)
 
// TODO whats the reason for this ?!?
 
return (shooting_get_zoom()<8) && (camera_info.state.mode_shooting!=MODE_AUTO) && (camera_info.state.mode_shooting!=MODE_SCN_UNDERWATER);
 
#else
 
#ifdef PROPCASE_CONTINUOUS_AF
 
if (shooting_get_prop(PROPCASE_CONTINUOUS_AF))
 
return 0;
 
#endif
 
#ifdef PROPCASE_SERVO_AF
 
if (shooting_get_prop(PROPCASE_SERVO_AF))
 
return 0;
 
#endif
 
return 1;
 
#endif
 
}
 
.
 
void shooting_set_focus(int v, short is_now)
 
{
 
int s=v;
 
if (!camera_info.state.mode_play)
 
{
 
if ((is_now) && shooting_can_focus())
 
{
 
if (conf.dof_subj_dist_as_near_limit)
 
{
 
s=shooting_get_near_limit_f(v,shooting_get_min_real_aperture(),get_focal_length(lens_get_zoom_point()));
 
}
 
if (!conf.dof_use_exif_subj_dist && (s != INFINITY_DIST))
 
s+=shooting_get_lens_to_focal_plane_width();
 
lens_set_focus_pos(s);
 
}
 
else
 
photo_param_put_off.subj_dist=v;
 
}
 
}
 
.
 
void lens_set_focus_pos(long newpos)
 
{
 
if (newpos >= MAX_DIST) newpos = INFINITY_DIST; // Set to infinity value that will work on all cameras
 
_MoveFocusLensToDistance((short*)&newpos);
 
while ((shooting_is_flash_ready()!=1) || (focus_busy)) msleep(10);
 
newpos = _GetFocusLensSubjectDistance();
 
_SetPropertyCase(PROPCASE_SUBJECT_DIST1, &newpos, sizeof(newpos));
 
_SetPropertyCase(PROPCASE_SUBJECT_DIST2, &newpos, sizeof(newpos));
 
}
 
.
 
static int luaCB_set_focus( lua_State* L )
 
{
 
int to = luaL_checknumber( L, 1 );
 
if (camera_info.cam_has_manual_focus)
 
{
 
if (shooting_get_focus_mode() || camera_info.state.mode_video) shooting_set_focus(to, SET_NOW);
 
else shooting_set_focus(to, SET_LATER);
 
}
 
else
 
{
 
if (shooting_get_common_focus_mode() || camera_info.state.mode_video) shooting_set_focus(to, SET_NOW);
 
else shooting_set_focus(to, SET_LATER);
 
}
 
return 0;
 
}
 
.
 
static void set_focus_statement()
 
{
 
int to;
 
accept(TOKENIZER_SET_FOCUS);
 
to = expr();
 
if (camera_info.cam_has_manual_focus)
 
{
 
if (shooting_get_focus_mode() || (camera_info.state.mode_video)) shooting_set_focus(to, SET_NOW);
 
else shooting_set_focus(to, SET_LATER);
 
}
 
else
 
{
 
if (camera_info.state.mode_video) shooting_set_focus(to, SET_NOW);
 
else shooting_set_focus(to, SET_LATER);
 
}
 
accept_cr();
 
}
 
.
 
==Propcases==
 
 
PROPCASE_FOCUS_STATE
 
: Auto-Focus state (0 = unfocussed, 1 = focussed)
 
: Auto-Focus state after half-press (stays 1 if shoot_half is released!) (0 orange, >=1 green, with AiAF=off only 0 or 1, with enabled AiAF or Face the value depends on position & number of AF boxes)
 
PROPCASE_FOCUS_MODE
 
: (0=AUTO 1=MF)
 
PROPCASE_REAL_FOCUS_MODE
 
: (0=Auto, 1=macro, 2=portrait, 3=Infinity, 4=MF 5=super macro)
 
 
PROPCASE_AF_LOCK
 
: 0 = AF not locked, 1 = AF locked
 
PROPCASE_CONTINUOUS_AF
 
PROPCASE_SERVO_AF
 

Latest revision as of 16:13, 28 February 2014

CHDK set_focus() Mode Compatability Chart
Camera set_focus() only set_aflock() PressSw1AndMF SS.MFOn Notes
A540 Y Y Y
A570 Y Y Y
A590 Y Y Y
A720 Y Y Y Y
A810 Y Y Y
A1100 N Y N N
A1200 N Y N N
A3400 Y N* Y Y * crashes
D10 Y Y Y
G10 Y Y Y Y
G12 N* N* Y N* * all pass if #defines changed
G15 N N N Y
G1X Y Y Y N* * all pass if #defines changed
IXUS110_SD960 Y Y Y Y
IXUS120_SD940 Y Y Y Y
IXUS140HS_ELPH130 N* Y N * crash
IXUS240_ELPH320HS Y N* Y * crash
IXUS310_ELPH500HS Y Y Y Y
IXUS700_SD500 N* N* N* N* * SD override disabled in source
IXUS870_SD880 Y Y Y Y
IXUS970_SD890 Y N N
S100 Y Y Y Y
SX20 N N Y
SX30 N N Y N
SX40HS N N* Y N* * all but set_focus_only pass if #defines changed
SX100IS Y Y Y Y
SX150IS N N Y N
SX160IS N N N Y
SX200IS N* N* N* N* * all pass if camera is Canon MF mode prior to test starting
SX220HS N N Y N
SX230HS N* N* Y N *CAM_CAN_SD_OVER_NOT_IN_MF crashes, CAM_CAN_SD_OVER_IN_AF_LOCK enables set_aflock
SX240HS N N Y N
SX50 N N N Y
SX510HS N N* N Y *passes with #undef  CAM_CAN_SD_OVER_NOT_IN_MF && #define CAM_CAN_SD_OVER_IN_AF_LOCK