このドキュメントでは、Android カメラ ハードウェア アブストラクション レイヤー (HAL) を評価するために使用できるすべてのテストを一覧表示します。これは相手先ブランド供給 (OEM) およびアプリケーション プロセッサ (AP) ベンダーを対象としているため、欠陥を最小限に抑えてカメラ HAL を適切に実装することができます。これは Android 互換性テスト スイート (CTS) への自発的な追加ですが、カメラ テストの対象範囲が大幅に広がり、潜在的なバグが確実に特定されます。
OEM は、これらのテストに合格することで、Android カメラ ハードウェア アブストラクション レイヤー (HAL) 3 インターフェースが適切に統合されているかどうかを検証します。チェックリストのすべての項目に準拠している場合、デバイス実装は Android Camera HAL インターフェースに関して完全であると見なされる場合があります。これにより、デバイスは、カメラ アプリが構築するandroid.hardware.camera2
パッケージを適切にサポートできるようになります。
カメラ HAL3 仕様
Android Camera HAL3仕様は、どのデバイスが満たす必要があるかについての信頼できる情報源です。このページには、チェックリストとして使用できるすべてのテストの概要が記載されています。 Camera HAL の実装者 (AP ベンダーなど) は、Camera HAL3 仕様を 1 行ずつ確認し、デバイスがそれに準拠していることを確認する必要があります。
現在の HAL 仕様は、Android 5.0 以降の汎用 Android プラットフォーム開発キット (PDK) 内の次のファイルで定義されています。
- Camera HAL 3.x インターフェースと仕様:
hardware/libhardware/include/hardware/camera3.h
、hardware/libhardware/include/hardware/camera_common.h
- カメラ HAL 3.x メタデータ仕様:
system/media/camera/docs/docs.html
- HAL ピクセル形式のインターフェースと仕様:
system/core/libsystem/include/system/graphics.h
カメラテストの種類
以下に、最新の Android カメラで利用できる主な種類のテストと、関連する手順への参照を示します。
- ベンダー テスト スイート (VTS) :カメラ HAL インターフェースを直接テストするテスト
- 互換性テスト スイート (CTS) : デバイスの互換性を確認するための標準の自動化された Android テスト - CTSの概要とTrade Federation の概要を参照してください。
- Image Test Suite (ITS) :テストを手動で実行して、イメージの正確性を確認します。セットアップ手順については、トップレベルおよびテスト固有の
README
ファイルとtutorial.py
を参照してください。 - 手動 TestingCam テスト:
pdk/apps/TestingCamera/
のソースから実行します - 手動 TestingCam2.1 テスト:
pdk/apps/TestingCamera2/
のソースから実行
これらすべてのテスト タイプについて、以下で詳しく説明します。これらのテストは、OEM が実行することが期待される時系列順に提示されます。
たとえば、デバイスがネイティブ テストに不合格になると、その後の互換性テスト スイート (CTS) テストにも確実に不合格になります。また、デバイスが CTS に失敗した場合、Image Test Suite (ITS) に進んでもほとんど意味がありません。次の一連のテストに進む前に、各テスト タイプの失敗に対処することをお勧めします。
ベンダー テスト スイート (VTS) テスト
Android Vendor Test Suite (VTS) は、HIDL インターフェース レベルで機能するテスト スイートです。 VTS の使用の詳細については、ベンダー テスト スイートを参照してください。
互換性テスト スイート (CTS) テスト
Camera Android Compatibility Test Suite (CTS) テストは、デバイスの互換性に重点を置いています。テスト環境のセットアップについては、 CTS のセットアップを参照してください。
カメラ CTS テストの開始パスはplatform/cts
です。
外部カメラ (USB Web カメラなど) をサポートするデバイスに対してカメラ CTS を実行する場合、CTS の実行時にデバイスを接続しておく必要があります。そうしないと、テストは自動的に失敗します。外部カメラの例としては、 Logitech HD Pro Webcam C920およびMicrosoft LifeCam HD-3000があります。
CTS の実行に関する一般的な手順については、CTSの概要とそのサブページを参照してください。
android.hardware.Camera
API の CTS テスト
cts/tests/tests/
でこれらのカメラ テストを見つけます。
-
hardware/src/android/hardware/cts/CameraTest.java
-
hardware/src/android/hardware/cts/CameraGLTest.java
-
hardware/src/android/hardware/cts/Camera_SizeTest.java
-
permission/src/android/permission/cts/CameraPermissionTest.java
android.hardware.camera2
API の CTS テスト
cts/tests/tests/
でこれらのカメラ テストを見つけます。
-
hardware/src/android/hardware/camera2/cts/*
-
permission/src/android/permission/cts/Camera2PermissionTest.java
CTS 検証ツールのカメラ テスト
これらのカメラ テストは、 cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
にあります。
イメージ テスト スイート (ITS) テスト
Camera Image Test Suite (ITS) テストは、画像の正確性に重点を置いています。テストを実行するには、Android デバイスが USB 経由で接続されたワークステーションで Python スクリプトを実行します。
Camera ITS インフラストラクチャとテストは、 cts/apps/CameraITS
ディレクトリにあります。各テストは、 tests/scene #
サブディレクトリにあります。
を実行します。extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
cd CameraITS
source build/envsetup.sh
テストをセットアップして実行する方法の詳細については、 cts/apps/CameraITS
にあるCameraITS
PDF ファイルを参照してください。スクリプトの使用方法については、 tests
サブディレクトリにあるtutorial.py
を参照してください。
ITS テストには Linux 環境が必要です。 ITS テストを実行するために必要な特定の Python バージョンの詳細については、リリースのCameraITS
PDF ファイルまたは Android 12 のAndroid 12 リリース ノートを参照してください。
静的シーンの推奨設定については、 Camera ITS-in-a-box で説明されています。 sensor_fusion シーンの推奨セットアップについては、 Sensor Fusion Box クイック スタート ガイドで説明されています。
ITS を手動で実行するには、白い壁、灰色のカード、電気スタンドなど、特定の再利用可能なターゲットを使用して単純な物理環境を準備します。 Android デバイスを三脚にマウントし、スクリプトを実行してカメラ機能をテストします。ほとんどのテストは合格または不合格ですが、一部の指標は提供されます。
これらのスクリプトは、CTS でテストされていないシナリオをテストし、HAL 3.2 テスト計画の重要なコンポーネントです。
ITS テストは合格または不合格のいずれかです。各シーン フォルダー内のすべての必須テストに合格する必要があります。義務付けられていないテストは失敗する可能性があり、 CtsVerifier
合格としてカウントされます。
シーンとテストの説明については、「カメラ ITS テスト」を参照してください。
メディア フレームワークのテスト
MediaFrameworkTest でカメラ関連のメディア テストをすべてパスします。これらのテストでは、mediaframeworktest.apk が Android デバイスにインストールされている必要があることに注意してください。 make mediaframeworktest
し、adb を使用して結果の .apk をインストールする必要があります。コマンドの例を以下に示します。
カメラ関連のメディア フレームワーク テストの開始パスは、 platform/frameworks/base
。
テストのソース コードは、 frameworks/base/media/tests/MediaFrameworkTest
これらのテストを設定するには:
make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk
name変数は、ベンダーの製品を含むディレクトリを表します。
次のディレクトリまたはそのサブディレクトリですべてのテストを見つけます。
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
各サブディレクトリは、テストのクラスを表します。
-
functional/
-
integration/
-
performance/
-
power/
-
stress/
-
unit/
メディア フレームワーク テストの実行
利用可能なすべてのテストを表示するには::
adb shell pm list instrumentation
これにより、次のような結果が得られます。
instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner (target=com.android.mediaframeworktest)
各テスト行からコンポーネント ( instrumentation:
と(target=com.android.mediaframeworktest)
の間) を特定して抽出します。コンポーネントは、ターゲット パッケージ名 ( com.android.mediaframeworktest
) とテスト ランナー名 ( MediaFramework TestRunner
) で構成されます。MediaFramework TestRunner
)。
例えば:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
次に、各コンポーネントを次のようにadb shell am instrument
に渡すことができます。
adb shell am instrument -w component.name
component.name
は、上記の抽出された値と同じです。例えば:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
クラス パスは Java パッケージ + クラス名ですが、インストルメンテーション パッケージは Java パッケージと必ずしも同じではないことに注意してください。コンポーネント名を連結するときは、テスト ランナー クラスが存在する Java パッケージではなく、必ず AndroidManifest.xml パッケージを使用してください。
単一クラスのテストを実行するには、-e クラスを渡します
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
テスト クラスで 1 つのメソッドのみを実行するには、次のようにクラス名にポンド記号 (#) とメソッド名 (この場合はtestConnectPro
) を追加します。
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
メディア設定の機能テスト
機能テストの実行例を次に示します。このテストでは、カメラ設定のさまざまな組み合わせの基本機能を検証します。 (つまり、フラッシュ、露出、WB、シーン、画像サイズ、ジオタグ)
テスト コマンドを実行します。
adb shell am instrument -w -r -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner
メディア統合テスト
統合テストの実行例を次に示します。この場合は、mediaframeworktest/integration/CameraBinderTest.java と mediaframeworktest/CameraStressTestRunner.java です。
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
成功した場合、次のような出力が得られます。
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
メディア性能試験
このプレビュー メモリ テストは、カメラ プレビューを 200 回開いて解放します。 20 回の反復ごとに、ps mediaserver のスナップショットが記録され、200 回の反復後に異なるメモリ使用量が比較されます。差が 150kM を超える場合、テストは失敗します。
テスト コマンドを実行します。
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
より詳細な出力は、/sdcard/ /sdcard/mediaMemOutput.txt
にあります。
メディア単体テスト
単体テストを実行するコマンドはすべて似ています。たとえば、CameraMetadataTest.java の場合、コマンドは次のようになります。
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
メディア ストレス テスト
このテストは、カメラの画像キャプチャとビデオ録画にストレスを与えるためのものです。
テスト コマンドを実行します。
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
すべてのテストに合格する必要があります。
手動 TestingCam テスト
TestingCam アプリは、次のチェックを実行して手動で実行する必要があります。 TestingCam のソースは次のとおりです: pdk/apps/TestingCamera/
カメラの傾きによる無限焦点
TestingCam を起動し、プレビューをオンにして、オートフォーカス モードが無限に設定されていることを確認します。 [写真を撮る] ボタンを使用して、カメラを水平、上 (垂直に近い)、下 (垂直に近い) に向けて、遠くの被写体 (少なくとも 10 m 離れた場所) のショットをキャプチャします。上向きのショットの例は、下から見た木の高い葉/枝であり、下向きのショットの例は、建物の屋根から見た通りです。いずれの場合も、遠くの被写体はシャープで焦点が合っている必要があります。ギャラリー ビューでショットを保存して表示すると、ズームインしてシャープネスをより簡単に調べることができます。
VCMアクチュエータを搭載したカメラがこのテストに合格するには、クローズドループAF制御システムが必要になるか、加速度計データを使用してカメラの向きを決定することに基づく何らかのSW補正が必要になることに注意してください。レンズの無限遠位置の信頼できる工場校正も必要になります。
手動 TestingCam2 テスト
TestingCam2 アプリは、次のチェックを実行して手動で実行する必要があります。 TestingCam2 のソースは次のとおりです: pdk/apps/TestingCamera2/
JPEG キャプチャ
TestingCam2 を起動し、 JPEGボタンを押します。ビューファインダー画像の右側に表示される画像は、同じ方向を含むビューファインダーと同じように表示されます。