FFmpeg
Macros | Functions | Variables
h264_cavlc.c File Reference
#include "h264dec.h"
#include "h264_mvpred.h"
#include "h264data.h"
#include "golomb.h"
#include "mpegutils.h"
#include "libavutil/avassert.h"

Go to the source code of this file.

Macros

#define CABAC(h)   0
 
#define UNCHECKED_BITSTREAM_READER   1
 
#define LEVEL_TAB_BITS   8
 
#define CHROMA_DC_COEFF_TOKEN_VLC_BITS   8
 
#define CHROMA422_DC_COEFF_TOKEN_VLC_BITS   13
 
#define COEFF_TOKEN_VLC_BITS   8
 
#define TOTAL_ZEROS_VLC_BITS   9
 
#define CHROMA_DC_TOTAL_ZEROS_VLC_BITS   3
 
#define CHROMA422_DC_TOTAL_ZEROS_VLC_BITS   5
 
#define RUN_VLC_BITS   3
 
#define RUN7_VLC_BITS   6
 
#define STORE_BLOCK(type)
 

Functions

static int pred_non_zero_count (const H264Context *h, const H264SliceContext *sl, int n)
 Get the predicted number of non-zero coefficients. More...
 
static av_cold void init_cavlc_level_tab (void)
 
av_cold void ff_h264_decode_init_vlc (void)
 
static int get_level_prefix (GetBitContext *gb)
 
static int decode_residual (const H264Context *h, H264SliceContext *sl, GetBitContext *gb, int16_t *block, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff)
 Decode a residual block. More...
 
static av_always_inline int decode_luma_residual (const H264Context *h, H264SliceContext *sl, GetBitContext *gb, const uint8_t *scan, const uint8_t *scan8x8, int pixel_shift, int mb_type, int cbp, int p)
 
int ff_h264_decode_mb_cavlc (const H264Context *h, H264SliceContext *sl)
 Decode a macroblock. More...
 

Variables

static const uint8_t golomb_to_inter_cbp_gray [16]
 
static const uint8_t golomb_to_intra4x4_cbp_gray [16]
 
static const uint8_t chroma_dc_coeff_token_len [4 *5]
 
static const uint8_t chroma_dc_coeff_token_bits [4 *5]
 
static const uint8_t chroma422_dc_coeff_token_len [4 *9]
 
static const uint8_t chroma422_dc_coeff_token_bits [4 *9]
 
static const uint8_t coeff_token_len [4][4 *17]
 
static const uint8_t coeff_token_bits [4][4 *17]
 
static const uint8_t total_zeros_len [16][16]
 
static const uint8_t total_zeros_bits [16][16]
 
static const uint8_t chroma_dc_total_zeros_len [3][4]
 
static const uint8_t chroma_dc_total_zeros_bits [3][4]
 
static const uint8_t chroma422_dc_total_zeros_len [7][8]
 
static const uint8_t chroma422_dc_total_zeros_bits [7][8]
 
static const uint8_t run_len [7][16]
 
static const uint8_t run_bits [7][16]
 
static int8_t cavlc_level_tab [7][1<< LEVEL_TAB_BITS][2]
 
static const VLCElemcoeff_token_vlc [17]
 17 pointers to only four different VLCs More...
 
static VLCElem chroma_dc_coeff_token_vlc_table [256]
 
static VLCElem chroma422_dc_coeff_token_vlc_table [1<< CHROMA422_DC_COEFF_TOKEN_VLC_BITS]
 
static const VLCElemtotal_zeros_vlc [15+1]
 
static const VLCElemchroma_dc_total_zeros_vlc [3+1]
 
static const VLCElemchroma422_dc_total_zeros_vlc [7+1]
 
static const VLCElemrun_vlc [6+1]
 
static VLCElem run7_vlc_table [96+(6<< RUN_VLC_BITS)+(15<< TOTAL_ZEROS_VLC_BITS)+(3<< CHROMA_DC_TOTAL_ZEROS_VLC_BITS)+(7<< CHROMA422_DC_TOTAL_ZEROS_VLC_BITS)+(520+332+280+256)]
 

