学习下。

要使用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. 修改sql server表字段的字符串

    网站标题被注入黑链接,使用sql脚本update修改字段内的字符串截取UPDATE [qds0460132_db].[dbo].[Blood_News]   SET [Blood_Name] = SU ...

  2. Invalid argument value:无效参数值。原因是:把Session值user0当做username作为参数了。 而实际上此时username是user0的成员变量。参数应该是user0.getUsername();然后发现别人的List得加泛型,我的怎么不用加,运行报错,上网收了错误原因,因为导包错误,不小心导错包了,改为util.List包对了。

  3. python调用scikit-learn机器学习

    不支持深度学习和强化学习 numpy介绍: np.eye(n)生成一个n维单元数组 数据预处理: iris数据加载 from sklearn import datasetsiris = dataset ...

  4. DNS配置-BIND安装配置全过程

    下载地址:ftp://ftp.isc.org/isc/ 下载bind,我下载的是bind-9.11.13.tar.gz 我下载的文件放在/root目录下进入目录解压缩 [root@localhost ...

  5. 海量可视化日志分析平台之ELK搭建

    ELK是什么? E=ElasticSearch ,一款基于的Lucene的分布式搜索引擎,我们熟悉的github,就是由ElastiSearch提供的搜索,据传已经有10TB+的数据量. L=LogS ...

  6. sparkStreaming结合sparkSql进行日志分析

    package testimport java.util.Propertiesimport org.apache.spark.SparkConfimport org.apache.spark.Spar ...

  7. 2016.9.24初中部上午NOIP普及组比赛总结

    2016.9.24初中部上午NOIP普及组比赛总结 2016.09.24[初中部 NOIP普及组 ]模拟赛 其实这次我没比赛,早上去参加亲子活动去了. 不过在下午我做完了所有的题,感觉还好. 进度 现 ...

  8. Oracle使用语句块之循环插入数据

    1.业务要求:  将oracle表A的整表的数据一次性导入到表B中 , 以A_ID为外键关联. (*******如果开发环境和实际生产环境的数据一致,而且数据量比较小情况,可以直接手动添加数据; ** ...

  9. Linux命令查看文件内容

    cat:一次性顺序显示文件所有内容和 cat filename tac:一次性倒序显示文件所有内容和 tac filename head:显示文件开头的若干行内容 head -n filename t ...

  10. SCOI2015

    这周各种头疼,一直睡觉+发呆,啥子都没干. 就补一下之前的东西. d1t1小凸玩矩阵 传送门 一开始脑子抽写了最小费用最大流,不知道自己怎么想的. 第k大最小,明显的二分,又是二分图,二分第k大值,把 ...