将DirectShow视频数据转换为高性能Java图像缓冲的方法

文档序号:6335174阅读:882来源:国知局
专利名称:将DirectShow视频数据转换为高性能Java图像缓冲的方法
技术领域
本发明涉及高性能的视频数据格式转换方法,尤其涉及将Windows操作系统上 的多媒体框架Directa10W所产生的视频数据转换为高性能的Java图像缓冲的方法。
背景技术
在Windows平台进行多媒体视频数据处理以及回放等程序设计,需要用到 DirectSiow。DirectSiow是Windows系统自带的多媒体框架,提供了基于模块插件结构的 多媒体捕捉、视频音频回放等功能。但由于Directalow是基于C/C++所开发,其程序开发 接口只提供了 C/C++语言支持。另一方面,Java作为目前企业级、桌面、嵌入式等多种领域 的主流开发技术,其多媒体支持方面却一直很欠缺,官方提供的Java Media Framework仍 旧基于过时的技术体系,长期没有得到更新,尤其在Java平台上对Directa10W的支持几乎 等于零。这给基于Java开发多媒体应用软件带来了极大地阻碍。在这个问题中,重点就在 于Directa10W产生的视频数据如何以高性能方式转换为Java的图形缓冲数据,满足Java 的图形渲染要求,打通Directa10W与Java之间的视频数据转换通道。发明内容
针对上述技术问题,本发明提供一种将Directa10W视频数据转换为高性能Java 图像缓冲的方法,实现Directa10W视频数据到Java图像缓冲的转换。
为解决上述技术问题,本发明的技术方案包括以下步骤 i、对Directalow视频流插入帧捕捉过滤器, 、对Directalow产生的视频数据进行帧速率计算,基于帧速率控制建立计时器,并 依此确定定时器频率发生点,启动计时器;iii、对Directalow产生的视频流进行帧捕获,iv、根据Java图形缓冲最佳匹配质量确定目标格式,并依据Windows环境下的像素排 列规则反向以行扫描方式快速完成像素格式转换;ν、建立Java图形缓冲区,并直接映射到物理内存;vi、将格式转换后的帧数据直接填充到所述物理内存,形成Java图形缓冲数据;vi、对格式转换后的帧数据直接填充到上述物理内存;vii、判断是否存在后续帧数据,如果存在,则返回步骤iii,实现Java中的连续画面的回 放;否则,停止计时器,释放内存资源,viii、结束。
进一步优化的,在步骤vi之后还包括,建立Java2D对显卡显存的直接存取,并映 射为标准Java图像对象,将Java图形缓冲数据渲染到Java图像对象;优选的,所述步骤vi将格式转换后的帧数据直接填充到所述物理内存,是通过Java Native Access这种新的字节码与本地二进制代码桥接方式完成所述物理内存中的图像缓3冲区数据到Java图形缓冲的映射转换。
本发明通过建立Directa10W与Java之间的视频数据转换中间层,提供 Directa10W视频数据到Java图形数据缓冲格式的高效率转换以及具备硬件加速性能的动 态图像回放,并可自动根据帧速率质量进行转换速度控制。本发明解决了长久以来Java对 DirectShow视频数据的处理以及回放无法提供高性能解决方案的问题,实现了 Windows上 的系统级主流多媒体框架Directa10W的二进制视频数据与Java图像缓冲之间的转换交 互,借用Directa10W丰富的解码器资源以及高速的视频处理效能,为Java提供了稳定可靠 的多媒体视频处理支持。该方法可广泛适用于任何在Windows环境运行的基于Java的多 媒体应用软件设计与开发,可极大地简化Java对多媒体视频数据的功能开发实现,并拥有 极高的性能。