Detailed Description

H.264 / AVC / MPEG-4 part10 cavlc bitstream decoding.

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

Definition in file h264_cavlc.c.

Macro Definition Documentation

◆ CABAC

#define CABAC (   h)    0

Definition at line 28 of file h264_cavlc.c.

◆ UNCHECKED_BITSTREAM_READER

#define UNCHECKED_BITSTREAM_READER   1

Definition at line 29 of file h264_cavlc.c.

◆ LEVEL_TAB_BITS

#define LEVEL_TAB_BITS   8

Definition at line 237 of file h264_cavlc.c.

◆ CHROMA_DC_COEFF_TOKEN_VLC_BITS

#define CHROMA_DC_COEFF_TOKEN_VLC_BITS   8

Definition at line 240 of file h264_cavlc.c.

◆ CHROMA422_DC_COEFF_TOKEN_VLC_BITS

#define CHROMA422_DC_COEFF_TOKEN_VLC_BITS   13

Definition at line 241 of file h264_cavlc.c.

◆ COEFF_TOKEN_VLC_BITS

#define COEFF_TOKEN_VLC_BITS   8

Definition at line 242 of file h264_cavlc.c.

◆ TOTAL_ZEROS_VLC_BITS

#define TOTAL_ZEROS_VLC_BITS   9

Definition at line 243 of file h264_cavlc.c.

◆ CHROMA_DC_TOTAL_ZEROS_VLC_BITS

#define CHROMA_DC_TOTAL_ZEROS_VLC_BITS   3

Definition at line 244 of file h264_cavlc.c.

◆ CHROMA422_DC_TOTAL_ZEROS_VLC_BITS

#define CHROMA422_DC_TOTAL_ZEROS_VLC_BITS   5

Definition at line 245 of file h264_cavlc.c.

◆ RUN_VLC_BITS

#define RUN_VLC_BITS   3

Definition at line 246 of file h264_cavlc.c.

◆ RUN7_VLC_BITS

#define RUN7_VLC_BITS   6

Definition at line 247 of file h264_cavlc.c.

◆ STORE_BLOCK

#define STORE_BLOCK (   type)

Function Documentation

◆ pred_non_zero_count()

static int pred_non_zero_count ( const H264Context h,
const H264SliceContext sl,
int  n 
)
inlinestatic

Get the predicted number of non-zero coefficients.

Parameters
nblock index

Definition at line 275 of file h264_cavlc.c.

Referenced by decode_residual().

◆ init_cavlc_level_tab()

static av_cold void init_cavlc_level_tab ( void  )
static

Definition at line 289 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ ff_h264_decode_init_vlc()

av_cold void ff_h264_decode_init_vlc ( void  )

Definition at line 315 of file h264_cavlc.c.

Referenced by h264_decode_init().

◆ get_level_prefix()

static int get_level_prefix ( GetBitContext gb)
inlinestatic

Definition at line 382 of file h264_cavlc.c.

Referenced by decode_residual().

◆ decode_residual()

static int decode_residual ( const H264Context h,
H264SliceContext sl,
GetBitContext gb,
int16_t *  block,
int  n,
const uint8_t *  scantable,
const uint32_t *  qmul,
int  max_coeff 
)
static

Decode a residual block.

Parameters
nblock index
scantablescantable
max_coeffnumber of coefficients in the block
Returns
<0 if an error occurred

Definition at line 405 of file h264_cavlc.c.

Referenced by decode_luma_residual(), and ff_h264_decode_mb_cavlc().

◆ decode_luma_residual()

static av_always_inline int decode_luma_residual ( const H264Context h,
H264SliceContext sl,
GetBitContext gb,
const uint8_t *  scan,
const uint8_t *  scan8x8,
int  pixel_shift,
int  mb_type,
int  cbp,
int  p 
)
static

