CN107547896B - 一种基于CUDA的Prores VLC编码方法 - Google Patents

一种基于CUDA的Prores VLC编码方法 Download PDF

Info

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
Application number
CN201610527204.XA
Other languages
English (en)
Other versions
CN107547896A (zh
Inventor
汪清
陈梅丽
万俊青
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Arcvideo Technology Co ltd
Original Assignee
Hangzhou Arcvideo Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Arcvideo Technology Co ltd filed Critical Hangzhou Arcvideo Technology Co ltd
Priority to CN201610527204.XA priority Critical patent/CN107547896B/zh
Publication of CN107547896A publication Critical patent/CN107547896A/zh
Application granted granted Critical
Publication of CN107547896B publication Critical patent/CN107547896B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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编码方法
技术领域
本发明涉及一种基于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系数。
CN201610527204.XA 2016-06-27 2016-06-27 一种基于CUDA的Prores VLC编码方法 Active CN107547896B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9473779B2 (en) * 2013-03-05 2016-10-18 Qualcomm Incorporated Parallel processing for video coding

Patent Citations (5)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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