FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions | Variables
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.

Macros

#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.

Macro Definition Documentation

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

Definition at line 33 of file intrax8.c.

#define DC_VLC_BITS   9

Definition at line 35 of file intrax8.c.

Referenced by ff_mpeg12_init_vlcs(), and x8_get_dc_rlf().

#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 OR_VLC_BITS   7

Definition at line 37 of file intrax8.c.

Referenced by x8_get_orient_vlc().

#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 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 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 init_ac_vlc (   dst,
  src 
)
Value:
dst.table = &table[offset]; \
dst.table_allocated = sizes[sizeidx]; \
offset += sizes[sizeidx++]; \
init_vlc(&dst, \
&src[1],4,2, \
&src[0],4,2, \

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, \
&src[1],4,2, \
&src[0],4,2, \

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, \
&src[1],4,2, \
&src[0],4,2, \

Referenced by x8_vlc_init().

#define extra_bits (   eb)    (eb)

Definition at line 150 of file intrax8.c.

#define extra_run   (0xFF<<8)

Definition at line 151 of file intrax8.c.

#define extra_level   (0x00<<8)

Definition at line 152 of file intrax8.c.

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

Definition at line 153 of file intrax8.c.

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

Definition at line 154 of file intrax8.c.

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

Function Documentation

static av_cold void x8_vlc_init ( void  )
static

Definition at line 47 of file intrax8.c.

Referenced by ff_intrax8_common_init().

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 
)
inlinestatic

Definition at line 125 of file intrax8.c.

Referenced by x8_decode_intra_mb().

static int x8_get_orient_vlc ( IntraX8Context w)
inlinestatic

Definition at line 138 of file intrax8.c.

Referenced by x8_setup_spatial_predictor().

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_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 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_get_prediction ( IntraX8Context *const  w)
static

Definition at line 374 of file intrax8.c.

Referenced by ff_intrax8_decode_picture().

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 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().

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_init_block_index ( MpegEncContext s)
static

Definition at line 669 of file intrax8.c.

Referenced by ff_intrax8_decode_picture().

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
wpointer to IntraX8Context
spointer 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().

av_cold void ff_intrax8_common_end ( IntraX8Context w)

Destroy IntraX8 frame structure.

Parameters
wpointer to IntraX8Context

Definition at line 708 of file intrax8.c.

Referenced by ff_vc1_decode_end(), and wmv2_decode_end().

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
wpointer to IntraX8Context
dquantdoubled quantizer, it would be odd in case of VC-1 halfpq==1.
quant_offsetoffset away from zero

Definition at line 725 of file intrax8.c.

Referenced by ff_vc1_decode_blocks(), and ff_wmv2_decode_secondary_picture_header().

Variable Documentation

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 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().

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.

Referenced by x8_decode_intra_mb().