CN114245138A - 视频帧处理方法和装置 - Google Patents
视频帧处理方法和装置 Download PDFInfo
- Publication number
- CN114245138A CN114245138A CN202111545009.7A CN202111545009A CN114245138A CN 114245138 A CN114245138 A CN 114245138A CN 202111545009 A CN202111545009 A CN 202111545009A CN 114245138 A CN114245138 A CN 114245138A
- Authority
- CN
- China
- Prior art keywords
- gpu
- data
- video frame
- cuda
- texture
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 12
- 238000013507 mapping Methods 0.000 claims abstract description 37
- 238000000034 method Methods 0.000 claims abstract description 26
- 238000012545 processing Methods 0.000 claims abstract description 19
- 238000009877 rendering Methods 0.000 claims description 58
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 claims 9
- 238000010586 diagram Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000005538 encapsulation Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000011449 brick Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/40—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video transcoding, i.e. partial or full decoding of a coded input stream followed by re-encoding of the decoded output stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
- H04N19/423—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Image Generation (AREA)
Abstract
本公开的实施例提供一种视频帧处理方法以及装置。在该方法中,获得该视频帧的转码数据。将该转码数据存储在该GPU中的指定地址空间。之后,建立指向该指定地址空间的指针与要在该GPU中创建的目标纹理的索引号之间的第一映射关系。然后,根据该第一映射关系将该指定地址空间中存储的转码数据创建成目标纹理。
Description
技术领域
本公开的实施例涉及计算机技术领域,具体地,涉及视频帧处理方法和装置。
背景技术
随着多媒体技术的发展,在教学、娱乐、通信等多个应用领域中,对视频文件的各种处理需求日益增多。有时需要将视频文件进行转码处理,以适应不同的网络带宽或者画质要求。在一些情况下,还可能需要对视频文件进行渲染,以实现更好的显示效果。例如,在一些应用场景中,可能需要使得视频帧中的某些对象更加逼真。在显示房子外墙的视频帧中,可能需要通过渲染处理使得房子外墙上的砖块更加立体。在显示湖面的视频帧中,可能需要通过渲染处理使得湖面显得波光粼粼。在显示人脸的视频帧中,可能需要通过渲染处理使得人脸看起来更柔和或者更白皙。在另一些应用场景中,还可以通过渲染处理制作出例如镜面效果等。此类渲染处理可能需要进行大量的计算,消耗大量的系统资源。
常用的视频编解码方式是在中央处理器(CPU)上进行的,这种编解码方式也被称作软件编解码。但是软件编解码的速度比较慢。为了提升视频编解码的速度,可能会使用GPU(俗称显卡)来参与视频编解码,以使得视频编解码的部分工作由硬件部分完成。
发明内容
本文中描述的实施例提供了一种视频帧处理方法以及一种视频帧处理装置。
根据本公开的第一方面,提供了一种由GPU执行的视频帧处理方法。在该方法中,获得该视频帧的转码数据。将该转码数据存储在该GPU中的指定地址空间。之后,建立指向该指定地址空间的指针与要在该GPU中创建的目标纹理的索引号之间的第一映射关系。然后,根据该第一映射关系将该指定地址空间中存储的转码数据创建成目标纹理。
在本公开的一些实施例中,该GPU是NVIDIA GPU。该NVIDIA GPU包括CUDA(ComputeUnified Device Architecture)。第一映射关系由该CUDA建立。
在本公开的一些实施例中,该GPU包括OpenGL。目标纹理由该OpenGL创建。
在本公开的一些实施例中,在获得该视频帧的转码数据的步骤中,获得该视频帧的经解封装的压缩数据。然后,将该压缩数据解码为该视频帧的原始数据。接着,将该原始数据转码为该视频帧的转码数据。
在本公开的一些实施例中,该GPU是NVIDIA GPU。该NVIDIA GPU包括NVDEC。该压缩数据由该NVDEC解码为原始数据。
在本公开的一些实施例中。该GPU是NVIDIA GPU。该NVIDIA GPU包括CUDA。该原始数据由该CUDA转码为转码数据。
在本公开的一些实施例中,该GPU是NVIDIA GPU。该NVIDIA GPU包括CUDA和视频编码器。该方法还包括:对目标纹理进行渲染以获得渲染后的纹理;使得该CUDA共享渲染后的纹理的存储空间;建立渲染后的纹理的索引号与该CUDA的指向该存储空间的指针之间的第二映射关系;根据该第二映射关系从渲染后的纹理获得渲染数据;将该渲染数据复制到视频编码器的输入缓冲区中;以及由视频编码器将输入缓冲区中的渲染数据编码成编码数据。
在本公开的一些实施例中,该GPU包括OpenGL。对目标纹理进行渲染以获得渲染后的纹理的步骤由该OpenGL执行。
在本公开的一些实施例中,使得该CUDA共享渲染后的纹理的存储空间的步骤由该CUDA执行。
在本公开的一些实施例中,建立渲染后的纹理的索引号与该CUDA的指向该存储空间的指针之间的第二映射关系的步骤由该CUDA执行。
在本公开的一些实施例中,根据该第二映射关系从渲染后的纹理获得渲染数据的步骤由该CUDA执行。
在本公开的一些实施例中,将该渲染数据复制到视频编码器的输入缓冲区中的步骤由该CUDA执行。
根据本公开的第二方面,提供了一种包括GPU的视频帧处理装置。该GPU被配置为:获得该视频帧的转码数据;将该转码数据存储在该GPU中的指定地址空间;建立指向该指定地址空间的指针与要在该GPU中创建的目标纹理的索引号之间的第一映射关系;以及根据该第一映射关系将该指定地址空间中存储的该转码数据创建成目标纹理。
在本公开的一些实施例中,该GPU是NVIDIA GPU。该NVIDIA GPU包括CUDA。该第一映射关系由该CUDA建立。
在本公开的一些实施例中,该GPU包括OpenGL。该目标纹理由该OpenGL创建。
在本公开的一些实施例中,该GPU被配置为通过以下操作来获得该视频帧的转码数据:获得该视频帧的经解封装的压缩数据;将该压缩数据解码为该视频帧的原始数据;以及将该原始数据转码为该视频帧的转码数据。
在本公开的一些实施例中,该GPU是NVIDIA GPU。该NVIDIA GPU包括NVDEC。该压缩数据由该NVDEC解码为原始数据。
在本公开的一些实施例中。该GPU是NVIDIA GPU。该NVIDIA GPU包括CUDA。该原始数据由该CUDA转码为转码数据。
在本公开的一些实施例中,该GPU是NVIDIA GPU。该NVIDIA GPU包括CUDA和视频编码器。该GPU还被配置为:对目标纹理进行渲染以获得渲染后的纹理;使得该CUDA共享渲染后的纹理的存储空间;建立渲染后的纹理的索引号与该CUDA的指向该存储空间的指针之间的第二映射关系;根据该第二映射关系从渲染后的纹理获得渲染数据;将该渲染数据复制到视频编码器的输入缓冲区中;以及由视频编码器将输入缓冲区中的渲染数据编码成编码数据。
在本公开的一些实施例中,该装置还包括至少一个处理器;以及存储有计算机程序的至少一个存储器。当计算机程序由至少一个处理器执行时,使得该装置对该视频帧执行解封装操作。
在本公开的一些实施例中,该装置还包括至少一个处理器;以及存储有计算机程序的至少一个存储器。当计算机程序由至少一个处理器执行时,使得该装置对编码数据执行封装操作。
附图说明
为了更清楚地说明本公开的实施例的技术方案,下面将对实施例的附图进行简要说明,应当知道,以下描述的附图仅仅涉及本公开的一些实施例,而非对本公开的限制,其中:
图1是根据本公开的实施例的由GPU执行的处理视频帧的方法的示例性流程图;
图2是在图1所示的实施例中的获得视频帧的转码数据的步骤的示例性流程图;
图3是图1所示的实施例的方法所包括的进一步的步骤的示例性流程图;以及
图4是根据本公开的实施例的处理视频帧的过程的示意图。
附图中的元素是示意性的,没有按比例绘制。
具体实施方式
为了使本公开的实施例的目的、技术方案和优点更加清楚,下面将结合附图,对本公开的实施例的技术方案进行清楚、完整的描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域技术人员在无需创造性劳动的前提下所获得的所有其它实施例,也都属于本公开保护的范围。
除非另外定义,否则在此使用的所有术语(包括技术和科学术语)具有与本公开主题所属领域的技术人员所通常理解的相同含义。进一步将理解的是,诸如在通常使用的词典中定义的那些的术语应解释为具有与说明书上下文和相关技术中它们的含义一致的含义,并且将不以理想化或过于正式的形式来解释,除非在此另外明确定义。如在此所使用的,诸如“第一”和“第二”的术语仅用于将一个元素(或元素的一部分)与另一个元素(或元素的另一部分)区分开。
“视频”在本文中指的是一组连续图像的数字化表示。该组连续图像中的每一个图像可被称为一个视频帧。尽管“视频”的通常含义还可能包括音频部分,但是在本文中主要讨论视频中的图像部分,即,视频帧。
通常视频编解码的流程包括对视频帧执行以下操作:解封装->解码->转码->渲染->编码->封装。如上所述为了提升视频编解码的速度,可能会使用GPU(俗称显卡)来参与视频编解码,以使得视频编解码的部分工作由硬件部分完成。在使用GPU来参与视频编解码的一些应用中,由CPU对视频帧进行解封装以获得视频帧的经解封装的压缩数据。然后CPU将经解封装的压缩数据发送给GPU,由GPU对压缩数据进行解码以获得视频帧的原始数据。视频帧的原始数据一般为YUV格式,而渲染操作需要针对RGB格式的数据进行。因此在渲染之前还要进行转码,将YUV格式的数据转换成RGB格式的数据。一般情况下转码可采用FFmpeg或libyuv转码的方式。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。此类转码方式是在CPU上进行的。因此,在GPU解码得到视频帧的原始数据之后,GPU需要将视频帧的原始数据发送给CPU以进行转码。在CPU通过转码得到RGB格式的数据之后,CPU将RGB格式的数据发送给GPU,以便在GPU中进行渲染操作。渲染后的数据(在本公开的上下文中可被称为“渲染数据”)可在GPU中被编码。编码后的数据可被发送给CPU以进行封装处理。
在上述过程中,由于视频帧数据需要在CPU与GPU之间多次传输,并且转码操作由软件完成,因此这种视频编解码方式(在本公开的上下文中也可被称为“半硬件编解码方式”)仍然比较耗时。
如果转码操作也由GPU来执行,则可以减少视频帧数据在CPU与GPU之间传输的次数。解码操作、转码操作、渲染操作都在GPU中执行的方式在本公开的上下文中可被称为“完全硬件解码方式”。解码操作、转码操作、渲染操作以及编码操作都在GPU中执行的方式在本公开的上下文中可被称为“完全硬件编解码方式”。在采用完全硬件解码方式的情况下,如何将执行转码操作的硬件部件与执行渲染操作的硬件部件高效地结合起来使用是本公开的实施例所研究的一个方面。在采用完全硬件编解码方式的情况下,如何将执行渲染操作的硬件部件与执行编码操作的硬件部件高效地结合起来使用是本公开的实施例所研究的另一个方面。
图1示出根据本公开的实施例的由GPU执行的处理视频帧的方法100的示例性流程图。下面参考图1来描述由GPU执行的处理视频帧的方法100。
在图1的框S102处,获得视频帧的转码数据。在本公开的一些实施例中,该转码数据是在GPU中生成的。图2示出获得视频帧的转码数据的步骤的示例性流程图。
在图2的框S202处,获得视频帧的经解封装的压缩数据。视频文件可包括文件头,用于定义视频文件的一些参数和/或信息,例如序列参数集(SPS)/图像参数集(PPS)信息。根据文件头中包括的参数和/或信息,可以知道视频帧的起始位置、视频帧的总长度等信息。根据此类信息,可以知道视频帧数据在视频文件中的具体存储位置。为节省视频的存储空间,该视频帧数据通常是压缩数据,也可被理解为原始数据的压缩包。从视频文件中取得该压缩数据的过程被称为解封装。由于解封装操作耗时较少,因此通常在CPU中执行解封装操作。在CPU对视频进行解封装操作之后,CPU可获得视频帧的经解封装的压缩数据。然后,CPU将该压缩数据发送给GPU。在这种情况下,获得视频帧的经解封装的压缩数据的过程可以被理解为:GPU从CPU接收视频帧的经解封装的压缩数据。在一些实施例中,也可以由GPU进行解封装操作,以获得视频帧的经解封装的压缩数据。
在框S204处,将压缩数据解码为视频帧的原始数据。在本公开的一些实施例中,在GPU获得经解封装的压缩数据之后,将该经解封装的压缩数据送入解码器中进行解码。在送入例如4帧数据后,解码器可返回解码后的原始数据。原始数据一般为YUV格式的数据。在本公开的一些实施例中,该GPU例如是NVIDIA GPU(显卡厂商英伟达生产的GPU)。该压缩数据可由NVIDIA GPU中的视频解码器引擎NVDEC解码为原始数据。本领域技术人员应了解,该GPU也可以是由其他厂商生产的具有视频解码器的GPU。
在框S206处,将原始数据转码为视频帧的转码数据。由于渲染操作需要针对RGB格式的数据进行,因此在渲染之前还要对YUV格式的原始数据进行转码,将YUV格式的数据转换成RGB格式的数据。如上所述,在本公开的一些实施例中,该GPU例如是NVIDIA GPU。该YUV格式的原始数据可由NVIDIA GPU中的CUDA转码为RGB格式的转码数据。CUDA是显卡厂商NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。本领域技术人员应了解,该GPU也可以是由其他厂商生产的具有转码功能的GPU。
下面回到图1,在框S104处,将转码数据存储在GPU中的指定地址空间。在一些实施例中,可获得指向该指定地址空间的指针。在GPU是NVIDIA GPU且转码操作由CUDA执行的示例中,该转码数据可存储在CUDA中。
在框S106处,建立指向指定地址空间的指针与要在GPU中创建的目标纹理的索引号之间的第一映射关系。纹理可以是表示物体表面细节的一个或多个图形,其实质上是数据数组,例如颜色数据、亮度数据等。纹理数组中的单个值通常被称为纹理单元,也叫纹素(texel)。纹理的索引号是纹理在存储器中存储的索引号。在一些图形处理应用中,例如OpenGL、OpenGLES等,纹理是按照无符号int型数据的索引号来存储的。例如,如果有10个纹理,则可以分别用0到9这十个数字作为索引号,来表示每个纹理的存储地址。在创建目标纹理之前,可以先确定目标纹理的索引号,以便预留该索引号所指向的存储空间,以供将来在该存储空间中创建目标纹理。
在GPU是NVIDIA GPU的示例中,第一映射关系可由NVIDIA GPU中的CUDA来建立。
在框S108处,根据第一映射关系将指定地址空间中存储的转码数据创建成目标纹理。由于渲染工具(也可被称为“渲染器”)的操作对象是纹理而非图像数据,因此,需要从转码数据创建目标纹理以供渲染工具执行渲染操作。目标纹理中包含了转码数据的信息。由于在框S106处建立了指向指定地址空间的指针与目标纹理的索引号之间的第一映射关系,因此不需要将转码数据拷贝到渲染工具中。可以通过指向指定地址空间的指针与目标纹理的索引号之间的第一映射关系来快速地创建目标纹理。
这样,根据本公开的实施例的处理视频帧的方法可将执行转码操作的硬件部件与执行渲染操作的硬件部件高效地结合起来使用。
下面进一步讨论在采用完全硬件编解码方式的情况下,如何将执行渲染操作的硬件部件与执行编码操作的硬件部件高效地结合起来使用。
图3示出图1所示的实施例的方法所包括的进一步的步骤的示例性流程图。
在框S302处,对目标纹理进行渲染以获得渲染后的纹理。如上所述,纹理数组中包括纹理单元。纹理单元是对能够被渲染工具中的着色器采样的纹理对象的引用。纹理对象本身包括纹理需要的数据,比如图像数据。渲染工具可通过纹理单元对纹理进行渲染,形成渲染后的纹理。渲染后的纹理存储在与目标纹理不同的存储空间中,对应与目标纹理不同的索引号。
在GPU是NVIDIA GPU且NVIDIA GPU包括CUDA的示例中,在框S304处,使得CUDA共享渲染后的纹理的存储空间。在本公开的一些实施例中,渲染后的纹理可被保存在渲染工具中的某个地址空间。通过将该地址空间注册为CUDA的图形资源cudaResource,可使得CUDA能够共享该存储空间。
在框S306处,建立渲染后的纹理的索引号与CUDA的指向上述存储空间的指针之间的第二映射关系。在本公开的一些实施例中,第二映射关系可由CUDA建立。
在框S308处,根据第二映射关系从渲染后的纹理获得渲染数据。如前所述,纹理实质上是数据数组,例如颜色数据、亮度数据等。从该数据数组可以得到经过渲染处理的图像(视频帧)数据,在上下文中也可被称为渲染数据。因为视频编码器的操作对象是图像数据而非纹理,因此需要从渲染后的纹理中提取出图像数据的信息。由于CUDA的指针指向CUDA与渲染后的纹理所共享的存储空间,因此,通过该指针可以获得该存储空间中存储的纹理所对应的渲染数据。由于在框306处建立了渲染后的纹理的索引号与CUDA的指向存储空间的指针之间的第二映射关系,因此能够方便地从渲染后的纹理获得渲染数据。
在框S310处,将渲染数据复制到视频编码器的输入缓冲区中。在本公开的一些实施例中,在每次通过该指针获得一个渲染数据之后,可以将该渲染数据复制到视频编码器的输入缓冲区中。
在框S312处,由视频编码器将输入缓冲区中的渲染数据编码成编码数据。在一些实施例中,在输入缓冲区中的渲染数据超过例如3帧的时候开始执行编码操作。在GPU是NVIDIA GPU的示例中,该图像数据可由NVIDIA GPU中的视频编码器引擎NVENC编码成编码数据。本领域技术人员应了解,该GPU也可以是由其他厂商生产的具有视频编码器的GPU。
为了更清楚的描述根据本公开的实施例的处理视频帧的过程,在图4中示出了整个视频编解码过程的示意图。图4中的虚线用于划分CPU和GPU分别执行的操作。由虚线分割的图4的上半部分的操作由CPU执行。由虚线分割的图4的下半部分的操作由GPU执行。
在图4的示例中,以GPU是NVIDIA GPU为例进行说明。其中,该NVIDIA GPU可包括:视频解码器引擎NVDEC、CUDA、OpenGL和视频编码器引擎NVENC。NVDEC可执行解码操作。CUDA可执行转码操作。OpenGL可执行渲染操作。NVENC可执行编码操作。
如图4所示,在框402处,由CPU获得输入视频文件。在一些实施例中,CPU可检测当前系统中的GPU的信息,以获取GPU相关数据。GPU相关数据例如是GPU的名称、型号和内存等信息。根据该信息可知道GPU是否支持解码、转码、渲染和编码功能。在GPU支持解码、转码、渲染和/或编码功能的情况下,该GPU可执行根据本公开的实施例的处理视频帧的操作。
在框404处,CPU通过例如调用FFmpeg API来创建用于解封装的上下文指针。在框406处,基于该上下文指针,CPU使用FFmpeg API进行视频文件的解封装。以MP4格式的文件为例进行说明。MP4文件的SPS/PPS信息存储在文件头中。因此,可在文件头中提取SPS/PPS信息,以根据该SPS/PPS信息执行解封装操作。在解封装操作之后,CPU获取原始数据的压缩包(即,视频帧的经解封装的压缩数据)。
然后在框408处,CPU将所获取的原始数据的压缩包发送给GPU,以在GPU的解码器(NVDEC)中进行解码操作。在解码器接收到例如4帧压缩数据后,可返回解码后的原始数据(即,视频帧的原始数据)。解码后的原始数据不能直接被渲染,因为渲染工具OpenGL的输入数据需要是RGB格式的数据,而原始数据一般是YUV格式的数据。所以在原始数据被发送给OpenGL进行渲染之前还要对原始数据进行转码,将YUV格式的数据转换成RGB格式的数据。在图4的示例中,在框410处,由CUDA在GPU上执行转码操作。转码后的数据存储在CUDA中的指定地址空间。
然后,在框412处使得执行渲染操作的OpenGL与执行转码操作的CUDA建立映射关系。在一些实施例中,可使用CUdeviceptr类型的指针指向转码后的数据所存储的地址空间。然后,可由CUDA采用映射方法使得要在GPU中创建的目标纹理的索引号(可被称为“OpenGL纹理ID”)与该CUdeviceptr类型的指针关联起来。OpenGL可借助OpenGL纹理ID与该CUdeviceptr类型的指针的映射关系来快速地生成OpenGL纹理。这样CUDA不需要把转码后的数据复制(copy)到OpenGL以供OpenGL生成纹理,这样可节省复制操作占用的时间和资源。并且在每次获得转码后的数据时,OpenGL纹理都可以快速更新,从而加快渲染速度。
在框414处,由OpenGL执行渲染操作。渲染工具OpenGL的输入和输出均是纹理。渲染后的纹理与渲染前的纹理具有不同的纹理索引号,被存储在不同的地址空间。在一些实施例中,渲染后的纹理(也可被理解为渲染后的视频帧)可以被显示或者被输出(未在图4中示出)。
在一些实施例中,在需要以压缩的格式存储渲染后的视频帧的情况下,可能需要对渲染后的视频帧进行编码操作。编码操作需要针对图像数据进行,而如上所述,渲染工具OpenGL的输出是纹理而非图像数据。因此,不能将OpenGL的输出直接作为编码器的输入。针对该问题,在本公开的实施例中,提出借助于CUDA从OpenGL的输出得到编码器可处理的数据,供编码器进行编码操作。
在框416处,使得OpenGL与CUDA建立另一映射关系。具体地,渲染后的纹理被保存在OpenGL中的某个地址空间。在一个示例中,该地址空间可被注册为CUDA的图形资源cudaResource。这样,OpenGL与CUDA可共享该地址空间。在CUDA中生成cudaArrary类型的指针,该cudaArrary类型的指针指向所注册的cudaResource。CUDA可采用映射方法使得渲染后的纹理的索引号(可被称为“OpenGL渲染后的纹理ID”)与该cudaArrary类型的指针关联起来。通过OpenGL渲染后的纹理ID与该cudaArrary类型的指针之间的映射关系,渲染后的数据(在本公开的上下文中,可被称为渲染数据)可被通过该cudaArrary类型的指针来获得。这样在每次获取渲染后的数据时,该cudaArrary类型的指针会同步更新。CUDA可将该cudaArrary类型的指针所指向的数据复制到编码器的输入缓冲区。这样,可以将编码操作与渲染操作在GPU中结合起来。
在框418处,编码器对输入缓冲区中存储的数据进行编码。在一些实施例中,在输入缓冲区中的渲染数据超过例如3帧的时候开始执行编码操作。编码后的数据可被存储在一个二维数组中,并被发送给CPU。
在框420处,CPU可创建一个AvPacket类型的对象,循环读取该二维数组,以将编码后的数据拷贝到AvPacket类型的对象的数据部分中。
在框422处,CPU可调用FFmpeg API进行视频文件的封装,然后在框424处获得或输出经封装的输出视频文件。
本公开的实施例通过在GPU上进行解码、转码和编码,并将转码和编码与OpenGL渲染进行绑定,提升了整体的编解码速度,还减少了CPU的资源占用。
附图中的流程图和框图显示了根据本公开的多个实施例的装置和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
除非上下文中另外明确地指出,否则在本文和所附权利要求中所使用的词语的单数形式包括复数,反之亦然。因而,当提及单数时,通常包括相应术语的复数。相似地,措辞“包含”和“包括”将解释为包含在内而不是独占性地。同样地,术语“包括”和“或”应当解释为包括在内的,除非本文中明确禁止这样的解释。在本文中使用术语“示例”之处,特别是当其位于一组术语之后时,所述“示例”仅仅是示例性的和阐述性的,且不应当被认为是独占性的或广泛性的。
适应性的进一步的方面和范围从本文中提供的描述变得明显。应当理解,本申请的各个方面可以单独或者与一个或多个其它方面组合实施。还应当理解,本文中的描述和特定实施例旨在仅说明的目的并不旨在限制本申请的范围。
以上对本公开的若干实施例进行了详细描述,但显然,本领域技术人员可以在不脱离本公开的精神和范围的情况下对本公开的实施例进行各种修改和变型。本公开的保护范围由所附的权利要求限定。
Claims (10)
1.一种视频帧处理方法,由GPU执行,所述视频帧处理方法包括:
获得所述视频帧的转码数据;
将所述转码数据存储在所述GPU中的指定地址空间;
建立指向所述指定地址空间的指针与要在所述GPU中创建的目标纹理的索引号之间的第一映射关系;以及
根据所述第一映射关系将所述指定地址空间中存储的所述转码数据创建成所述目标纹理。
2.根据权利要求1所述的视频帧处理方法,其中,所述GPU是NVIDIA GPU,所述NVIDIAGPU包括CUDA,所述第一映射关系由所述CUDA建立。
3.根据权利要求1或2所述的视频帧处理方法,其中,所述GPU包括OpenGL,所述目标纹理由所述OpenGL创建。
4.根据权利要求1所述的视频帧处理方法,其中,获得所述视频帧的转码数据包括:
获得所述视频帧的经解封装的压缩数据;
将所述压缩数据解码为所述视频帧的原始数据;以及
将所述原始数据转码为所述视频帧的所述转码数据。
5.根据权利要求4所述的视频帧处理方法,其中,所述GPU是NVIDIA GPU,所述NVIDIAGPU包括NVDEC,所述压缩数据由所述NVDEC解码为所述原始数据。
6.根据权利要求4所述的视频帧处理方法,其中,所述GPU是NVIDIA GPU,所述NVIDIAGPU包括CUDA,所述原始数据由所述CUDA转码为所述转码数据。
7.根据权利要求1-2和4-6中任一项所述的视频帧处理方法,其中,所述GPU是NVIDIAGPU,所述NVIDIA GPU包括CUDA和视频编码器,所述方法还包括:
对所述目标纹理进行渲染以获得渲染后的纹理;
使得所述CUDA共享所述渲染后的纹理的存储空间;
建立所述渲染后的纹理的索引号与所述CUDA的指向所述存储空间的指针之间的第二映射关系;
根据所述第二映射关系从所述渲染后的纹理获得渲染数据;
将所述渲染数据复制到所述视频编码器的输入缓冲区中;以及
由所述视频编码器将所述输入缓冲区中的所述渲染数据编码成编码数据。
8.一种视频帧处理装置,包括GPU,所述GPU被配置为:
获得所述视频帧的转码数据;
将所述转码数据存储在所述GPU中的指定地址空间;
建立指向所述指定地址空间的指针与要在所述GPU中创建的目标纹理的索引号之间的第一映射关系;以及
根据所述第一映射关系将所述指定地址空间中存储的所述转码数据创建成所述目标纹理。
9.根据权利要求8所述的视频帧处理装置,其中,所述GPU是NVIDIA GPU,所述NVIDIAGPU包括CUDA,所述第一映射关系由所述CUDA建立。
10.根据权利要求8或9所述的视频帧处理装置,其中,所述GPU包括OpenGL,所述目标纹理由所述OpenGL创建。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111545009.7A CN114245138A (zh) | 2021-12-16 | 2021-12-16 | 视频帧处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111545009.7A CN114245138A (zh) | 2021-12-16 | 2021-12-16 | 视频帧处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114245138A true CN114245138A (zh) | 2022-03-25 |
Family
ID=80757230
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111545009.7A Pending CN114245138A (zh) | 2021-12-16 | 2021-12-16 | 视频帧处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114245138A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140093223A1 (en) * | 2008-06-27 | 2014-04-03 | Rovi Guides, Inc. | Systems and methods of transitioning from buffering video to recording video |
CN105228000A (zh) * | 2015-09-25 | 2016-01-06 | 网宿科技股份有限公司 | 一种基于gpu的完全硬件转码的方法和系统 |
CN106127673A (zh) * | 2016-07-19 | 2016-11-16 | 腾讯科技(深圳)有限公司 | 一种视频处理方法、装置及计算机设备 |
CN106210883A (zh) * | 2016-08-11 | 2016-12-07 | 浙江大华技术股份有限公司 | 一种视频渲染的方法、设备 |
-
2021
- 2021-12-16 CN CN202111545009.7A patent/CN114245138A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140093223A1 (en) * | 2008-06-27 | 2014-04-03 | Rovi Guides, Inc. | Systems and methods of transitioning from buffering video to recording video |
CN105228000A (zh) * | 2015-09-25 | 2016-01-06 | 网宿科技股份有限公司 | 一种基于gpu的完全硬件转码的方法和系统 |
CN106127673A (zh) * | 2016-07-19 | 2016-11-16 | 腾讯科技(深圳)有限公司 | 一种视频处理方法、装置及计算机设备 |
CN106210883A (zh) * | 2016-08-11 | 2016-12-07 | 浙江大华技术股份有限公司 | 一种视频渲染的方法、设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106611435B (zh) | 动画处理方法和装置 | |
CN103688240B (zh) | 用于发送数字场景描述数据的方法以及发送器和接收器场景处理设备 | |
US20140092439A1 (en) | Encoding images using a 3d mesh of polygons and corresponding textures | |
CN108206937B (zh) | 一种提升智能分析性能的方法和装置 | |
US20100060652A1 (en) | Graphics rendering system | |
CN114245137A (zh) | 由gpu执行的视频帧处理方法和包括gpu的视频帧处理装置 | |
CN111899322A (zh) | 视频处理方法、动画渲染sdk和设备及计算机存储介质 | |
CN113457160A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN112843676B (zh) | 数据处理方法、装置、终端、服务器及存储介质 | |
WO2019142665A1 (ja) | 情報処理装置および方法 | |
US20150117515A1 (en) | Layered Encoding Using Spatial and Temporal Analysis | |
CN112218148A (zh) | 屏幕录制方法、装置、计算机设备和计算机可读存储介质 | |
US10237563B2 (en) | System and method for controlling video encoding using content information | |
CN114040246A (zh) | 图形处理器的图像格式转换方法、装置、设备及存储介质 | |
US20120218292A1 (en) | System and method for multistage optimized jpeg output | |
US10931968B2 (en) | Method and apparatus for encoding or decoding video content including regions having looping videos of different loop lengths | |
CN114938408A (zh) | 一种云手机的数据传输方法、系统、设备及介质 | |
CN110049347B (zh) | 在直播界面配置图像的方法、系统、终端和装置 | |
US10841591B2 (en) | Systems and methods for deferred post-processes in video encoding | |
CN113327303B (zh) | 图像处理方法、装置、计算机设备及存储介质 | |
CN116055540B (zh) | 虚拟内容的显示系统、方法、设备及计算机可读介质 | |
CN114247138B (zh) | 图像渲染方法、装置、设备及存储介质 | |
CN114245138A (zh) | 视频帧处理方法和装置 | |
CN116170636A (zh) | 直播视频播放方法及其装置、设备、介质 | |
KR20230079184A (ko) | 몰입형 비디오의 인코딩 및 디코딩 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |