FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions | Variables
h264_cabac.c File Reference

H.264 / AVC / MPEG-4 part10 cabac decoding. More...

#include "libavutil/attributes.h"
#include "libavutil/avassert.h"
#include "libavutil/timer.h"
#include "config.h"
#include "cabac.h"
#include "cabac_functions.h"
#include "internal.h"
#include "avcodec.h"
#include "h264dec.h"
#include "h264data.h"
#include "h264_mvpred.h"
#include "mpegutils.h"

Go to the source code of this file.

Macros

#define CABAC(h)   1
 
#define UNCHECKED_BITSTREAM_READER   1
 
#define INT_BIT   (CHAR_BIT * sizeof(int))
 
#define DECODE_CABAC_MB_MVD(sl, list,n)
 
#define CABAC_ON_STACK
 
#define CC   &cc
 
#define DECODE_SIGNIFICANCE(coefs, sig_off, last_off)
 
#define STORE_BLOCK(type)
 

Functions

void ff_h264_init_cabac_states (const H264Context *h, H264SliceContext *sl)
 
static int decode_cabac_field_decoding_flag (const H264Context *h, H264SliceContext *sl)
 
static int decode_cabac_intra_mb_type (H264SliceContext *sl, int ctx_base, int intra_slice)
 
static int decode_cabac_mb_skip (const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y)
 
static int decode_cabac_mb_intra4x4_pred_mode (H264SliceContext *sl, int pred_mode)
 
static int decode_cabac_mb_chroma_pre_mode (const H264Context *h, H264SliceContext *sl)
 
static int decode_cabac_mb_cbp_luma (H264SliceContext *sl)
 
static int decode_cabac_mb_cbp_chroma (H264SliceContext *sl)
 
static int decode_cabac_p_mb_sub_type (H264SliceContext *sl)
 
static int decode_cabac_b_mb_sub_type (H264SliceContext *sl)
 
static int decode_cabac_mb_ref (H264SliceContext *sl, int list, int n)
 
static int decode_cabac_mb_mvd (H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
 
static av_always_inline int get_cabac_cbf_ctx (H264SliceContext *sl, int cat, int idx, int max_coeff, int is_dc)
 
static av_always_inline void decode_cabac_residual_internal (const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff, int is_dc, int chroma422)
 
static av_noinline void decode_cabac_residual_dc_internal (const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, int max_coeff)
 
static av_noinline void decode_cabac_residual_dc_internal_422 (const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, int max_coeff)
 
static av_noinline void decode_cabac_residual_nondc_internal (const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff)
 
static av_always_inline void decode_cabac_residual_dc (const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, int max_coeff)
 
static av_always_inline void decode_cabac_residual_dc_422 (const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, int max_coeff)
 
static av_always_inline void decode_cabac_residual_nondc (const H264Context *h, H264SliceContext *sl, int16_t *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff)
 
static av_always_inline void decode_cabac_luma_residual (const H264Context *h, H264SliceContext *sl, const uint8_t *scan, const uint8_t *scan8x8, int pixel_shift, int mb_type, int cbp, int p)
 
int ff_h264_decode_mb_cabac (const H264Context *h, H264SliceContext *sl)
 Decode a macroblock. More...
 

Variables

static const int8_t cabac_context_init_I [1024][2]
 
static const int8_t cabac_context_init_PB [3][1024][2]
 

Detailed Description

H.264 / AVC / MPEG-4 part10 cabac decoding.

Author
Michael Niedermayer micha.nosp@m.elni.nosp@m.@gmx..nosp@m.at

Definition in file h264_cabac.c.

Macro Definition Documentation

#define CABAC (   h)    1

Definition at line 28 of file h264_cabac.c.

Referenced by fill_decode_caches(), fill_filter_caches(), and filter_mb_dir().

#define UNCHECKED_BITSTREAM_READER   1

Definition at line 29 of file h264_cabac.c.

#define INT_BIT   (CHAR_BIT * sizeof(int))

Definition at line 30 of file h264_cabac.c.

Referenced by decode_cabac_mb_mvd().

#define DECODE_CABAC_MB_MVD (   sl,
  list,
  n 
)
Value:
{\
int amvd0 = sl->mvd_cache[list][scan8[n] - 1][0] +\
sl->mvd_cache[list][scan8[n] - 8][0];\
int amvd1 = sl->mvd_cache[list][scan8[n] - 1][1] +\
sl->mvd_cache[list][scan8[n] - 8][1];\
int mxd = decode_cabac_mb_mvd(sl, 40, amvd0, &mpx);\
int myd = decode_cabac_mb_mvd(sl, 47, amvd1, &mpy);\
if (mxd == INT_MIN || myd == INT_MIN) \
mx += mxd;\
my += myd;\
}
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
return
int n
Definition: avisynth_c.h:684
static const uint8_t scan8[16 *3+3]
Definition: h264dec.h:644
int
if(ret< 0)
Definition: vf_mcdeint.c:279
static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
Definition: h264_cabac.c:1498

Definition at line 1535 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

