ライブビューのAF設定が顔認識+追尾AFの場合,ライブビューを部分拡大しようとプロパティ変更コマンドを送ると,DEVICE_BUSYのエラー番号が返ります.将来のため,結論を先に書きました.
Canon製SDKでデジカメを制御するライブラリを作っています.過去にも数回,似たものを作ったことがあります.が,機種が違ったり,機能が違ったり,フレームワークが違ったりで,結局毎度,アプリに合わせてライブラリを作り直している感じです.
とりあえず実機なし,動作検証なしで実装を終えました.そして先日,久しぶりの出社の際,会社のCanonを自宅へ持ち帰り,ようやく動作検証しました.ちょいちょいのミスはありましたが,ちょちょいと直せるレベルでした.自分,素敵やん.
が,どうしてもうまく行かない壁に当たりました.ライブビュー表示中に部分拡大しようとすると,DEVICE_BUSYが返ってきます.この機能を搭載した数年前のアプリのコードを参考に,原因調査.昔のコードでは,ライブビューのループスレッドの中で,部分拡大のコマンドを処理していました.ということはあれか,部分拡大コマンドとライブビューのスレッドで呼んでいる映像取得コマンドが衝突しているってことか.そう思い,コマンドをキューイングし,デジカメに対して順次処理するようにしました.が,現象変わらず.
数年前に開発したアプリを動かしてみる.が,そっちでも部分拡大に失敗します.この新しいデジカメには対応していないのか?と思いきや,SDKは対応しているバージョンだし,別の機能追加でこのデジカメにも対応するよう改造したので,そのときにこんな状態で納めるわけがないし.
と,ソースコードに「顔認識+追尾AFだと駄目」的なコメントが書かれていました.これはそういうことか.が,そんなAFモードを設定する画面,デジカメのいろんなメニューを漁っても,なかなか見つかりません.機種が違うのか.いや,そんなはずないな.そんなこんなで行ったり来たりの末,ようやくライブビューAF設定の画面を見つけました.犯人をお前だ.
無事解決しました.なかなかなわな.もっと知名度高めのSDKだったら,ググって解決できそうでしたが,そこそこニッチだから仕方ないです.