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