CN111752505A - 面向vr的实时图像截取方法、系统和存储介质 - Google Patents
面向vr的实时图像截取方法、系统和存储介质 Download PDFInfo
- Publication number
- CN111752505A CN111752505A CN201910236465.XA CN201910236465A CN111752505A CN 111752505 A CN111752505 A CN 111752505A CN 201910236465 A CN201910236465 A CN 201910236465A CN 111752505 A CN111752505 A CN 111752505A
- Authority
- CN
- China
- Prior art keywords
- image
- module
- program
- real
- display
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明涉及一种面向VR的实时图像截取方法、系统和存储介质,包括:判断待图像截取的VR系统是否具有通知机制,若有,则引用VR系统的显示通路,在图像截取模块中重写显示通路的驱动程序,以覆盖呈现函数,并通过向VR应用程序注册图像截取模块,使图像截取模块作为VR系统的显示驱动;VR程序运行时,将图像发送至GPU计算并渲染,同时VR程序运行显示驱动,显示驱动的呈现函数会为每一帧计算并渲染完成后的图像反馈一个纹理句柄;定位纹理句柄,得到图像数据作为图像截取结果,否则使用钩子机制,将钩子插入VR程序的原始显示通路例程中,替换原始显示通路例程中调用的接口函数,形成替换例程,使用替换例程截取VR程序的图像数据作为图像截取结果。
Description
技术领域
本发明涉及无线VR传输领域和视频、图像采集领域,并特别涉及一种面向VR的实时图像截取方法、系统和存储介质。
背景技术
传统的图像截取方式有以下几种方案
1、桌面截图或窗口截图:
桌面截图即直接对电脑桌面进行屏幕抓取。一般操作系统都支持多种抓屏方式,比如windows下可通过GDI,DDRAW,DXGI等方式。其中GDI和DDRAW抓取一帧1080P的图像大致需要4-8ms时间,DXGI的抓屏速度更快,可以达到2-3ms,但是DXGI要求桌面必须要变化时才能抓取到图像。窗口截图一般是通过进程ID获取到程序的窗口句柄,然后进行窗口内容拷贝。这类方法适用于有窗口的程序。这类方法受限于常规桌面刷新率只有60Hz,无法达到VR场景90fps的需求。另外窗口映射也不是VR程序必备的要素,很多VR应用并不需要在电脑桌面显示窗口,所以窗口截图的方案也不适用于VR程序。
2、使用视频采集卡:
虚拟现实(VR)画面经过渲染之后,需通过视频线(HDMI,VGA等)传输到显示设备上。一般可通过HDMI信号截取或者信号分线器,将HDMI信号导入到视频采集卡来截取VR画面。这类方案需要能够支持90fps的采集卡,这类采集卡价格非常昂贵,不适宜推广。
上述图像截取方案主要通过桌面截图和窗口截图的方法进行,其问题在于:
1)桌面的刷新率通常只有60帧每秒,无法满足90帧每秒的VR体验要求
2)窗口截图依赖于VR应用程序必须创建一个窗口,但是窗口对于VR应用程序而言不是必须的,因此这种方法对于不创建窗口的VR应用程序是不起作用的。
发明内容
本系统的截取功能是与VR渲染流水线融为一体的,可以保证以VR应用程序原始的渲染速率进行截取,同时不受限于VR应用程序的某种特征,例如是否存在预览窗口。另一方面,本系统提供内容导出机制,可以将截取的图像及时的传递给每一个感兴趣的第三方应用程序。
具体地说,本发明公开了一种面向VR的实时图像截取方法,其中包括:
步骤1、判断待图像截取的VR系统是否具有通知机制,若有,则执行步骤2,否则执行步骤5;
步骤2、引用该VR系统的显示通路,在图像截取模块中重写该显示通路的驱动程序,以覆盖呈现函数,并通过向该VR应用程序注册该图像截取模块,使该图像截取模块作为该VR系统的显示驱动;
步骤3、该VR程序运行时,将图像发送至GPU计算并渲染,同时该VR程序运行该显示驱动,该显示驱动的呈现函数会为每一帧计算并渲染完成后的图像反馈一个纹理句柄;
步骤4、定位该帧的纹理句柄,以得到并复制该帧的图像数据,输出该图像数据作为图像截取结果;
步骤5、使用钩子机制,将钩子插入该VR程序的原始显示通路例程中,替换该原始显示通路例程中调用的接口函数,形成替换例程,使用该替换例程截取该VR程序的图像数据,输出该图像数据作为图像截取结果。
所述的面向VR的实时图像截取方法,其中该步骤2包括:使用该图像截取模块模拟本地设备,以在该VR系统调用该显示通路提交一幅画面后,该呈现函数执行该本地设备的功能指令。
所述的面向VR的实时图像截取方法,其中该纹理句柄,具体为一个指向图像的指针。
所述的面向VR的实时图像截取方法,其中该显示通路包括:图形应用程序编程接口和VR软件开发工具包。
本发明还公开了一种面向VR的实时图像截取系统,其中包括:
模块1、判断待图像截取的VR系统是否具有通知机制,若有,则执行模块2,否则执行模块5;
模块2、引用该VR系统的显示通路,在图像截取模块中重写该显示通路的驱动程序,以覆盖呈现函数,并通过向该VR应用程序注册该图像截取模块,使该图像截取模块作为该VR系统的显示驱动;
模块3、该VR程序运行时,将图像发送至GPU计算并渲染,同时该VR程序运行该显示驱动,该显示驱动的呈现函数会为每一帧计算并渲染完成后的图像反馈一个纹理句柄;
模块4、定位该帧的纹理句柄,以得到并复制该帧的图像数据,输出该图像数据作为图像截取结果;
模块5、使用钩子机制,将钩子插入该VR程序的原始显示通路例程中,替换该原始显示通路例程中调用的接口函数,形成替换例程,使用该替换例程截取该VR程序的图像数据,输出该图像数据作为图像截取结果。
所述的面向VR的实时图像截取系统,其中该模块2包括:使用该图像截取模块模拟本地设备,以在该VR系统调用该显示通路提交一幅画面后,该呈现函数执行该本地设备的功能指令。
所述的面向VR的实时图像截取系统,其中该纹理句柄,具体为一个指向图像的指针。
所述的面向VR的实时图像截取系统,其中该显示通路包括:图形应用程序编程接口和VR软件开发工具包。
本发明还公开了一种用于所述面向VR的实时图像截取系统的实施方法。
本发明还公开了一种存储介质,用于存储执行所述面向VR的实时图像截取方法的程序。
与现有技术相比,本发明的有益效果包括:
1、在成本节省方面,不需要视频、图像采集卡设备;
2、在效率方面,拥有实时性并且不会丢失帧率;
3、在性能方面,留出了足够的时间进行图像处理工作。
附图说明
图1是本发明的直接截取法流程图;
图2为本发明直接截取法结构图;
图3为间接截取法钩子注入结构对比图。
具体实施方式
本发明实现一种面向VR的实时图像截取系统,作为VR应用程序与显示设备之间的中间层,可将VR内容在提交给显示设备之前截获,并转发给其他对此VR内容感兴趣的应用程序,例如转发给流媒体应用程序进行网络直播、监控。不同的VR应用程序会使用不同的显示通路,例如使用不同的VR SDK或图形API,因此本系统的截取功能需要覆盖所有可能的通路,包括:1)图形应用程序编程接口,例如各个版本的Direct3D和OpenGL等,2)VR SDK(软件开发工具包),例如OpenVR和Windows MixedRealityToolkit等。对于每种通路,截取方法分为两种:1)直接截取,即VR系统本身提供了通知机制,允许第三方应用程序直接向VR应用程序登记,并在VR内容生成后得到通知,2)间接截取,即VR系统本身不提供内容导出机制,第三方应用程序需要通过进程注入,钩子函数,动态库代理等方式间接的获取VR内容。本发明的截取功能是与VR渲染流水线融为一体的,可以保证以VR应用程序原始的渲染速率进行截取,同时不受限于VR应用程序的某种特征,例如是否存在预览窗口。另一方面,本系统提供内容导出机制,可以将截取的图像及时的传递给每一个感兴趣的第三方应用程序。
为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。
本发明提及两种VR画面实时截取的解决方案,分别为直接截取法和间接截取法
(1)直接截取法是指通过阅读VR系统的开发文档,得知VR系统本身提供了通知机制。允许第三方应用程序直接向VR应用程序登记,并在VR内容生成后得到通知,在得到通知后从指定缓存中拷贝图像内容。该方法的具体实现流程如下:
1.引用了OpenVRAPI,在图像截取模块中重写了OpenVR的驱动程序,覆盖了Present函数,并向VR应用程序注册了图像截取模块;
其中重写具体为,OpenVR提供了面向VR图像提供者和VR设备提供者的双向接口,由开发者填充实现。对于VR图像提供者,OpenVR是硬件抽象层,使开发人员不必一一适配不同的底层硬件架构。对于设备提供者,OpenVR是软件抽象层,使开发人员不必一一适配不同的上层软件架构。Present函数是面向VR设备提供者的接口之一。当VR图像提供者调用OpenVR接口Submit提交一幅画面后,OpenVR会回调(callback)接口Present,具体功能由设备提供者填充。填充机制是:C语言使用函数指针,C++使用虚函数继承,Java使用接口实现。本发明的重写支持虚拟设备,即使用软件模拟本地设备的存在,并通过网络与远端的真实的设备进行数据交换。
OpenVR是Valve公司提供的一种面向VR的标准接口。它在系统架构中位于VR游戏开发者和VR硬件开发者之间,为的是提供一种抽象机制,使二者相互独立。它提供了通用VR功能的实现,避免重复开发,例如透镜矫正(lens distortion),图层合成(overlaycomposition),时间矫正(time warp)等。
Present函数即为呈现函数。它属于回调(callback)函数。当OpenVR得到一幅图像后,会回调所有注册过的Present接口。Present决定当收到图像后,如何进行下一步处理。这一点是由硬件开发者决定的,因此需要由硬件开发者提供Present的实现方式。OpenVR的作用是标准化,它只负责定义Present的函数签名(signature),并提供默认的实现方式,即空函数(什么也不做)。这里所谓的覆盖,就是指由OpenVR定义签名并由开发者提供实现的行为。
2.VR程序运行时,将图像提交GPU计算并渲染,而图像截取模块经过注册之后,作为显示驱动,在VR程序运行时会被调用,其中Present函数会在每一帧反馈一个Texturehandle(纹理句柄,具体为一个指向图像的指针);
3.定位该帧的Texturehandle,查找相关的图像数据;
4.查找完成后,执行图像数据复制;
5.图像截取完成,可使用复制后的图像数据进行各种图像处理工作。
(2)间接截取法是指VR系统本身不提供内容导出机制。第三方应用程序需要通过进程注入,钩子函数,动态库代理等方式间接的获取VR渲染结果。该方法具体实现流程如下:
1.通过钩子(hook)机制,将钩子插入OpenVR的API例程中;
2.替换OpenVR_API例程中调用的接口函数,使用修改后的独立子例程截取VR程序图像数据;
3.修改后的子例程中,直接复制VR程序图像数据;
4.完成复制之后,重新调用OpenVR的API例程,使其恢复原版调用方式;
5.如图3所示,通过钩子注入的方式,将原版的交互替换为3个阶段,截取图像后返回原版的函数调用。
进程注入是指使用非官方系统特性(通常是系统漏洞,或非官方本意的系统功能副作用)使目标程序(例如一个游戏)加载第三方程序(例如一个外挂)。与之相对的,钩子函数是使用官方系统特性使目标程序加载第三方程序,例如Windows Hook机制,其本质是操作系统提供的一个函数回调机制。动态库代理是用文件替换的机制,欺骗目标程序使用修改过的动态库文件。替换的文件通常与源文件只在某个接口上有差别,其余接口使用动态库转发(forwarding)机制转发给原始动态库。例如,假设目标程序使用openvr.dll,它导出a,b,c,d四个的接口。我们将原始的动态库改名为openvr_old.dll,同时编写一个新的动态库并命名为openvr.dll。新的openvr.dll提供所有四个接口的实现。其中,我们可以只对a做修改,而bcd可以直接转发给openvr_old.dll。目标程序无法区分新旧openvr.dll,因此就会调用我们修改过的接口a。
以下为与上述系统实施例对应的方法实施例,本实施方式可与上述实施方式互相配合实施。上述实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。
本发明还公开了一种面向VR的实时图像截取系统,其中包括:
模块1、判断待图像截取的VR系统是否具有通知机制,若有,则执行模块2,否则执行模块5;
模块2、引用该VR系统的显示通路,在图像截取模块中重写该显示通路的驱动程序,以覆盖呈现函数,并通过向该VR应用程序注册该图像截取模块,使该图像截取模块作为该VR系统的显示驱动;
模块3、该VR程序运行时,将图像发送至GPU计算并渲染,同时该VR程序运行该显示驱动,该显示驱动的呈现函数会为每一帧计算并渲染完成后的图像反馈一个纹理句柄;
模块4、定位该帧的纹理句柄,以得到并复制该帧的图像数据,输出该图像数据作为图像截取结果;
模块5、使用钩子机制,将钩子插入该VR程序的原始显示通路例程中,替换该原始显示通路例程中调用的接口函数,形成替换例程,使用该替换例程截取该VR程序的图像数据,输出该图像数据作为图像截取结果。
所述的面向VR的实时图像截取系统,其中该模块2包括:使用该图像截取模块模拟本地设备,以在该VR系统调用该显示通路提交一幅画面后,该呈现函数执行该本地设备的功能指令。
所述的面向VR的实时图像截取系统,其中该纹理句柄,具体为一个指向图像的指针。
所述的面向VR的实时图像截取系统,其中该显示通路包括:图形应用程序编程接口和VR软件开发工具包。
本发明还公开了一种用于所述面向VR的实时图像截取系统的实施方法。
本发明还公开了一种存储介质,用于存储执行所述面向VR的实时图像截取方法的程序。
Claims (10)
1.一种面向VR的实时图像截取方法,其特征在于,包括:
步骤1、判断待图像截取的VR系统是否具有通知机制,若有,则执行步骤2,否则执行步骤5;
步骤2、引用该VR系统的显示通路,在图像截取模块中重写该显示通路的驱动程序,以覆盖呈现函数,并通过向该VR应用程序注册该图像截取模块,使该图像截取模块作为该VR系统的显示驱动;
步骤3、该VR程序运行时,将图像发送至GPU计算并渲染,同时该VR程序运行该显示驱动,该显示驱动的呈现函数会为每一帧计算并渲染完成后的图像反馈一个纹理句柄;
步骤4、定位该帧的纹理句柄,以得到并复制该帧的图像数据,输出该图像数据作为图像截取结果;
步骤5、使用钩子机制,将钩子插入该VR程序的原始显示通路例程中,替换该原始显示通路例程中调用的接口函数,形成替换例程,使用该替换例程截取该VR程序的图像数据,输出该图像数据作为图像截取结果。
2.如权利要求1所述的面向VR的实时图像截取方法,其特征在于,该步骤2包括:使用该图像截取模块模拟本地设备,以在该VR系统调用该显示通路提交一幅画面后,该呈现函数执行该本地设备的功能指令。
3.如权利要求1所述的面向VR的实时图像截取方法,其特征在于,该纹理句柄,具体为一个指向图像的指针。
4.如权利要求1所述的面向VR的实时图像截取方法,其特征在于,该显示通路包括:图形应用程序编程接口和VR软件开发工具包。
5.一种面向VR的实时图像截取系统,其特征在于,包括:
模块1、判断待图像截取的VR系统是否具有通知机制,若有,则执行模块2,否则执行模块5;
模块2、引用该VR系统的显示通路,在图像截取模块中重写该显示通路的驱动程序,以覆盖呈现函数,并通过向该VR应用程序注册该图像截取模块,使该图像截取模块作为该VR系统的显示驱动;
模块3、该VR程序运行时,将图像发送至GPU计算并渲染,同时该VR程序运行该显示驱动,该显示驱动的呈现函数会为每一帧计算并渲染完成后的图像反馈一个纹理句柄;
模块4、定位该帧的纹理句柄,以得到并复制该帧的图像数据,输出该图像数据作为图像截取结果;
模块5、使用钩子机制,将钩子插入该VR程序的原始显示通路例程中,替换该原始显示通路例程中调用的接口函数,形成替换例程,使用该替换例程截取该VR程序的图像数据,输出该图像数据作为图像截取结果。
6.如权利要求5所述的面向VR的实时图像截取系统,其特征在于,该模块2包括:使用该图像截取模块模拟本地设备,以在该VR系统调用该显示通路提交一幅画面后,该呈现函数执行该本地设备的功能指令。
7.如权利要求5所述的面向VR的实时图像截取系统,其特征在于,该纹理句柄,具体为一个指向图像的指针。
8.如权利要求5所述的面向VR的实时图像截取系统,其特征在于,该显示通路包括:图形应用程序编程接口和VR软件开发工具包。
9.一种用于权利要求5至8中任意一种所述面向VR的实时图像截取系统的实施方法。
10.一种存储介质,用于存储执行权利要求1至4中任意一种面向VR的实时图像截取方法的程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910236465.XA CN111752505A (zh) | 2019-03-27 | 2019-03-27 | 面向vr的实时图像截取方法、系统和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910236465.XA CN111752505A (zh) | 2019-03-27 | 2019-03-27 | 面向vr的实时图像截取方法、系统和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111752505A true CN111752505A (zh) | 2020-10-09 |
Family
ID=72670999
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910236465.XA Pending CN111752505A (zh) | 2019-03-27 | 2019-03-27 | 面向vr的实时图像截取方法、系统和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111752505A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113223183A (zh) * | 2021-04-30 | 2021-08-06 | 杭州小派智能科技有限公司 | 一种基于已有vr内容的渲染方法和系统 |
CN114610405A (zh) * | 2022-03-03 | 2022-06-10 | 深圳盛显科技有限公司 | 一种多应用截屏及网络编码输出方法、设备、介质、产品 |
-
2019
- 2019-03-27 CN CN201910236465.XA patent/CN111752505A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113223183A (zh) * | 2021-04-30 | 2021-08-06 | 杭州小派智能科技有限公司 | 一种基于已有vr内容的渲染方法和系统 |
CN113223183B (zh) * | 2021-04-30 | 2023-03-10 | 杭州小派智能科技有限公司 | 一种基于已有vr内容的渲染方法和系统 |
CN114610405A (zh) * | 2022-03-03 | 2022-06-10 | 深圳盛显科技有限公司 | 一种多应用截屏及网络编码输出方法、设备、介质、产品 |
CN114610405B (zh) * | 2022-03-03 | 2024-03-29 | 深圳盛显科技有限公司 | 一种多应用截屏及网络编码输出方法、设备、介质、产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8982136B2 (en) | Rendering mode selection in graphics processing units | |
US10164459B2 (en) | Selective rasterization | |
US8042094B2 (en) | Architecture for rendering graphics on output devices | |
CN115145778B (zh) | 一种显卡渲染结果分析方法、装置及存储介质 | |
US20110292060A1 (en) | Frame buffer sizing to optimize the performance of on screen graphics in a digital electronic device | |
KR101213872B1 (ko) | 하드웨어 가속 블렌드 모드 | |
US11243786B2 (en) | Streaming application visuals using page-like splitting of individual windows | |
JP2018512644A (ja) | 低品質タイルを使用してメモリ帯域幅を減らすためのシステムおよび方法 | |
US10558496B2 (en) | Techniques for accessing a graphical processing unit memory by an application | |
CN114741081B (zh) | 一种基于异构缓存访问的跨运行环境显示输出共享方法 | |
CN116185743B (zh) | OpenGL接口的双显卡对比调试方法、装置及介质 | |
CN113342703B (zh) | 一种渲染效果实时调试方法、装置、开发设备及存储介质 | |
CN111752505A (zh) | 面向vr的实时图像截取方法、系统和存储介质 | |
US8514234B2 (en) | Method of displaying an operating system's graphical user interface on a large multi-projector display | |
CN114968152B (zh) | 减少virtio-gpu额外性能损耗的方法 | |
US10733689B2 (en) | Data processing | |
US8701091B1 (en) | Method and system for providing a generic console interface for a graphics application | |
CN110730976A (zh) | 用于与图形处理单元交接的基于交易的显示流水线的方法和系统 | |
WO2023087827A1 (zh) | 渲染方法及装置 | |
CN117008860A (zh) | 应用投屏方法、装置、电子设备、存储介质 | |
CN116055540B (zh) | 虚拟内容的显示系统、方法、设备及计算机可读介质 | |
CN117616398A (zh) | Gpu范围界定中的性能开销优化 | |
CN116457830A (zh) | 基于区域不连续性的运动估计 | |
CN117616446A (zh) | 基于图块的架构中的深度和阴影通道渲染的优化 | |
CN114706543A (zh) | 接口输入数据的显示方法和设备及计算机可读介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20201009 |
|
WD01 | Invention patent application deemed withdrawn after publication |