CN102497547A - 云终端视频数据的处理方法 - Google Patents
云终端视频数据的处理方法 Download PDFInfo
- Publication number
- CN102497547A CN102497547A CN2011103909489A CN201110390948A CN102497547A CN 102497547 A CN102497547 A CN 102497547A CN 2011103909489 A CN2011103909489 A CN 2011103909489A CN 201110390948 A CN201110390948 A CN 201110390948A CN 102497547 A CN102497547 A CN 102497547A
- Authority
- CN
- China
- Prior art keywords
- gpu
- video data
- estimation
- cpu
- terminal video
- 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
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明涉及视频数据处理技术领域,尤其是一种云终端视频数据的处理方法。本发明在对视频编码压缩时,由CPU和GPU共同进行,即将编码的运动估计由GPU完成;并将重建帧到运动估计的反馈通路切断,用原始帧取代重建帧进行运动估计,消除CPU和GPU的互相依赖。本发明有效克服了多台云终端同时播放视频时容易发生服务器CPU占用率高、资源达到瓶颈,从而导致播放视频不流畅的问题。可以广泛应用于云终端的视频数据处理中。
Description
技术领域
本发明涉及视频数据处理技术领域,尤其是一种云终端视频数据的处理方法。
背景技术
目前,云终端播放视频时,视频数据的编码压缩工作多由服务器CPU完成;当多台云终端同时播放视频,会导致服务端CPU占用率较高。对于8核2.4G的CPU,在5台云终端同时播放视频时,CPU占用率接近800%的极限。播放视频时,卡屏、抖屏现象严重,视频播放不流畅;制约着一台服务器能拖带的云终端的数目。
发明内容
本发明解决的技术问题在于提供一种云终端视频数据处理方法,可有效克服多台云终端同时播放视频时容易发生服务器CPU占用率高、资源达到瓶颈,从而导致播放视频不流畅的问题。
本发明解决上述技术问题的技术方案是:在对视频编码压缩时,由CPU和GPU共同进行,即将编码的运动估计由GPU完成;并将重建帧到运动估计的反馈通路切断,用原始帧取代重建帧进行运动估计,消除CPU和GPU的互相依赖。
在CPU和GPU编码流线之间设置缓冲区用于存放GPU生产出来的MV。
GPU的运动估计算法为基于深度测试的LMES算法。
所述的算法是按如下步骤进行:
步骤1、将组成Frame的三角形网格中的顶点的Z值都置为1;
步骤2、将ZBuffer中的值都初始化为0,并设置深度测试条件为“大于通过”,打开深度测试;
步骤3、关闭ZBuffer更新功能,执行PS0:计算当前候选MV的SAD;如果ZBuffer中的对应点为1,此PS将不会执行或至少不会有输出;
步骤4、打开ZBuffer更新功能,执行PS1,比较当前SAD是否小于阈值;如果大于,则放弃该点;否则自动更新ZBuffer中的对应点为1;
步骤5、将下一个MV作为候选MV,返回步骤3。
采用双线程程序结构,主线程负责控制整个程序流程,完成编码器除运动估计以外的工作,而子线程负责指挥GPU完成运动估计的工作。
主线程中设有派生子线程步骤,并且,进行运动估计的函数由读MVBuf的函数取代。
本发明采用给服务器配置一款显卡,并提出了CPU+GPU的并行架构的云编码器,采用双线程程序结构以及基于深度测试的LMES算法,并充分利用了GPU的并行计算技术,从而,有效的降低了CPU的占用率,解决了多台云终端播放视频时的资源瓶颈问题。并且GPU的视频编码和压缩较CPU效率要高很多,保证了视频播放的流畅度,提高了一台服务器能拖带的云终端数目。
本发明采用基于Frame Level的并行架构,因此仅仅只有一帧数据处理完毕时,才发生CPU和GPU之间的数据交互,由于是Frame Level的,也使GPU工作更加有效。
采用双线程程序结构;GPU本身并不会处理数据,必须由CPU推动GPU工作,同时,我们的编码器架构又要求运动估计和编码的其他部分分别在两条并行流水线中执行,单线程无法很好满足这个要求,因此采用双线程程序结构。
提出了基于深度测试的LMES算法;克服了传统算法的局限性,这种算法不需要在PS程序中显示的增加条件判断语句,而是利用3D流水线中固有的深度测试来完成提前退出ME的策略,其运行效率要高于可编程的像素流水线。
附图说明:
下面结合附图对本发明进一步说明:
图1是现有编码器框架结构图;
图2是本发明并行架构图;
图3是本发明基于深度测试的LMES算法流程图;
图4是本发明基于GPU的通用计算程序的工作流程图;
图5是本发明主线程流程图;
图6是本发明子线程流程图。
具体实施方式
如附图所示;现行的视频编码标准,其基本压缩框架都是基于时域预测的变换编码算法。首先根据已经编码的帧,对当前帧进行预测,然后求出残差,对残差进行变换编码、量化,量化时,将会发生信息熵的丢失,编码算法最后在变换域中进行保持熵的编码。传统MPEG2编码器框架参见附图1,其中省略了编码控制部分。图中的方框,表示编码器的工作步骤。其中存在一个从量化(Quantization)到运动补偿(MC)和运动估计(ME)的反馈。
要用GPU加速MPEG2编码,那么在编码器的体系结构中,就会存在两个处理器CPU和GPU。必然要采用并行架构的编码器,使得CPU和GPU同时工作,为此必须对传统的编码器结构进行改造。考虑到,长期以来,ME都是编码器中最大的瓶颈,可以将ME部分移植到GPU上来执行,并且将重建帧到ME的反馈通路切断,用原始帧取代重建帧进行ME,消除CPU和GPU互相依赖的问题。本发明提出了如附图2的双流水线并行架构。图中可以看出,新的编码器架构形成两条并行流水线,一条工作在GPU上,一条工作在CPU上。GPU流水线完全不受CPU流水线的影响,仅仅受I/O的限制。而CPU流水线除受I/O限制还需等待GPU生产的MV。为消除等待,在两条流水线间设立缓冲区用于存放GPU生产出来的MV。
并行架构的提出,使得CPU+GPU并行编码成为可能,为充分利用GPU高并行计算的特性,需设计适合GPU的ME算法。本发明提出了基于深度测试的LMES算法(ZB-LMES),正是考虑到了深度测试可以大大加快3D流水线渲染速度的事实。其具体算法如下:
1、将组成Frame的三角形网格中的顶点的Z值都置为1。
2、将ZBuffer中的值都初始化为0,并设置深度测试条件为“大于通过”,打开深度测试。
3、关闭ZBuffer更新功能,执行PS0:计算当前候选MV的SAD。如果ZBuffer中的对应点为1,此PS将不会执行或至少不会有输出。
4、打开ZBuffer更新功能,执行PS1:比较当前SAD是否小于阈值。如果大于,则放弃该点,否则自动更新ZBuffer中的对应点为1。
5、将下一个MV作为候选MV,返回步骤3。
ZB-LMES的算法如附图3。图中的深度测试部分和更新ZBuffer的部分均由3D流水线自动完成,不需要程序员干预,因此执行速度较快。其中PS0和PS1两个方框,分别代表ZB-LMES中的两个Pixel Shader程序。它们分别完成计算SAD和更新ZBuffer的任务。算法的第一步把所有顶点的Z属性都置为1,由于像素的属性是由顶点属性插值而来,这将使得所有像素的Z属性也恒定为1。
编码器的实现采用cuda技术编程,运行于Linux平台,采用C++语言编写。由于cuda技术是nvidia公司的并行计算技术,所以仅适合支持cuda技术的相关nvidia显卡。站在程序员的角度,基于GPU的通用计算程序的工作流程一般如附图4。图中可以看出,GPU本身并不会自动处理数据,必须由CPU推动GPU工作。同时,我们的编码器架构又要求运动估计和编码的其他部分分别在两条并行的流水线中执行。单线程程序无法很好的满足这个要求,因此,本发明采用双线程程序结构。同时存在两个线程,主线程负责控制整个程序流程,完成编码器除ME以外的工作,而子线程负责指挥GPU完成ME的工作。
附图5是主线程流程,从图中可以看出,主线程的流程与传统的在CPU上实现的编码器程序非常类似,只是主线程中多了一个派生子线程的步骤,并且,进行运动估计的函数被读MVBuf的函数取代。
附图6是子线程流程,子线程取代了传统编码器中ME部分。由于GPU是在CPU的控制之下工作的,因此图中的某些部分对于程序员来说,仅需要调用一下3D API来完成数据的更新和发出绘制命令就可以了,而不需要在子线程程序中编写完成实际工作的代码,例如Padding部分就是如此。当然,实际在GPU上完成Padding操作的Shader程序还是需要另外编写的。除了Padding部分以外,子线程流程中的SAD阈值设定、整像素运动估计和半像素运动估计,也遵循相同工作模式。
在主线程和子线程间,存在一个用于存放ME的结果缓冲区MVBuf。它是一个先进先出的队列,主线程和子线程与这个队列的关系是典型的生产者-消费者模型:子线程生产出MV填充队列尾部,主线程从队列头部消费掉MV。利用线程同步机制解决主线程和子线程对MVBuf的访问冲突问题。
Claims (6)
1.一种云终端视频数据处理方法,其特征在于:在对视频编码压缩时,由CPU和GPU共同进行,即将编码的运动估计由GPU完成;并将重建帧到运动估计的反馈通路切断,用原始帧取代重建帧进行运动估计,消除CPU和GPU的互相依赖。
2.根据权利要求1所述的云终端视频数据处理方法,其特征在于:在CPU和GPU编码流线之间设置缓冲区用于存放GPU生产出来的MV。
3.根据权利要求1或2所述的云终端视频数据处理方法,其特征在于:GPU的运动估计算法为基于深度测试的LMES算法。
4.根据权利要求3所述的云终端视频数据处理方法,其特征在于:所述的算法是按如下步骤进行:
步骤1、将组成Frame的三角形网格中的顶点的Z值都置为1;
步骤2、将ZBuffer中的值都初始化为0,并设置深度测试条件为“大于通过”,打开深度测试;
步骤3、关闭ZBuffer更新功能,执行PS0:计算当前候选MV的SAD;如果ZBuffer中的对应点为1,此PS将不会执行或至少不会有输出;
步骤4、打开ZBuffer更新功能,执行PS1,比较当前SAD是否小于阈值;如果大于,则放弃该点;否则自动更新ZBuffer中的对应点为1;
步骤5、将下一个MV作为候选MV,返回步骤3。
5.根据权利要求4所述的云终端视频数据处理方法,其特征在于:采用双线程程序结构,主线程负责控制整个程序流程,完成编码器除运动估计以外的工作,而子线程负责指挥GPU完成运动估计的工作。
6.根据权利要求5所述的云终端视频数据处理方法,其特征在于:主线程中设有派生子线程步骤,并且,进行运动估计的函数由读MVBuf的函数取代。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103909489A CN102497547A (zh) | 2011-11-30 | 2011-11-30 | 云终端视频数据的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103909489A CN102497547A (zh) | 2011-11-30 | 2011-11-30 | 云终端视频数据的处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102497547A true CN102497547A (zh) | 2012-06-13 |
Family
ID=46189330
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103909489A Pending CN102497547A (zh) | 2011-11-30 | 2011-11-30 | 云终端视频数据的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102497547A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483587A (zh) * | 2023-06-21 | 2023-07-25 | 湖南马栏山视频先进技术研究院有限公司 | 一种基于图像分割的视频超分并行方法、服务器及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1641278A2 (en) * | 2004-09-13 | 2006-03-29 | Microsoft Corporation | Accelerated video encoding using a graphics processing unit |
CN101267556A (zh) * | 2008-03-21 | 2008-09-17 | 海信集团有限公司 | 快速运动估计方法及视频编解码方法 |
CN101873483A (zh) * | 2009-04-24 | 2010-10-27 | 深圳市九洲电器有限公司 | 一种运动估计方法及采用运动估计方法的编码芯片、装置 |
-
2011
- 2011-11-30 CN CN2011103909489A patent/CN102497547A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1641278A2 (en) * | 2004-09-13 | 2006-03-29 | Microsoft Corporation | Accelerated video encoding using a graphics processing unit |
CN101267556A (zh) * | 2008-03-21 | 2008-09-17 | 海信集团有限公司 | 快速运动估计方法及视频编解码方法 |
CN101873483A (zh) * | 2009-04-24 | 2010-10-27 | 深圳市九洲电器有限公司 | 一种运动估计方法及采用运动估计方法的编码芯片、装置 |
Non-Patent Citations (1)
Title |
---|
房波: "基于通用可编程GPU的视频编解码器--架构、算法与实现", 《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483587A (zh) * | 2023-06-21 | 2023-07-25 | 湖南马栏山视频先进技术研究院有限公司 | 一种基于图像分割的视频超分并行方法、服务器及介质 |
CN116483587B (zh) * | 2023-06-21 | 2023-09-08 | 湖南马栏山视频先进技术研究院有限公司 | 一种基于图像分割的视频超分并行方法、服务器及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9955194B2 (en) | Server GPU assistance for mobile GPU applications | |
US10728564B2 (en) | Systems and methods of encoding multiple video streams for adaptive bitrate streaming | |
CN102447906A (zh) | 低延时视频解码 | |
WO2014190308A1 (en) | Systems and methods of encoding multiple video streams with adaptive quantization for adaptive bitrate streaming | |
CN106031177A (zh) | 用于硬件加速的视频编码的主编码器 | |
US20190373040A1 (en) | Systems and methods game streaming | |
CN109862357A (zh) | 低延迟的云游戏图像编码方法、装置、设备和存储介质 | |
CN106464886A (zh) | 视频中的画面的鲁棒编码和解码 | |
CN105592314B (zh) | 并行解码方法和并行解码装置 | |
CN105187845A (zh) | 视频数据解码装置及解码方法 | |
CN101873498B (zh) | 一种视频解码方法、装置及视音频播放*** | |
CN105208394B (zh) | 一种实时数字图像压缩预测方法与*** | |
CN102404576A (zh) | 云终端解码器及其负载均衡算法和gpu的解码算法 | |
US10616585B2 (en) | Encoding data arrays | |
CN111757103A (zh) | 基于显卡计算单元的vr视频编解码方法、***和存储介质 | |
US20170034522A1 (en) | Workload balancing in multi-core video decoder | |
CN116506618B (zh) | 一种基于负载动态自适应的视频解码优化方法 | |
CN102497547A (zh) | 云终端视频数据的处理方法 | |
CN103051899B (zh) | 一种视频解码的方法及装置 | |
CN108989814A (zh) | 一种基于并行编码结构的码率控制方法 | |
CN103268619B (zh) | swf文件中图片数据批量压缩的方法及装置 | |
TWI735297B (zh) | 具有初始化片段之視訊及音訊之寫碼 | |
US20160117796A1 (en) | Content Adaptive Decoder Quality Management | |
US20240137502A1 (en) | Systems and methods for encoding and decoding video with memory-efficient prediction mode selection | |
WO2024138410A1 (en) | Penalty-based scheduling method for better video game power |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120613 |