CN107547896B - 一种基于CUDA的Prores VLC编码方法 - Google Patents
一种基于CUDA的Prores VLC编码方法 Download PDFInfo
- Publication number
- CN107547896B CN107547896B CN201610527204.XA CN201610527204A CN107547896B CN 107547896 B CN107547896 B CN 107547896B CN 201610527204 A CN201610527204 A CN 201610527204A CN 107547896 B CN107547896 B CN 107547896B
- Authority
- CN
- China
- Prior art keywords
- threads
- blocks
- thread
- coefficients
- coefficient
- 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.)
- Active
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了一种基于CUDA的ProRes VLC编码,对8×8块的DCT系数进行编码,每32个线程编码一个slice的所有所述8×8块,每一个所述线程编码一个所述8×8块的两个DCT系数,对于一个1920×1080视频序列而言,需要1020×32=32640个线程并行,对于一块高端GPU而言,远大于其能够并行的线程数,使得GPU可以满负载运行,从而提高了VLC编码的速度。
Description
技术领域
本发明涉及一种基于CUDA的Prores VLC编码方法。
背景技术
ProRes是Apple定义的一种视频压缩标准。在ProRes标准中,一个slice包含8个16×16宏块(macroblock,以下简称MB),每个MB分为4个8×8的块,这样一个slice共有32个8×8的块。
VLC编码(变长编码Variable Length Coding)主要指对8×8块的DCT系数进行编码。
不同于其他的视频压缩标准,Prores对DCT系数进行编码并不是以8×8块的顺序进行的,而是如图1中的EncodeSlice(id×)流程图所示,先编码所有8×8块的DC系数,再编码所有块的第一个AC系数,然后是所有块的第二个AC系数,以此类推,AC系数编码需要计算当前非零AC系数和前一个非零AC系数之间的值为0的系数个数。
这种编码方式意味着在一个slice内部所有DCT系数编码具有较强的相关性。因此通常情况下会采用如图1所示的Slice并行方式进行CUDA(由NVIDIA推出的并行计算架构)实现。
然而这个方式的并行度并不高。例如对于一个1920×1080的视频序列,每帧共有1020个slice,这意味着采用前述的slice并行算法最多就只能有1020个线程并行。而对于一块KG104GPU,最多可并行处理16384线程,则GPU利用率只有6.25%,而且每个线程的运算量大,需要编码8×8×32=2048个系数。
发明内容
本发明的目的在于克服现有技术中的不足而提供一种基于CUDA的Prores VLC编码方法。
为实现上述目的,一方面,本发明提供的一种基于CUDA的Prores VLC编码方法,对8×8块的DCT系数进行编码,每32个线程编码一个slice的所有8×8块,每一个线程编码一个8×8块的两个DCT系数。
优选地,每一个线程编码一个8×8块的一个DC系数和一个AC系数,或每一个线程编码一个8×8块的两个AC系数。
优选地,具体算法步骤包括:
在一个slice中,一个线程独立编码一个8×8块的DC系数,在一个slice中包含32个8×8块,共采用32个线程;
32个线程同步处理;
第threadIdX个线程,当threadIdX大于0时编码所有8×8块的第2×threadIdX个AC系数;
32个线程同步处理;
第threadIdX个线程编码所有8×8块的第2×threadIdX+1个AC系数;
32个线程同步处理;
第threadIdX个线程编码第threadIdX+1线程的前两个非零系数。
根据本发明提供的一种基于CUDA的Prores VLC编码方法,对原有算法进行了分解,采用系数级并行优化方式,每32个线程处理一个slice的算法,每个线程编码两个DCT系数,对于一个1920×1080视频序列而言,需要1020×32=32640个线程并行,对于一块KG104GPU而言,远大于其能够并行的线程数,使得GPU可以满负载运行,从而提高了VLC编码的速度。
附图说明
图1是现有的以Prores标准对DCT系数进行编码的编码流程示意图;
图2是本发明一实施例的一种基于CUDA的Prores VLC编码方法的编码流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“顺时针”、“逆时针”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
请参阅图2,本发明一实施例提供了一种基于CUDA的Prores VLC编码方法,对8×8块的DCT系数进行编码,每32个线程编码一个slice的所有8×8块,每一个线程编码一个8×8块的两个DCT系数。
其中,每一个线程编码一个8×8块的一个DC系数和一个AC系数,或每一个线程编码一个8×8块的两个AC系数。
具体地,本实施例的算法对原有算法进行分解,采用系书级并行优化方式处理,具体包括如下步骤:
步骤1:由于DC系数之间没有相关性,因此可以单独编码,在一个slice中,一个线程独立编码一个8×8块的DC系数,在一个slice中包含32个8×8块,共采用32个线程;
步骤2:32个线程同步处理;
步骤3:第threadIdX个线程,当threadIdX大于0时编码所有8×8块的第2×threadIdX个AC系数,在这一步中,前两个非零系数编码时由于需要用到之前系数的信息,暂时不编码,其他系数可正常编码;
步骤4:32个线程同步处理;
步骤5:第threadIdX个线程编码所有8×8块的第2×threadIdX+1个AC系数;
步骤6:32个线程同步处理;
步骤7:第threadIdX个线程编码第threadIdX+1线程的前两个非零系数,即步骤3留下来的前两个AC系数。
本发明提供的这种基于CUDA的Prores VLC编码方法,对原有算法进行了分解,采用系数级并行优化方式,每32个线程处理一个slice的算法,每个线程编码两个DCT系数,对于一个1920×1080视频序列而言,需要1020×32=32640个线程并行,对于一块KG104GPU而言,远大于其能够并行的线程数,使得GPU可以满负载运行,从而提高了VLC编码的速度。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (2)
1.一种基于CUDA的Prores VLC编码方法,其特征在于,对8×8块的DCT系数进行编码,每32个线程编码一个slice中包含的所有32个所述8×8块,每一个所述线程编码一个所述8×8块的一个DC系数和一个AC系数、或每一个所述线程编码一个所述8×8块的两个AC系数。
2.根据权利要求1所述的一种基于CUDA的Prores VLC编码方法,其特征在于,具体算法按顺序为如下7个步骤:
步骤1,在一个所述slice中,一个所述线程独立编码一个所述8×8块的DC系数,在一个所述slice中包含32个所述8×8块,共采用32个所述线程;
步骤2,32个所述线程同步处理;
步骤3,第threadIdX个线程,当threadIdX大于0时编码所有8×8块的第2×threadIdX个AC系数;
步骤4,32个线程同步处理;
步骤5,第threadIdX个线程编码所有8×8块的第2×threadIdX+1个AC系数;
步骤6,32个线程同步处理;
步骤7,第threadIdX个线程编码第threadIdX+1线程的前两个非零AC系数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610527204.XA CN107547896B (zh) | 2016-06-27 | 2016-06-27 | 一种基于CUDA的Prores VLC编码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610527204.XA CN107547896B (zh) | 2016-06-27 | 2016-06-27 | 一种基于CUDA的Prores VLC编码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107547896A CN107547896A (zh) | 2018-01-05 |
CN107547896B true CN107547896B (zh) | 2020-10-09 |
Family
ID=60965971
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610527204.XA Active CN107547896B (zh) | 2016-06-27 | 2016-06-27 | 一种基于CUDA的Prores VLC编码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107547896B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101176089A (zh) * | 2005-05-16 | 2008-05-07 | 英特尔公司 | 使用多线程单指令多数据处理并行执行媒体编码 |
CN101267564A (zh) * | 2008-04-16 | 2008-09-17 | 中国科学院计算技术研究所 | 一种多处理器视频编码芯片装置和方法 |
CN102404561A (zh) * | 2010-09-14 | 2012-04-04 | 盛乐信息技术(上海)有限公司 | 在cuda上实现mpeg4i帧编码的方法 |
CN103716644A (zh) * | 2013-12-05 | 2014-04-09 | 南京肯麦思智能技术有限公司 | 一种h264多粒度并行的处理方法 |
CN104041050A (zh) * | 2012-01-20 | 2014-09-10 | 高通股份有限公司 | 多线程纹理解码 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9473779B2 (en) * | 2013-03-05 | 2016-10-18 | Qualcomm Incorporated | Parallel processing for video coding |
-
2016
- 2016-06-27 CN CN201610527204.XA patent/CN107547896B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101176089A (zh) * | 2005-05-16 | 2008-05-07 | 英特尔公司 | 使用多线程单指令多数据处理并行执行媒体编码 |
CN101267564A (zh) * | 2008-04-16 | 2008-09-17 | 中国科学院计算技术研究所 | 一种多处理器视频编码芯片装置和方法 |
CN102404561A (zh) * | 2010-09-14 | 2012-04-04 | 盛乐信息技术(上海)有限公司 | 在cuda上实现mpeg4i帧编码的方法 |
CN104041050A (zh) * | 2012-01-20 | 2014-09-10 | 高通股份有限公司 | 多线程纹理解码 |
CN103716644A (zh) * | 2013-12-05 | 2014-04-09 | 南京肯麦思智能技术有限公司 | 一种h264多粒度并行的处理方法 |
Non-Patent Citations (1)
Title |
---|
Tips, Tricks and Troubles: Optimizing for Cell and GPU;Hakon Kvale等;《Proceedings of the 20th international workshop on Network and operation systems support for digital audio and video》;20100604;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107547896A (zh) | 2018-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8068043B2 (en) | Method and apparatus for video processing in context-adaptive binary arithmetic coding | |
US9338478B2 (en) | Video compression using multiple variable length coding methods for multiple types of transform coefficient blocks | |
KR101564078B1 (ko) | 인코딩 또는 디코딩 방법 및 장치 | |
US20080170613A1 (en) | Breakpoint determining for hybrid variable length coding and encoding the determined breakpoint | |
US20130215963A1 (en) | Adaptive intra-prediction encoding and decoding method | |
US10798390B2 (en) | Method and apparatus for scan order selection | |
US20210352325A1 (en) | Block sized based transform restrictions | |
CN103220511A (zh) | Hevc视频编码中的逻辑帧内模式命名 | |
SI2774374T1 (en) | Device for decoding video data | |
CN106303521B (zh) | 一种基于感知敏感度的hevc率失真优化方法 | |
US20140010278A1 (en) | Method and apparatus for coding adaptive-loop filter coefficients | |
WO2012139192A2 (en) | Methods and devices for coding and decoding the position of the last significant coefficient | |
US11582455B2 (en) | Method and apparatus for scan order selection | |
CN102196253B (zh) | 一种帧类型自适应选择的视频编码方法及装置 | |
CN107547896B (zh) | 一种基于CUDA的Prores VLC编码方法 | |
US8036471B2 (en) | Joint amplitude and position coding of coefficients for video compression | |
CA2857367A1 (en) | Method and apparatus for video quality measurement | |
CN104053009A (zh) | 一种监控视频的编码方法及装置 | |
CN106791861B (zh) | 一种基于CUDA架构的DNxHD VLC编码方法 | |
CN103118250A (zh) | 一种帧内划分标志的编解码方法及装置 | |
JP2015080115A5 (zh) | ||
EP3886434B1 (en) | Low complexity entropy-encoding/decoding apparatus | |
CN104519356B (zh) | 一种cabac编/解码方法 | |
CN103139557A (zh) | 一种视频编码中的运动估计方法及系统 | |
US20210021829A1 (en) | Binarization of dqp using separate absolute value and sign (savs) in cabac |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 310000 A Block, 16th Floor, E Building, Paradise Software Park, No. 3 Xidoumen Road, Hangzhou City, Zhejiang Province Applicant after: Hangzhou Dang Hong Polytron Technologies Inc Address before: 310000 B2010, two floor, North (two), six and 368 Road, Binjiang District, Hangzhou, Zhejiang. Applicant before: HANGZHOU DANGHONG TECHNOLOGY CO., LTD. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |