カメラ HAL テストのチェックリスト

このページには、Android カメラのハードウェア抽象化レイヤー (HAL) を評価するために利用できるすべてのテストがリストされています。これは、相手先商標製品製造業者 (OEM) およびアプリケーション プロセッサ (AP) ベンダーを対象としており、欠陥を最小限に抑えてカメラ HAL を適切に実装できるようにします。これは Android 互換性テスト スイート (CTS) への任意の追加ですが、カメラ テストの範囲が大幅に拡大され、潜在的なバグが確実に特定されます。

これらのテストに合格することで、OEM は Android カメラのハードウェア抽象化レイヤー (HAL) 3 インターフェイスが適切に統合されているかどうかを検証します。チェックリストのすべての項目に準拠している場合、デバイス実装は Android カメラ HAL インターフェイスに関して完全であるとみなされる場合があります。これにより、デバイスは、カメラ アプリが構築されるandroid.hardware.camera2パッケージを適切にサポートできるようになります。

カメラHAL3仕様

Android カメラ HAL3仕様は、デバイスが満たす必要があるものに関する信頼できる情報源です。このページには、チェックリストとして使用できるすべてのテストの概要が表示されます。カメラ HAL 実装者 (AP ベンダーなど) は、カメラ HAL3 仕様を 1 行ずつ確認し、デバイスがそれに準拠していることを確認する必要があります。

現在の HAL 仕様は、Android 5.0 以降の汎用 Android プラットフォーム開発キット (PDK) 内の次のファイルで定義されています。

カメラテストの種類

以下に、最新の Android カメラで利用できる主なテストの種類と、関連する手順への参照を示します。

これらすべてのテスト タイプについては、以下で詳しく説明します。これらのテストは、OEM が実行すると予想される時系列順に示されています。

たとえば、デバイスがネイティブ テストに不合格になった場合、その後の互換性テスト スイート (CTS) テストにも確実に不合格になります。また、デバイスが CTS に失敗した場合、イメージ テスト スイート (ITS) に進むことはほとんど意味がありません。次のテスト セットに進む前に、各テスト タイプの障害に対処することをお勧めします。

ベンダー テスト スイート (VTS) テスト

Android ベンダー テスト スイート (VTS) は、HIDL インターフェイス レベルで動作するテスト スイートです。 VTS の使用の詳細については、 「ベンダー テスト スイート」を参照してください。

互換性テスト スイート (CTS) テスト

カメラ Android Compatibility Test Suite (CTS) テストは、デバイスの互換性に焦点を当てています。テスト環境のセットアップについては、 「CTS のセットアップ」を参照してください。

カメラ CTS テストの開始パスはplatform/ctsです。

外部カメラ (USB Web カメラなど) をサポートするデバイスに対してカメラ CTS を実行する場合、CTS の実行時にデバイスが接続されている必要があります。そうしないと、テストが自動的に失敗します。外部カメラの例には、 Logicool HD Pro Webcam C920およびMicrosoft LifeCam HD-3000が含まれます。

CTS の実行に関する一般的な手順については、CTS の概要とそのサブページを参照してください。

CTS はandroid.hardware.Camera API をテストします

これらのカメラ テストは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

CTS はandroid.hardware.camera2 API をテストします

これらのカメラ テストはcts/tests/tests/で見つけます。

  • hardware/src/android/hardware/camera2/cts/*
  • permission/src/android/permission/cts/Camera2PermissionTest.java

CTS Verifier カメラ テスト

これらのカメラ テストcts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*で見つかります。

Image Test Suite (ITS) テスト

Camera Image Test Suite (ITS) テストは、画像の正確さに重点を置いています。テストを実行するには、USB 経由で接続された Android デバイスを備えたワークステーションで Python スクリプトを実行します。

カメラ ITS インフラストラクチャとテストは、 cts/apps/CameraITSディレクトリにあります。各テストは、 tests/scene #サブディレクトリに存在します。

テストのセットアップおよび実行方法の詳細については、 「カメラ ITS」を参照してください。

シーンとテストの説明については、 「カメラ ITS テスト」を参照してください。

ITS テストは合格か不合格かのどちらかです。各シーン フォルダー内のすべての必須テストに合格する必要があります。必須ではないテストは失敗する可能性があり、 CtsVerifierでは合格としてカウントされます。

ITS テストは、CTS ではテストされないテスト シナリオをテストします。これは、HAL 3.2 テスト計画の重要なコンポーネントです。

メディア フレームワークのテスト

MediaFrameworkTest のカメラ関連のすべてのメディア テストに合格します。これらのテストでは、Android デバイスに mediaframeworktest.apk がインストールされている必要があることに注意してください。 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/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

すべてのテストに合格する必要があります。

手動テストCam テスト

TestingCam アプリは、次のチェックを実行して手動で実行する必要があります。 TestingCam のソースはここにあります: pdk/apps/TestingCamera/

カメラチルトによる無限遠フォーカス

TestingCam を起動し、プレビューをオンにして、オートフォーカス モードが無限大に設定されていることを確認します。 [写真を撮る]ボタンを使用して、カメラを水平、上方 (垂直に近い)、および下方 (垂直に近い) に向けて、遠くの被写体 (少なくとも 10 メートル離れた場所) のショットをキャプチャします。上向きのショットの例としては、下から見た高い木の葉や枝が挙げられ、下向きのショットの例としては、建物の屋上から見た通りなどが挙げられます。いずれの場合も、遠くの被写体は鮮明で焦点が合っている必要があります。ショットを保存してギャラリー ビューで表示すると、ズームインして鮮明さをより簡単に検査できます。

VCM アクチュエータを備えたカメラがこのテストに合格するには、閉ループ AF 制御システムが必要になるか、加速度計データを使用してカメラの向きを決定することに基づいたある種の SW 補正が必要になることに注意してください。レンズ無限遠位置の信頼性の高い工場校正も必要になります。

手動 TestingCam2 テスト

TestingCam2 アプリは、次のチェックを実行して手動で実行する必要があります。 TestingCam2 のソースはここにあります: pdk/apps/TestingCamera2/

JPEGキャプチャ

TestingCam2を起動し、 JPEGボタンを押します。ビューファインダー画像の右側に表示される画像は、同じ方向を含む、ビューファインダーと同じように表示される必要があります。