HDMI相关

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 的显示


  1. 输出 BIST COLORBAR 模式:
    echo bist1920 > /sys/class/amhdmitx/amhdmitx0/debug
  2. 输出 BIST LINE 模式:
    echo bistline > /sys/class/amhdmitx/amhdmitx0/debug
  3. 输出 BIST DOT 模式:
    echo bistdot > /sys/class/amhdmitx/amhdmitx0/debug
  4. 退出 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

你可能感兴趣的:(amlogic工作笔记,android,tv,java,iptv,hdmi)