Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
23a79a23
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
23a79a23
编写于
8月 05, 2022
作者:
L
liyan
提交者:
Gitee
8月 05, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
资料规范性检查
Signed-off-by:
N
li-yan339
<
liyan339@h-partners.com
>
上级
c4b29bed
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
64 addition
and
53 deletion
+64
-53
zh-cn/device-dev/driver/driver-platform-hdmi-develop.md
zh-cn/device-dev/driver/driver-platform-hdmi-develop.md
+64
-53
未找到文件。
zh-cn/device-dev/driver/driver-platform-hdmi-develop.md
浏览文件 @
23a79a23
...
...
@@ -5,7 +5,7 @@
### 功能简介
HDMI(High Definition Multimedia Interface),即高清多媒体接口,是Hitachi、Panasonic、Philips、Silicon Image、Sony、Thomson、Toshiba共同发布的一款音视频传输协议,主要用于DVD、机顶盒等音视频
source
到TV、显示器等Sink设备的传输。HDMI传输过程遵循TMDS(Transition Minimized Differential Signaling)协议。
HDMI(High Definition Multimedia Interface),即高清多媒体接口,是Hitachi、Panasonic、Philips、Silicon Image、Sony、Thomson、Toshiba共同发布的一款音视频传输协议,主要用于DVD、机顶盒等音视频
Source设备
到TV、显示器等Sink设备的传输。HDMI传输过程遵循TMDS(Transition Minimized Differential Signaling)协议。
### 基本概念
...
...
@@ -15,13 +15,14 @@ HDMI(High Definition Multimedia Interface),即高清多媒体接口,是H
-
CEC(Consumer Electronics Control):消费电子控制,该功能应该能够在连接HDMI的发送设备与接收设备之间实现交互操作。
-
FRL(Fixed Rate Link):TMDS 的架构进行讯号传输时,最高带宽可达18Gbps,而 FRL 模式的带宽则提升到48Gbps。
-
FRL(Fixed Rate Link):TMDS的架构进行讯号传输时,最高带宽可达18Gbps,而FRL模式的带宽则提升到48Gbps。
-
HDCP(High-bandwidth Digital Content Protection):即高带宽数字内容保护技术,当用户对高清晰信号进行非法复制时,该技术会进行干扰,降低复制出来的影像的质量,从而对内容进行保护。
### 运作机制
在HDF框架中,HDMI的接口适配模式采用独立服务模式(如图1)
,
在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用率。
在HDF框架中,HDMI的接口适配模式采用独立服务模式(如图1)
。
在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用率。
**图 1**
HDMI独立服务模式
...
...
@@ -35,7 +36,7 @@ HDMI模块当前仅支持轻量和小型系统内核(LiteOS) 。
### 场景介绍
HDMI具有体积小
,传输速率高,传输带宽宽,兼容性好,
能同时传输无压缩音视频信号等优点。与传统的全模拟接口相比,HDMI不但增加了设备间接线的便捷性,还提供了一些HDMI特有的智能化功能,可用于小体积设备进行高质量音视频传输的场景。
HDMI具有体积小
、传输速率高、传输带宽宽、兼容性好、
能同时传输无压缩音视频信号等优点。与传统的全模拟接口相比,HDMI不但增加了设备间接线的便捷性,还提供了一些HDMI特有的智能化功能,可用于小体积设备进行高质量音视频传输的场景。
### 接口说明
...
...
@@ -86,40 +87,40 @@ struct HdmiCntlrOps {
| hardWareInit |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | 无 | 初始化HDMI硬件 |
| hardWareStatusGet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
|
**status**
:HDMI硬件状态 ; | 无 | 获取HDMI当前硬件状态 |
| controllerReset |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | 无 | 复位HDMI控制器 |
| hotPlugStateGet |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | bool
:
HDMI热插拔状态 | 获取HDMI热插拔状态 |
| hotPlugInterruptStateGet |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | bool
:
HDMI热插拔中断状态 | 获取HDMI热插拔中断状态 |
| lowPowerSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能低功耗 |
| hotPlugStateGet |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | bool
:
HDMI热插拔状态 | 获取HDMI热插拔状态 |
| hotPlugInterruptStateGet |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | bool
:
HDMI热插拔中断状态 | 获取HDMI热插拔中断状态 |
| lowPowerSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能低功耗 |
| tmdsModeSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**mode**
:TMDS模式 | 无 | 无 | 设置TMDS模式 |
| tmdsConfigSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**mode**
:
TMDS参数 | 无 | HDF_STATUS相关状态 | 配置TMDS参数 |
| infoFrameEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**infoFrameType**
: packet类型
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能infoFrame |
| infoFrameSend |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**infoFrameType**
: packet类型
<br
/>
**data**
:
infoFrame数据
<br
/>
**len**
:数据长度 | 无 | HDF_STATUS相关状态 | 发送infoFrame |
| cecMsgSend |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**msg**
:
CEC消息 | 无 | HDF_STATUS相关状态 | 发送CEC消息 |
| audioPathEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能| 无 | 无 | 使能/去使能audio通路 |
| audioPathSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**config**
:
配置信息 | 无 | 无 | 设置audio通路配置信息 |
| phyOutputEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能物理层输出状态 |
| phyOutputSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**cfg**
:
配置信息 | 无 | 无 | 设置物理层配置信息 |
| blackDataSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 设置黑屏 |
| videoMuteEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能video静音 |
| tmdsConfigSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**mode**
:
TMDS参数 | 无 | HDF_STATUS相关状态 | 配置TMDS参数 |
| infoFrameEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**infoFrameType**
:packet类型
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能infoFrame |
| infoFrameSend |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**infoFrameType**
:packet类型
<br
/>
**data**
:
infoFrame数据
<br
/>
**len**
:数据长度 | 无 | HDF_STATUS相关状态 | 发送infoFrame |
| cecMsgSend |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**msg**
:
CEC消息 | 无 | HDF_STATUS相关状态 | 发送CEC消息 |
| audioPathEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能| 无 | 无 | 使能/去使能audio通路 |
| audioPathSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**config**
:
配置信息 | 无 | 无 | 设置audio通路配置信息 |
| phyOutputEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能物理层输出状态 |
| phyOutputSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**cfg**
:
配置信息 | 无 | 无 | 设置物理层配置信息 |
| blackDataSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 设置黑屏 |
| videoMuteEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能video静音 |
| videoPathSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**attr**
:配置信息| 无 | 无 | 设置video通路配置信息 |
|audioMuteEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能audio静音 |
| avmuteSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能| 无 | 无 | 使能/去使能声音图像消隐 |
|audioMuteEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | 无 | 使能/去使能audio静音 |
| avmuteSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能| 无 | 无 | 使能/去使能声音图像消隐 |
| ddcTransfer |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**ddcCfg**
:DDC配置参数 |
**ddcCfg**
:DDC配置参数 |HDF_STATUS相关状态 | 读写DDC数据 |
| scdcSourceScrambleGet |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | bool,加扰状态 | 获取source端的加扰状态 |
| scdcSourceScrambleSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | HDF_STATUS相关状态 | 使能/去使能source端的加扰 |
| frlEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | HDF_STATUS相关状态 | 使能/去使能FRL |
| scdcSourceScrambleSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | HDF_STATUS相关状态 | 使能/去使能source端的加扰 |
| frlEnable |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**enable**
:
bool,使能/去使能 | 无 | HDF_STATUS相关状态 | 使能/去使能FRL |
| audioNctsSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**cfg**
:N/CTS配置参数 | 无 | HDF_STATUS相关状态 | 设置audio的N/CTS信息 |
| frlTrainingConfigSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**cfg**
:FRL Training配置参数 | 无 | 无| 设置FRL Training配置信息 |
| frlTrainingStart |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | 无 | 开始FRL Training流程 |
| frlGetTriningRslt |
**cntlr**
:结构体指针,核心层HDMI控制器 |
**rslt**
:FRL Training结果 | 无 | 获取FRL Training结果 |
| hdcpRegInit |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | 无 | 初始化HDCP流程相关的寄存器 |
|hdcpGenerateAksvAndAn |
**cntlr**
:结构体指针,核心层HDMI控制器 | 无 | HDF_STATUS相关状态 | HDCP流程中生成aksv和an |
| hdcpOptReg |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**type**
: 操作类型
<br
/>
**data**
: 寄存器数据
<br
/>
**len**
: 数据长度 |
**data**
:
寄存器数据 | HDF_STATUS相关状态 | HDCP流程中读写相关寄存器 |
| hdrTimerSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**config**
:
timer配置信息 | 无 | 无 | 设置HDR相关的timer配置信息 |
| hdcpOptReg |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**type**
:操作类型
<br
/>
**data**
:寄存器数据
<br
/>
**len**
:数据长度 |
**data**
:
寄存器数据 | HDF_STATUS相关状态 | HDCP流程中读写相关寄存器 |
| hdrTimerSet |
**cntlr**
:结构体指针,核心层HDMI控制器
<br
/>
**config**
:
timer配置信息 | 无 | 无 | 设置HDR相关的timer配置信息 |
### 开发步骤
HDMI模块适配的三个环节是
配置属性文件,实例化驱动入口
以及实例化HDMI控制器对象。
HDMI模块适配的三个环节是
实例化驱动入口、配置属性文件
以及实例化HDMI控制器对象。
-
实例化驱动入口:
-
实例化HdfDriverEntry结构体成员。
...
...
@@ -135,7 +136,7 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
1.
实例化驱动入口
驱动入口必须为HdfDriverEntry(在
hdf_device_desc.h
中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。
驱动入口必须为HdfDriverEntry(在
hdf_device_desc.h
中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。
一般在加载驱动时HDF会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。
...
...
@@ -165,13 +166,13 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
platform
::
host
{
device_hdmi
::
device
{
device0
::
deviceNode
{
policy
=
2
;
// 等于2,需要发布服务
priority
=
20
;
// 驱动启动优先级
permission
=
0644
;
// 驱动创建设备节点权限
serviceName
=
"HDF_PLATFORM_HDMI_0"
;
//【必要】驱动对外发布服务的名称,必须唯一
moduleName
=
"hdmi_driver"
;
//【必要】用于指定驱动名称,需要与期望的驱动Entry中的moduleName一致
;
deviceMatchAttr
=
"adapter_hdmi_driver"
;
//【必要】用于配置控制器私有数据,要与hdmi_config.hcs中对应控制器保持一致
}
// 具体的控制器信息在
hdmi_config.hcs 中
policy
=
2
;
// 等于2,需要发布服务。
priority
=
20
;
// 驱动启动优先级。
permission
=
0644
;
// 驱动创建设备节点权限。
serviceName
=
"HDF_PLATFORM_HDMI_0"
;
//【必要】驱动对外发布服务的名称,必须唯一
。
moduleName
=
"hdmi_driver"
;
//【必要】用于指定驱动名称,需要与期望的驱动Entry中的moduleName一致
。
deviceMatchAttr
=
"adapter_hdmi_driver"
;
//【必要】用于配置控制器私有数据,要与hdmi_config.hcs中对应控制器保持一致
。
}
// 具体的控制器信息在
hdmi_config.hcs中。
}
}
}
...
...
@@ -183,8 +184,8 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
root
{
platform
{
hdmi_config
{
template
hdmi_controller
{
// 模板公共参数,继承该模板的节点如果使用模板中的默认值,则节点字段可以缺省
match_attr
=
""
;
//【必要】需要和device_info.hcs中的deviceMatchAttr值一致
template
hdmi_controller
{
// 模板公共参数,继承该模板的节点如果使用模板中的默认值,则节点字段可以缺省
。
match_attr
=
""
;
//【必要】需要和device_info.hcs中的deviceMatchAttr值一致
。
index
=
0
;
//【必要】hdmi控制器编号
regBasePhy
=
0x10100000
;
//【必要】寄存器物理基地址
regSize
=
0xd1
;
//【必要】寄存器位宽
...
...
@@ -237,14 +238,14 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
```
c
struct
HdmiAdapterHost
{
struct
HdmiCntlr
*
cntlr
;
//【必要】是核心层控制对象,具体描述如下
struct
HdmiCntlr
*
cntlr
;
//【必要】是核心层控制对象,具体描述如下
。
volatile
unsigned
char
*
regBase
;
//【必要】寄存器基地址
uint32_t
regBasePhy
;
//【必要】寄存器物理基地址
uint32_t
regSize
;
//【必要】寄存器位宽
uint32_t
irqNum
;
//【必要】中断号
};
/* HdmiCntlr是核心层控制器结构体,其中的成员在Init函数中被赋值 */
/* HdmiCntlr是核心层控制器结构体,其中的成员在Init函数中被赋值
。
*/
struct
HdmiCntlr
{
struct
IDeviceIoService
service
;
struct
HdfDeviceObject
*
hdfDevObj
;
...
...
@@ -314,9 +315,11 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
-
Bind函数参考
**入参:**
HdfDeviceObject是整个驱动对外呈现的接口参数,具备hcs配置文件的信息
HdfDeviceObject是整个驱动对外呈现的接口参数,具备HCS配置文件的信息。
**返回值:**
HDF_STATUS相关状态(下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义)
|状态(值)|状态描述|
...
...
@@ -329,6 +332,7 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
|HDF_FAILURE |传输失败|
**函数说明:**
初始化自定义结构体对象HdmiAdapterHost,初始化HdmiCntlr成员,调用核心层HdmiCntlrAdd函数。
HdmiCntlr,HdmiAdapterHost,HdfDeviceObject之间互相赋值,方便其他函数可以相互转化。
...
...
@@ -353,13 +357,13 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
cntlr
->
ops
=
&
g_hdmiHostOps
;
//【必要】HdmiCntlrOps的实例化对象的挂载
cntlr
->
hdfDevObj
=
obj
;
//【必要】使HdfDeviceObject与HdmiCntlr可以相互转化的前提
obj
->
service
=
&
cntlr
->
service
;
//【必要】使HdfDeviceObject与HdmiCntlr可以相互转化的前提
ret
=
HdmiAdapterCntlrParse
(
cntlr
,
obj
);
//【必要】初始化cntlr,失败则
goto __ERR;
ret
=
HdmiAdapterCntlrParse
(
cntlr
,
obj
);
//【必要】初始化cntlr,失败则
goto __ERR。
...
ret
=
HdmiAdapterHostParse
(
host
,
obj
);
//【必要】初始化host对象的相关属性,失败则
goto __ERR;
ret
=
HdmiAdapterHostParse
(
host
,
obj
);
//【必要】初始化host对象的相关属性,失败则
goto __ERR。
...
ret
=
HdmiAdapterHostInit
(
host
,
cntlr
);
// 厂商自定义的初始化,失败则
goto __ERR;
ret
=
HdmiAdapterHostInit
(
host
,
cntlr
);
// 厂商自定义的初始化,失败则
goto __ERR。
...
ret
=
HdmiCntlrAdd
(
cntlr
);
// 调用核心层函数
失败则 goto __ERR;
ret
=
HdmiCntlrAdd
(
cntlr
);
// 调用核心层函数
,失败则goto __ERR。
...
HDF_LOGD
(
"HdmiAdapterBind: success."
);
return
HDF_SUCCESS
;
...
...
@@ -373,10 +377,12 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
-
Init函数参考
**入参:**
HdfDeviceObject是整个驱动对外暴露的接口参数,具备hcs配置文件的信息
HdfDeviceObject是整个驱动对外暴露的接口参数,具备HCS配置文件的信息。
**返回值:**
HDF_STATUS相关状态
HDF_STATUS相关状态。
**函数说明**
:
...
...
@@ -389,27 +395,32 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
}
```
-
Release
函数参考
-
Release函数参考
**入参:**
HdfDeviceObject是整个驱动对外暴露的接口参数,具备hcs配置文件的信息
HdfDeviceObject是整个驱动对外暴露的接口参数,具备HCS配置文件的信息。
**返回值:**
无
**函数说明:**
释放内存和删除控制器,该函数需要在驱动入口结构体中赋值给Release接口,当HDF框架调用Init函数初始化驱动失败时,可以调用Release释放驱动资源。
>  **说明:**<br>
> 所有强制转换获取相应对象的操作前提是在Init函数中具备对应赋值的操作。
```
c
static
void
HdmiAdapterRelease
(
struct
HdfDeviceObject
*
obj
)
{
struct
HdmiCntlr
*
cntlr
=
NULL
;
...
cntlr
=
(
struct
HdmiCntlr
*
)
obj
->
service
;
// 这里有HdfDeviceObject到HdmiCntlr的强制转化,通过service成员,赋值见Bind函数
cntlr
=
(
struct
HdmiCntlr
*
)
obj
->
service
;
// 这里有HdfDeviceObject到HdmiCntlr的强制转化,通过service成员,赋值见Bind函数。
...
HimciDeleteHost
((
struct
HimciAdapterHost
*
)
cntlr
->
priv
);
// 厂商自定义的内存释放函数
,这里有HdmiCntlr到HimciAdapterHost的强制转化
HimciDeleteHost
((
struct
HimciAdapterHost
*
)
cntlr
->
priv
);
// 厂商自定义的内存释放函数
,这里有HdmiCntlr到HimciAdapterHost的强制转化。
}
```
>  **说明:**<br>
> 所有强制转换获取相应对象的操作前提是在Init函数中具备对应赋值的操作。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录