公开/公告号CN102033730A
专利类型发明专利
公开/公告日2011-04-27
原文格式PDF
申请/专利权人 武汉钢铁(集团)公司;
申请/专利号CN201010531237.4
发明设计人 张新;
申请日2010-11-04
分类号G06F3/14(20060101);
代理机构北京市德权律师事务所;
代理人周发军
地址 430080 湖北省武汉市友谊大道999号
入库时间 2023-12-18 02:26:11
法律状态公告日
法律状态信息
法律状态
2018-01-19
专利权的转移 IPC(主分类):G06F3/14 登记生效日:20171229 变更前: 变更后: 申请日:20101104
专利申请权、专利权的转移
2012-05-30
授权
授权
2011-06-15
实质审查的生效 IPC(主分类):G06F3/14 申请日:20101104
实质审查的生效
2011-04-27
公开
公开
技术领域
本发明涉及高性能的视频数据格式转换方法,尤其涉及将Windows操作系统上的多媒体框架DirectShow所产生的视频数据转换为高性能的Java图像缓冲的方法。
背景技术
在Windows平台进行多媒体视频数据处理以及回放等程序设计,需要用到DirectShow。DirectShow是Windows系统自带的多媒体框架,提供了基于模块插件结构的多媒体捕捉、视频音频回放等功能。但由于DirectShow是基于C/C++所开发,其程序开发接口只提供了C/C++语言支持。另一方面,Java作为目前企业级、桌面、嵌入式等多种领域的主流开发技术,其多媒体支持方面却一直很欠缺,官方提供的Java Media Framework仍旧基于过时的技术体系,长期没有得到更新,尤其在Java平台上对DirectShow的支持几乎等于零。这给基于Java开发多媒体应用软件带来了极大地阻碍。在这个问题中,重点就在于DirectShow产生的视频数据如何以高性能方式转换为Java的图形缓冲数据,满足Java的图形渲染要求,打通DirectShow与Java之间的视频数据转换通道。
发明内容
针对上述技术问题,本发明提供一种将DirectShow视频数据转换为高性能Java图像缓冲的方法,实现DirectShow视频数据到Java图像缓冲的转换。
为解决上述技术问题,本发明的技术方案包括以下步骤:
ⅰ、对DirectShow视频流插入帧捕捉过滤器,
ⅱ、对DirectShow产生的视频数据进行帧速率计算,基于帧速率控制建立计时器,并依此确定定时器频率发生点,启动计时器;
ⅲ、对DirectShow产生的视频流进行帧捕获,
ⅳ、根据Java图形缓冲最佳匹配质量确定目标格式,并依据Windows环境下的像素排列规则反向以行扫描方式快速完成像素格式转换;
ⅴ、建立Java图形缓冲区,并直接映射到物理内存;
ⅵ、将格式转换后的帧数据直接填充到所述物理内存,形成Java图形缓冲数据;
ⅵ、对格式转换后的帧数据直接填充到上述物理内存;
ⅶ、判断是否存在后续帧数据,如果存在,则返回步骤ⅲ,实现Java中的连续画面的回放;否则,停止计时器,释放内存资源,
ⅷ、结束。
进一步优化的,在步骤ⅵ之后还包括,建立Java2D对显卡显存的直接存取,并映射为标准Java图像对象,将Java图形缓冲数据渲染到Java图像对象;
优选的,所述步骤ⅵ将格式转换后的帧数据直接填充到所述物理内存,是通过Java Native Access这种新的字节码与本地二进制代码桥接方式完成所述物理内存中的图像缓冲区数据到Java图形缓冲的映射转换。
本发明通过建立DirectShow与Java之间的视频数据转换中间层,提供DirectShow视频数据到Java图形数据缓冲格式的高效率转换以及具备硬件加速性能的动态图像回放,并可自动根据帧速率质量进行转换速度控制。本发明解决了长久以来Java对DirectShow视频数据的处理以及回放无法提供高性能解决方案的问题,实现了Windows上的系统级主流多媒体框架DirectShow的二进制视频数据与Java图像缓冲之间的转换交互,借用DirectShow丰富的解码器资源以及高速的视频处理效能,为Java提供了稳定可靠的多媒体视频处理支持。该方法可广泛适用于任何在Windows环境运行的基于Java的多媒体应用软件设计与开发,可极大地简化Java对多媒体视频数据的功能开发实现,并拥有极高的性能。
附图说明
下面结合附图和具体实施方式对本发明的技术方案作进一步具体说明。
图1是本发明的流程框图。
具体实施方式
首先通过需要插入DirectShow视频捕捉过滤器,针对DirectShow输出地视频流进行帧速率计算,并依此设置并启动定时器。在规定的频率发生点内完成视频帧数据的捕捉,基于兼容Java图形缓冲格式对视频帧图像进行格式像素级转换,建立Java图形缓冲区并直接映射到物理内存,将转换后的视频帧图像数据直接填充到物理内存中,对Java2D启动硬件加速模式,提供对显卡显存的直接存取,将Java图形缓冲数据渲染填充到显卡显存中完成高性能图像渲染回放。基于帧数据判断形成一个循环往复的过程,由于有帧速率计算,定时器的频率发生点可以保证不断渲染的图像是流畅运动的连续画面。下面结合图1,描述本具体实施方式的过程:
采用C++完成DirectShow视频捕捉过滤器插入到DirectShow当前视图;
对DirectShow自动生成的视频数据进行帧速率计算,确定定时频率;
利用代码桥接将定时频率传递给Java工作线程,在Java工作线程内创建定时器,并设置好频率后启动计时器;
对DirectShow视频进行帧捕捉;
依据兼容于Java图形缓冲格式的要求对捕捉的视频帧进行像素格式转换;由于在Windows环境下系统图像采取的坐标系是数学坐标系,因此需要从帧结尾向帧起始反方向顺序进行像素数据处理;
在Java工作线程中建立Java图像缓冲区,并直接映射到物理内存;
通过Java Native Access这种新的字节码与本地二进制代码桥接方式,将转换后的视频帧数据填充到该物理内存,完成所述映射到物理内存中的图像缓冲区数据到Java图形缓冲的映射转换;
利用Java2D硬件加速模式开启到显卡显存的映射,将图形缓冲渲染到显卡显存,完成帧图像的最终渲染;
判断是否存在后续帧数据,如果存在,则返回步骤ⅲ,实现Java中的连续画面的回放;否则,停止计时器,释放内存资源;
结束。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
最后所应说明的是,以上具体实施方式仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
机译: 使用神经网络将低分辨率图像数据转换为高分辨率图像数据的系统,方法和存储介质
机译: 用于视频压缩领域的图像序列编码方法,涉及为高频图像选择附加条件的图像,并通过执行图像缩放步骤的逆运算来校准选定的图像
机译: 能够将在一个合并图像中合并的输入图像的存储的部分数据交替地传输到图像/视频处理设备的数据缓冲装置和相关数据缓冲方法