相机调试

本页介绍相机服务中的调试工具,用于查看发送到相机 HAL 以及从相机 HAL 发送的捕获请求和结果值的更改。相机服务包括 watchdumpsys 命令。watch 命令在运行 Android 13 或更高版本的设备上可用,允许控制何时监控和访问标记、实时预览来自开放客户端的标记监控转储,以及查看来自关闭客户端的缓存转储。dumpsys 命令允许访问调试信息,但不提供来自关闭客户端的标记监控转储。

watch 命令

本节介绍如何使用 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。

此命令实时打印标记监控信息。要退出,请按*回车*/ *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 命令

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'