LoginSignup
2
0

More than 3 years have passed since last update.

Canon EDSDKでリモート撮影できないときに確認するポイント

Last updated at Posted at 2020-12-23

Canon EDSDK(EOS Digital Software Development Kit)でカメラをリモート制御したいとき、いくつかハマりどころがあるので備忘録。

(1) TAKE_PICTURE_CARD_NGで撮影できない

kEdsPropID_SaveTokEdsSaveTo_Hostに設定すると、撮影された画像はホストPC側に転送されるにも関わらず、CARD_NGというエラーが出る。

このケースでは、SetCapacityを撮影前に行う必要がある。PC側に十分な容量があると教えてあげるためだと思われる。

EdsCapacity capacity = { 0x7FFFFFFF, 0x1000, 1 };
err = EdsSetCapacity(camera, capacity);

(2) ObjectEventだけが呼ばれない

ホストPC側に画像を転送する際、ObjectEventHandlerで非同期イベントを受信して画像を受け取るのだが、Windowsではこのイベントが全くこないことがある。(しかも、ParameterEventやStateEventはきちんと呼ばれるにも関わらず…。)

この場合は、リモートレリーズ制御直後に以下のコードを挿入し、Win32APIでメッセージ受信をする必要がある。(イベント自体は非同期でハンドラが呼ばれる。)

#ifdef WIN32
        MSG msg;
        while (GetMessage(&msg, NULL, NULL, NULL)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
#endif

このwhile文中では、実際に欲しいイベント(例えばkEdsObjectEvent_DirItemRequestTransfer)以外にもいろいろ受信するので、実際に目的のイベントが受信されたら適宜breakする必要がある。

参考

(この辺の情報、公式ドキュメントにも載せてくれたらホントにいいのになぁ…。)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0