FFmpeg
Macros | Functions | Variables
hevc_cabac.c File Reference
#include "libavutil/attributes.h"
#include "libavutil/common.h"
#include "cabac_functions.h"
#include "hevc_data.h"
#include "hevc.h"
#include "hevcdec.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 int cabac_reinit (HEVCLocalContext *lc)
 
static int cabac_init_decoder (HEVCContext *s)
 
static void cabac_init_state (HEVCContext *s)
 
int 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 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 const int8_t num_bins_in_se []
 number of bin by SyntaxElement. More...
 
static const int elem_offset [sizeof(num_bins_in_se)]
 Offset to ctxIdx 0 in init_values and states, indexed by SyntaxElement. More...
 
static const uint8_t init_values [3][HEVC_CONTEXTS]
 Indexed by init_type. More...
 
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]
 
static const uint8_t diag_scan4x4_inv [4][4]
 
static const uint8_t diag_scan8x8_inv [8][8]
 

Macro Definition Documentation

#define CABAC_MAX_BIN   31

Definition at line 32 of file hevc_cabac.c.

Referenced by coeff_abs_level_remaining_decode(), and mvd_decode().

#define CNU   154

Definition at line 144 of file hevc_cabac.c.

#define GET_CABAC (   ctx)    get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx])
#define GET_COORD (   offset,
 
)
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 450 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 460 of file hevc_cabac.c.

Referenced by ff_hevc_cabac_init().

static int cabac_reinit ( HEVCLocalContext lc)
static

Definition at line 465 of file hevc_cabac.c.

Referenced by ff_hevc_cabac_init().

static int cabac_init_decoder ( HEVCContext s)
static

Definition at line 470 of file hevc_cabac.c.

Referenced by ff_hevc_cabac_init().

static void cabac_init_state ( HEVCContext s)
static

Definition at line 480 of file hevc_cabac.c.

Referenced by ff_hevc_cabac_init().

int ff_hevc_cabac_init ( HEVCContext s,
int  ctb_addr_ts 
)

Definition at line 504 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 561 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_type_idx_decode ( HEVCContext s)

Definition at line 566 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_band_position_decode ( HEVCContext s)

Definition at line 576 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_offset_abs_decode ( HEVCContext s)

Definition at line 586 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_offset_sign_decode ( HEVCContext s)

Definition at line 596 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_sao_eo_class_decode ( HEVCContext s)

Definition at line 601 of file hevc_cabac.c.

Referenced by hls_sao_param().

int ff_hevc_end_of_slice_flag_decode ( HEVCContext s)

Definition at line 608 of file hevc_cabac.c.

Referenced by hls_coding_quadtree().

int ff_hevc_cu_transquant_bypass_flag_decode ( HEVCContext s)

Definition at line 613 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 618 of file hevc_cabac.c.

Referenced by hls_coding_unit().

int ff_hevc_cu_qp_delta_abs ( HEVCContext s)

Definition at line 633 of file hevc_cabac.c.

Referenced by ff_hevc_nal_is_nonref(), and hls_transform_unit().

int ff_hevc_cu_qp_delta_sign_flag ( HEVCContext s)

Definition at line 660 of file hevc_cabac.c.

Referenced by ff_hevc_nal_is_nonref(), and hls_transform_unit().

int ff_hevc_cu_chroma_qp_offset_flag ( HEVCContext s)

Definition at line 665 of file hevc_cabac.c.

Referenced by ff_hevc_nal_is_nonref(), and hls_transform_unit().

int ff_hevc_cu_chroma_qp_offset_idx ( HEVCContext s)

Definition at line 670 of file hevc_cabac.c.

Referenced by ff_hevc_nal_is_nonref(), and hls_transform_unit().

int ff_hevc_pred_mode_decode ( HEVCContext s)

Definition at line 681 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 686 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 705 of file hevc_cabac.c.

Referenced by hls_coding_unit().

int ff_hevc_pcm_flag_decode ( HEVCContext s)

Definition at line 742 of file hevc_cabac.c.

Referenced by hls_coding_unit().

int ff_hevc_prev_intra_luma_pred_flag_decode ( HEVCContext s)

Definition at line 747 of file hevc_cabac.c.

Referenced by intra_prediction_unit().

int ff_hevc_mpm_idx_decode ( HEVCContext s)

Definition at line 752 of file hevc_cabac.c.

Referenced by intra_prediction_unit().

int ff_hevc_rem_intra_luma_pred_mode_decode ( HEVCContext s)

Definition at line 760 of file hevc_cabac.c.

Referenced by intra_prediction_unit().

int ff_hevc_intra_chroma_pred_mode_decode ( HEVCContext s)

Definition at line 770 of file hevc_cabac.c.

Referenced by intra_prediction_unit().

int ff_hevc_merge_idx_decode ( HEVCContext s)

Definition at line 781 of file hevc_cabac.c.

Referenced by hls_prediction_unit().

int ff_hevc_merge_flag_decode ( HEVCContext s)

Definition at line 792 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 797 of file hevc_cabac.c.

Referenced by hevc_luma_mv_mvp_mode().

int ff_hevc_ref_idx_lx_decode ( HEVCContext s,
int  num_ref_idx_lx 
)

Definition at line 807 of file hevc_cabac.c.

Referenced by hevc_luma_mv_mvp_mode().

int ff_hevc_mvp_lx_flag_decode ( HEVCContext s)

Definition at line 823 of file hevc_cabac.c.

Referenced by hevc_luma_mv_mvp_mode().

int ff_hevc_no_residual_syntax_flag_decode ( HEVCContext s)

Definition at line 828 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 833 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 838 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 843 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 861 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 866 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 871 of file hevc_cabac.c.

Referenced by hls_transform_tree().

int ff_hevc_cbf_luma_decode ( HEVCContext s,
int  trafo_depth 
)

Definition at line 876 of file hevc_cabac.c.

Referenced by hls_transform_tree().

static int hevc_transform_skip_flag_decode ( HEVCContext s,
int  c_idx 
)
static

Definition at line 881 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 886 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 891 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 896 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 905 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 909 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 935 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 947 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 955 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 962 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 967 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 976 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 984 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 1014 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 1024 of file hevc_cabac.c.

Referenced by ff_hevc_nal_is_nonref(), and hls_transform_unit().

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

Definition at line 1534 of file hevc_cabac.c.

Referenced by ff_hevc_nal_is_nonref(), and hevc_luma_mv_mvp_mode().

Variable Documentation

const int8_t num_bins_in_se[]
static

number of bin by SyntaxElement.

Definition at line 37 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 148 of file hevc_cabac.c.

Referenced by cabac_init_state().

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

Definition at line 382 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 386 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 390 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 394 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 401 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 408 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 419 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 423 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 427 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

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 432 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().

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 439 of file hevc_cabac.c.

Referenced by ff_hevc_hls_residual_coding().