FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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  */
92  NAL_TSA_N = 2,
93  NAL_TSA_R = 3,
106  NAL_VPS = 32,
107  NAL_SPS = 33,
108  NAL_PPS = 34,
109  NAL_AUD = 35,
115 };
116 
117 enum RPSType {
124 };
125 
126 enum SliceType {
127  B_SLICE = 0,
128  P_SLICE = 1,
129  I_SLICE = 2,
130 };
131 
176 };
177 
178 enum PartMode {
182  PART_NxN = 3,
187 };
188 
189 enum PredMode {
193 };
194 
196  PRED_L0 = 0,
199 };
200 
237 };
238 
239 enum SAOType {
243 };
244 
250 };
251 
252 enum ScanType {
256 };
257 
258 typedef struct ShortTermRPS {
263 } ShortTermRPS;
264 
265 typedef struct LongTermRPS {
266  int poc[32];
269 } LongTermRPS;
270 
271 typedef struct RefPicList {
275  int nb_refs;
276 } RefPicList;
277 
278 typedef struct RefPicListTab {
280 } RefPicListTab;
281 
282 typedef struct HEVCWindow {
287 } HEVCWindow;
288 
289 typedef struct VUI {
291 
294 
302 
307 
310 
313 
316  uint32_t vui_time_scale;
320 
330 } VUI;
331 
332 typedef struct PTL {
338 
341 
347 } PTL;
348 
349 typedef struct VPS {
352  int vps_max_sub_layers; ///< vps_max_temporal_layers_minus1 + 1
353 
360  int vps_num_layer_sets; ///< vps_num_layer_sets_minus1 + 1
363  uint32_t vps_time_scale;
365  int vps_num_ticks_poc_diff_one; ///< vps_num_ticks_poc_diff_one_minus1 + 1
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;
379 
380  ///< output (i.e. cropped) values
383 
385 
389 
390  unsigned int log2_max_poc_lsb;
392 
394  struct {
399 
402 
405 
406  unsigned int nb_st_rps;
408 
411 
416 
417  struct {
420  unsigned int log2_min_pcm_cb_size;
421  unsigned int log2_max_pcm_cb_size;
423  } pcm;
426 
427  unsigned int log2_min_cb_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 
436 
437  ///< coded frame dimension in various units
438  int width;
439  int height;
442  int ctb_size;
449 
450  int hshift[3];
451  int vshift[3];
452 
454 } HEVCSPS;
455 
456 typedef struct HEVCPPS {
457  int sps_id; ///< seq_parameter_set_id
458 
460 
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
466 
469 
472 
480 
484 
485  int num_tile_columns; ///< num_tile_columns_minus1 + 1
486  int num_tile_rows; ///< num_tile_rows_minus1 + 1
489 
491 
495  int beta_offset; ///< beta_offset_div2 * 2
496  int tc_offset; ///< tc_offset_div2 * 2
497 
500 
502  int log2_parallel_merge_level; ///< log2_parallel_merge_level_minus2 + 2
505 
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 
533 
535 
540 
541  ///< RPS coded in the slice header itself is stored here
545  unsigned int list_entry_lx[2][32];
546 
550 
551  unsigned int nb_refs[2];
552 
555 
557  uint8_t disable_deblocking_filter_flag; ///< slice_header_disable_deblocking_filter_flag
560 
561  unsigned int collocated_ref_idx;
562 
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 
574  int * offset;
575  int * size;
577 
578  int8_t slice_qp;
579 
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 
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 
609 
611 
612  // Inferred parameters
613  uint8_t intra_split_flag; ///< IntraSplitFlag
614  uint8_t max_trafo_depth; ///< MaxTrafoDepth
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];
628 } MvField;
629 
630 typedef struct NeighbourAvailable {
633  int cand_up;
638 
639 typedef struct PredictionUnit {
640  int mpm_idx;
647 
648 typedef struct TransformTree {
652 
653  // Inferred parameters
655 } TransformTree;
656 
657 typedef struct TransformUnit {
659 
660  // Inferred parameters;
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 {
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 {
694  int poc;
696 
698 
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  */
713 } HEVCFrame;
714 
715 typedef struct HEVCNAL {
718 
719  int size;
720  const uint8_t *data;
721 } HEVCNAL;
722 
723 typedef struct HEVCLocalContext {
726 
728 
732 
733  int8_t qp_y;
734  int8_t curr_qp_y;
735 
737 
751 
755 
756 typedef struct HEVCContext {
757  const AVClass *c; // needed by private avoptions
759 
761 
764 
767 
768  int width;
769  int height;
770 
772 
773  /** 1 if the independent slice segment header was successfully parsed */
775 
781  const HEVCSPS *sps;
786 
789 
790  ///< candidate references for the current frame
792 
797  int temporal_id; ///< temporal_id_plus1 - 1
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;
807 
809 
814  int8_t *qp_y_tab;
818 
820 
821  // CU
824  // PU
826 
827 
828  uint8_t *cbf_luma; // cbf_luma of colocated TU
830 
831  // CTB-level flags affecting loop filter operation
833 
834  /** used on BE to byteswap the lines for checksumming */
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 
846  int wpp_err;
850 
854 
856 
858  int nb_nals;
860 
861  // for checking the frame checksums
862  struct AVMD5 *md5_ctx;
863  uint8_t md5[3][16];
865 
867  int is_nalff; ///< this flag is != 0 if bitstream is encapsulated
868  ///< as a format defined in 14496-15
870 
871  int nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4)
873 
874 } HEVCContext;
875 
877  const HEVCSPS *sps, int is_slice_header);
882 
884  HEVCNAL *nal);
885 
886 /**
887  * Mark all frames in DPB as unused for reference.
888  */
890 
891 /**
892  * Drop all frames currently in DPB.
893  */
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 
902 
903 /**
904  * Construct the reference picture sets for the current frame.
905  */
907 
908 /**
909  * Construct the reference picture list(s) for the current slice.
910  */
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);
923 int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0, int x_cb, int y_cb);
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);
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);
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);
942 
943 /**
944  * Get the number of candidate references for the current frame.
945  */
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  */
955 
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);
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