FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions | Variables
hevc_cabac.c File Reference
#include "libavutil/attributes.h"
#include "libavutil/common.h"
#include "cabac_functions.h"
#include "hevc.h"

Go to the source code of this file.

Macros

#define CABAC_MAX_BIN   31
 
#define CNU   154
 
#define GET_CABAC(ctx)   get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx])
 
#define GET_COORD(offset, n)
 

Functions

void ff_hevc_save_states (HEVCContext *s, int ctb_addr_ts)
 
static void load_states (HEVCContext *s)
 
static void cabac_reinit (HEVCLocalContext *lc)
 
static void cabac_init_decoder (HEVCContext *s)
 
static void cabac_init_state (HEVCContext *s)
 
void ff_hevc_cabac_init (HEVCContext *s, int ctb_addr_ts)
 
int ff_hevc_sao_merge_flag_decode (HEVCContext *s)
 
int ff_hevc_sao_type_idx_decode (HEVCContext *s)
 
int ff_hevc_sao_band_position_decode (HEVCContext *s)
 
int ff_hevc_sao_offset_abs_decode (HEVCContext *s)
 
int ff_hevc_sao_offset_sign_decode (HEVCContext *s)
 
int ff_hevc_sao_eo_class_decode (HEVCContext *s)
 
int ff_hevc_end_of_slice_flag_decode (HEVCContext *s)
 
int ff_hevc_cu_transquant_bypass_flag_decode (HEVCContext *s)
 
int ff_hevc_skip_flag_decode (HEVCContext *s, int x0, int y0, int x_cb, int y_cb)
 
int ff_hevc_cu_qp_delta_abs (HEVCContext *s)
 
int ff_hevc_cu_qp_delta_sign_flag (HEVCContext *s)
 
int ff_hevc_cu_chroma_qp_offset_flag (HEVCContext *s)
 
int ff_hevc_cu_chroma_qp_offset_idx (HEVCContext *s)
 
int ff_hevc_pred_mode_decode (HEVCContext *s)
 
int ff_hevc_split_coding_unit_flag_decode (HEVCContext *s, int ct_depth, int x0, int y0)
 
int ff_hevc_part_mode_decode (HEVCContext *s, int log2_cb_size)
 
int ff_hevc_pcm_flag_decode (HEVCContext *s)
 
int ff_hevc_prev_intra_luma_pred_flag_decode (HEVCContext *s)
 
int ff_hevc_mpm_idx_decode (HEVCContext *s)
 
int ff_hevc_rem_intra_luma_pred_mode_decode (HEVCContext *s)
 
int ff_hevc_intra_chroma_pred_mode_decode (HEVCContext *s)
 
int ff_hevc_merge_idx_decode (HEVCContext *s)
 
int ff_hevc_merge_flag_decode (HEVCContext *s)
 
int ff_hevc_inter_pred_idc_decode (HEVCContext *s, int nPbW, int nPbH)
 
int ff_hevc_ref_idx_lx_decode (HEVCContext *s, int num_ref_idx_lx)
 
int ff_hevc_mvp_lx_flag_decode (HEVCContext *s)
 
int ff_hevc_no_residual_syntax_flag_decode (HEVCContext *s)
 
static av_always_inline int abs_mvd_greater0_flag_decode (HEVCContext *s)
 
static av_always_inline int abs_mvd_greater1_flag_decode (HEVCContext *s)
 
static av_always_inline int mvd_decode (HEVCContext *s)
 
static av_always_inline int mvd_sign_flag_decode (HEVCContext *s)
 
int ff_hevc_split_transform_flag_decode (HEVCContext *s, int log2_trafo_size)
 
int ff_hevc_cbf_cb_cr_decode (HEVCContext *s, int trafo_depth)
 
int ff_hevc_cbf_luma_decode (HEVCContext *s, int trafo_depth)
 
static int ff_hevc_transform_skip_flag_decode (HEVCContext *s, int c_idx)
 
static int explicit_rdpcm_flag_decode (HEVCContext *s, int c_idx)
 
static int explicit_rdpcm_dir_flag_decode (HEVCContext *s, int c_idx)
 
int ff_hevc_log2_res_scale_abs (HEVCContext *s, int idx)
 
int ff_hevc_res_scale_sign_flag (HEVCContext *s, int idx)
 
static av_always_inline void last_significant_coeff_xy_prefix_decode (HEVCContext *s, int c_idx, int log2_size, int *last_scx_prefix, int *last_scy_prefix)
 
