Android の Camera2 API を使って カメラの機能一覧を取得する


Android の Camera2 API を使って カメラのプレビュー画面を表示する
の続きです。

概要

Camera2 API では、多彩な機能が提供されているが。
機種依存性がある。
自分の端末ではどんな機能が使えるのか調べるためのアプリが
Google Play で公開されている。

Camera2 probe PRO

調べた結果をEメールでアプリの開発者に送信する機能があり、
下記のサイトに収集される。

Camera2 probeWiki

このアプリは、Github にソースが公開されている。
これを例にして、 カメラの機能を説明する。

Camera2Probe

Hardware Level

カメラデバイスの全体的な機能のレベル

   Integer level = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);

reference: INFO_SUPPORTED_HARDWARE_LEVEL

下記の値をとる

CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_xxx

Value Name Remarks
0 LIMITED
1 FULL
2 LEGACY
3 LEVEL_3
4 EXTERNAL Added in API level 28

機能の順序 LEGACY < LIMITED < FULL < LEVEL_3.

カメラ機能 Capabilities

サポートするカメラ機能の一覧

        int[] modes = characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);

reference: REQUEST_AVAILABLE_CAPABILITIES

下記の値をとる

CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_xxx

Value Name Remarks
0 BACKWARD_COMPATIBLE
1 MANUAL_SENSOR
2 POST_PROCESSING
3 RAW
4 REPROCESSING
5 READ_SENSOR_SETTINGS
6 BURST_CAPTURE
7 YUV_REPROCESSING
8 DEPTH_OUTPUT
9 CONSTRAINED_HIGH_SPEED_VIDEO
10 MOTION_TRACKING Added in API level 28

LIMITEDおよびFULLモードのカメラデバイスはOFFモード(マニュアルモード)をサポートする。

自動焦点 Auto Focus

サポートする自動焦点の機能の一覧

   int[] mode = characteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES)

reference: CONTROL_AF_AVAILABLE_MODES

下記の値をとる

CameraMetadata.CONTROL_AF_MODE_xxx

Value Name Remarks
0 OFF
1 AUTO
2 MACRO
3 CONTINUOUS_VIDEO
4 CONTINUOUS_PICTURE
5 EDOF

手動焦点

手動焦点に関するパラメータとして、
下記のものが取得できる。

// 最小の焦点距離
            float distance = characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);

自動露出 Auto Exposure

サポートする自動露出の機能の一覧

   int[] mode = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)

reference: CONTROL_AE_AVAILABLE_MODES

下記の値をとる

CameraMetadata.CONTROL_AE_MODE_xxx

Value Name Remarks
0 OFF
1 ON
2 ON_AUTO_FLASH
3 ON_ALWAYS_FLASH
4 ON_AUTO_FLASH_REDEYE
5 ON_EXTERNAL_FLASH Added in API level 28

すべてのカメラデバイスはONモード(フラッシュなしの自動露出)をサポートする

FULLモードのカメラデバイスはOFFモード(マニュアルモード)をサポートする。

手動露出

アプリケーションから露光時間(exposure time)、センサ感度(sensor sensitivity)などを制御できる。

手動露出に関するパラメータとして、下記のものが取得できる。

// 露光時間の範囲
    Range<Long> range = characteristics.get(CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE);

// 感度の範囲
Range<Integer> range = characteristics.get(CameraCharacteristics.SENSOR_INFO_SENSITIVITY_RANGE);

// 絞りの値の一覧
    float[] apertures = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_APERTURES);

自動ホワイトバランス Auto White Balance

サポートする自動ホワイトバランスの機能の一覧

   int[] mode = characteristics.get(CameraCharacteristics.CONTROL_AWB_AVAILABLE_MODES)

reference: CONTROL_AWB_AVAILABLE_MODES

下記の値をとる

CameraMetadata.CONTROL_AWB_MODE_xxx

Value Name Remarks
0 OFF
1 AUTO
2 INCANDESCENT
3 FLUORESCENT
4 WARM_FLUORESCENT
5 DAYLIGHT
6 CLOUDY_DAYLIGHT
7 TWILIGHT
8 SHADE

手動ホワイトバランス

ホワイトバランスに関して、取得できるパラメータはないようです。

スクリーンショット

サンプルコードをgithub に公開した。
https://github.com/ohwada/Android_Samples/tree/master/Camera212