一种基于系统图形缓冲区拦截的裸眼3D视频渲染方法及系统与流程
本发明涉及视频渲染,尤其是一种基于系统图形缓冲区拦截的裸眼3d视频渲染方法及系统。
背景技术:
1、裸眼3d显示设备(如柱状透镜光栅屏、视差屏障屏等)要求输入画面按照特定的子像素交织规律排布,才能在不佩戴辅助眼镜的情况下呈现立体视觉效果。具体而言,显示面板上的子像素被划分为左眼子像素和右眼子像素,两者在每行和每列中交替设置,通过柱状透镜等分光器件将不同视差图像折射到不同方向,使观看者的双眼分别看到对应的视差图像,从而产生立体感。当前市面上大量3d片源以左右格式(side-by-side,简称sbs)存在,即每一帧画面由左视点图像和右视点图像左右并排构成。要将此类片源在裸眼3d屏幕上正确显示,需要对每一视频帧执行视点拆分与子像素级交织合成,生成符合光栅屏参数的立体画面。
2、在现代操作系统(以android系统为例)中,应用解码输出的每一帧图像均以图形缓冲区(graphicbuffer)的形式承载,通过缓冲区队列(bufferqueue)在生产者—消费者模型中流转;生产者端将填充好的缓冲区入队,消费者端(如系统图形合成器)从队列中获取缓冲区进行合成与送显,图形缓冲区的入队操作由生产者端统一执行,是向缓冲区队列递交缓冲区的核心入口,该机制以零拷贝方式实现图形缓冲区在不同进程间的高效流转,是操作系统图形框架的核心基础设施。
3、现有技术中,使视频内容在裸眼3d屏幕上正确显示的主要方式是在应用层集成3d渲染能力,具体而言,由视频播放应用自身对解码后的视频帧执行sbs拆分与子像素交织合成,再将合成后的画面提交至图形缓冲区队列进行显示。然而,该方式存在以下显著缺陷:
4、其一,应用适配成本高昂、覆盖不全。每一款第三方视频应用均需单独集成3d渲染sdk并完成适配,无法覆盖海量已发布的三方应用(如各类在线视频客户端);应用厂商缺乏商业动力配合改造,落地成本极高;
5、其二,应用层拦截方案存在进程覆盖盲区。部分方案尝试在应用端的surface层进行拦截,但只能覆盖当前进程,无法覆盖将解码器运行在独立进程中的大型视频应用,拦截存在盲区;
6、其三,合成层拦截方案无法精确定位视频图层。部分方案尝试在系统图形合成器最终合成处进行拦截,但此时通常只能拿到已合成的整屏画面,无法精确定位到单个视频图层,且缺乏对视频帧与弹幕层、ui层等非视频内容的可靠区分手段,容易造成误判。
7、现有技术尚无法在不修改任何第三方应用的前提下,在系统层对所有应用的视频帧实现统一拦截、精准识别与裸眼3d渲染,并将渲染结果无缝回注原始显示流程。
技术实现思路
1、本发明为了解决上述存在的技术问题,提供一种基于系统图形缓冲区拦截的裸眼3d视频渲染方法及系统。
2、本发明的技术方案是这样实现的:
3、一种基于系统图形缓冲区拦截的裸眼3d视频渲染方法,包括:
4、s1、在操作系统图形子系统的图形缓冲区统一入队接口处,由调用线程执行图形缓冲区的入队操作,拦截待入队的图形缓冲区;
5、s2、对所述图形缓冲区执行视频帧判定;
6、若判定所述图形缓冲区承载的是视频帧,则依次执行以下步骤:
7、s3、将所述图形缓冲区以零拷贝方式导入为图形api纹理;
8、s4、对导入的纹理执行裸眼3d交织渲染,生成交织后的画面数据;
9、s5、将所述交织后的画面数据原位回写至所述图形缓冲区;
10、s6、在确认所述原位回写完成后,放行所述图形缓冲区以完成原有的入队流程;
11、若判定所述图形缓冲区承载的不是视频帧,则直接放行所述图形缓冲区以完成原有的入队流程。
12、进一步地,所述统一入队接口处位于操作系统图形栈的生产者端向消费者端递交图形缓冲区的统一入口处。
13、进一步地,所述视频帧判定包括多特征联合判定,所述视频帧判定包括:检测到所述图形缓冲区的连接类型为媒体解码类型、数据格式为视频编码格式且用途标记包含视频处理用途时,判定所述图形缓冲区承载的是视频帧。
14、进一步地,所述将所述图形缓冲区以零拷贝方式导入为图形api纹理,包括:
15、通过硬件缓冲区抽象接口获取所述图形缓冲区的原生内存句柄;
16、调用图形内存共享api创建共享图像对象;
17、将所述共享图像对象绑定为图形api纹理。
18、进一步地,所述裸眼3d交织渲染由独立于所述调用线程的离屏渲染线程执行,所述离屏渲染线程绑定有专用的图形上下文;所述调用线程将待处理的图形缓冲区及元数据投递至所述离屏渲染线程的任务队列后即返回,所述离屏渲染线程从所述任务队列中取出任务并执行所述裸眼3d交织渲染。
19、进一步地,所述离屏渲染线程为进程级单例,在首次判定到视频帧时创建,并在进程内复用。
20、进一步地,所述将交织后的画面数据原位回写至所述图形缓冲区,包括:
21、创建帧缓冲对象并将所述图形缓冲区所绑定的纹理附着于所述帧缓冲对象;
22、以所述帧缓冲对象为渲染目标执行所述裸眼3d交织渲染,使渲染结果直接写入所述图形缓冲区。
23、进一步地,所述在确认所述原位回写完成后放行所述图形缓冲区,包括:
24、在所述原位回写完成后插入图形处理器同步栅栏;
25、待所述图形处理器同步栅栏指示渲染完成后,再放行所述图形缓冲区以完成原有的入队流程。
26、进一步地,所述裸眼3d交织渲染包括:
27、将导入的纹理按左右视点切分;
28、根据目标裸眼3d显示屏的光栅参数,通过着色器对切分后的视点图像执行子像素级交织映射,生成交织画面。
29、为了解决上述技术问题,本发明还提供一种基于系统图形缓冲区拦截的裸眼3d视频渲染系统,包括:
30、拦截模块,在操作系统图形子系统的图形缓冲区入队环节,拦截由调用线程执行入队操作的图形缓冲区;
31、判定模块,对所述图形缓冲区执行视频帧判定;
32、纹理导入模块,在判定所述图形缓冲区承载的是视频帧时,将所述图形缓冲区以零拷贝方式导入为图形api纹理;
33、渲染模块,对导入的纹理执行裸眼3d交织渲染,生成交织后的画面数据;
34、回写模块,将所述交织后的画面数据原位回写至所述图形缓冲区;
35、放行模块,在判定所述图形缓冲区承载的是视频帧且所述原位回写完成后,放行所述图形缓冲区以完成原有的入队流程;以及在判定所述图形缓冲区承载的不是视频帧时,直接放行所述图形缓冲区。
36、本发明相比现有技术而言,具有以下有益效果:
37、本发明通过将拦截点设置在操作系统图形子系统的图形缓冲区入队环节,对所有图形缓冲区在统一入队入口处进行拦截,使所有应用的视频帧均无需任何改造即可获得裸眼3d显示能力,无需应用集成sdk,无需第三方应用厂商配合,从根本上消除了应用适配的改造成本和商业落地障碍。
38、本发明通过在操作系统图形子系统的缓冲区入队统一入口处进行拦截,使图形缓冲区无论来自应用主进程还是独立解码进程,均被统一拦截,消除了应用层surface拦截方案无法覆盖独立解码进程的盲区。
39、本发明通过对拦截到的图形缓冲区执行视频帧判定,使3d渲染操作仅针对判定为视频帧的缓冲区执行,非视频内容得以原样放行,避免了将弹幕层、ui层等非视频内容误纳入3d渲染流程;同时,在缓冲区入队阶段完成识别与渲染,避免了合成层拦截方案只能处理整屏画面而无法精确定位单个视频图层的缺陷。
40、本发明通过对判定为视频帧的图形缓冲区执行零拷贝导入、裸眼3d交织渲染及原位回写,使得原本仅承担缓冲区传递功能的入队环节能够完成完整的3d渲染操作,无需将图形缓冲区转移至其他具备渲染能力的模块或线程进行处理,避免了额外数据传输和上下文切换的开销。
41、本发明通过将图形缓冲区以零拷贝方式导入为图形api纹理,全程无需将像素数据回读至cpu,显著降低了内存带宽占用和处理器开销,对系统帧率和设备功耗的影响极小。
42、本发明通过将渲染结果原位回写至原始图形缓冲区,不改变缓冲区队列结构;并在确认原位回写完成后再放行缓冲区以完成原有入队流程,避免了消费者端读到未完成帧导致的画面撕裂或错帧。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com