[转载] 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 ...
随机推荐
- Linux unzip解压多个文件
假设当前目录下有多个zip文件 data.zip invoices.zip pictures.zip visit.zip, 直接 unzip *.zip 等价于 unzip data.zip invo ...
- 创建文件夹、新建txt文件
1.创建文件夹 QString myMkdir(QString path, QString floderName) //参数 path,创建的文件夹所在路径: 参数floderName,所创建的文件 ...
- pip的使用方法简介
pip是Python包管理工具,它提供了对Python包的查找.下载.安装.卸载的功能 目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具. 以下是pip常用命令 显示版本 ...
- 能量项链 /// oj23800
题目大意: N( 4 ≤ N ≤ 100 ),表示项链上珠子的个数 第二行是N个用空格隔开的正整数,所有的数均不超过1000. 第 i 个数为第 i 颗珠子的头标记( 1 ≤ i ≤ N ), 当 1 ...
- 廖雪峰Java11多线程编程-3高级concurrent包-6ExecutorService
Java语言内置多线程支持: 创建线程需要操作系统资源(线程资源,栈空间) 频繁创建和销毁线程需要消耗大量时间 如果可以复用一个线程 线程池: 线程池维护若干个线程,处于等待状态 如果有新任务,就分配 ...
- Python3.6爬虫+Djiago2.0+Mysql --运行djiago环境
1.安装djiago 模块 pip install Django --默认安装最新的 安装完成以后可以python -m pip list 查看模块是否安装 2.创建项目及app 及生成目录 备注 ...
- 「BZOJ2300」[HAOI2011] 防线修建
传送门 操作离线之后倒着做,只有加点操作. 用set动态维护凸包即可. //Achen #include<algorithm> #include<iostream> #incl ...
- Laravel 5.8 添加服务层
参考网址:https://blog.csdn.net/dmt742055597/article/details/97192177#Laravel58service_1
- 修改数组中对象的key值
遇见场景:echart图表中后台返回我的数据,后台无法修改key值,但是echart渲染图表的时候,需要用 var m2R2Data= [ {value:335,name:"种类01 335 ...
- npm 安装vue 报错Failed at the chromedriver@2.34.0 install script 'node install.js'
提示版本不够,后来百度到,在你的vue项目包下执行: npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/ ...