FFmpeg
Macros | Functions | Variables
vc1_block.c File Reference
#include "avcodec.h"
#include "mpegutils.h"
#include "mpegvideo.h"
#include "msmpeg4data.h"
#include "unary.h"
#include "vc1.h"
#include "vc1_pred.h"
#include "vc1acdata.h"
#include "vc1data.h"

Go to the source code of this file.

Macros

#define MB_INTRA_VLC_BITS   9
 
#define DC_VLC_BITS   9
 
#define inc_blk_idx(idx)
 

Functions

static void vc1_put_blocks_clamped (VC1Context *v, int put_signed)
 
static int vc1_decode_p_mb (VC1Context *v)
 Decode one P-frame MB. More...
 
static int vc1_decode_p_mb_intfr (VC1Context *v)
 
static int vc1_decode_p_mb_intfi (VC1Context *v)
 
static int vc1_decode_b_mb (VC1Context *v)
 Decode one B-frame MB (in Main profile) More...
 
static int vc1_decode_b_mb_intfi (VC1Context *v)
 Decode one B-frame MB (in interlaced field B picture) More...
 
static int vc1_decode_b_mb_intfr (VC1Context *v)
 Decode one B-frame MB (in interlaced frame B picture) More...
 
static void vc1_decode_i_blocks (VC1Context *v)
 Decode blocks of I-frame. More...
 
static int vc1_decode_i_blocks_adv (VC1Context *v)
 Decode blocks of I-frame for advanced profile. More...
 
static void vc1_decode_p_blocks (VC1Context *v)
 
static void vc1_decode_b_blocks (VC1Context *v)
 
static void vc1_decode_skip_blocks (VC1Context *v)
 
void ff_vc1_decode_blocks (VC1Context *v)
 
VC-1 Bitplane decoding
See also
8.7, p56
static void init_block_index (VC1Context *v)
 
VC1 Macroblock-level functions in Simple/Main Profiles
See also
7.1.4, p91 and 8.1.1.7, p(1)04
static int vc1_coded_block_pred (MpegEncContext *s, int n, uint8_t **coded_block_ptr)
 
static int vc1_decode_ac_coeff (VC1Context *v, int *last, int *skip, int *value, int codingset)
 Decode one AC coefficient. More...
 
static int vc1_decode_i_block (VC1Context *v, int16_t block[64], int n, int coded, int codingset)
 Decode intra block in intra frames - should be faster than decode_intra_block. More...
 
static int vc1_decode_i_block_adv (VC1Context *v, int16_t block[64], int n, int coded, int codingset, int mquant)
 Decode intra block in intra frames - should be faster than decode_intra_block. More...
 
static int vc1_decode_intra_block (VC1Context *v, int16_t block[64], int n, int coded, int mquant, int codingset)
 Decode intra block in inter frames - more generic version than vc1_decode_i_block. More...
 
static int vc1_decode_p_block (VC1Context *v, int16_t block[64], int n, int mquant, int ttmb, int first_block, uint8_t *dst, int linesize, int skip_block, int *ttmb_out)
 Decode P block. More...
 

Variables

static const uint8_t offset_table [2][9]
 
static const int block_map [6] = {0, 2, 1, 3, 4, 5}
 
static const uint8_t size_table [6] = { 0, 2, 3, 4, 5, 8 }
 

VC-1 Block-level functions

See also
7.1.4, p91 and 8.1.1.7, p(1)04
#define GET_MQUANT()
 Get macroblock-level quantizer scale. More...
 
#define GET_MVDATA(_dmv_x, _dmv_y)
 Get MV differentials. More...
 
static av_always_inline void get_mvdata_interlaced (VC1Context *v, int *dmv_x, int *dmv_y, int *pred_flag)
 
static void vc1_b_mc (VC1Context *v, int dmv_x[2], int dmv_y[2], int direct, int mode)
 Reconstruct motion vector for B-frame and do motion compensation. More...
 
static int vc1_i_pred_dc (MpegEncContext *s, int overlap, int pq, int n, int16_t **dc_val_ptr, int *dir_ptr)
 Get predicted DC value for I-frames only prediction dir: left=0, top=1. More...
 
static int ff_vc1_pred_dc (MpegEncContext *s, int overlap, int pq, int n, int a_avail, int c_avail, int16_t **dc_val_ptr, int *dir_ptr)
 Get predicted DC value prediction dir: left=0, top=1. More...
 

Detailed Description

VC-1 and WMV3 block decoding routines

Definition in file vc1_block.c.

Macro Definition Documentation

◆ MB_INTRA_VLC_BITS

#define MB_INTRA_VLC_BITS   9

Definition at line 39 of file vc1_block.c.

◆ DC_VLC_BITS

#define DC_VLC_BITS   9