#define CABAC_ON_STACK
#define CC   &cc
#define DECODE_SIGNIFICANCE (   coefs,
  sig_off,
  last_off 
)
Value:
for(last= 0; last < coefs; last++) { \
uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
if( get_cabac( CC, sig_ctx )) { \
uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
index[coeff_count++] = last; \
if( get_cabac( CC, last_ctx ) ) { \
last= max_coeff; \
break; \
} \
} \
}\
if( last == max_coeff -1 ) {\
index[coeff_count++] = last;\
}
static int av_unused get_cabac(CABACContext *c, uint8_t *const state)
uint8_t
int index
Definition: gxfenc.c:89
if(ret< 0)
Definition: vf_mcdeint.c:279
#define CC

Referenced by decode_cabac_residual_internal().

#define STORE_BLOCK (   type)

Function Documentation

void ff_h264_init_cabac_states ( const H264Context h,
H264SliceContext sl 
)

Definition at line 1263 of file h264_cabac.c.

Referenced by decode_slice().

static int decode_cabac_field_decoding_flag ( const H264Context h,
H264SliceContext sl 
)
static

Definition at line 1284 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_intra_mb_type ( H264SliceContext sl,
int  ctx_base,
int  intra_slice 
)
static

Definition at line 1296 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_mb_skip ( const H264Context h,
H264SliceContext sl,
int  mb_x,
int  mb_y 
)
static

Definition at line 1328 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_mb_intra4x4_pred_mode ( H264SliceContext sl,
int  pred_mode 
)
static

Definition at line 1365 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_mb_chroma_pre_mode ( const H264Context h,
H264SliceContext sl 
)
static

Definition at line 1379 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_mb_cbp_luma ( H264SliceContext sl)
static

Definition at line 1404 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_mb_cbp_chroma ( H264SliceContext sl)
static

Definition at line 1421 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_p_mb_sub_type ( H264SliceContext sl)
static

Definition at line 1441 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_b_mb_sub_type ( H264SliceContext sl)
static

Definition at line 1451 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_mb_ref ( H264SliceContext sl,
int  list,
int  n 
)
static

Definition at line 1469 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static int decode_cabac_mb_mvd ( H264SliceContext sl,
int  ctxbase,
int  amvd,
int mvda 
)
static

Definition at line 1498 of file h264_cabac.c.

static av_always_inline int get_cabac_cbf_ctx ( H264SliceContext sl,
int  cat,
int  idx,
int  max_coeff,
int  is_dc 
)
static
static av_always_inline void decode_cabac_residual_internal ( const H264Context h,
H264SliceContext sl,
int16_t *  block,
int  cat,
int  n,
const uint8_t scantable,
const uint32_t *  qmul,
int  max_coeff,
int  is_dc,
int  chroma422 
)
static
static av_noinline void decode_cabac_residual_dc_internal ( const H264Context h,
H264SliceContext sl,
int16_t *  block,
int  cat,
int  n,
const uint8_t scantable,
int  max_coeff 
)
static

Definition at line 1770 of file h264_cabac.c.

Referenced by decode_cabac_residual_dc().

static av_noinline void decode_cabac_residual_dc_internal_422 ( const H264Context h,
H264SliceContext sl,
int16_t *  block,
int  cat,
int  n,
const uint8_t scantable,
int  max_coeff 
)
static

Definition at line 1780 of file h264_cabac.c.

Referenced by decode_cabac_residual_dc_422().

static av_noinline void decode_cabac_residual_nondc_internal ( const H264Context h,
H264SliceContext sl,
int16_t *  block,
int  cat,
int  n,
const uint8_t scantable,
const uint32_t *  qmul,
int  max_coeff 
)
static

Definition at line 1790 of file h264_cabac.c.

Referenced by decode_cabac_residual_nondc().

static av_always_inline void decode_cabac_residual_dc ( const H264Context h,
H264SliceContext sl,
int16_t *  block,
int  cat,
int  n,
const uint8_t scantable,
int  max_coeff 
)
static

Definition at line 1813 of file h264_cabac.c.

Referenced by decode_cabac_luma_residual(), and ff_h264_decode_mb_cabac().

static av_always_inline void decode_cabac_residual_dc_422 ( const H264Context h,
H264SliceContext sl,
int16_t *  block,
int  cat,
int  n,
const uint8_t scantable,
int  max_coeff 
)
static

Definition at line 1829 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

static av_always_inline void decode_cabac_residual_nondc ( const H264Context h,
H264SliceContext sl,
int16_t *  block,
int  cat,
int  n,
const uint8_t scantable,
const uint32_t *  qmul,
int  max_coeff 
)
static

Definition at line 1842 of file h264_cabac.c.

Referenced by decode_cabac_luma_residual(), and ff_h264_decode_mb_cabac().

static av_always_inline void decode_cabac_luma_residual ( const H264Context h,
H264SliceContext sl,
const uint8_t scan,
const uint8_t scan8x8,
int  pixel_shift,
int  mb_type,
int  cbp,
int  p 
)
static

Definition at line 1862 of file h264_cabac.c.

Referenced by ff_h264_decode_mb_cabac().

int ff_h264_decode_mb_cabac ( const H264Context h,
H264SliceContext sl 
)

Decode a macroblock.

Decode a CABAC coded macroblock.

Returns
0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed

Definition at line 1914 of file h264_cabac.c.

Referenced by decode_slice().

Variable Documentation

const int8_t cabac_context_init_I[1024][2]
static

Definition at line 51 of file h264_cabac.c.

Referenced by ff_h264_init_cabac_states().

const int8_t cabac_context_init_PB[3][1024][2]
static

Definition at line 363 of file h264_cabac.c.

Referenced by ff_h264_init_cabac_states().