Definition at line 595 of file h264_cavlc.c.

Referenced by ff_h264_decode_mb_cavlc().

◆ ff_h264_decode_mb_cavlc()

int ff_h264_decode_mb_cavlc ( const H264Context h,
H264SliceContext sl 
)

Decode a macroblock.

Returns
0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error

Definition at line 665 of file h264_cavlc.c.

Referenced by decode_slice().

Variable Documentation

◆ golomb_to_inter_cbp_gray

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

Definition at line 39 of file h264_cavlc.c.

Referenced by ff_h264_decode_mb_cavlc().

◆ golomb_to_intra4x4_cbp_gray

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

Definition at line 43 of file h264_cavlc.c.

Referenced by ff_h264_decode_mb_cavlc().

◆ chroma_dc_coeff_token_len

const uint8_t chroma_dc_coeff_token_len[4 *5]
static
Initial value:
={
2, 0, 0, 0,
6, 1, 0, 0,
6, 6, 3, 0,
6, 7, 7, 6,
6, 8, 8, 7,
}

Definition at line 47 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ chroma_dc_coeff_token_bits

const uint8_t chroma_dc_coeff_token_bits[4 *5]
static
Initial value:
={
1, 0, 0, 0,
7, 1, 0, 0,
4, 6, 1, 0,
3, 3, 2, 5,
2, 3, 2, 0,
}

Definition at line 55 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ chroma422_dc_coeff_token_len

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

Definition at line 63 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ chroma422_dc_coeff_token_bits

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

Definition at line 75 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ coeff_token_len

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

Definition at line 87 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ coeff_token_bits

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

Definition at line 118 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ total_zeros_len

const uint8_t total_zeros_len[16][16]
static
Initial value:
= {
{1,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9},
{3,3,3,3,3,4,4,4,4,5,5,6,6,6,6},
{4,3,3,3,4,4,3,3,4,5,5,6,5,6},
{5,3,4,4,3,3,3,4,3,4,5,5,5},
{4,4,4,3,3,3,3,3,4,5,4,5},
{6,5,3,3,3,3,3,3,4,3,6},
{6,5,3,3,3,2,3,4,3,6},
{6,4,5,3,2,2,3,3,6},
{6,6,4,2,2,3,2,5},
{5,5,3,2,2,2,4},
{4,4,3,3,1,3},
{4,4,2,1,3},
{3,3,1,2},
{2,2,1},
{1,1},
}

Definition at line 149 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ total_zeros_bits

const uint8_t total_zeros_bits[16][16]
static
Initial value:
= {
{1,3,2,3,2,3,2,3,2,3,2,3,2,3,2,1},
{7,6,5,4,3,5,4,3,2,3,2,3,2,1,0},
{5,7,6,5,4,3,4,3,2,3,2,1,1,0},
{3,7,5,4,6,5,4,3,3,2,2,1,0},
{5,4,3,7,6,5,4,3,2,1,1,0},
{1,1,7,6,5,4,3,2,1,1,0},
{1,1,5,4,3,3,2,1,1,0},
{1,1,1,3,3,2,2,1,0},
{1,0,1,3,2,1,1,1},
{1,0,1,3,2,1,1},
{0,1,1,2,1,3},
{0,1,1,1,1},
{0,1,1,1},
{0,1,1},
{0,1},
}

Definition at line 167 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ chroma_dc_total_zeros_len

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

Definition at line 185 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ chroma_dc_total_zeros_bits

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

Definition at line 191 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ chroma422_dc_total_zeros_len

const uint8_t chroma422_dc_total_zeros_len[7][8]
static
Initial value:
= {
{ 1, 3, 3, 4, 4, 4, 5, 5 },
{ 3, 2, 3, 3, 3, 3, 3 },
{ 3, 3, 2, 2, 3, 3 },
{ 3, 2, 2, 2, 3 },
{ 2, 2, 2, 2 },
{ 2, 2, 1 },
{ 1, 1 },
}

