web-dev-qa-db-ja.com

Android Camera2の出力サイズ

Android Lollipopで新しいCamera2APIをテストしました。サポートされているプレビューサイズを取得したい:

StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class);

最高プレビューサイズは、解像度2560x1600pxのSamsung Galaxy TabSで1440x1080pxです。したがって、私のpreviewSizeは1440x1080pxで、TextureViewの表面サイズは2560x1600pxなので、画像が歪んでいます。

非推奨の古いCameraAPIをテストしました。

Camera.Parameters parameters =  camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();

上記のコードは、次のようなプレビューサイズの32のさまざまな組み合わせを返します。2560x19201920x10801080x19202560x2560など。その場合、最適なサイズを選択して正しい画像を表示することができます。

新しいAPIに最適なサイズを強制する方法がわかりません。解決策はプレビューを表示するビューのサイズを変更することですが、組み込みのカメラアプリはフルスクリーンモードで正しく機能します。すべての提案を事前に感謝します!

9
piotrpawlowski

@Alex Cohnが言ったように、CameraAPI2を採用するかどうかはメーカー次第です。

CameraAPI2がサポートされているかどうかを確認できます。camCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);は、Camera API2の サポートレベル に対応するintを返します。取得するレベルがCameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACYに等しい場合、基本的に、電話の製造元はCameraAPI2をサポートしていません。

->結果として、SCALER_STREAM_CONFIGURATION_MAPはCameraAPI1でアクセス可能な解像度とは異なる解像度を返す場合があります。これがあなたが得る理由です

プレビューの最大サイズは1440x1080pxです

4年前に質問されたことに本当にショックを受けました...そしてCameraAPI2へのアップグレードを気にしないメーカーがまだあります。 Camera API2はより多くの機能を提供しますが、CameraAPI1は結局死んでいないのかもしれません。

少なくとも、Camera API2を使用する場合に実際にターゲットにするデバイスの数を知るために、いくつかの断片化情報があればいいでしょう(LEGACYサポートのためにすべてのAndroid L以上ではない、開発者は値するそれを知るために)

1
dnhyde

交換

Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class);

Size[] sizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG)