libavcodec/intrax8.c File Reference

IntraX8 (J-Frame) subdecoder, used by WMV2 and VC-1. More...

#include "libavutil/avassert.h"
#include "avcodec.h"
#include "get_bits.h"
#include "mpegvideo.h"
#include "msmpeg4data.h"
#include "intrax8huf.h"
#include "intrax8.h"
#include "intrax8dsp.h"

Go to the source code of this file.

Defines

#define MAX_TABLE_DEPTH(table_bits, max_bits)   ((max_bits+table_bits-1)/table_bits)
#define DC_VLC_BITS   9
#define AC_VLC_BITS   9
#define OR_VLC_BITS   7
#define DC_VLC_MTD   MAX_TABLE_DEPTH(DC_VLC_BITS, MAX_DC_VLC_BITS)
#define AC_VLC_MTD   MAX_TABLE_DEPTH(AC_VLC_BITS, MAX_AC_VLC_BITS)
#define OR_VLC_MTD   MAX_TABLE_DEPTH(OR_VLC_BITS, MAX_OR_VLC_BITS)
#define init_ac_vlc(dst, src)
#define init_dc_vlc(dst, src)
#define init_or_vlc(dst, src)
#define extra_bits(eb)   (eb)
#define extra_run   (0xFF<<8)
#define extra_level   (0x00<<8)
#define run_offset(r)   ((r)<<16)
#define level_offset(l)   ((l)<<24)
#define B(x, y)   s->block[0][s->dsp.idct_permutation[(x)+(y)*8]]
#define T(x)   ((x) * dc_level + 0x8000) >> 16;

Functions

static av_cold void x8_vlc_init (void)
static void x8_reset_vlc_tables (IntraX8Context *w)
static void x8_select_ac_table (IntraX8Context *const w, int mode)
static int x8_get_orient_vlc (IntraX8Context *w)
static void x8_get_ac_rlf (IntraX8Context *const w, const int mode, int *const run, int *const level, int *const final)
static int x8_get_dc_rlf (IntraX8Context *const w, int const mode, int *const level, int *const final)
static int x8_setup_spatial_predictor (IntraX8Context *const w, const int chroma)
static void x8_update_predictions (IntraX8Context *const w, const int orient, const int est_run)
static void x8_get_prediction_chroma (IntraX8Context *const w)
static void x8_get_prediction (IntraX8Context *const w)
static void x8_ac_compensation (IntraX8Context *const w, int const direction, int const dc_level)
static void dsp_x8_put_solidcolor (uint8_t const pix, uint8_t *dst, int const linesize)
static int x8_decode_intra_mb (IntraX8Context *const w, const int chroma)
static void x8_init_block_index (MpegEncContext *s)
av_cold void ff_intrax8_common_init (IntraX8Context *w, MpegEncContext *const s)
 Initialize IntraX8 frame decoder.
av_cold void ff_intrax8_common_end (IntraX8Context *w)
 Destroy IntraX8 frame structure.
int ff_intrax8_decode_picture (IntraX8Context *const w, int dquant, int quant_offset)
 Decode single IntraX8 frame.

Variables

static VLC j_ac_vlc [2][2][8]
static VLC j_dc_vlc [2][8]
static VLC j_orient_vlc [2][4]
static const uint32_t ac_decode_table []
static const uint8_t dc_index_offset [] = { 0, 1,2, 3,4, 5,7, 9,13, 17,25, 33,49, 65,97, 129,193}
static const int16_t quant_table [64]


Detailed Description

IntraX8 (J-Frame) subdecoder, used by WMV2 and VC-1.

Definition in file intrax8.c.


Define Documentation

#define AC_VLC_BITS   9

Definition at line 36 of file intrax8.c.

Referenced by ff_vc1_init_common(), vc1_decode_ac_coeff(), and x8_get_ac_rlf().

#define AC_VLC_MTD   MAX_TABLE_DEPTH(AC_VLC_BITS, MAX_AC_VLC_BITS)

Definition at line 40 of file intrax8.c.

Referenced by x8_get_ac_rlf().

#define B ( x,
 )     s->block[0][s->dsp.idct_permutation[(x)+(y)*8]]

