これは、カメラを利用するいくつかの apk (zxing、opencv など) を使用して発生します。プレビューに問題のある画像が表示されますが、これはカメラが見るものの機能であるため、エンコードの不一致のように見えます。ネイティブ カメラ プレビューは正常に動作するため、内部アプリではこの問題は発生しません。
6 に答える
現時点では、 を取得した後、Camera
セットアップしてプレビューを開始する前に、次の回避策を追加してみてください。
Camera.Parameters params = camera.getParameters();
params.setPreviewFpsRange(30000, 30000);
camera.setParameters(params);
setPreviewFpsRange
(または、他のパラメーターも設定している場合は、既存のパラメーターへの呼び出しを追加するだけです。)
Glass で ZXing を使用している場合は、ソース コードから上記の修正を加えたバージョンをビルドできます。
次のメソッドを CameraConfigurationManager.java に追加します。
public void googleGlassXE10WorkAround(Camera mCamera) {
Camera.Parameters params = mCamera.getParameters();
params.setPreviewFpsRange(30000, 30000);
params.setPreviewSize(640,360);
mCamera.setParameters(params);
}
ZXing コードで Camera.setParameters() が表示された直後に、このメソッドを呼び出します。CameraConfigurationManager の 2 つの場所に配置しただけで、機能しました。
Glass の解像度に合わせて、プレビュー サイズを 640x360 に設定しました。
30 FPS のプレビューはかなり高いです。バッテリーと CPU を節約したい場合は、サポートされている最も遅い FPS で十分であると考えてください。
List<int[]> supportedPreviewFpsRanges = parameters.getSupportedPreviewFpsRange();
int[] minimumPreviewFpsRange = supportedPreviewFpsRanges.get(0);
parameters.setPreviewFpsRange(minimumPreviewFpsRange[0], minimumPreviewFpsRange[1]);
このバグは XE16 および XE16.11 の時点でもまだ存在しますが、このコードは問題を解決し、通常のカメラ プレビューを表示します。3 つのパラメータ設定行とその値に注意してください。これも 5000 (5FPS) でテストしましたが、動作し、60000 (60FPS) で動作しませんでした:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
if (mCamera == null) return;
Camera.Parameters camParameters = mCamera.getParameters();
camParameters.setPreviewFpsRange(30000, 30000);
camParameters.setPreviewSize(1920, 1080);
camParameters.setPictureSize(2592, 1944);
mCamera.setParameters(camParameters);
try {
mCamera.startPreview();
} catch (Exception e) {
mCamera.release();
mCamera = null;
}
}
これは XE22 の時点でもまだ問題です (!) 1 秒あたりのフレーム数を 30 以下に下げるとうまくいきます。
parameters.setPreviewFpsRange(30000, 30000);
実際、パラメーターを設定することを忘れないでください。
camera.setParameters(parameters);
60 fps はサポートされる fps の範囲に含まれているため、なぜこれが問題を引き起こすのかについて明確な説明は見つかりませんでした。ビデオは 720p を記録できますが、これに fps を追加するソースを見たことはありません。