static av_always_inline int last_significant_coeff_suffix_decode (HEVCContext *s, int last_significant_coeff_prefix)
 
static av_always_inline int significant_coeff_group_flag_decode (HEVCContext *s, int c_idx, int ctx_cg)
 
static av_always_inline int significant_coeff_flag_decode (HEVCContext *s, int x_c, int y_c, int offset, const uint8_t *ctx_idx_map)
 
static av_always_inline int significant_coeff_flag_decode_0 (HEVCContext *s, int c_idx, int offset)
 
static av_always_inline int coeff_abs_level_greater1_flag_decode (HEVCContext *s, int c_idx, int inc)
 
static av_always_inline int coeff_abs_level_greater2_flag_decode (HEVCContext *s, int c_idx, int inc)
 
static av_always_inline int coeff_abs_level_remaining_decode (HEVCContext *s, int rc_rice_param)
 
static av_always_inline int coeff_sign_flag_decode (HEVCContext *s, uint8_t nb)
 
void ff_hevc_hls_residual_coding (HEVCContext *s, int x0, int y0, int log2_trafo_size, enum ScanType scan_idx, int c_idx)
 
void ff_hevc_hls_mvd_coding (HEVCContext *s, int x0, int y0, int log2_cb_size)
 

Variables

static av_unused const int8_t num_bins_in_se []
 number of bin by SyntaxElement.
 
static const int elem_offset [sizeof(num_bins_in_se)]
 Offset to ctxIdx 0 in init_values and states, indexed by SyntaxElement.
 
static const uint8_t init_values [3][HEVC_CONTEXTS]
 Indexed by init_type.
 
static const uint8_t scan_1x1 [1]
 
static const uint8_t horiz_scan2x2_x [4]
 
static const uint8_t horiz_scan2x2_y [4]
 
static const uint8_t horiz_scan4x4_x [16]
 
static const uint8_t horiz_scan4x4_y [16]
 
static const uint8_t horiz_scan8x8_inv [8][8]
 
static const uint8_t diag_scan2x2_x [4]
 
static const uint8_t diag_scan2x2_y [4]
 
static const uint8_t diag_scan2x2_inv [2][2]
 
const uint8_t ff_hevc_diag_scan4x4_x [16]
 
const uint8_t ff_hevc_diag_scan4x4_y [16]
 
static const uint8_t diag_scan4x4_inv [4][4]
 
const uint8_t ff_hevc_diag_scan8x8_x [64]
 
const uint8_t ff_hevc_diag_scan8x8_y [64]
 
static const uint8_t diag_scan8x8_inv [8][8]
 

Macro Definition Documentation

#define CABAC_MAX_BIN   31
#define CNU   154

Definition at line 142 of file hevc_cabac.c.

#define GET_CABAC (   ctx)    get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx])
#define GET_COORD (   offset,
  n 
)
Value:
do { \
x_c = (x_cg << 2) + scan_x_off[n]; \
y_c = (y_cg << 2) + scan_y_off[n]; \
} while (0)

Referenced by ff_hevc_hls_residual_coding().

Function Documentation

void ff_hevc_save_states ( HEVCContext s,
int  ctb_addr_ts 
)

Definition at line 500 of file hevc_cabac.c.

Referenced by hls_decode_entry(), and hls_decode_entry_wpp().

static void load_states ( HEVCContext s)
static

Definition at line 510 of file hevc_cabac.c.

Referenced by ff_hevc_cabac_init().

static void cabac_reinit ( HEVCLocalContext lc)
static

Definition at line 515 of file hevc_cabac.c.

Referenced by ff_hevc_cabac_init().

static void cabac_init_decoder ( HEVCContext s)
static

Definition at line 520 of file hevc_cabac.c.

Referenced by ff_hevc_cabac_init().

static void cabac_init_state ( HEVCContext s)
static

Definition at line 530 of file hevc_cabac.c.

Referenced by ff_hevc_cabac_init().

void ff_hevc_cabac_init ( HEVCContext s,
int  ctb_addr_ts 
)

Definition at line 554 of file hevc_cabac.c.

Referenced by hls_decode_entry(), and hls_decode_entry_wpp().

int ff_hevc_sao_merge_flag_decode ( HEVCContext s)

Definition at line 600 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_type_idx_decode ( HEVCContext s)

Definition at line 605 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_band_position_decode ( HEVCContext s)

Definition at line 615 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_offset_abs_decode ( HEVCContext s)

