[转载] DDK中VPORT Mini-Driver的使用说明
要使用TI DDK中实现的VPORT驱动程序,首先需要在程序中提供VPORT_PortParams类型的参数变量、VPORTCAP_Params类型的参数变量以及VPORTDIS_Params类型的参数变量。
其次,在DSP/BIOS应用程序中使用DDK所提供的Mini-Driver前需要使用DSP/BIOS配置工具(DSP/BIOSConfiguration Tool)对DSP/BIOS程序的“.cdb”文件进行配置:
Step1:打开项目文件目录中DSP/BIOSConfig目录中的“.cdb”文件;
Step2:展开Input/Output-> Device Drivers,选择User-DefinedDevices右键菜单中的“InsertUDEV”创建一个用户自定义的外部设备(该设备实例对象将在DSP/BIOS初始化时被建立起来)并重命名为一个有效的设备名,如“VP0CAPTURE”(若配置的是视频捕获端口VP0)或“VP2DISPLAY”(若配置的是视频显示端口VP2);
Step3:选择自定义外部设备的右键菜单中的properites选项配置该设备:
在“function tableptr”选项中填入“_VPORTCAP_Fxns”(若配置的是视频捕获端口VP0)或“_VPORTDIS_Fxns”(若配置的是视频显示端口VP2);
在“function table type”选项中选择“IOM_Fxns”;
在“deviceid”选项中填入有效的设备号“0×00000000”(若配置的是视频捕获端口VP0)/“0×00000002”(若配置的是视频显示端口VP2);
在“device paramsptr”选项中填入在DSP应用程序中定义的设备实例的创建参数变量“_YTH_vCapPortParams”(若配置的是视频捕获端口VP0)或“_YTH_vDisPortParams”(若配置的是视频显示端口VP2),YTH_vCapPortParams和YTH_vDisPortParams结构变量的具体参数说明如前所述。
经过上述步骤以后就可以在DSP应用程序中通过调用DSP/BIOS所提供的API来完成与视频捕获、视频显示相关的数据I/O操作了。DSP/BIOS所提供的与视频捕获和视频显示相关的API如下表所示。
在DSP应用程序中使用VPORTMini-Driver所需的DSP/BIOS API
API | 说明 |
FVID_Handle FVID_create(String name,Int mode, Int *status, Ptr optArgs, GIO_Attrs *attrs) | 创建一个FVID(framevideo)对象句柄FVID_Handle用于控制后续的视频捕获/显示操作。若需要创建一个控制VPORT进行视频捕获操作的FVID_Handle,则mode应设为IOM_INPUT;反之,若需要创建一个控制VPORT进行视频显示操作FVID_Handle,则mode应设为IOM_OUTPUT。该函数实际上调用了Mini-Driver的mdCreateChan()。 |
Int FVID_control(FVID_Handle gioChan,Int cmd, Ptr args) | 通过FVID_Handle可以启动VPORT、停止VPORT等一系列操作。当需要启动VPORT进行视频捕获或视频显示操作时,cmd应该设置为VPORT_CMD_START;当需要停止VPORT时,cmd应该设置为VPORT_CMD_STOP。该函数实际上调用了Mini-Driver的mdControlChan()。 |
Int FVID_alloc(FVID_Handle gioChan,Ptr bufp) | 在视频捕获模式下,该函数通过FVID_Handle为应用程序分配一块已经捕获好视频数据的缓冲区;在视频显示模式下,该函数通过FVID_Handle为应用程序分配一块空闲的缓冲区用于填充视频图像数据给VPORT显示。该函数实际上调用了Mini-Driver的mdSubmitChan()。 |
Int FVID_free(FVID_Handle gioChan, Ptrbufp) | 在视频捕获模式下,该函数通过FVID_Handle将应用程序已经使用完了的一块捕获了视频图像数据的缓冲区的控制权释放掉;在视频显示模式下,该函数通过FVID_Handle将应用程序已经填充完了用于显示的视频图像数据的一块缓冲区交给Mini-Driver以待输出显示。该函数实际上调用了Mini-Driver的mdSubmitChan()。 |
Int FVID_exchange(FVID_Handle gioChan,Ptr bufp) | 在视频捕获模式下,该函数通过FVID_Handle将应用程序使用完的一块填充了视频图像数据的缓冲区的控制权释放掉,并为应用程序重新分配一块新的填充了视频图像数据的缓冲区以待应用程序去处理;在视频显示模式下,该函数通过FVID_Handle将应用程序已经填充完了待显示的视频图像数据的一块缓冲区交给Mini-Driver以待输出显示,并为应用程序重新分配一块新的空闲缓冲区用来填充视频图像数据。该函数实际上调用了Mini-Driver的mdSubmitChan()。 |
下面说明一下当DM642的VPORT采用8-bitBT.656或Y/C模式来捕获或显示视频图像数据时,如何使用DDK中的VPORT驱动实现水平方向上1/2抽取以及色度信号重采样的操作。
当输入视频图像数据是4CIF格式数据(704×576)时,我们能够很轻松的通过VPORT硬件上的水平1/2抽取滤波器并加之以软件方式实现的垂直方向上1/2抽取滤波来实现4CIF至CIF的图像格式转换。
首先,我们将程序中为VPORT驱动提供的VPORTCAP_Params类型结构体变量的scale属性设置为VPORT_SCALING_ENABLE,其它的所有属性与捕获4CIF格式的视频图像数据时的设置保持一致,这样,使用FVID_alloc(…)和FVID_exchange(…)所捕获到的每一帧图像的大小就是352×576。然后只要对Y、Cb、Cr缓冲区中的数据统一地取偶数行或奇数行即可。注意:此时Y信号每行数据的长度为352字节,Cb和Cr信号的每行数据长度为176(无论程序中有没有将VPORTCAP_Params类型结构体变量的resmpl属性设置为VPORT_RESMPL_ENABLE)。
另外,我们也能够很轻松的通过VPORT硬件上的色度重采样滤波器并加之以软件方式实现的垂直方向上1/2色度信号抽取滤波来实现4:2:2至4:2:0的图像格式转换。
首先,我们将程序中为VPORT驱动提供的VPORTCAP_Params类型结构体变量的resmpl属性设置为VPORT_RESMPL_ENABLE,其它的所有属性都不变,这样,使用FVID_alloc(…)和FVID_exchange(…)所捕获到的每一帧数据就是经过色度水平滤波后的图像。然后只要对Cb、Cr缓冲区(注意:这里仅仅对Cb、Cr缓冲区中的数据进行操作)中数据统一地取偶数行或奇数行数据即可实现4:2:2至4:2:0的图像格式转换。这里需要注意的是单单将VPORTCAP_Params类型结构体变量的resmpl属性设置为VPORT_RESMPL_ENABLE不会使捕获到的图像数据的色度信息减少一半,而仅仅是对图像中每个字节的色度分量数据进行了滤波而已,所以我们还需要人为地以软件方式对垂直方向上的色度信息进行1/2色度信号抽取滤波来实现4:2:2至4:2:0的图像格式转换。
如果需要在视频显示过程中进行4:2:0至4:2:2的转换,则最简单的一种方法是将4:2:0格式的图像数据的Y分量保持不变,而将Cb、Cr分量的每一行数据复制成2份从而使图像数据色度分量在垂直方向上的数据量加倍(但并没有增加图像数据的信息量!),然后将程序中为VPORT驱动提供的VPORTDIS_Params类型结构体变量的resmpl属性设置为VPORT_RESMPL_ENABLE,其它的所有属性都不变,这样就能够在视频显示通道中实现4:2:0至4:2:2的图像格式转换。
[转载] DDK中VPORT Mini-Driver的使用说明的更多相关文章
- element框架中表格的筛选功能使用说明(转载)
一.element框架中表格的筛选功能使用说明 转载:https://blog.csdn.net/liangxhblog/article/details/80513030 在element ui 框架 ...
- node.js中的url.parse方法使用说明
node.js中的url.parse方法使用说明:https://blog.csdn.net/swimming_in_it_/article/details/77439975 版权声明:本文为博主原创 ...
- Qt5.7中使用MySQL Driver
Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可. 如果没有安装,可以采取自己编译的方式. 在Qt的源码包 ...
- Delphi 中Format的字符串格式化使用说明(转)
源:Delphi 中Format的字符串格式化使用说明(转) 一.Format函数的用法 Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供 ...
- 在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作
在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作 MyEclipse6.5 , mysq驱动jar包为mysql-connector ...
- Qt5.7中使用MySQL Driver(需要把libmysql.dll文件拷贝到Qt的bin目录中。或者自己编译的时候,链接静态库)
Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可.如果没有安装,可以采取自己编译的方式.在Qt的源码包的q ...
- 如何快速转载CSDN中的博客
看到一篇<如何快速转载CSDN中的博客>,介绍通过检查元素→复制html来实现快速转载博客的方法.不过,不知道是我没有领会其精神还是其他原因,测试结果为失败.
- 如何在ASP.NET Core Web API中使用Mini Profiler
原文如何在ASP.NET Core Web API中使用Mini Profiler 由Anuraj发表于2019年11月25日星期一阅读时间:1分钟 ASPNETCoreMiniProfiler 这篇 ...
- [转载]Java中继承、装饰者模式和代理模式的区别
[转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...
随机推荐
- java-day04
IntelliJ快捷键 导入包 alt + enter 删除光标所在行 ctrl + y 复制光标所在行 ctrl + d 格式代码 ctrl + alt + l 单行注释 ctrl + / 多行注释 ...
- <jquery>滚动例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java_递归
递归:方法在有结束条件的情况下调用自己本身 public static void main(String[] args) { int i = shu01(5); System.out.println( ...
- java_List接口
/** * java.util.list接口 extends Collection接口 * 1.有序的集合 * 2.有索引 * 3.元素可以重复 * * List中带索引的方法: *add:添加 * ...
- 在页面上显示PDF
/// <summary> /// 读取PDF文件 /// </summary> /// <param name="fName">文件名称(可以 ...
- input 数值验证
1.手动校验数字为整数 Number.isInteger <el-input class="radioInput" v-model.number="ruleForm ...
- thinkphp Mongo模型
Mongo模型是专门为Mongo数据库驱动而支持的Model扩展,如果需要操作Mongo数据库的话,自定义的模型类必须继承Think\Model\MongoModel. Mongo模型为操作Mongo ...
- 0902NOIP模拟测试赛后总结
rank1- rank3- rank4- rank10- rank16- 又考挂了.水平还是不行啊.和天皇差距太大了. 赛时A题的人好多啊.都是大佬.我一个正解都不会打……哭. T1想到dp和拓扑,然 ...
- 利用eclipse通过mybatis进行查询汉字字符时候无法显示结果,但是直接通过cmd窗口可以显示的解决方法
将数据库配置文件中的url写成如下的形式就可以成功查询: url = "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&quo ...
- JavaSE_12_序列化流和打印流
1.1 序列化流概述 Java 提供了一种对象序列化的机制.用一个字节序列可以表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等信息.字节序列写出到文件之后,相当于文件中持久保存 ...