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