#define DC_VLC_BITS   9

#define DC_VLC_MTD   MAX_TABLE_DEPTH(DC_VLC_BITS, MAX_DC_VLC_BITS)

Definition at line 39 of file intrax8.c.

Referenced by x8_get_dc_rlf().

#define extra_bits ( eb   )     (eb)

Definition at line 150 of file intrax8.c.

#define extra_level   (0x00<<8)

Definition at line 152 of file intrax8.c.

#define extra_run   (0xFF<<8)

Definition at line 151 of file intrax8.c.

#define init_ac_vlc ( dst,
src   ) 

Value:

dst.table = &table[offset]; \
    dst.table_allocated = sizes[sizeidx]; \
    offset += sizes[sizeidx++]; \
       init_vlc(&dst, \
              AC_VLC_BITS,77, \
              &src[1],4,2, \
              &src[0],4,2, \
              INIT_VLC_USE_NEW_STATIC)

Referenced by x8_vlc_init().

#define init_dc_vlc ( dst,
src   ) 

Value:

dst.table = &table[offset]; \
    dst.table_allocated = sizes[sizeidx]; \
    offset += sizes[sizeidx++]; \
        init_vlc(&dst, \
        DC_VLC_BITS,34, \
        &src[1],4,2, \
        &src[0],4,2, \
        INIT_VLC_USE_NEW_STATIC);

Referenced by x8_vlc_init().

#define init_or_vlc ( dst,
src   ) 

Value:

dst.table = &table[offset]; \
    dst.table_allocated = sizes[sizeidx]; \
    offset += sizes[sizeidx++]; \
    init_vlc(&dst, \
    OR_VLC_BITS,12, \
    &src[1],4,2, \
    &src[0],4,2, \
    INIT_VLC_USE_NEW_STATIC);

Referenced by x8_vlc_init().

#define level_offset (  )     ((l)<<24)

Definition at line 154 of file intrax8.c.

#define MAX_TABLE_DEPTH ( table_bits,
max_bits   )     ((max_bits+table_bits-1)/table_bits)

Definition at line 33 of file intrax8.c.

#define OR_VLC_BITS   7

Definition at line 37 of file intrax8.c.

Referenced by x8_get_orient_vlc().

#define OR_VLC_MTD   MAX_TABLE_DEPTH(OR_VLC_BITS, MAX_OR_VLC_BITS)

Definition at line 41 of file intrax8.c.

Referenced by x8_get_orient_vlc().

#define run_offset (  )     ((r)<<16)

Definition at line 153 of file intrax8.c.

#define T (  )     ((x) * dc_level + 0x8000) >> 16;


Function Documentation

static void dsp_x8_put_solidcolor ( uint8_t const   pix,
uint8_t dst,
int const   linesize 
) [static]

Definition at line 506 of file intrax8.c.

Referenced by x8_decode_intra_mb().

av_cold void ff_intrax8_common_end ( IntraX8Context w  ) 

Destroy IntraX8 frame structure.

Parameters:
w pointer to IntraX8Context

Definition at line 708 of file intrax8.c.

Referenced by ff_vc1_decode_end(), and wmv2_decode_end().

av_cold void ff_intrax8_common_init ( IntraX8Context w,
MpegEncContext *const   s 
)

Initialize IntraX8 frame decoder.

Requires valid MpegEncContext with valid s->mb_width before calling.

Parameters:
w pointer to IntraX8Context
s pointer to MpegEncContext of the parent codec

Definition at line 690 of file intrax8.c.

Referenced by ff_vc1_decode_init_alloc_tables(), and wmv2_decode_init().

int ff_intrax8_decode_picture ( IntraX8Context *const   w,
int  dquant,
int  quant_offset 
)

Decode single IntraX8 frame.

The parent codec must fill s->loopfilter and s->gb (bitstream). The parent codec must call MPV_frame_start(), ff_er_frame_start() before calling this function. The parent codec must call ff_er_frame_end(), MPV_frame_end() after calling this function. This function does not use MPV_decode_mb(). lowres decoding is theoretically impossible.

