虽然也是做编码的,让自己懒得写啊,一下材料源自http://blog.csdn.net/yuanchao99/article/details/6803856,谢谢啊。
•ITU官网:
–http://www.itu.int/itu-t/workprog/wp_item.aspx?isn=7752
•会议文档:
– http://phenix.int-evry.fr/jct/index.php(要注册)
•HHI的HEVC主页:
– http://hevc.info/
•Vcodex的HEVC主页:
– www.vcodex.com/h265.html
•算法简介网站:(这个网站好像最近不怎么用了吧)
–http://www.h265.net/
•算法参考代码:
–https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/,用Windows下tortoiseSVN可以下载。
==================================
HEVC(H.265)的Low Complexity(LE)和High Efficiency(HE)配置主要区别是:
1. 熵编码不同,LC采用LCEC,HE采用CABAC
2. LC不支持自适应环内滤波(ALF)
3.LC不支持内部位深度扩展(IBDI)
相对于HM1.0,在HM3.0中对LC和HE的配置做了修改,主要区别在于统一了子像素插值滤波器。
亮度插值采用统一的8阶插值滤波器,HM1.0采用的分别是6阶和12阶插值滤波器。
新的系数:
Position |
Filter coefficients |
1/4 |
{ -1, 4, -10, 57, 19, -7, 3, -1 } |
2/4 |
{ -1, 4, -11, 40, 40, -11, 4, -1 } |
3/4 |
{ -1, 3, -7, 19, 57, -10, 4, -1 } |
色度插值采用统一的4阶插值滤波器,HM1.0采用的是双线性插值滤波器,
新的系数:
Position |
Filter coefficients |
1/8 |
{ -3, 60, 8, -1 } |
2/8 |
{ -4, 54, 16, -2 } |
3/8 |
{ -5, 46, 27, -4 } |
4/8 |
{ -4, 36, 36, -4 } |
5/8 |
{ -4, 27, 46, -5 } |
6/8 |
{ -2, 16, 54, -4 } |
7/8 |
{ -1, 8, 60, -3 } |
LC和HE的配置如下表:
High Efficiency Configuration |
Low Complexity Configuration |
Coding Unit tree structure (8x8 up to 64x64 luma samples) |
Prediction Units |
Transform unit tree structure (3 level max.) |
Transform block size of 4x4 to 32x32 samples Mode-dependent Transform for 4x4 block |
Spatial Intra Prediction (34 angular directions and Planar) Adaptive Intra Smoothing Intra Chroma Prediction using Luma samples |
DCT-based interpolation filter for luma samples (1/4-sample, 8-tap) |
DCT-based interpolation filter for luma samples (1/8-sample, 4-tap) |
Coding Unit based Skip & Prediction Unit based merging |
Advanced motion vector prediction |
Context adaptive binary arithmetic entropy coding |
Context adaptive VLC |
Internal bit-depth increase (2 bits) |
X |
Deblocking filter Sample Adaptive Offset |
Adaptive loop filter |
X |
视频测试类别说明:================================================================
Class A: 从超清视频序列"Traffic" (4096x2048p 30 fps), "PeopleOnStreet" (3840x2160p30 fps).中截取的2560x1600的序列。
Class B: 1920x1080p 24 fps: "ParkScene","Kimono",1920x1080p 50-60 fps: "Cactus", "BasketballDrive","BQTerrace"
Class C: 832x480p 30-60 fps (WVGA):"BasketballDrill", "BQMall", "PartyScene","RaceHorses"
Class D: 416x240p 30-60 fps (WQVGA):"BasketballPass", "BQSquare", "BlowingBubbles","RaceHorses"
Class E: 1280x720p 60fps video conferencing scenes:"Vidyo1", "Vidyo3" and "Vidyo4"
怎么用HM========================================================================
1.下载
在windows下用TortoiseSVN工具下载,仓库位置:
2.修改配置文件
找到
HEVCSoftware\trunk\cfg\encoder_lowdelay_P_loco.cfg,在文件开头做如下修改:
•#========File I/O =====================
•InputFile :D:\video\foreman_352x288_30p.yuv
#表示输入的YUV文件
•InputBitDepth : 8 # Input bitdepth
•FrameRate : 25 # Frame Rate per second
•FrameSkip : 0 # Number of frames to be skipped ininput
•SourceWidth : 352 # Input frame width
•SourceHeight : 288 # Input frame height
•FrameToBeEncoded : 200 # Number of frames to be coded
•BitstreamFile :D:\video\foreman_352x288_30p_lcldp_qp28.hevc
#表示输出的二进制码流文件
•ReconFile :D:\video\foreman_352x288_30p_lcldp_qp28_rec.yuv
# 表示输出的重建YUV文件
另存为forman_encoder_lowdelay_loco.cfg
3. 编译可执行代码
找到HEVCSoftware\trunk\build\HM_vc9.sln,用vs2008打开, build...
4.执行种情况的配置文件做类似修改即可。
在windows的命令行模式下输入以下命令:
D:\HEVCSoftware\trunk\bin\vc9\Win32\Debug\TAppEncoder.exe -c D:\HEVCSoftware\trunk\cfg\forman_encoder_lowdelay_loco.cfg
红色部分文字要根据自己的文件存储路径进行修改
以上举例的配置文件是针对低复杂度(LC),I,P帧低延时模式的,其它7种情况的配置文件做类似修改即可。
Compare LC and HE configure for HM3.0 of HEVC(H.265)
=====================================================================
1、CU的递归扫描顺序[HEVC/H.265]
在HEVC中,每个CU是可以进行递归式切分的,每次切分为正方形的4个subCU,对于LCU=64x64,最小CU=8x8的情况来说,其最小partition为4x4,其Z形扫描顺序如下图所示:
为了简化计算,在HM参考软件中有两个数组对Z型扫描顺序和光栅扫描顺序之间做了映射,即:
RasterToZscan |
0 |
1 |
4 |
5 |
16 |
17 |
20 |
21 |
64 |
65 |
68 |
69 |
80 |
81 |
84 |
85 |
2 |
3 |
6 |
7 |
18 |
19 |
22 |
23 |
66 |
67 |
70 |
71 |
82 |
83 |
86 |
87 |
8 |
9 |
12 |
13 |
24 |
25 |
28 |
29 |
72 |
73 |
76 |
77 |
88 |
89 |
92 |
93 |
10 |
11 |
14 |
15 |
26 |
27 |
30 |
31 |
74 |
75 |
78 |
79 |
90 |
91 |
94 |
95 |
32 |
33 |
36 |
37 |
48 |
49 |
52 |
53 |
96 |
97 |
100 |
101 |
112 |
113 |
116 |
117 |
34 |
35 |
38 |
39 |
50 |
51 |
54 |
55 |
98 |
99 |
102 |
103 |
114 |
115 |
118 |
119 |
40 |
41 |
44 |
45 |
56 |
57 |
60 |
61 |
104 |
105 |
108 |
109 |
120 |
121 |
124 |
125 |
42 |
43 |
46 |
47 |
58 |
59 |
62 |
63 |
106 |
107 |
110 |
111 |
122 |
123 |
126 |
127 |
128 |
129 |
132 |
133 |
144 |
145 |
148 |
149 |
192 |
193 |
196 |
197 |
208 |
209 |
212 |
213 |
130 |
131 |
134 |
135 |
146 |
147 |
150 |
151 |
194 |
195 |
198 |
199 |
210 |
211 |
214 |
215 |
136 |
137 |
140 |
141 |
152 |
153 |
156 |
157 |
200 |
201 |
204 |
205 |
216 |
217 |
220 |
221 |
138 |
139 |
142 |
143 |
154 |
155 |
158 |
159 |
202 |
203 |
206 |
207 |
218 |
219 |
222 |
223 |
160 |
161 |
164 |
165 |
176 |
177 |
180 |
181 |
224 |
225 |
228 |
229 |
240 |
241 |
244 |
245 |
162 |
163 |
166 |
167 |
178 |
179 |
182 |
183 |
226 |
227 |
230 |
231 |
242 |
243 |
246 |
247 |
168 |
169 |
172 |
173 |
184 |
185 |
188 |
189 |
232 |
233 |
236 |
237 |
248 |
249 |
252 |
253 |
170 |
171 |
174 |
175 |
186 |
187 |
190 |
191 |
234 |
235 |
238 |
239 |
250 |
251 |
254 |
255 |
ZscanToRaster |
0 |
1 |
16 |
17 |
2 |
3 |
18 |
19 |
32 |
33 |
48 |
49 |
34 |
35 |
50 |
51 |
4 |
5 |
20 |
21 |
6 |
7 |
22 |
23 |
36 |
37 |
52 |
53 |
38 |
39 |
54 |
55 |
64 |
65 |
80 |
81 |
66 |
67 |
82 |
83 |
96 |
97 |
112 |
113 |
98 |
99 |
114 |
115 |
68 |
69 |
84 |
85 |
70 |
71 |
86 |
87 |
100 |
101 |
116 |
117 |
102 |
103 |
118 |
119 |
8 |
9 |
24 |
25 |
10 |
11 |
26 |
27 |
40 |
41 |
56 |
57 |
42 |
43 |
58 |
59 |
12 |
13 |
28 |
29 |
14 |
15 |
30 |
31 |
44 |
45 |
60 |
61 |
46 |
47 |
62 |
63 |
72 |
73 |
88 |
89 |
74 |
75 |
90 |
91 |
104 |
105 |
120 |
121 |
106 |
107 |
122 |
123 |
76 |
77 |
92 |
93 |
78 |
79 |
94 |
95 |
108 |
109 |
124 |
125 |
110 |
111 |
126 |
127 |
128 |
129 |
144 |
145 |
130 |
131 |
146 |
147 |
160 |
161 |
176 |
177 |
162 |
163 |
178 |
179 |
132 |
133 |
148 |
149 |
134 |
135 |
150 |
151 |
164 |
165 |
180 |
181 |
166 |
167 |
182 |
183 |
192 |
193 |
208 |
209 |
194 |
195 |
210 |
211 |
224 |
225 |
240 |
241 |
226 |
227 |
242 |
243 |
196 |
197 |
212 |
213 |
198 |
199 |
214 |
215 |
228 |
229 |
244 |
245 |
230 |
231 |
246 |
247 |
136 |
137 |
152 |
153 |
138 |
139 |
154 |
155 |
168 |
169 |
184 |
185 |
170 |
171 |
186 |
187 |
140 |
141 |
156 |
157 |
142 |
143 |
158 |
159 |
172 |
173 |
188 |
189 |
174 |
175 |
190 |
191 |
200 |
201 |
216 |
217 |
202 |
203 |
218 |
219 |
232 |
233 |
248 |
249 |
234 |
235 |
250 |
251 |
204 |
205 |
220 |
221 |
206 |
207 |
222 |
223 |
236 |
237 |
252 |
253 |
238 |
239 |
254 |
255 |
转自:http://blog.csdn.net/yuanchao99/article/details/6910023
========================================================================
2、Entropy Slice[HEVC/H.265]
Entropy Slice的概念是Sharp公司提出的,现在改名为lightweighted slice(轻量级slice?),这个提案主要解决的问题是针对H.264 Slice切分的一些缺点:
1. H.264的熵编码以slice为单位,这可能会造成各个slice之间的编码负担不均衡,有的slice负担重,有的则负担轻。理论上多切分一些slice有助于在多核计算机上提高负载均衡能力。
2. 但是过多的Slice切分会造成压缩效率降低。
Entropy Slice允许在一个slice内部再切分成多个EntropySlices,这样熵编解码器可以并行编码或解码,从而提高了并行处理能力。
需要注意的是一个entropy slice不能跨越slice边界,也就是一个slice可以含有多个entropy slice,但是一个entropy slice只能属于一个slice,如下图所示:
在测试中,一个1080p的图像被分为一个slice和32个entropyslice,编码效率损失极小。
在提案中sharp还提出了一个CPU+GPU混合编码的方案,熵编码由多核CPU进行而重建则由GPU进行,可以大幅提高编码速度,如下图所示。
===========================================================================
参考文献:JCTVC-D070
3、fine granularity slice partition(细粒度slice分块边界)[HEVC/H.265]
这个提案是华为,爱立信和MTK提出的。
在HEVC中首次提出了CU的概念,代替以前视频编码标准中MB的概念,CU是可递归的,最大允许的CU大小是64x64,最小允许的CU是8x8。
按照编码器框架,图像首先分为slice,再分为CU,再分为partition。早期的测试模型中slice是以最大CU(LCU)为粒度划分的,如64x64。但是这一划分方式带来以下问题:
1. 同一幅图像中不同的LCU之间差别很大,简单的LCU纹理非常简单,因此编码结果bit数很少,复杂的LCU可能占有很多bit,这对于编码器的码率控制和负载均衡都很不利。
2. 如果减小LCU的大小,比如减为32x32或16x16,则压缩效率会降低很多。
针对这一问题,这些提案提出slice边界划分不以LCU为单位,而是可以以更小的CU为单位,如下图所示:
采用这一方式后,每个slice的大小都可以精确控制,同时解决了码率控制和负载均衡的问题。但是带来的代价是slice边界处理更为复杂。
================================================================
参考文献:JCTVC-E298,JCTVC-E260,JCTVC-E043