Definition at line 625 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_offset_sign_decode ( HEVCContext s)

Definition at line 635 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_eo_class_decode ( HEVCContext s)

Definition at line 640 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_end_of_slice_flag_decode ( HEVCContext s)

Definition at line 647 of file hevc_cabac.c.

Referenced by hls_coding_quadtree().

int ff_hevc_cu_transquant_bypass_flag_decode ( HEVCContext s)

Definition at line 652 of file hevc_cabac.c.

Referenced by hls_coding_unit().

int ff_hevc_skip_flag_decode ( HEVCContext s,
int  x0,
int  y0,
int  x_cb,
int  y_cb 
)

Definition at line 657 of file hevc_cabac.c.

Referenced by hls_coding_unit().

int ff_hevc_cu_qp_delta_abs ( HEVCContext s)

Definition at line 672 of file hevc_cabac.c.

Referenced by hls_transform_unit().

int ff_hevc_cu_qp_delta_sign_flag ( HEVCContext s)

Definition at line 697 of file hevc_cabac.c.

Referenced by hls_transform_unit().

int ff_hevc_cu_chroma_qp_offset_flag ( HEVCContext s)

Definition at line 702 of file hevc_cabac.c.

Referenced by hls_transform_unit().

int ff_hevc_cu_chroma_qp_offset_idx ( HEVCContext s)

Definition at line 707 of file hevc_cabac.c.

Referenced by hls_transform_unit().

int ff_hevc_pred_mode_decode ( HEVCContext s)

Definition at line 718 of file hevc_cabac.c.

Referenced by hls_coding_unit().

int ff_hevc_split_coding_unit_flag_decode ( HEVCContext s,
int  ct_depth,
int  x0,
int  y0 
)

Definition at line 723 of file hevc_cabac.c.

Referenced by hls_coding_quadtree().

int ff_hevc_part_mode_decode ( HEVCContext s,
int  log2_cb_size 
)

Definition at line 742 of file hevc_cabac.c.

Referenced by hls_coding_unit().

int ff_hevc_pcm_flag_decode ( HEVCContext s)

Definition at line 779 of file hevc_cabac.c.

Referenced by hls_coding_unit().

int ff_hevc_prev_intra_luma_pred_flag_decode ( HEVCContext s)

Definition at line 784 of file hevc_cabac.c.

Referenced by intra_prediction_unit().

int ff_hevc_mpm_idx_decode ( HEVCContext s)

Definition at line 789 of file hevc_cabac.c.

Referenced by intra_prediction_unit().

int ff_hevc_rem_intra_luma_pred_mode_decode ( HEVCContext s)

Definition at line 797 of file hevc_cabac.c.

Referenced by intra_prediction_unit().

int ff_hevc_intra_chroma_pred_mode_decode ( HEVCContext s)

Definition at line 807 of file hevc_cabac.c.

Referenced by intra_prediction_unit().

int ff_hevc_merge_idx_decode ( HEVCContext s)

Definition at line 818 of file hevc_cabac.c.

Referenced by hls_prediction_unit().

int ff_hevc_merge_flag_decode ( HEVCContext s)

Definition at line 829 of file hevc_cabac.c.

Referenced by hls_prediction_unit().

int ff_hevc_inter_pred_idc_decode ( HEVCContext s,
int  nPbW,
int  nPbH 
)

Definition at line 834 of file hevc_cabac.c.

Referenced by hevc_luma_mv_mpv_mode().

int ff_hevc_ref_idx_lx_decode ( HEVCContext s,
int  num_ref_idx_lx 
)

Definition at line 844 of file hevc_cabac.c.

Referenced by hevc_luma_mv_mpv_mode().

int ff_hevc_mvp_lx_flag_decode ( HEVCContext s)

Definition at line 860 of file hevc_cabac.c.

Referenced by hevc_luma_mv_mpv_mode().

int ff_hevc_no_residual_syntax_flag_decode ( HEVCContext s)

Definition at line 865 of file hevc_cabac.c.

Referenced by hls_coding_unit().

static av_always_inline int abs_mvd_greater0_flag_decode ( HEVCContext s)
static

Definition at line 870 of file hevc_cabac.c.

Referenced by ff_hevc_hls_mvd_coding().

static av_always_inline int abs_mvd_greater1_flag_decode ( HEVCContext s)
static

Definition at line 875 of file hevc_cabac.c.

Referenced by ff_hevc_hls_mvd_coding().

