Libav
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
hevc.h
Go to the documentation of this file.
1
/*
2
* HEVC video decoder
3
*
4
* Copyright (C) 2012 - 2013 Guillaume Martres
5
*
6
* This file is part of Libav.
7
*
8
* Libav is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* Libav is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with Libav; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#ifndef AVCODEC_HEVC_H
24
#define AVCODEC_HEVC_H
25
26
#include <stddef.h>
27
#include <stdint.h>
28
29
#include "
libavutil/buffer.h
"
30
#include "
libavutil/md5.h
"
31
32
#include "
avcodec.h
"
33
#include "
cabac.h
"
34
#include "
dsputil.h
"
35
#include "
get_bits.h
"
36
#include "
hevcdsp.h
"
37
#include "
internal.h
"
38
#include "
thread.h
"
39
#include "
videodsp.h
"
40
41
#define MAX_DPB_SIZE 16 // A.4.1
42
#define MAX_REFS 16
43
47
#define MAX_SUB_LAYERS 7
48
#define MAX_VPS_COUNT 16
49
#define MAX_SPS_COUNT 32
50
#define MAX_PPS_COUNT 256
51
#define MAX_SHORT_TERM_RPS_COUNT 64
52
#define MAX_CU_SIZE 128
53
54
//TODO: check if this is really the maximum
55
#define MAX_TRANSFORM_DEPTH 5
56
57
#define MAX_TB_SIZE 32
58
#define MAX_PB_SIZE 64
59
#define MAX_LOG2_CTB_SIZE 6
60
#define MAX_QP 51
61
#define DEFAULT_INTRA_TC_OFFSET 2
62
63
#define HEVC_CONTEXTS 183
64
65
#define MRG_MAX_NUM_CANDS 5
66
67
#define L0 0
68
#define L1 1
69
70
#define EPEL_EXTRA_BEFORE 1
71
#define EPEL_EXTRA_AFTER 2
72
#define EPEL_EXTRA 3
73
74
#define EDGE_EMU_BUFFER_STRIDE 80
75
79
#define SAMPLE(tab, x, y) ((tab)[(y) * s->sps->width + (x)])
80
#define SAMPLE_CTB(tab, x, y) ((tab)[(y) * min_cb_width + (x)])
81
#define SAMPLE_CBF(tab, x, y) ((tab)[((y) & ((1<<log2_trafo_size)-1)) * MAX_CU_SIZE + ((x) & ((1<<log2_trafo_size)-1))])
82
83
#define IS_IDR(s) (s->nal_unit_type == NAL_IDR_W_RADL || s->nal_unit_type == NAL_IDR_N_LP)
84
#define IS_BLA(s) (s->nal_unit_type == NAL_BLA_W_RADL || s->nal_unit_type == NAL_BLA_W_LP || \
85
s->nal_unit_type == NAL_BLA_N_LP)
86
#define IS_IRAP(s) (s->nal_unit_type >= 16 && s->nal_unit_type <= 23)
87
88
#define FFUDIV(a,b) (((a) > 0 ? (a) : (a) - (b) + 1) / (b))
89
#define FFUMOD(a,b) ((a) - (b) * FFUDIV(a,b))
90
94
enum
NALUnitType
{
95
NAL_TRAIL_N
= 0,
96
NAL_TRAIL_R
= 1,
97
NAL_TSA_N
= 2,
98
NAL_TSA_R
= 3,
99
NAL_STSA_N
= 4,
100
NAL_STSA_R
= 5,
101
NAL_RADL_N
= 6,
102
NAL_RADL_R
= 7,
103
NAL_RASL_N
= 8,
104
NAL_RASL_R
= 9,
105
NAL_BLA_W_LP
= 16,
106
NAL_BLA_W_RADL
= 17,
107
NAL_BLA_N_LP
= 18,
108
NAL_IDR_W_RADL
= 19,
109
NAL_IDR_N_LP
= 20,
110
NAL_CRA_NUT
= 21,
111
NAL_VPS
= 32,
112
NAL_SPS
= 33,
113
NAL_PPS
= 34,
114
NAL_AUD
= 35,
115
NAL_EOS_NUT
= 36,
116
NAL_EOB_NUT
= 37,
117
NAL_FD_NUT
= 38,
118
NAL_SEI_PREFIX
= 39,
119
NAL_SEI_SUFFIX
= 40,
120
};
121
122
enum
RPSType
{
123
ST_CURR_BEF
= 0,
124
ST_CURR_AFT
,
125
ST_FOLL
,
126
LT_CURR
,
127
LT_FOLL
,
128
NB_RPS_TYPE
,
129
};
130
131
enum
SliceType
{
132
B_SLICE
= 0,
133
P_SLICE
= 1,
134
I_SLICE
= 2,
135
};
136
137
enum
SyntaxElement
{
138
SAO_MERGE_FLAG
= 0,
139
SAO_TYPE_IDX
,
140
SAO_EO_CLASS
,
141
SAO_BAND_POSITION
,
142
SAO_OFFSET_ABS
,
143
SAO_OFFSET_SIGN
,
144
END_OF_SLICE_FLAG
,
145
SPLIT_CODING_UNIT_FLAG
,
146
CU_TRANSQUANT_BYPASS_FLAG
,
147
SKIP_FLAG
,
148
CU_QP_DELTA
,
149
PRED_MODE_FLAG
,
150
PART_MODE
,
151
PCM_FLAG
,
152
PREV_INTRA_LUMA_PRED_FLAG
,
153
MPM_IDX
,
154
REM_INTRA_LUMA_PRED_MODE
,
155
INTRA_CHROMA_PRED_MODE
,
156
MERGE_FLAG
,
157
MERGE_IDX
,
158
INTER_PRED_IDC
,
159
REF_IDX_L0
,
160
REF_IDX_L1
,
161
ABS_MVD_GREATER0_FLAG
,
162
ABS_MVD_GREATER1_FLAG
,
163
ABS_MVD_MINUS2
,
164
MVD_SIGN_FLAG
,
165
MVP_LX_FLAG
,
166
NO_RESIDUAL_DATA_FLAG
,
167
SPLIT_TRANSFORM_FLAG
,
168
CBF_LUMA
,
169
CBF_CB_CR
,
170
TRANSFORM_SKIP_FLAG
,
171
LAST_SIGNIFICANT_COEFF_X_PREFIX
,
172
LAST_SIGNIFICANT_COEFF_Y_PREFIX
,
173
LAST_SIGNIFICANT_COEFF_X_SUFFIX
,
174
LAST_SIGNIFICANT_COEFF_Y_SUFFIX
,
175
SIGNIFICANT_COEFF_GROUP_FLAG
,
176
SIGNIFICANT_COEFF_FLAG
,
177
COEFF_ABS_LEVEL_GREATER1_FLAG
,
178
COEFF_ABS_LEVEL_GREATER2_FLAG
,
179
COEFF_ABS_LEVEL_REMAINING
,
180
COEFF_SIGN_FLAG
,
181
};
182
183
enum
PartMode
{
184
PART_2Nx2N
= 0,
185
PART_2NxN
= 1,
186
PART_Nx2N
= 2,
187
PART_NxN
= 3,
188
PART_2NxnU
= 4,
189
PART_2NxnD
= 5,
190
PART_nLx2N
= 6,
191
PART_nRx2N
= 7,
192
};
193
194
enum
PredMode
{
195
MODE_INTER
= 0,
196
MODE_INTRA
,
197
MODE_SKIP
,
198
};
199
200
enum
InterPredIdc
{
201
PRED_L0
= 0,
202
PRED_L1
,
203
PRED_BI
,
204
};
205
206
enum
IntraPredMode
{
207
INTRA_PLANAR
= 0,
208
INTRA_DC
,
209
INTRA_ANGULAR_2
,
210
INTRA_ANGULAR_3
,
211
INTRA_ANGULAR_4
,
212
INTRA_ANGULAR_5
,
213
INTRA_ANGULAR_6
,
214
INTRA_ANGULAR_7
,
215
INTRA_ANGULAR_8
,
216
INTRA_ANGULAR_9
,
217
INTRA_ANGULAR_10
,
218
INTRA_ANGULAR_11
,
219
INTRA_ANGULAR_12
,
220
INTRA_ANGULAR_13
,
221
INTRA_ANGULAR_14
,
222
INTRA_ANGULAR_15
,
223
INTRA_ANGULAR_16
,
224
INTRA_ANGULAR_17
,
225
INTRA_ANGULAR_18
,
226
INTRA_ANGULAR_19
,
227
INTRA_ANGULAR_20
,
228
INTRA_ANGULAR_21
,
229
INTRA_ANGULAR_22
,
230
INTRA_ANGULAR_23
,
231
INTRA_ANGULAR_24
,
232
INTRA_ANGULAR_25
,
233
INTRA_ANGULAR_26
,
234
INTRA_ANGULAR_27
,
235
INTRA_ANGULAR_28
,
236
INTRA_ANGULAR_29
,
237
INTRA_ANGULAR_30
,
238
INTRA_ANGULAR_31
,
239
INTRA_ANGULAR_32
,
240
INTRA_ANGULAR_33
,
241
INTRA_ANGULAR_34
,
242
};
243
244
enum
SAOType
{
245
SAO_NOT_APPLIED
= 0,
246
SAO_BAND
,
247
SAO_EDGE
,
248
};
249
250
enum
SAOEOClass
{
251
SAO_EO_HORIZ
= 0,
252
SAO_EO_VERT
,
253
SAO_EO_135D
,
254
SAO_EO_45D
,
255
};
256
257
enum
ScanType
{
258
SCAN_DIAG
= 0,
259
SCAN_HORIZ
,
260
SCAN_VERT
,
261
};
262
263
typedef
struct
ShortTermRPS
{
264
unsigned
int
num_negative_pics
;
265
int
num_delta_pocs
;
266
int32_t
delta_poc
[32];
267
uint8_t
used
[32];
268
}
ShortTermRPS
;
269
270
typedef
struct
LongTermRPS
{
271
int
poc
[32];
272
uint8_t
used
[32];
273
uint8_t
nb_refs
;
274
}
LongTermRPS
;
275
276
typedef
struct
RefPicList
{
277
struct
HEVCFrame
*
ref
[
MAX_REFS
];
278
int
list
[
MAX_REFS
];
279
int
isLongTerm
[
MAX_REFS
];
280
int
nb_refs
;
281
}
RefPicList
;
282
283
typedef
struct
RefPicListTab
{
284
RefPicList
refPicList
[2];
285
}
RefPicListTab
;
286
287
typedef
struct
HEVCWindow
{
288
int
left_offset
;
289
int
right_offset
;
290
int
top_offset
;
291
int
bottom_offset
;
292
}
HEVCWindow
;
293
294
typedef
struct
VUI
{
295
AVRational
sar
;
296
297
int
overscan_info_present_flag
;
298
int
overscan_appropriate_flag
;
299
300
int
video_signal_type_present_flag
;
301
int
video_format
;
302
int
video_full_range_flag
;
303
int
colour_description_present_flag
;
304
uint8_t
colour_primaries
;
305
uint8_t
transfer_characteristic
;
306
uint8_t
matrix_coeffs
;
307
308
int
chroma_loc_info_present_flag
;
309
int
chroma_sample_loc_type_top_field
;
310
int
chroma_sample_loc_type_bottom_field
;
311
int
neutra_chroma_indication_flag
;
312
313
int
field_seq_flag
;
314
int
frame_field_info_present_flag
;
315
316
int
default_display_window_flag
;
317
HEVCWindow
def_disp_win
;
318
319
int
vui_timing_info_present_flag
;
320
uint32_t
vui_num_units_in_tick
;
321
uint32_t
vui_time_scale
;
322
int
vui_poc_proportional_to_timing_flag
;
323
int
vui_num_ticks_poc_diff_one_minus1
;
324
int
vui_hrd_parameters_present_flag
;
325
326
int
bitstream_restriction_flag
;
327
int
tiles_fixed_structure_flag
;
328
int
motion_vectors_over_pic_boundaries_flag
;
329
int
restricted_ref_pic_lists_flag
;
330
int
min_spatial_segmentation_idc
;
331
int
max_bytes_per_pic_denom
;
332
int
max_bits_per_min_cu_denom
;
333
int
log2_max_mv_length_horizontal
;
334
int
log2_max_mv_length_vertical
;
335
}
VUI
;
336
337
typedef
struct
PTLCommon
{
338
uint8_t
profile_space
;
339
uint8_t
tier_flag
;
340
uint8_t
profile_idc
;
341
uint8_t
profile_compatibility_flag
[32];
342
uint8_t
level_idc
;
343
uint8_t
progressive_source_flag
;
344
uint8_t
interlaced_source_flag
;
345
uint8_t
non_packed_constraint_flag
;
346
uint8_t
frame_only_constraint_flag
;
347
}
PTLCommon
;
348
349
typedef
struct
PTL
{
350
PTLCommon
general_ptl
;
351
PTLCommon
sub_layer_ptl
[
MAX_SUB_LAYERS
];
352
353
uint8_t
sub_layer_profile_present_flag
[
MAX_SUB_LAYERS
];
354
uint8_t
sub_layer_level_present_flag
[
MAX_SUB_LAYERS
];
355
}
PTL
;
356
357
typedef
struct
HEVCVPS
{
358
uint8_t
vps_temporal_id_nesting_flag
;
359
int
vps_max_layers
;
360
int
vps_max_sub_layers
;
361
362
PTL
ptl
;
363
int
vps_sub_layer_ordering_info_present_flag
;
364
unsigned
int
vps_max_dec_pic_buffering
[
MAX_SUB_LAYERS
];
365
unsigned
int
vps_num_reorder_pics
[
MAX_SUB_LAYERS
];
366
unsigned
int
vps_max_latency_increase
[
MAX_SUB_LAYERS
];
367
int
vps_max_layer_id
;
368
int
vps_num_layer_sets
;
369
uint8_t
vps_timing_info_present_flag
;
370
uint32_t
vps_num_units_in_tick
;
371
uint32_t
vps_time_scale
;
372
uint8_t
vps_poc_proportional_to_timing_flag
;
373
int
vps_num_ticks_poc_diff_one
;
374
int
vps_num_hrd_parameters
;
375
}
HEVCVPS
;
376
377
typedef
struct
ScalingList
{
378
/* This is a little wasteful, since sizeID 0 only needs 8 coeffs,
379
* and size ID 3 only has 2 arrays, not 6. */
380
uint8_t
sl
[4][6][64];
381
uint8_t
sl_dc
[2][6];
382
}
ScalingList
;
383
384
typedef
struct
HEVCSPS
{
385
int
vps_id
;
386
int
chroma_format_idc
;
387
uint8_t
separate_colour_plane_flag
;
388
390
int
output_width
,
output_height
;
391
HEVCWindow
output_window
;
392
393
HEVCWindow
pic_conf_win
;
394
395
int
bit_depth
;
396
int
pixel_shift
;
397
enum
AVPixelFormat
pix_fmt
;
398
399
unsigned
int
log2_max_poc_lsb
;
400
int
pcm_enabled_flag
;
401
402
int
max_sub_layers
;
403
struct
{
404
int
max_dec_pic_buffering
;
405
int
num_reorder_pics
;
406
int
max_latency_increase
;
407
}
temporal_layer
[
MAX_SUB_LAYERS
];
408
409
VUI
vui
;
410
PTL
ptl
;
411
412
uint8_t
scaling_list_enable_flag
;
413
ScalingList
scaling_list
;
414
415
unsigned
int
nb_st_rps
;
416
ShortTermRPS
st_rps
[
MAX_SHORT_TERM_RPS_COUNT
];
417
418
uint8_t
amp_enabled_flag
;
419
uint8_t
sao_enabled
;
420
421
uint8_t
long_term_ref_pics_present_flag
;
422
uint16_t
lt_ref_pic_poc_lsb_sps
[32];
423
uint8_t
used_by_curr_pic_lt_sps_flag
[32];
424
uint8_t
num_long_term_ref_pics_sps
;
425
426
struct
{
427
uint8_t
bit_depth
;
428
uint8_t
bit_depth_chroma
;
429
unsigned
int
log2_min_pcm_cb_size
;
430
unsigned
int
log2_max_pcm_cb_size
;
431
uint8_t
loop_filter_disable_flag
;
432
}
pcm
;
433
uint8_t
sps_temporal_mvp_enabled_flag
;
434
uint8_t
sps_strong_intra_smoothing_enable_flag
;
435
436
unsigned
int
log2_min_cb_size
;
437
unsigned
int
log2_diff_max_min_coding_block_size
;
438
unsigned
int
log2_min_tb_size
;
439
unsigned
int
log2_max_trafo_size
;
440
unsigned
int
log2_ctb_size
;
441
unsigned
int
log2_min_pu_size
;
442
443
int
max_transform_hierarchy_depth_inter
;
444
int
max_transform_hierarchy_depth_intra
;
445
447
int
width
;
448
int
height
;
449
int
ctb_width
;
450
int
ctb_height
;
451
int
ctb_size
;
452
int
min_cb_width
;
453
int
min_cb_height
;
454
int
min_tb_width
;
455
int
min_tb_height
;
456
int
min_pu_width
;
457
int
min_pu_height
;
458
459
int
hshift
[3];
460
int
vshift
[3];
461
462
int
qp_bd_offset
;
463
}
HEVCSPS
;
464
465
typedef
struct
HEVCPPS
{
466
unsigned
int
sps_id
;
467
468
uint8_t
sign_data_hiding_flag
;
469
470
uint8_t
cabac_init_present_flag
;
471
472
int
num_ref_idx_l0_default_active
;
473
int
num_ref_idx_l1_default_active
;
474
int
pic_init_qp_minus26
;
475
476
uint8_t
constrained_intra_pred_flag
;
477
uint8_t
transform_skip_enabled_flag
;
478
479
uint8_t
cu_qp_delta_enabled_flag
;
480
int
diff_cu_qp_delta_depth
;
481
482
int
cb_qp_offset
;
483
int
cr_qp_offset
;
484
uint8_t
pic_slice_level_chroma_qp_offsets_present_flag
;
485
uint8_t
weighted_pred_flag
;
486
uint8_t
weighted_bipred_flag
;
487
uint8_t
output_flag_present_flag
;
488
uint8_t
transquant_bypass_enable_flag
;
489
490
uint8_t
dependent_slice_segments_enabled_flag
;
491
uint8_t
tiles_enabled_flag
;
492
uint8_t
entropy_coding_sync_enabled_flag
;
493
494
int
num_tile_columns
;
495
int
num_tile_rows
;
496
uint8_t
uniform_spacing_flag
;
497
uint8_t
loop_filter_across_tiles_enabled_flag
;
498
499
uint8_t
seq_loop_filter_across_slices_enabled_flag
;
500
501
uint8_t
deblocking_filter_control_present_flag
;
502
uint8_t
deblocking_filter_override_enabled_flag
;
503
uint8_t
disable_dbf
;
504
int
beta_offset
;
505
int
tc_offset
;
506
507
uint8_t
scaling_list_data_present_flag
;
508
ScalingList
scaling_list
;
509
510
uint8_t
lists_modification_present_flag
;
511
int
log2_parallel_merge_level
;
512
int
num_extra_slice_header_bits
;
513
uint8_t
slice_header_extension_present_flag
;
514
515
// Inferred parameters
516
unsigned
int
*
column_width
;
517
unsigned
int
*
row_height
;
518
unsigned
int
*
col_bd
;
519
unsigned
int
*
row_bd
;
520
int
*
col_idxX
;
521
522
int
*
ctb_addr_rs_to_ts
;
523
int
*
ctb_addr_ts_to_rs
;
524
int
*
tile_id
;
525
int
*
tile_pos_rs
;
526
int
*
min_cb_addr_zs
;
527
int
*
min_tb_addr_zs
;
528
}
HEVCPPS
;
529
530
typedef
struct
SliceHeader
{
531
unsigned
int
pps_id
;
532
534
unsigned
int
slice_segment_addr
;
536
unsigned
int
slice_addr
;
537
538
enum
SliceType
slice_type
;
539
540
int
pic_order_cnt_lsb
;
541
542
uint8_t
first_slice_in_pic_flag
;
543
uint8_t
dependent_slice_segment_flag
;
544
uint8_t
pic_output_flag
;
545
uint8_t
colour_plane_id
;
546
548
ShortTermRPS
slice_rps
;
549
const
ShortTermRPS
*
short_term_rps
;
550
LongTermRPS
long_term_rps
;
551
unsigned
int
list_entry_lx
[2][32];
552
553
uint8_t
rpl_modification_flag
[2];
554
uint8_t
no_output_of_prior_pics_flag
;
555
uint8_t
slice_temporal_mvp_enabled_flag
;
556
557
unsigned
int
nb_refs
[2];
558
559
uint8_t
slice_sample_adaptive_offset_flag
[3];
560
uint8_t
mvd_l1_zero_flag
;
561
562
uint8_t
cabac_init_flag
;
563
uint8_t
disable_deblocking_filter_flag
;
564
uint8_t
slice_loop_filter_across_slices_enabled_flag
;
565
uint8_t
collocated_list
;
566
567
unsigned
int
collocated_ref_idx
;
568
569
int
slice_qp_delta
;
570
int
slice_cb_qp_offset
;
571
int
slice_cr_qp_offset
;
572
573
int
beta_offset
;
574
int
tc_offset
;
575
576
unsigned
int
max_num_merge_cand
;
577
578
int
num_entry_point_offsets
;
579
580
int8_t
slice_qp
;
581
582
uint8_t
luma_log2_weight_denom
;
583
int16_t
chroma_log2_weight_denom
;
584
585
int16_t
luma_weight_l0
[16];
586
int16_t
chroma_weight_l0
[16][2];
587
int16_t
chroma_weight_l1
[16][2];
588
int16_t
luma_weight_l1
[16];
589
590
int16_t
luma_offset_l0
[16];
591
int16_t
chroma_offset_l0
[16][2];
592
593
int16_t
luma_offset_l1
[16];
594
int16_t
chroma_offset_l1
[16][2];
595
596
int
slice_ctb_addr_rs
;
597
}
SliceHeader
;
598
599
typedef
struct
CodingTree
{
600
int
depth
;
601
}
CodingTree
;
602
603
typedef
struct
CodingUnit
{
604
int
x
;
605
int
y
;
606
607
enum
PredMode
pred_mode
;
608
enum
PartMode
part_mode
;
609
610
uint8_t
rqt_root_cbf
;
611
612
uint8_t
pcm_flag
;
613
614
// Inferred parameters
615
uint8_t
intra_split_flag
;
616
uint8_t
max_trafo_depth
;
617
uint8_t
cu_transquant_bypass_flag
;
618
}
CodingUnit
;
619
620
typedef
struct
Mv
{
621
int16_t
x
;
622
int16_t
y
;
623
}
Mv
;
624
625
typedef
struct
MvField
{
626
Mv
mv
[2];
627
int8_t
ref_idx
[2];
628
int8_t
pred_flag
[2];
629
uint8_t
is_intra
;
630
}
MvField
;
631
632
typedef
struct
NeighbourAvailable
{
633
int
cand_bottom_left
;
634
int
cand_left
;
635
int
cand_up
;
636
int
cand_up_left
;
637
int
cand_up_right
;
638
int
cand_up_right_sap
;
639
}
NeighbourAvailable
;
640
641
typedef
struct
PredictionUnit
{
642
int
mpm_idx
;
643
int
rem_intra_luma_pred_mode
;
644
uint8_t
intra_pred_mode
[4];
645
Mv
mvd
;
646
uint8_t
merge_flag
;
647
uint8_t
intra_pred_mode_c
;
648
}
PredictionUnit
;
649
650
typedef
struct
TransformTree
{
651
uint8_t
cbf_cb
[
MAX_TRANSFORM_DEPTH
][
MAX_CU_SIZE
*
MAX_CU_SIZE
];
652
uint8_t
cbf_cr
[
MAX_TRANSFORM_DEPTH
][
MAX_CU_SIZE
*
MAX_CU_SIZE
];
653
uint8_t
cbf_luma
;
654
655
// Inferred parameters
656
uint8_t
inter_split_flag
;
657
}
TransformTree
;
658
659
typedef
struct
TransformUnit
{
660
int
cu_qp_delta
;
661
662
// Inferred parameters;
663
int
cur_intra_pred_mode
;
664
uint8_t
is_cu_qp_delta_coded
;
665
}
TransformUnit
;
666
667
typedef
struct
DBParams
{
668
int
beta_offset
;
669
int
tc_offset
;
670
}
DBParams
;
671
672
#define HEVC_FRAME_FLAG_OUTPUT (1 << 0)
673
#define HEVC_FRAME_FLAG_SHORT_REF (1 << 1)
674
#define HEVC_FRAME_FLAG_LONG_REF (1 << 2)
675
676
typedef
struct
HEVCFrame
{
677
AVFrame
*
frame
;
678
ThreadFrame
tf
;
679
MvField
*
tab_mvf
;
680
RefPicList
*
refPicList
;
681
RefPicListTab
**
rpl_tab
;
682
int
ctb_count
;
683
int
poc
;
684
struct
HEVCFrame
*
collocated_ref
;
685
686
HEVCWindow
window
;
687
688
AVBufferRef
*
tab_mvf_buf
;
689
AVBufferRef
*
rpl_tab_buf
;
690
AVBufferRef
*
rpl_buf
;
691
696
uint16_t
sequence
;
697
701
uint8_t
flags
;
702
}
HEVCFrame
;
703
704
typedef
struct
HEVCNAL
{
705
uint8_t
*
rbsp_buffer
;
706
int
rbsp_buffer_size
;
707
708
int
size
;
709
const
uint8_t
*
data
;
710
}
HEVCNAL
;
711
712
struct
HEVCContext
;
713
714
typedef
struct
HEVCPredContext
{
715
void
(*
intra_pred
)(
struct
HEVCContext
*s,
int
x0,
int
y0,
716
int
log2_size,
int
c_idx);
717
718
void
(*
pred_planar
[4])(
uint8_t
*src,
const
uint8_t
*top,
719
const
uint8_t
*left, ptrdiff_t
stride
);
720
void
(*
pred_dc
)(
uint8_t
*src,
const
uint8_t
*top,
const
uint8_t
*left,
721
ptrdiff_t
stride
,
int
log2_size,
int
c_idx);
722
void
(*
pred_angular
[4])(
uint8_t
*src,
const
uint8_t
*top,
723
const
uint8_t
*left, ptrdiff_t
stride
,
724
int
c_idx,
int
mode);
725
}
HEVCPredContext
;
726
727
typedef
struct
HEVCLocalContext
{
728
DECLARE_ALIGNED
(16, int16_t,
mc_buffer
[(
MAX_PB_SIZE
+ 7) *
MAX_PB_SIZE
]);
729
uint8_t
cabac_state
[
HEVC_CONTEXTS
];
730
731
uint8_t
first_qp_group
;
732
733
GetBitContext
gb
;
734
CABACContext
cc
;
735
TransformTree
tt
;
736
737
int8_t
qp_y
;
738
int8_t
curr_qp_y
;
739
740
TransformUnit
tu
;
741
742
uint8_t
ctb_left_flag
;
743
uint8_t
ctb_up_flag
;
744
uint8_t
ctb_up_right_flag
;
745
uint8_t
ctb_up_left_flag
;
746
int
start_of_tiles_x
;
747
int
end_of_tiles_x
;
748
int
end_of_tiles_y
;
749
/* +7 is for subpixel interpolation, *2 for high bit depths */
750
DECLARE_ALIGNED
(32,
uint8_t
,
edge_emu_buffer
)[(
MAX_PB_SIZE
+ 7) *
EDGE_EMU_BUFFER_STRIDE
* 2];
751
CodingTree
ct
;
752
CodingUnit
cu
;
753
PredictionUnit
pu
;
754
NeighbourAvailable
na
;
755
756
uint8_t
slice_or_tiles_left_boundary
;
757
uint8_t
slice_or_tiles_up_boundary
;
758
}
HEVCLocalContext
;
759
760
typedef
struct
HEVCContext
{
761
const
AVClass
*
c
;
// needed by private avoptions
762
AVCodecContext
*
avctx
;
763
764
HEVCLocalContext
HEVClc
;
765
766
uint8_t
cabac_state
[
HEVC_CONTEXTS
];
767
769
uint8_t
slice_initialized
;
770
771
AVFrame
*
frame
;
772
AVFrame
*
sao_frame
;
773
AVFrame
*
tmp_frame
;
774
AVFrame
*
output_frame
;
775
776
const
HEVCVPS
*
vps
;
777
const
HEVCSPS
*
sps
;
778
const
HEVCPPS
*
pps
;
779
AVBufferRef
*
vps_list
[
MAX_VPS_COUNT
];
780
AVBufferRef
*
sps_list
[
MAX_SPS_COUNT
];
781
AVBufferRef
*
pps_list
[
MAX_PPS_COUNT
];
782
783
AVBufferPool
*
tab_mvf_pool
;
784
AVBufferPool
*
rpl_tab_pool
;
785
787
RefPicList
rps
[5];
788
789
SliceHeader
sh
;
790
SAOParams
*
sao
;
791
DBParams
*
deblock
;
792
enum
NALUnitType
nal_unit_type
;
793
int
temporal_id
;
794
HEVCFrame
*
ref
;
795
HEVCFrame
DPB
[32];
796
int
poc
;
797
int
pocTid0
;
798
int
slice_idx
;
799
int
eos
;
800
int
max_ra
;
801
int
bs_width
;
802
int
bs_height
;
803
804
int
is_decoded
;
805
806
HEVCPredContext
hpc
;
807
HEVCDSPContext
hevcdsp
;
808
VideoDSPContext
vdsp
;
809
DSPContext
dsp
;
810
int8_t *
qp_y_tab
;
811
uint8_t
*
split_cu_flag
;
812
uint8_t
*
horizontal_bs
;
813
uint8_t
*
vertical_bs
;
814
815
int32_t
*
tab_slice_address
;
816
817
// CU
818
uint8_t
*
skip_flag
;
819
uint8_t
*
tab_ct_depth
;
820
// PU
821
uint8_t
*
tab_ipm
;
822
823
uint8_t
*
cbf_luma
;
// cbf_luma of colocated TU
824
uint8_t
*
is_pcm
;
825
826
// CTB-level flags affecting loop filter operation
827
uint8_t
*
filter_slice_edges
;
828
830
uint8_t
*
checksum_buf
;
831
int
checksum_buf_size
;
832
837
uint16_t
seq_decode
;
838
uint16_t
seq_output
;
839
840
HEVCNAL
*
nals
;
841
int
nb_nals
;
842
int
nals_allocated
;
843
// type of the first VCL NAL of the current frame
844
enum
NALUnitType
first_nal_type
;
845
846
// for checking the frame checksums
847
struct
AVMD5
*
md5_ctx
;
848
uint8_t
md5
[3][16];
849
uint8_t
is_md5
;
850
851
uint8_t
context_initialized
;
852
uint8_t
is_nalff
;
853
int
apply_defdispwin
;
855
856
int
nal_length_size
;
857
int
nuh_layer_id
;
858
860
int
sei_frame_packing_present
;
861
int
frame_packing_arrangement_type
;
862
int
content_interpretation_type
;
863
int
quincunx_subsampling
;
864
}
HEVCContext
;
865
866
int
ff_hevc_decode_short_term_rps
(
HEVCContext
*s,
ShortTermRPS
*rps,
867
const
HEVCSPS
*sps,
int
is_slice_header);
868
int
ff_hevc_decode_nal_vps
(
HEVCContext
*s);
869
int
ff_hevc_decode_nal_sps
(
HEVCContext
*s);
870
int
ff_hevc_decode_nal_pps
(
HEVCContext
*s);
871
int
ff_hevc_decode_nal_sei
(
HEVCContext
*s);
872
876
void
ff_hevc_clear_refs
(
HEVCContext
*s);
877
881
void
ff_hevc_flush_dpb
(
HEVCContext
*s);
882
886
int
ff_hevc_compute_poc
(
HEVCContext
*s,
int
poc_lsb);
887
888
RefPicList
*
ff_hevc_get_ref_list
(
HEVCContext
*s,
HEVCFrame
*frame,
889
int
x0,
int
y0);
890
894
int
ff_hevc_frame_rps
(
HEVCContext
*s);
895
899
int
ff_hevc_slice_rpl
(
HEVCContext
*s);
900
901
void
ff_hevc_save_states
(
HEVCContext
*s,
int
ctb_addr_ts);
902
void
ff_hevc_cabac_init
(
HEVCContext
*s,
int
ctb_addr_ts);
903
int
ff_hevc_sao_merge_flag_decode
(
HEVCContext
*s);
904
int
ff_hevc_sao_type_idx_decode
(
HEVCContext
*s);
905
int
ff_hevc_sao_band_position_decode
(
HEVCContext
*s);
906
int
ff_hevc_sao_offset_abs_decode
(
HEVCContext
*s);
907
int
ff_hevc_sao_offset_sign_decode
(
HEVCContext
*s);
908
int
ff_hevc_sao_eo_class_decode
(
HEVCContext
*s);
909
int
ff_hevc_end_of_slice_flag_decode
(
HEVCContext
*s);
910
int
ff_hevc_cu_transquant_bypass_flag_decode
(
HEVCContext
*s);
911
int
ff_hevc_skip_flag_decode
(
HEVCContext
*s,
int
x0,
int
y0,
912
int
x_cb,
int
y_cb);
913
int
ff_hevc_pred_mode_decode
(
HEVCContext
*s);
914
int
ff_hevc_split_coding_unit_flag_decode
(
HEVCContext
*s,
int
ct_depth,
915
int
x0,
int
y0);
916
int
ff_hevc_part_mode_decode
(
HEVCContext
*s,
int
log2_cb_size);
917
int
ff_hevc_pcm_flag_decode
(
HEVCContext
*s);
918
int
ff_hevc_prev_intra_luma_pred_flag_decode
(
HEVCContext
*s);
919
int
ff_hevc_mpm_idx_decode
(
HEVCContext
*s);
920
int
ff_hevc_rem_intra_luma_pred_mode_decode
(
HEVCContext
*s);
921
int
ff_hevc_intra_chroma_pred_mode_decode
(
HEVCContext
*s);
922
int
ff_hevc_merge_idx_decode
(
HEVCContext
*s);
923
int
ff_hevc_merge_flag_decode
(
HEVCContext
*s);
924
int
ff_hevc_inter_pred_idc_decode
(
HEVCContext
*s,
int
nPbW,
int
nPbH);
925
int
ff_hevc_ref_idx_lx_decode
(
HEVCContext
*s,
int
num_ref_idx_lx);
926
int
ff_hevc_mvp_lx_flag_decode
(
HEVCContext
*s);
927
int
ff_hevc_no_residual_syntax_flag_decode
(
HEVCContext
*s);
928
int
ff_hevc_abs_mvd_greater0_flag_decode
(
HEVCContext
*s);
929
int
ff_hevc_abs_mvd_greater1_flag_decode
(
HEVCContext
*s);
930
int
ff_hevc_mvd_decode
(
HEVCContext
*s);
931
int
ff_hevc_mvd_sign_flag_decode
(
HEVCContext
*s);
932
int
ff_hevc_split_transform_flag_decode
(
HEVCContext
*s,
int
log2_trafo_size);
933
int
ff_hevc_cbf_cb_cr_decode
(
HEVCContext
*s,
int
trafo_depth);
934
int
ff_hevc_cbf_luma_decode
(
HEVCContext
*s,
int
trafo_depth);
935
int
ff_hevc_transform_skip_flag_decode
(
HEVCContext
*s,
int
c_idx);
936
int
ff_hevc_last_significant_coeff_x_prefix_decode
(
HEVCContext
*s,
int
c_idx,
937
int
log2_size);
938
int
ff_hevc_last_significant_coeff_y_prefix_decode
(
HEVCContext
*s,
int
c_idx,
939
int
log2_size);
940
int
ff_hevc_last_significant_coeff_suffix_decode
(
HEVCContext
*s,
941
int
last_significant_coeff_prefix);
942
int
ff_hevc_significant_coeff_group_flag_decode
(
HEVCContext
*s,
int
c_idx,
943
int
ctx_cg);
944
int
ff_hevc_significant_coeff_flag_decode
(
HEVCContext
*s,
int
c_idx,
int
x_c,
945
int
y_c,
int
log2_trafo_size,
946
int
scan_idx,
int
prev_sig);
947
int
ff_hevc_coeff_abs_level_greater1_flag_decode
(
HEVCContext
*s,
int
c_idx,
948
int
ctx_set);
949
int
ff_hevc_coeff_abs_level_greater2_flag_decode
(
HEVCContext
*s,
int
c_idx,
950
int
inc);
951
int
ff_hevc_coeff_abs_level_remaining
(
HEVCContext
*s,
int
base_level,
952
int
rc_rice_param);
953
int
ff_hevc_coeff_sign_flag
(
HEVCContext
*s,
uint8_t
nb);
954
958
int
ff_hevc_frame_nb_refs
(
HEVCContext
*s);
959
960
int
ff_hevc_set_new_ref
(
HEVCContext
*s,
AVFrame
**frame,
int
poc);
961
966
int
ff_hevc_output_frame
(
HEVCContext
*s,
AVFrame
*frame,
int
flush
);
967
968
void
ff_hevc_unref_frame
(
HEVCContext
*s,
HEVCFrame
*frame,
int
flags
);
969
970
void
ff_hevc_set_neighbour_available
(
HEVCContext
*s,
int
x0,
int
y0,
971
int
nPbW,
int
nPbH);
972
void
ff_hevc_luma_mv_merge_mode
(
HEVCContext
*s,
int
x0,
int
y0,
973
int
nPbW,
int
nPbH,
int
log2_cb_size,
974
int
part_idx,
int
merge_idx,
MvField
*
mv
);
975
void
ff_hevc_luma_mv_mvp_mode
(
HEVCContext
*s,
int
x0,
int
y0,
976
int
nPbW,
int
nPbH,
int
log2_cb_size,
977
int
part_idx,
int
merge_idx,
978
MvField
*
mv
,
int
mvp_lx_flag,
int
LX);
979
void
ff_hevc_set_qPy
(
HEVCContext
*s,
int
xC,
int
yC,
int
xBase,
int
yBase,
980
int
log2_cb_size);
981
void
ff_hevc_deblocking_boundary_strengths
(
HEVCContext
*s,
int
x0,
int
y0,
982
int
log2_trafo_size,
983
int
slice_or_tiles_up_boundary,
984
int
slice_or_tiles_left_boundary);
985
int
ff_hevc_cu_qp_delta_sign_flag
(
HEVCContext
*s);
986
int
ff_hevc_cu_qp_delta_abs
(
HEVCContext
*s);
987
void
ff_hevc_hls_filter
(
HEVCContext
*s,
int
x,
int
y);
988
void
ff_hevc_hls_filters
(
HEVCContext
*s,
int
x_ctb,
int
y_ctb,
int
ctb_size);
989
990
void
ff_hevc_pps_free
(
HEVCPPS
**ppps);
991
992
void
ff_hevc_pred_init
(
HEVCPredContext
*hpc,
int
bit_depth);
993
994
extern
const
uint8_t
ff_hevc_qpel_extra_before
[4];
995
extern
const
uint8_t
ff_hevc_qpel_extra_after
[4];
996
extern
const
uint8_t
ff_hevc_qpel_extra
[4];
997
998
extern
const
uint8_t
ff_hevc_diag_scan4x4_x
[16];
999
extern
const
uint8_t
ff_hevc_diag_scan4x4_y
[16];
1000
extern
const
uint8_t
ff_hevc_diag_scan8x8_x
[64];
1001
extern
const
uint8_t
ff_hevc_diag_scan8x8_y
[64];
1002
1003
#endif
/* AVCODEC_HEVC_H */
Generated on Tue Mar 1 2016 21:14:34 for Libav by
1.8.4