我正在尝试使用 EOS 40D 进行高速拍摄。当在 UI 中将驱动模式设置为“高速连拍”进行手动操作时,该相机可维持约 6 fps。
如何使用 EDSDK 复制它?
下面的代码选择“高速连续”驱动模式(0x4)并kEdsCameraCommand_TakePicture
尽可能快地发送。每次拍摄后,相机保持“忙碌”状态约 1 秒钟。这与单张拍摄的速度相同。我测试了所有可用的驱动模式,虽然有些较慢,但没有一个比 1 fps 快。
请注意,EOS 40D 不支持kEdsCameraCommand_PressShutterButton
. 使用它给出EDS_ERR_INVALID_PARAMETER
. EDSDK 文档说:“EOS 50D 或 EOS 5D Mark II 或更高版本的相机支持此命令”所以 40D 太旧了。
printf("============= Testing drive mode %08X\n", drive_mode);
result = EdsSetPropertyData(m_CameraRef, kEdsPropID_DriveMode, 0, sizeof(EdsUInt32), &drive_mode);
assert(result == EDS_ERR_OK);
EdsUInt32 new_drive_mode;
result = EdsGetPropertyData(m_CameraRef, kEdsPropID_DriveMode, 0, sizeof(EdsUInt32), &new_drive_mode);
assert(result == EDS_ERR_OK);
assert(new_drive_mode == drive_mode);
int n_captured = 0;
for (int i = 0; i < count; i++)
{
do
{
result = EdsSendCommand(m_CameraRef, kEdsCameraCommand_TakePicture, 3);
printf(" %d", result);
Wait(1); // Process Windows messages for a few ms
} while (result == EDS_ERR_DEVICE_BUSY);
printf("\n");
if (result == EDS_ERR_OK)
n_captured++;
else
printf(" Burst capture error code for frame %d: %d!\n", i, result);
}
printf(" Burst capture end!\n");
典型输出如下所示:
============= Testing drive mode 00000004
0
129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129
129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129
129 129 129 129 129 129 129 129 129 129 0
129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129
129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129 129
129 129 129 129 129 129 129 129 129 129 129 0
Burst capture end!
代码 129 是EDS_ERR_DEVICE_BUSY
.