static av_always_inline int mvd_decode ( HEVCContext s)
static

Definition at line 880 of file hevc_cabac.c.

Referenced by ff_hevc_hls_mvd_coding().

static av_always_inline int mvd_sign_flag_decode ( HEVCContext s)
static

Definition at line 896 of file hevc_cabac.c.

Referenced by ff_hevc_hls_mvd_coding().

int ff_hevc_split_transform_flag_decode ( HEVCContext s,
int  log2_trafo_size 
)

Definition at line 901 of file hevc_cabac.c.

Referenced by hls_transform_tree().

int ff_hevc_cbf_cb_cr_decode ( HEVCContext s,
int  trafo_depth 
)

Definition at line 906 of file hevc_cabac.c.

Referenced by hls_transform_tree().

int ff_hevc_cbf_luma_decode ( HEVCContext s,
int  trafo_depth 
)

Definition at line 911 of file hevc_cabac.c.

Referenced by hls_transform_tree().

static int ff_hevc_transform_skip_flag_decode ( HEVCContext s,
int  c_idx 
)
static

Definition at line 916 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static int explicit_rdpcm_flag_decode ( HEVCContext s,
int  c_idx 
)
static

Definition at line 921 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static int explicit_rdpcm_dir_flag_decode ( HEVCContext s,
int  c_idx 
)
static

Definition at line 926 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

int ff_hevc_log2_res_scale_abs ( HEVCContext s,
int  idx 
)

Definition at line 931 of file hevc_cabac.c.

Referenced by hls_cross_component_pred().

int ff_hevc_res_scale_sign_flag ( HEVCContext s,
int  idx 
)

Definition at line 940 of file hevc_cabac.c.

Referenced by hls_cross_component_pred().

static av_always_inline void last_significant_coeff_xy_prefix_decode ( HEVCContext s,
int  c_idx,
int  log2_size,
int *  last_scx_prefix,
int *  last_scy_prefix 
)
static

Definition at line 944 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static av_always_inline int last_significant_coeff_suffix_decode ( HEVCContext s,
int  last_significant_coeff_prefix 
)
static

Definition at line 970 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static av_always_inline int significant_coeff_group_flag_decode ( HEVCContext s,
int  c_idx,
int  ctx_cg 
)
static

Definition at line 982 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static av_always_inline int significant_coeff_flag_decode ( HEVCContext s,
int  x_c,
int  y_c,
int  offset,
const uint8_t ctx_idx_map 
)
static

Definition at line 990 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static av_always_inline int significant_coeff_flag_decode_0 ( HEVCContext s,
int  c_idx,
int  offset 
)
static

Definition at line 997 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static av_always_inline int coeff_abs_level_greater1_flag_decode ( HEVCContext s,
int  c_idx,
int  inc 
)
static

Definition at line 1002 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static av_always_inline int coeff_abs_level_greater2_flag_decode ( HEVCContext s,
int  c_idx,
int  inc 
)
static

Definition at line 1011 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static av_always_inline int coeff_abs_level_remaining_decode ( HEVCContext s,
int  rc_rice_param 
)
static

Definition at line 1019 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

static av_always_inline int coeff_sign_flag_decode ( HEVCContext s,
uint8_t  nb 
)
static

Definition at line 1044 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

void ff_hevc_hls_residual_coding ( HEVCContext s,
int  x0,
int  y0,
int  log2_trafo_size,
enum ScanType  scan_idx,
int  c_idx 
)

Definition at line 1054 of file hevc_cabac.c.

Referenced by hls_transform_unit().

void ff_hevc_hls_mvd_coding ( HEVCContext s,
int  x0,
int  y0,
int  log2_cb_size 
)

Definition at line 1564 of file hevc_cabac.c.

Referenced by hevc_luma_mv_mpv_mode().

Variable Documentation

av_unused const int8_t num_bins_in_se[]
static

number of bin by SyntaxElement.

Definition at line 35 of file hevc_cabac.c.

const int elem_offset[sizeof(num_bins_in_se)]
static
const uint8_t init_values[3][HEVC_CONTEXTS]
static

Indexed by init_type.

Definition at line 146 of file hevc_cabac.c.

Referenced by cabac_init_state().

const uint8_t scan_1x1[1]
static
Initial value:
= {
0,
}

Definition at line 380 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t horiz_scan2x2_x[4]
static
Initial value:
= {
0, 1, 0, 1,
}

Definition at line 384 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t horiz_scan2x2_y[4]
static
Initial value:
= {
0, 0, 1, 1
}