Definition at line 197 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ chroma422_dc_total_zeros_bits

const uint8_t chroma422_dc_total_zeros_bits[7][8]
static
Initial value:
= {
{ 1, 2, 3, 2, 3, 1, 1, 0 },
{ 0, 1, 1, 4, 5, 6, 7 },
{ 0, 1, 1, 2, 6, 7 },
{ 6, 0, 1, 2, 7 },
{ 0, 1, 2, 3 },
{ 0, 1, 1 },
{ 0, 1 },
}

Definition at line 207 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ run_len

const uint8_t run_len[7][16]
static
Initial value:
={
{1,1},
{1,2,2},
{2,2,2,2},
{2,2,2,3,3},
{2,2,3,3,3,3},
{2,3,3,3,3,3,3},
{3,3,3,3,3,3,3,4,5,6,7,8,9,10,11},
}

Definition at line 217 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc(), on2avc_decode_band_types(), and rle_decode().

◆ run_bits

const uint8_t run_bits[7][16]
static
Initial value:
={
{1,0},
{1,1,0},
{3,2,1,0},
{3,2,1,1,0},
{3,2,3,2,1,0},
{3,0,1,3,2,5,4},
{7,6,5,4,3,2,1,1,1,1,1,1,1,1,1},
}

Definition at line 227 of file h264_cavlc.c.

Referenced by codebook_trellis_rate(), compute_alpha_vlcs(), encode_window_bands_info(), and ff_h264_decode_init_vlc().

◆ cavlc_level_tab

int8_t cavlc_level_tab[7][1<< LEVEL_TAB_BITS][2]
static

Definition at line 238 of file h264_cavlc.c.

Referenced by decode_residual(), and init_cavlc_level_tab().

◆ coeff_token_vlc

const VLCElem* coeff_token_vlc[17]
static

17 pointers to only four different VLCs

Definition at line 250 of file h264_cavlc.c.

Referenced by decode_residual(), and ff_h264_decode_init_vlc().

◆ chroma_dc_coeff_token_vlc_table

VLCElem chroma_dc_coeff_token_vlc_table[256]
static

Definition at line 252 of file h264_cavlc.c.

Referenced by decode_residual(), and ff_h264_decode_init_vlc().

◆ chroma422_dc_coeff_token_vlc_table

VLCElem chroma422_dc_coeff_token_vlc_table[1<< CHROMA422_DC_COEFF_TOKEN_VLC_BITS]
static

Definition at line 254 of file h264_cavlc.c.

Referenced by decode_residual(), and ff_h264_decode_init_vlc().

◆ total_zeros_vlc

const VLCElem* total_zeros_vlc[15+1]
static

Definition at line 256 of file h264_cavlc.c.

Referenced by decode_residual(), and ff_h264_decode_init_vlc().

◆ chroma_dc_total_zeros_vlc

const VLCElem* chroma_dc_total_zeros_vlc[3+1]
static

Definition at line 258 of file h264_cavlc.c.

Referenced by decode_residual(), and ff_h264_decode_init_vlc().

◆ chroma422_dc_total_zeros_vlc

const VLCElem* chroma422_dc_total_zeros_vlc[7+1]
static

Definition at line 260 of file h264_cavlc.c.

Referenced by decode_residual(), and ff_h264_decode_init_vlc().

◆ run_vlc

const VLCElem* run_vlc[6+1]
static

Definition at line 262 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().

◆ run7_vlc_table

VLCElem run7_vlc_table[96+(6<< RUN_VLC_BITS)+(15<< TOTAL_ZEROS_VLC_BITS)+(3<< CHROMA_DC_TOTAL_ZEROS_VLC_BITS)+(7<< CHROMA422_DC_TOTAL_ZEROS_VLC_BITS)+(520+332+280+256)]
static

Definition at line 269 of file h264_cavlc.c.

Referenced by ff_h264_decode_init_vlc().