Definition at line 40 of file vc1_block.c.

◆ inc_blk_idx

#define inc_blk_idx (   idx)
Value:
do { \
idx++; \
if (idx >= v->n_allocated_blks) \
idx = 0; \
} while (0)

Definition at line 164 of file vc1_block.c.

◆ GET_MQUANT

#define GET_MQUANT ( )

Get macroblock-level quantizer scale.

Definition at line 181 of file vc1_block.c.

◆ GET_MVDATA

#define GET_MVDATA (   _dmv_x,
  _dmv_y 
)

Get MV differentials.

See also
MVDATA decoding from 8.3.5.2, p(1)20
Parameters
_dmv_xHorizontal differential for decoded MV
_dmv_yVertical differential for decoded MV

Definition at line 224 of file vc1_block.c.

Function Documentation

◆ init_block_index()

static void init_block_index ( VC1Context v)
inlinestatic

◆ vc1_put_blocks_clamped()

static void vc1_put_blocks_clamped ( VC1Context v,
int  put_signed 
)
static

◆ get_mvdata_interlaced()

static av_always_inline void get_mvdata_interlaced ( VC1Context v,
int dmv_x,
int dmv_y,
int pred_flag 
)
static

◆ vc1_b_mc()

static void vc1_b_mc ( VC1Context v,
int  dmv_x[2],
int  dmv_y[2],
int  direct,
int  mode 
)
inlinestatic

Reconstruct motion vector for B-frame and do motion compensation.

Definition at line 313 of file vc1_block.c.

Referenced by vc1_decode_b_mb(), and vc1_decode_b_mb_intfi().

◆ vc1_i_pred_dc()

static int vc1_i_pred_dc ( MpegEncContext s,
int  overlap,
int  pq,
int  n,
int16_t **  dc_val_ptr,
int dir_ptr 
)
inlinestatic

Get predicted DC value for I-frames only prediction dir: left=0, top=1.

Parameters
sMpegEncContext
overlapflag indicating that overlap filtering is used
pqinteger part of picture quantizer
[in]nblock index in the current MB
dc_val_ptrPointer to DC predictor
dir_ptrPrediction direction for use in AC prediction

Definition at line 339 of file vc1_block.c.

Referenced by vc1_decode_i_block().

◆ ff_vc1_pred_dc()

static int ff_vc1_pred_dc ( MpegEncContext s,
int  overlap,
int  pq,
int  n,
int  a_avail,
int  c_avail,
int16_t **  dc_val_ptr,
int dir_ptr 
)
inlinestatic

Get predicted DC value prediction dir: left=0, top=1.

Parameters
sMpegEncContext
overlapflag indicating that overlap filtering is used
pqinteger part of picture quantizer
[in]nblock index in the current MB
a_availflag indicating top block availability
c_availflag indicating left block availability
dc_val_ptrPointer to DC predictor
dir_ptrPrediction direction for use in AC prediction

Definition at line 404 of file vc1_block.c.

Referenced by vc1_decode_i_block_adv(), and vc1_decode_intra_block().

◆ vc1_coded_block_pred()

static int vc1_coded_block_pred ( MpegEncContext s,
int  n,
uint8_t **  coded_block_ptr 
)
inlinestatic

Definition at line 475 of file vc1_block.c.

Referenced by vc1_decode_i_blocks(), and vc1_decode_i_blocks_adv().

◆ vc1_decode_ac_coeff()

static int vc1_decode_ac_coeff ( VC1Context v,
int last,
int skip,
int value,
int  codingset 
)
static

Decode one AC coefficient.

Parameters
vThe VC1 context
lastLast coefficient
skipHow much zero coefficients to skip
valueDecoded AC coefficient value
codingsetset of VLC to decode data
See also
8.1.3.4

Definition at line 511 of file vc1_block.c.

Referenced by vc1_decode_i_block(), vc1_decode_i_block_adv(), vc1_decode_intra_block(), and vc1_decode_p_block().

◆ vc1_decode_i_block()

static int vc1_decode_i_block ( VC1Context v,
int16_t  block[64],
int  n,
int  coded,
int  codingset 
)
static

Decode intra block in intra frames - should be faster than decode_intra_block.

Parameters
vVC1Context
blockblock to decode
[in]nsubblock index
codedare AC coeffs present or not
codingsetset of VLC to decode data

Definition at line 578 of file vc1_block.c.

Referenced by vc1_decode_i_blocks().

◆ vc1_decode_i_block_adv()

static int vc1_decode_i_block_adv ( VC1Context v,
int16_t  block[64],
int  n,
int  coded,
int  codingset,
int  mquant 
)
static

Decode intra block in intra frames - should be faster than decode_intra_block.

