学习下。

要使用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的使用说明的更多相关文章

  1. element框架中表格的筛选功能使用说明(转载)

    一.element框架中表格的筛选功能使用说明 转载:https://blog.csdn.net/liangxhblog/article/details/80513030 在element ui 框架 ...

  2. node.js中的url.parse方法使用说明

    node.js中的url.parse方法使用说明:https://blog.csdn.net/swimming_in_it_/article/details/77439975 版权声明:本文为博主原创 ...

  3. Qt5.7中使用MySQL Driver

    Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可. 如果没有安装,可以采取自己编译的方式. 在Qt的源码包 ...

  4. Delphi 中Format的字符串格式化使用说明(转)

    源:Delphi 中Format的字符串格式化使用说明(转) 一.Format函数的用法 Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供 ...

  5. 在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作

    在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作 MyEclipse6.5    ,  mysq驱动jar包为mysql-connector ...

  6. Qt5.7中使用MySQL Driver(需要把libmysql.dll文件拷贝到Qt的bin目录中。或者自己编译的时候,链接静态库)

    Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可.如果没有安装,可以采取自己编译的方式.在Qt的源码包的q ...

  7. 如何快速转载CSDN中的博客

    看到一篇<如何快速转载CSDN中的博客>,介绍通过检查元素→复制html来实现快速转载博客的方法.不过,不知道是我没有领会其精神还是其他原因,测试结果为失败.

  8. 如何在ASP.NET Core Web API中使用Mini Profiler

    原文如何在ASP.NET Core Web API中使用Mini Profiler 由Anuraj发表于2019年11月25日星期一阅读时间:1分钟 ASPNETCoreMiniProfiler 这篇 ...

  9. [转载]Java中继承、装饰者模式和代理模式的区别

    [转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...

随机推荐

  1. VS2010-MFC(对话框:一般属性页对话框的创建及显示)

    转自:http://www.jizhuomi.com/software/169.html 属性页对话框包括向导对话框和一般属性页对话框两类,上一节演示了如何创建并显示向导对话框,本节将继续介绍一般属性 ...

  2. axios HTTP 400后,error没有详细信息

    参考网址:axios怎么获取到error中的状态值,具体信息 error.response

  3. day 65 Django基础十一之认证系统

    Django基础十一之认证系统   本节目录 一 auth模块 二 User对象 三 扩展默认的auth_user表 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 auth模块 我们 ...

  4. 建立ftp服务器和客户端

    参考:https://www.cnblogs.com/judes/p/9546447.html 补充: 权限设置:如下所示,如果需要上传文件需要勾选write权限,需要在文件中添加内容勾选append ...

  5. oracle增加用户密码,cmd导入数据库

    1.tomcat中sql语句 用户名 pdmis 密码pdmis create USER pdmis IDENTIFIED BY pdmis;grant create session to pdmis ...

  6. C# 中的三个高级参数 ref

    今天在浏览博文时,看到这篇文章:C#中的ref 传进出的到底是什么 ? 在传对象时使用ref的疑问 引用类型就传的就是地址,值类型传的就是值,可是还仍有那么多人迷惑,网上虽然流传着很多ref 的相关文 ...

  7. 18-6-calsslist

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. js怎样把URL链接的参数截取出来

    有时候,A页面参数需要传递到B页面,则把参数拼接到跳转B页面的url上,这时怎样在另一个页面截取A页面传递的参数呢,主要代码如下 /** * 获取指定的URL参数值 URL:http://www.qu ...

  9. jmeter参数化遇到的问题

    遇到的问题是点击运行后,察看结果树没有任何结果,且右上角的警告日志是: meter.threads.JMeterThread: Test failed! java.lang.IllegalArgume ...

  10. Spring Boot 整合 ActiveMQ

    依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri ...