カメラからライブ プレビューをキャプチャする Android アプリケーションを作成しました。シャッター時間を短くすることが重要であり、少なくとも一定である必要があります。
現在、シャッター時間を短くするために次のコードを使用しています。
Parameters params = camera.getParameters();
params.setSceneMode(Parameters.SCENE_MODE_SPORTS);
params.setWhiteBalance(Parameters.WHITE_BALANCE_DAYLIGHT);
params.setFlashMode(Parameters.FLASH_MODE_OFF);
params.setFocusMode(Parameters.FOCUS_MODE_INFINITY);
params.setPreviewFpsRange(9000, 29453);
params.setPreviewFrameRate(29453);
params.setJpegQuality(100);
params.setPreviewFormat(ImageFormat.NV21);
params.setPreviewSize(1280,720);
params.setAntibanding(Parameters.ANTIBANDING_OFF);
params.setExposureCompensation(params.getMinExposureCompensation());
params.set("iso", 1250);
camera.setParameters(params);
私の電話機のファームウェアでは setSceneMode() がサポートされていないようです (getSupportedSceneModes は空のリストを返します)。「ISO」設定はおそらく効果がありません(写真は見ていませんが、フレームレートを計算しただけです)。このコードをどこかで見つけて使用しました...おそらく間違った文字列ですか?
これまでのところ、フレーム レートは 9 から 29,453 fps の間で変化します。これは、サポートされている唯一のフレーム レート範囲です。だからparams.setPreviewFpsRange(29453, 29453);
どちらもうまくいきません。フレーム レートは、良好な照明条件 (通常の日、屋内、窓に向けられた) では高く (20 ~ 30 fps)、中/低照度 (日光、屋内、窓から直接離れた場所) では非常に低くなります (8 ~ 10 fps)。条件。
詳細: 高いフレーム レートは必要ありませんが、短いシャッター時間は必要です。収集されたデータは、屋内ナビゲーション (または、最初のステップでの屋内位置特定) に使用されます。アプリケーションは、携帯電話の持ち方を気にせずに、人が普通に歩いているときに写真を撮る必要があります。その人は、走ったり、電話を「振ったり」している可能性もあります (通常、歩いているときに腕を動かすように)。そのため、シャッター時間が長すぎると、通常は多くの「モーション ブラー」が発生します。この状況は、写真がカメラをしっかりと保持しようとする「写真を撮りたい」状況とは大きく異なります。実際には「良い写真」を達成したいわけではありませんが、時々壁のいくつかのエッジを何らかの方法で検出したいと考えています。写真にはたくさんの「ノイズ」が含まれていると思いますが、
アイデアは、NDK を使用してカメラ パラメーターをより詳細に制御できる可能性があるということです。誰かが NDK の経験があり、試してみる価値があると答えてくれますか?
追加情報: HTC Desire Z (別名: 「T-Mobile G2」または「HTC Vision」) をテスト デバイスとして使用しています。