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