Parameters:
w pointer to IntraX8Context
dquant doubled quantizer, it would be odd in case of VC-1 halfpq==1.
quant_offset offset away from zero

Definition at line 725 of file intrax8.c.

Referenced by ff_vc1_decode_blocks(), and ff_wmv2_decode_secondary_picture_header().

static void x8_ac_compensation ( IntraX8Context *const   w,
int const   direction,
int const   dc_level 
) [static]

Definition at line 436 of file intrax8.c.

Referenced by x8_decode_intra_mb().

static int x8_decode_intra_mb ( IntraX8Context *const   w,
const int  chroma 
) [static]

Definition at line 525 of file intrax8.c.

Referenced by ff_intrax8_decode_picture().

static void x8_get_ac_rlf ( IntraX8Context *const   w,
const int  mode,
int *const   run,
int *const   level,
int *const   final 
) [static]

Definition at line 198 of file intrax8.c.

Referenced by x8_decode_intra_mb().

static int x8_get_dc_rlf ( IntraX8Context *const   w,
int const   mode,
int *const   level,
int *const   final 
) [static]

Definition at line 263 of file intrax8.c.

Referenced by x8_decode_intra_mb().

static int x8_get_orient_vlc ( IntraX8Context w  )  [inline, static]

Definition at line 138 of file intrax8.c.

Referenced by x8_setup_spatial_predictor().

static void x8_get_prediction ( IntraX8Context *const   w  )  [static]

Definition at line 374 of file intrax8.c.

Referenced by ff_intrax8_decode_picture().

static void x8_get_prediction_chroma ( IntraX8Context *const   w  )  [static]

Definition at line 359 of file intrax8.c.

Referenced by ff_intrax8_decode_picture().

static void x8_init_block_index ( MpegEncContext s  )  [static]

Definition at line 669 of file intrax8.c.

Referenced by ff_intrax8_decode_picture().

static void x8_reset_vlc_tables ( IntraX8Context w  )  [static]

Definition at line 119 of file intrax8.c.

Referenced by ff_intrax8_decode_picture().

static void x8_select_ac_table ( IntraX8Context *const   w,
int  mode 
) [inline, static]

Definition at line 125 of file intrax8.c.

Referenced by x8_decode_intra_mb().

static int x8_setup_spatial_predictor ( IntraX8Context *const   w,
const int  chroma 
) [static]

Definition at line 298 of file intrax8.c.

Referenced by ff_intrax8_decode_picture().

static void x8_update_predictions ( IntraX8Context *const   w,
const int  orient,
const int  est_run 
) [static]

Definition at line 350 of file intrax8.c.

Referenced by x8_decode_intra_mb().

static av_cold void x8_vlc_init ( void   )  [static]

Definition at line 47 of file intrax8.c.

Referenced by ff_intrax8_common_init().


Variable Documentation

const uint32_t ac_decode_table[] [static]

Definition at line 155 of file intrax8.c.

Referenced by x8_get_ac_rlf().

const uint8_t dc_index_offset[] = { 0, 1,2, 3,4, 5,7, 9,13, 17,25, 33,49, 65,97, 129,193} [static]

Definition at line 261 of file intrax8.c.

Referenced by x8_get_dc_rlf().

VLC j_ac_vlc[2][2][8] [static]

Definition at line 43 of file intrax8.c.

VLC j_dc_vlc[2][8] [static]

Definition at line 44 of file intrax8.c.

VLC j_orient_vlc[2][4] [static]

Definition at line 45 of file intrax8.c.

const int16_t quant_table[64] [static]

Initial value:

 {
    256, 256, 256, 256,  256, 256, 259, 262,
    265, 269, 272, 275,  278, 282, 285, 288,
    292, 295, 299, 303,  306, 310, 314, 317,
    321, 325, 329, 333,  337, 341, 345, 349,
    353, 358, 362, 366,  371, 375, 379, 384,
    389, 393, 398, 403,  408, 413, 417, 422,
    428, 433, 438, 443,  448, 454, 459, 465,
    470, 476, 482, 488,  493, 499, 505, 511
}

Definition at line 514 of file intrax8.c.


Generated on Fri Oct 26 02:50:06 2012 for FFmpeg by  doxygen 1.5.8