Definition at line 388 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t horiz_scan4x4_x[16]
static
Initial value:
= {
0, 1, 2, 3,
0, 1, 2, 3,
0, 1, 2, 3,
0, 1, 2, 3,
}

Definition at line 392 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t horiz_scan4x4_y[16]
static
Initial value:
= {
0, 0, 0, 0,
1, 1, 1, 1,
2, 2, 2, 2,
3, 3, 3, 3,
}

Definition at line 399 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t horiz_scan8x8_inv[8][8]
static
Initial value:
= {
{ 0, 1, 2, 3, 16, 17, 18, 19, },
{ 4, 5, 6, 7, 20, 21, 22, 23, },
{ 8, 9, 10, 11, 24, 25, 26, 27, },
{ 12, 13, 14, 15, 28, 29, 30, 31, },
{ 32, 33, 34, 35, 48, 49, 50, 51, },
{ 36, 37, 38, 39, 52, 53, 54, 55, },
{ 40, 41, 42, 43, 56, 57, 58, 59, },
{ 44, 45, 46, 47, 60, 61, 62, 63, },
}

Definition at line 406 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t diag_scan2x2_x[4]
static
Initial value:
= {
0, 0, 1, 1,
}

Definition at line 417 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t diag_scan2x2_y[4]
static
Initial value:
= {
0, 1, 0, 1,
}

Definition at line 421 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t diag_scan2x2_inv[2][2]
static
Initial value:
= {
{ 0, 2, },
{ 1, 3, },
}

Definition at line 425 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t ff_hevc_diag_scan4x4_x[16]
Initial value:
= {
0, 0, 1, 0,
1, 2, 0, 1,
2, 3, 1, 2,
3, 2, 3, 3,
}

Definition at line 430 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding(), fill_scaling_lists(), and scaling_list_data().

const uint8_t ff_hevc_diag_scan4x4_y[16]
Initial value:
= {
0, 1, 0, 2,
1, 0, 3, 2,
1, 0, 3, 2,
1, 3, 2, 3,
}

Definition at line 437 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding(), fill_scaling_lists(), and scaling_list_data().

const uint8_t diag_scan4x4_inv[4][4]
static
Initial value:
= {
{ 0, 2, 5, 9, },
{ 1, 4, 8, 12, },
{ 3, 7, 11, 14, },
{ 6, 10, 13, 15, },
}

Definition at line 444 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

const uint8_t ff_hevc_diag_scan8x8_x[64]
Initial value:
= {
0, 0, 1, 0,
1, 2, 0, 1,
2, 3, 0, 1,
2, 3, 4, 0,
1, 2, 3, 4,
5, 0, 1, 2,
3, 4, 5, 6,
0, 1, 2, 3,
4, 5, 6, 7,
1, 2, 3, 4,
5, 6, 7, 2,
3, 4, 5, 6,
7, 3, 4, 5,
6, 7, 4, 5,
6, 7, 5, 6,
7, 6, 7, 7,
}

Definition at line 451 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding(), fill_scaling_lists(), and scaling_list_data().

const uint8_t ff_hevc_diag_scan8x8_y[64]
Initial value:
= {
0, 1, 0, 2,
1, 0, 3, 2,
1, 0, 4, 3,
2, 1, 0, 5,
4, 3, 2, 1,
0, 6, 5, 4,
3, 2, 1, 0,
7, 6, 5, 4,
3, 2, 1, 0,
7, 6, 5, 4,
3, 2, 1, 7,
6, 5, 4, 3,
2, 7, 6, 5,
4, 3, 7, 6,
5, 4, 7, 6,
5, 7, 6, 7,
}

Definition at line 470 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding(), fill_scaling_lists(), and scaling_list_data().

const uint8_t diag_scan8x8_inv[8][8]
static
Initial value:
= {
{ 0, 2, 5, 9, 14, 20, 27, 35, },
{ 1, 4, 8, 13, 19, 26, 34, 42, },
{ 3, 7, 12, 18, 25, 33, 41, 48, },
{ 6, 11, 17, 24, 32, 40, 47, 53, },
{ 10, 16, 23, 31, 39, 46, 52, 57, },
{ 15, 22, 30, 38, 45, 51, 56, 60, },
{ 21, 29, 37, 44, 50, 55, 59, 62, },
{ 28, 36, 43, 49, 54, 58, 61, 63, },
}

Definition at line 489 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().