下面结合附图和具体实施方式
对本发明的技术方案作进一步具体说明。
图1是本发明的流程框图。
具体实施方式
首先通过需要插入Directaiow视频捕捉过滤器,针对DirectSiow输出地视频流 进行帧速率计算,并依此设置并启动定时器。在规定的频率发生点内完成视频帧数据的捕 捉,基于兼容Java图形缓冲格式对视频帧图像进行格式像素级转换,建立Java图形缓冲区 并直接映射到物理内存,将转换后的视频帧图像数据直接填充到物理内存中,对Java2D启 动硬件加速模式,提供对显卡显存的直接存取,将Java图形缓冲数据渲染填充到显卡显存 中完成高性能图像渲染回放。基于帧数据判断形成一个循环往复的过程,由于有帧速率计 算,定时器的频率发生点可以保证不断渲染的图像是流畅运动的连续画面。下面结合图1, 描述本具体实施方式
的过程采用C++完成Directalow视频捕捉过滤器插入到DirecUhow当前视图; 对Directa10W自动生成的视频数据进行帧速率计算,确定定时频率; 利用代码桥接将定时频率传递给Java工作线程,在Java工作线程内创建定时器,并设 置好频率后启动计时器;对Directaiow视频进行帧捕捉;依据兼容于Java图形缓冲格式的要求对捕捉的视频帧进行像素格式转换;由于在 Windows环境下系统图像采取的坐标系是数学坐标系,因此需要从帧结尾向帧起始反方向 顺序进行像素数据处理;在Java工作线程中建立Java图像缓冲区,并直接映射到物理内存; 通过Java Native Access这种新的字节码与本地二进制代码桥接方式,将转换后的视 频帧数据填充到该物理内存,完成所述映射到物理内存中的图像缓冲区数据到Java图形 缓冲的映射转换;利用Java2D硬件加速模式开启到显卡显存的映射,将图形缓冲渲染到显卡显存,完成 帧图像的最终渲染;判断是否存在后续帧数据,如果存在,则返回步骤iii,实现Java中的连续画面的回放;否则,停止计时器,释放内存资源;结束。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
最后所应说明的是,以上具体实施方式
仅用以说明本发明的技术方案而非限制, 尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对 本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均 应涵盖在本发明的权利要求范围当中。
权利要求
1. 一种将Directa10W视频数据转换为高性能Java图像缓冲的方法,其特征在于,包 括以下步骤1、对Directalow视频流插入帧捕捉过滤器, 、对Directalow产生的视频数据进行帧速率计算,基于帧速率控制建立计时器,并 依此确定定时器频率发生点,启动计时器;iii、对Directalow产生的视频流进行帧捕获,iv、根据Java图形缓冲最佳匹配质量确定目标格式,并依据Windows环境下的像素排 列规则反向以行扫描方式快速完成像素格式转换;ν、建立Java图形缓冲区,并直接映射到物理内存;vi、对格式转换后的帧数据直接填充到上述物理内存;vii、判断是否存在后续帧数据,如果存在,则返回步骤iii,实现Java中的连续画面的回 放;否则,停止计时器,释放内存资源,viii、结束。
2、根据权利要求1所述的将Directa10W视频数据转换为高性能Java图像缓冲的方 法,其特征在于,在步骤vi之后还包括,建立Java2D对显卡显存的直接存取,并映射为标准 Java图像对象,将Java图形缓冲数据渲染到Java图像对象;
3、根据权利要求1或2所述的将Directa10W视频数据转换为高性能Java图像缓冲的 方法,其特征在于,所述步骤vi将格式转换后的帧数据直接填充到所述物理内存,是通过 Java Native Access新的字节码与本地二进制代码桥接方式完成所述物理内存中的图像 缓冲区数据到Java图形缓冲的映射转换。
全文摘要
本发明公开了一种将DirectShow视频数据转换为高性能Java图像缓冲的方法。其过程包括在DirectShow视频流中插入帧捕捉过滤器,计算视频流帧速率,设置并启动定时器;捕捉视频帧数据并对视频帧图像进行格式像素级转换;建立Java图形缓冲区并直接映射到物理内存,将转换后的视频帧图像数据直接填充到物理内存中。本发明解决了长久以来Java对视频数据的处理以及回放无法提供高性能解决方案的问题,实现了Windows上的系统级主流多媒体框架DirectShow的二进制视频数据与Java图像缓冲之间的转换交互,为Java提供了稳定可靠的多媒体视频处理支持。
文档编号G06F3/14GK102033730SQ20101053123
公开日2011年4月27日 申请日期2010年11月4日 优先权日2010年11月4日
发明者张新 申请人:武汉钢铁(集团)公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1