相機調試

本頁介紹相機服務中的偵錯工具,用於查看發送到相機 HAL 和從相機 HAL 發送的捕獲請求和結果值的變化。相機服務包括watchdumpsys指令。 watch命令可在運行 Android 13 或更高版本的裝置上使用,它允許控制何時監視和存取標籤、即時預覽來自開放用戶端的標籤監控轉儲,以及查看來自封閉客戶端的快取轉儲。 dumpsys指令允許存取偵錯訊息,但不提供來自已關閉客戶端的標記監視轉儲。

監視命令

本節介紹watch指令的使用方法並提供範例。

開始監控標籤

若要開始監視標籤,請使用:

adb shell cmd media.camera watch start -m <tags> [-c <clients>]

例子:

adb shell cmd media.camera watch start \
-m android.control.effectMode,android.control.aeMode \
-c com.google.android.GoogleCamera,com.android.chrome

論點:

  • tags :要監視的標籤的逗號分隔清單。也接受簡寫3a ,其中3a指的是與 AF、AE 和 AWB 相關的所有android.control.*標籤的集合(有關標籤的完整列表,請參閱TagMonitor.cpp )。
  • clients :可選參數。監視標籤的客戶端包名稱的逗號分隔清單。如果沒有傳遞客戶端參數,或客戶端清單中存在all客戶端,則監視所有客戶端。

此命令在開啟的客戶端和隨後開啟的任何客戶端中啟動標籤監視(直到呼叫stop )。呼叫start後,當客戶端關閉時,攝影機服務會快取來自客戶端的標籤監控轉儲。

除非呼叫start ,否則相機服務不會監視任何客戶端的標籤,也不會快取標籤監視轉儲。如果在clients參數中傳遞all ,攝影機服務將監視標籤並快取來自所有客​​戶端的監視轉儲。

轉儲標籤監控訊息

若要轉儲標籤監控訊息,請使用:

adb shell cmd media.camera watch dump

此命令將標籤監控資訊轉儲到標準輸出,然後退出。它會列印來自自start (或上次clear )以來已關閉的客戶端的快取標籤監控轉儲以及來自開啟客戶端的最新標籤監控轉儲。

範例輸出:

$ adb shell cmd media.camera watch dump
Client: com.android.chrome (active)
1:com.android.chrome  f0:532642803202286ns:             REQ:android.control.aeMode: [ON] output stream ids:  0
1:com.android.chrome  f0:532642803202286ns:             REQ:android.control.afMode: [CONTINUOUS_PICTURE] output stream ids:  0
..
Client: com.google.android.GoogleCamera (cached)
0:com.google.android.GoogleCamera  f0:532601698728552ns:             REQ:android.control.aeMode: [ON] output stream ids:  0  3  1  2
0:com.google.android.GoogleCamera  f0:532601698728552ns:             REQ:android.control.afMode: [CONTINUOUS_PICTURE] output stream ids:  2  1  3  0
0:com.google.android.GoogleCamera  f0:532601698728552ns:             REQ:android.control.awbMode: [AUTO] output stream ids:  0  3  1  2
...

即時預覽標籤監控訊息

若要即時預覽標籤監控訊息,請使用:

adb shell cmd media.camera watch live [-n refresh_interval_ms]

例子:

adb shell cmd media.camera watch live -n 250

論點:

  • refresh_interval_ms :可選參數。刷新訊息的時間間隔(以毫秒為單位)。如果未傳遞任何值,則預設為 1000。

此指令即時列印標籤監控資訊。若要退出,請按return / Enter

範例輸出:

$ adb shell cmd media.camera watch live
Press return to exit...

0:com.google.android.GoogleCamera  f0:533016991302201ns:             REQ:android.control.aeMode: [ON] output stream ids:  1  3  0  2
0:com.google.android.GoogleCamera  f0:533016991302201ns:             REQ:android.control.afMode: [CONTINUOUS_PICTURE] output stream ids:  2  0  3  1
...
0:com.google.android.GoogleCamera  f0:533017066793915ns:                            RES:android.control.aeState: [SEARCHING]
0:com.google.android.GoogleCamera  f0:533017066793915ns: 3                          RES:android.control.aeState: [SEARCHING]
0:com.google.android.GoogleCamera  f0:533017066793915ns: 2                          RES:android.control.aeState: [SEARCHING]
0:com.google.android.GoogleCamera  f0:533017066793915ns:                            RES:android.control.afState: [PASSIVE_SCAN]

清除快取轉儲

若要清除所有快取的標籤監控轉儲,請使用:

adb shell cmd media.camera watch clear

此命令不會停止標籤監控。

停止監控標籤

若要停止監視所有用戶端中的標籤並清除用於快取標籤監視轉儲的所有緩衝區,請使用:

adb shell cmd media.camera watch stop

轉儲系統指令

dumpsys指令提供來自相機服務的大量除錯資訊。以下命令從相機服務捕捉整個調試轉儲:

adb shell dumpsys media.camera

dumpsys命令還允許從開啟的客戶端捕獲標籤監控轉儲。但是, dumpsys不提供來自已關閉客戶端的標記監控轉儲。以下是使用dumpsys進行標籤監控的範例:

  • 從所有開啟的客戶端擷取標籤監控轉儲:

    adb shell dumpsys media.camera -m 3a | grep -A50 Monitored
    
  • 使用Linux watch指令即時預覽標籤監控資訊:

    watch -n 1 -c 'adb shell dumpsys media.camera -m 3a | grep -A50 Monitored'