Parameters
vVC1Context
blockblock to decode
[in]nsubblock number
codedare AC coeffs present or not
codingsetset of VLC to decode data
mquantquantizer value for this macroblock

Definition at line 716 of file vc1_block.c.

Referenced by vc1_decode_i_blocks_adv().

◆ vc1_decode_intra_block()

static int vc1_decode_intra_block ( VC1Context v,
int16_t  block[64],
int  n,
int  coded,
int  mquant,
int  codingset 
)
static

Decode intra block in inter frames - more generic version than vc1_decode_i_block.

Parameters
vVC1Context
blockblock to decode
[in]nsubblock index
codedare AC coeffs present or not
mquantblock quantizer
codingsetset of VLC to decode data

Definition at line 907 of file vc1_block.c.

Referenced by vc1_decode_b_mb(), vc1_decode_b_mb_intfi(), vc1_decode_b_mb_intfr(), vc1_decode_p_mb(), vc1_decode_p_mb_intfi(), and vc1_decode_p_mb_intfr().

◆ vc1_decode_p_block()

static int vc1_decode_p_block ( VC1Context v,
int16_t  block[64],
int  n,
int  mquant,
int  ttmb,
int  first_block,
uint8_t *  dst,
int  linesize,
int  skip_block,
int ttmb_out 
)
static

◆ vc1_decode_p_mb()

static int vc1_decode_p_mb ( VC1Context v)
static

Decode one P-frame MB.

Definition at line 1286 of file vc1_block.c.

Referenced by vc1_decode_p_blocks().

◆ vc1_decode_p_mb_intfr()

static int vc1_decode_p_mb_intfr ( VC1Context v)
static

Definition at line 1518 of file vc1_block.c.

Referenced by vc1_decode_p_blocks().

◆ vc1_decode_p_mb_intfi()

static int vc1_decode_p_mb_intfi ( VC1Context v)
static

Definition at line 1728 of file vc1_block.c.

Referenced by vc1_decode_p_blocks().

◆ vc1_decode_b_mb()

static int vc1_decode_b_mb ( VC1Context v)
static

Decode one B-frame MB (in Main profile)

Definition at line 1852 of file vc1_block.c.

Referenced by vc1_decode_b_blocks().

◆ vc1_decode_b_mb_intfi()

static int vc1_decode_b_mb_intfi ( VC1Context v)
static

Decode one B-frame MB (in interlaced field B picture)

Definition at line 2010 of file vc1_block.c.

Referenced by vc1_decode_b_blocks().

◆ vc1_decode_b_mb_intfr()

static int vc1_decode_b_mb_intfr ( VC1Context v)
static

Decode one B-frame MB (in interlaced frame B picture)

Definition at line 2177 of file vc1_block.c.

Referenced by vc1_decode_b_blocks().

◆ vc1_decode_i_blocks()

static void vc1_decode_i_blocks ( VC1Context v)
static

Decode blocks of I-frame.

Definition at line 2527 of file vc1_block.c.

Referenced by ff_vc1_decode_blocks().

◆ vc1_decode_i_blocks_adv()

static int vc1_decode_i_blocks_adv ( VC1Context v)
static

Decode blocks of I-frame for advanced profile.

Definition at line 2652 of file vc1_block.c.

Referenced by ff_vc1_decode_blocks().

◆ vc1_decode_p_blocks()

static void vc1_decode_p_blocks ( VC1Context v)
static

Definition at line 2795 of file vc1_block.c.

Referenced by ff_vc1_decode_blocks().

◆ vc1_decode_b_blocks()

static void vc1_decode_b_blocks ( VC1Context v)
static

Definition at line 2887 of file vc1_block.c.

Referenced by ff_vc1_decode_blocks().

◆ vc1_decode_skip_blocks()

static void vc1_decode_skip_blocks ( VC1Context v)
static

Definition at line 2971 of file vc1_block.c.

Referenced by ff_vc1_decode_blocks().

◆ ff_vc1_decode_blocks()

void ff_vc1_decode_blocks ( VC1Context v)

Definition at line 2993 of file vc1_block.c.

Referenced by decode_wmv9(), and vc1_decode_frame().

Variable Documentation

◆ offset_table

const uint8_t offset_table[2][9]
static
Initial value:
= {
{ 0, 1, 2, 4, 8, 16, 32, 64, 128 },
{ 0, 1, 3, 7, 15, 31, 63, 127, 255 },
}

Definition at line 43 of file vc1_block.c.

Referenced by get_mvdata_interlaced().

◆ block_map

const int block_map[6] = {0, 2, 1, 3, 4, 5}
static

◆ size_table

const uint8_t size_table[6] = { 0, 2, 3, 4, 5, 8 }
static

Definition at line 1282 of file vc1_block.c.