2013-08-18 4 views
41

私は、開発者がより簡単にAPIを使用できるようにするためにライブラリに取り組んでいます。QualcommCameraHardwareのソースのアイデアnative_get_picture:MSM_CAM_IOCTL_GET_PICTURE接続タイムアウトエラー?

背面のカメラを使用しているポートレートモードのDroid Incredible 2は、写真を撮ることができません。具体的には、私はLogCatにこのシーケンスを取得する:私はCameratakePicture()を呼び出した後

08-18 09:25:52.094: E/QualcommCameraHardware(1368): native_get_picture: MSM_CAM_IOCTL_GET_PICTURE fd 25 error Connection timed out 
08-18 09:25:52.094: E/QualcommCameraHardware(1368): getPicture failed! 
08-18 09:25:52.094: E/QualcommCameraHardware(1368): get picture failed, giving jpeg callback with NULL data 

それらのメッセージはioctl()に5000msタイムアウトを設定し、私はQualcommCameraHardwareを参照いくつかの古いソースコードでフィットした、〜5秒を発生しますカメラのハードウェアに話すための電話。

最終的には、onPictureTaken()にはJPEGデータのnullbyte[]が渡されます。これは写真がないことを意味します。

このデバイスは、前面に向いたカメラでポートレートモードでの作業を含む、テストされた他のすべての設定で自分のコードで動作します。

この特定の障害の原因となる可能性のあるものは誰か知っていますか?

UPDATE

私はもはやエラーを再現することはできません。私はその質問を削除しますが、答えが出たらそれは不可能です。

+1

低解像度で撮影しようとしましたか? –

+0

@AliImran:私と私の信じられないほどの2人が同時に同じ場所にいるとき、いつか試してみます。 :-)ありがとう! – CommonsWare

+0

@AliImran:より低い解像度で出力をキャッピングすると、実際にはこの特定のエラーが発生せず、代わりに破損した出力が得られていましたが、本当に役に立ちました。ありがとう! – CommonsWare

答えて

0

ほとんどの場合、メディアプロセスの一部であるcameraServiceがバックグラウンドでクラッシュしました。単にアンドロイドでデフォルトのカメラアプリを起動しようとしても表示されない場合は、単にこのエラーをオフにするためにデバイスを再起動してください。

私はrawコールバックとjpegコールバックの両方でピクチャコールバックを再利用していると思います。したがって、生のコールバックとして呼び出された場合、データはnullになる可能性があります。このドキュメントには、

が挙げられます。非同期イメージキャプチャをトリガーします。カメラサービスは、イメージキャプチャが進行するにつれて、アプリケーションへの一連のコールバックを開始します。シャッターコールバックは、画像がキャプチャされた後に発生します。これは、画像がキャプチャされたことをユーザに知らせるためにサウンドをトリガするために使用することができる。 rawコールバックは、rawイメージデータが利用可能な場合に発生します(注:rawイメージコールバックバッファがない場合、またはrawイメージコールバックバッファがrawイメージを保持するのに十分な大きさでない場合、データはnullになります)。ポストビューコールバックは、スケーリングされた、完全に処理されたポストビュー画像が利用可能な場合に発生します(注:すべてのハードウェアがこれをサポートしているわけではありません)。 jpegコールバックは、圧縮されたイメージが利用可能な場合に発生します。アプリケーションで特定のコールバックが必要ない場合は、コールバックメソッドの代わりにnullを渡すことができます。

+0

"rawコールバックとjpegコールバックの両方でピクチャコールバックを再利用していると思います。rawコールバックをすべて提供していない(' null')、JPEGイメージをリクエストしています。 – CommonsWare

1

MSM_CAM_IOCTL_GET_PICTUREは私がHTCdevからお使いのデバイスのカーネルソースをダウンロードして

drivers/media/video/msm/msm_camera-7x30.c 

で定義された機能が何であるかをチェックすることができた機能

static int msm_get_pic(struct msm_sync *sync, void __user *arg) 

を実行し、カーネル呼び出しですあなたが写真を撮るときのカーネルメッセージ?

adb shell su -c "dmesg" 
+0

...問題を再現できません。私はこの問題を解決する副作用を持っていた他のデバイスのために私のアプリで何かを変更したにちがいありません。私は1日か2日で質問を削除します。あなたの時間を無駄にすることについて私の謝罪。 – CommonsWare

関連する問題