HDMI相关基础
- 4.4 与 9.0 差异
- AVMUTE 的使用
- hdcp异常
- 检查 HDCP 交互:
- 检查 ksv(视频加密密钥):
- HDCP 的内部检测:
- 显示模式分析
- 查看是否已连接电视机
- 查看当前显示模式
- 更改当前显示分辨率
- 查看 EDID 信息
- 查看显示设备的 EDID 信息
- 查看电视机支持的最佳分辨率
- Android 系统对 HDMI 输出制式的设置
- 1. 查看当前输出制式的节点命令:
- 2. 输出制式在 Framework 层的代码位置:
- 主要接口说明
- 最优分辨率、颜色空间、色深的配置
- 使用 HDMI Bist 模式验证 HDMI 的显示
- 节点说明
4.4 与 9.0 差异
4.4走framework MboxOutputModeService
9.0走systemcontrol
AVMUTE 的使用
对应的切点:/sys/class/amhdmitx/amhdmitx0/avmute
往其写入 1,表示进行 SET_AVMUTE
往其写入-1,表示进行 CLEAR_AVMUTE
hdcp异常
检查 HDCP 交互:
输入命令 cat /sys/module/hdmitx/parameters/hdmi_authenticated,输出大于 0 为成功,小于等于 0 为失败
检查 ksv(视频加密密钥):
输入命令 cat /sys/class/amhdmitx/amhdmitx0/hdcp_ksv_info,输出如下:
- AKSV: 663fa14267 Valid
- BKSV: 27c2d1b6ca Valid
如果出现 AKSV 为 invalid 的情况,请检查 HDCP key 烧录是否有误。
如果出现 BKSV 为 invalid 的情况,请检查歉收端是否为合法的带有 HDCP key 的设备。
HDCP 的内部检测:
输入命令 cat /sys/class/amhdmitx/amhdmitx0/hdcp_ksv_info,出现以下打印表示检测成功,否则为检测失败
显示模式分析
查看是否已连接电视机
输入命令 cat /sys/class/amhdmitx/amhdmitx0/hpd_state
0: 未连接电视
1:已连接电视
查看当前显示模式
输入命令 cat /sys/class/display/mode,输出当前分辨率(如:720p50hz)
输入命令 cat /sys/class/amhdmitx/amhdmitx0/disp_mode,也可查看分辨率,显示的是 vic 编号,其对应关系:
VIC: 0 –> HDMI_Unkown
VIC: 2 –> 480p
VIC: 4 –> 720p
VIC: 5 –> 1080i
VIC: 6 –> 480i
VIC: 16 –> 1080p
VIC: 17 –> 576p
VIC: 19 –> 720p50
VIC: 20 –> 1080i50
VIC: 21 –> 576i
VIC: 31 –> 1080p50
VIC: 93 –> 4k2k24hz
VIC: 94 –> 4k2k25hz
VIC: 95 –> 4k2k30hz
VIC: 98 –> smpte, 24hz
更改当前显示分辨率
输入 echo 1080p > /sys/class/display/mode
查看 EDID 信息
查看显示设备的 EDID 信息
cat /sys/class/amhdmitx/amhdmitx0/edid
查看电视机支持的最佳分辨率
cat /sys/class/amhdmitx/amhdmitx0/disp_cap
以下为输出(其中带星号的为最佳分辨率):
480i
576i
576p
720p
1080i
1080p
720p50hz*
1080i50hz
1080p50hz
Android 系统对 HDMI 输出制式的设置
1. 查看当前输出制式的节点命令:
cat /sys/class/display/mode
2. 输出制式在 Framework 层的代码位置:
frameworks/base/core/java/android/app/MboxOutputModeManager.java
frameworks/base/services/java/com/android/server/MboxOutputModeService.java
实际上最终都是通过 MboxOutputModeService 类实现对 HDMI 制式的设置。
主要接口说明
1. setDisplayMode()
Function: 设置当前屏幕的显示比例
Param: "4:3"
"16:9"
2. setScreenModeValue()
Function: 设置屏幕的显示模式
Param: "full": 全屏
"normal" : 正常模式
"16_9": 16:9
"4_3" : 4:3
3. GetScreenModeValue()
Function: 获取当前屏幕的输出模式。
Param: 无
4. setHdrMode()
Function: 设置显示的 HDR 模式
Param: "0":关闭 HDR
"1":打开 HDR
"2": auto 模式
5. getHdrMode()
Function:获取 HDR 模式
Param:无
6. setColorspaceMode()
Function: 设置显示的颜色空间和色深
Param: "Auto"
"Y420 8bit"
"Y420 10bit"
"Y422 12bit"
7. getColorspaceMode()
Function: 获取当前显示的颜色空间和色深
Param: 无
8. getSupportColorSpaceList()
Function: 获取当前显示设备支持的颜色空间和色深列表
Param: 无
9. getSupportResoulutionList()
Function: 获取当前显示设备支持的分辨率列表
Param:无
10. getBestMatchResolution()
Function: 获取当前显示设备最佳的分辨率
Param:无
11. setOutputMode()
Function:设置当前显示设备的显示模式
Param:"cvbs"
"720p60hz"
"1080p60hz"
最优分辨率、颜色空间、色深的配置
获取当前显示设备支持的颜色空间及色深的节点:
cat /sys/class/amhdmitx/amhdmitx0/dc_cap
获取当前显示设备支持的分辨率节点:
cat /sys/class/amhdmitx/amhdmitx0/disp_cap
使用 HDMI Bist 模式验证 HDMI 的显示
- 输出 BIST COLORBAR 模式:
echo bist1920 > /sys/class/amhdmitx/amhdmitx0/debug - 输出 BIST LINE 模式:
echo bistline > /sys/class/amhdmitx/amhdmitx0/debug - 输出 BIST DOT 模式:
echo bistdot > /sys/class/amhdmitx/amhdmitx0/debug - 退出 BIST 模式:
echo bistoff > /sys/class/amhdmitx/amhdmitx0/debug
节点说明
/sys/class/amhdmitx/amhdmitx0/hdcp_ver ro //RX端支持的HDCP version
/sys/class/amhdmitx/amhdmitx0/hdcp_lstore ro //本机含有的HDCP KEY类型
/sys/class/amhdmitx/amhdmitx0/disp_cap ro //RX支持的分辨率能力
/sys/class/amhdmitx/amhdmitx0/vesa_cap ro //RX端支持的VESA模式
/sys/class/amhdmitx/amhdmitx0/dc_cap ro //RX端支持的色深,色彩空间能力
/sys/class/amhdmitx/amhdmitx0/hdr_cap ro //RX端支持的hdr能力
/sys/class/amhdmitx/amhdmitx0/dv_cap ro //RX端支持的dolbyVersion能力
/sys/class/amhdmitx/amhdmitx0/hdcp_mode rw //{1|2}
/sys/class/amhdmitx/amhdmitx0/hdcp_ctrl wo //hdcp控制 {stop14|stop22}
/sys/module/hdmitx20/parameters/hdmi_authenticated ro //hdmi认证
/sys/class/amhdmitx/amhdmitx0/avmute wo //hdmi 声音图像{1 disable|-1 enable}
/sys/class/display/mode rw //读写分辨率模式
/sys/class/video/axis rw //播放器显示窗口大小坐标
/sys/class/graphics/fb0/window_axis rw //页面播放大小坐标
/sys/class/amhdmitx/amhdmitx0/hpd_state ro //HDMI线的拨插动作 {0未连接|1已连接}
/sys/class/amhdmitx/amhdmitx0/phy w //{0 disable| 1 enable}echo bist3840 > /sys/class/amhdmitx/amhdmitx0/debug
echo bist1920 > /sys/class/amhdmitx/amhdmitx0/debug
echo bist1280 > /sys/class/amhdmitx/amhdmitx0/debug
echo bist720 > /sys/class/amhdmitx/amhdmitx0/debug
echo bistoff > /sys/class/amhdmitx/amhdmitx0/debug关 pq
echo vpp_pq disable > /sys/class/amvecm/debug
echo 0 > /sys/module/am_vecm/parameters/probe_ok
开 pq
echo vpp_pq enable > /sys/class/amvecm/debug
echo 1 > /sys/module/am_vecm/parameters/probe_ok//sr{0关|1开}
echo 0 > /sys/class/video/sr
echo 1 > /sys/class/video/sr//bypass DI
echo 1 > /sys/module/di/parameters/bypass_all//{0 disable| 1 enable}
echo 0 > /sys/class/amhdmitx/amhdmitx0/phy
echo 1 > /sys/class/amhdmitx/amhdmitx0/phy
//声音图像{1 disable|-1 enable}
echo 1 >/sys/class/amhdmitx/amhdmitx0/avmute
echo -1 >/sys/class/amhdmitx/amhdmitx0/avmute//{stop14|stop22}
echo stop14 > /sys/class/amhdmitx/amhdmitx0/hdcp_ctrl
echo stop22 > /sys/class/amhdmitx/amhdmitx0/hdcp_ctrl//{1|2}
echo 1 > /sys/class/amhdmitx/amhdmitx0/hdcp_mode
echo 2 > /sys/class/amhdmitx/amhdmitx0/hdcp_mode$ps -A |grep -i hdcp
$kill -9 hdcp pid
$hdcp bin文件&echo null > /sys/class/display/mode
echo 444,8bit > /sys/class/amhdmitx/amhdmitx0/attr
echo 1080p60hz > /sys/class/display/mode