libavcodec/vc1dsp.c File Reference

VC-1 and WMV3 decoder. More...

#include "vc1dsp.h"

Go to the source code of this file.

Defines

#define VC1_MSPEL_FILTER_16B(DIR, TYPE)
 Filter in case of 2 filters.
#define VC1_MSPEL_MC(OP, OPNAME)
 Function used to do motion compensation with bicubic interpolation.
#define op_put(a, b)   a = av_clip_uint8(b)
#define op_avg(a, b)   a = (a + av_clip_uint8(b) + 1) >> 1
#define PUT_VC1_MSPEL(a, b)
#define avg2(a, b)   ((a+b+1)>>1)

Functions

static void vc1_v_overlap_c (uint8_t *src, int stride)
 Apply overlap transform to horizontal edge.
static void vc1_h_overlap_c (uint8_t *src, int stride)
 Apply overlap transform to vertical edge.
static void vc1_v_s_overlap_c (DCTELEM *top, DCTELEM *bottom)
static void vc1_h_s_overlap_c (DCTELEM *left, DCTELEM *right)
static av_always_inline int vc1_filter_line (uint8_t *src, int stride, int pq)
 VC-1 in-loop deblocking filter for one line.
static void vc1_loop_filter (uint8_t *src, int step, int stride, int len, int pq)
 VC-1 in-loop deblocking filter.
static void vc1_v_loop_filter4_c (uint8_t *src, int stride, int pq)
static void vc1_h_loop_filter4_c (uint8_t *src, int stride, int pq)
static void vc1_v_loop_filter8_c (uint8_t *src, int stride, int pq)
static void vc1_h_loop_filter8_c (uint8_t *src, int stride, int pq)
static void vc1_v_loop_filter16_c (uint8_t *src, int stride, int pq)
static void vc1_h_loop_filter16_c (uint8_t *src, int stride, int pq)
static void vc1_inv_trans_8x8_dc_c (uint8_t *dest, int linesize, DCTELEM *block)
 Do inverse transform on 8x8 block.
static void vc1_inv_trans_8x8_c (DCTELEM block[64])
static void vc1_inv_trans_8x4_dc_c (uint8_t *dest, int linesize, DCTELEM *block)
 Do inverse transform on 8x4 part of block.
static void vc1_inv_trans_8x4_c (uint8_t *dest, int linesize, DCTELEM *block)
static void vc1_inv_trans_4x8_dc_c (uint8_t *dest, int linesize, DCTELEM *block)
 Do inverse transform on 4x8 parts of block.
static void vc1_inv_trans_4x8_c (uint8_t *dest, int linesize, DCTELEM *block)
static void vc1_inv_trans_4x4_dc_c (uint8_t *dest, int linesize, DCTELEM *block)
 Do inverse transform on 4x4 part of block.
static void vc1_inv_trans_4x4_c (uint8_t *dest, int linesize, DCTELEM *block)
 VC1_MSPEL_FILTER_16B (ver, uint8_t)
 VC1_MSPEL_FILTER_16B (hor, int16_t)
static av_always_inline int vc1_mspel_filter (const uint8_t *src, int stride, int mode, int r)
 Filter used to interpolate fractional pel values.
static void put_no_rnd_vc1_chroma_mc8_c (uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
static void put_no_rnd_vc1_chroma_mc4_c (uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
static void avg_no_rnd_vc1_chroma_mc8_c (uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
av_cold void ff_vc1dsp_init (VC1DSPContext *dsp)


Detailed Description

VC-1 and WMV3 decoder.

Definition in file vc1dsp.c.


Define Documentation

#define avg2 ( a,
 )     ((a+b+1)>>1)

Definition at line 711 of file vc1dsp.c.

#define op_avg ( a,
 )     a = (a + av_clip_uint8(b) + 1) >> 1

Definition at line 633 of file vc1dsp.c.

#define op_put ( a,
 )     a = av_clip_uint8(b)

Definition at line 632 of file vc1dsp.c.

#define PUT_VC1_MSPEL ( a,
 ) 

Value:

static void put_vc1_mspel_mc ## a ## b ##_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) { \
     put_vc1_mspel_mc(dst, src, stride, a, b, rnd);                         \
}\
static void avg_vc1_mspel_mc ## a ## b ##_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) { \
     avg_vc1_mspel_mc(dst, src, stride, a, b, rnd);                         \
}

Definition at line 640 of file vc1dsp.c.

#define VC1_MSPEL_FILTER_16B ( DIR,
TYPE   ) 

Value:

static av_always_inline int vc1_mspel_ ## DIR ## _filter_16bits(const TYPE *src, int stride, int mode) \
{                                                                       \
    switch(mode){                                                       \
    case 0: /* no shift - should not occur */                           \
        return 0;                                                       \
    case 1: /* 1/4 shift */                                             \
        return -4*src[-stride] + 53*src[0] + 18*src[stride] - 3*src[stride*2]; \
    case 2: /* 1/2 shift */                                             \
        return -src[-stride] + 9*src[0] + 9*src[stride] - src[stride*2]; \
    case 3: /* 3/4 shift */                                             \
        return -3*src[-stride] + 18*src[0] + 53*src[stride] - 4*src[stride*2]; \
    }                                                                   \
    return 0; /* should not occur */                                    \
}
Filter in case of 2 filters.

Definition at line 537 of file vc1dsp.c.

#define VC1_MSPEL_MC ( OP,
OPNAME   ) 

Function used to do motion compensation with bicubic interpolation.

Definition at line 576 of file vc1dsp.c.


Function Documentation

static void avg_no_rnd_vc1_chroma_mc8_c ( uint8_t *  dst,
uint8_t *  src,
int  stride,
int  h,
int  x,
int  y 
) [static]

Definition at line 712 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

av_cold void ff_vc1dsp_init ( VC1DSPContext dsp  ) 

Definition at line 796 of file vc1dsp.c.

Referenced by vc1_decode_init().

static void put_no_rnd_vc1_chroma_mc4_c ( uint8_t *  dst,
uint8_t *  src,
int  stride,
int  h,
int  x,
int  y 
) [static]

Definition at line 691 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void put_no_rnd_vc1_chroma_mc8_c ( uint8_t *  dst,
uint8_t *  src,
int  stride,
int  h,
int  x,
int  y 
) [static]

Definition at line 667 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static av_always_inline int vc1_filter_line ( uint8_t *  src,
int  stride,
int  pq 
) [static]

VC-1 in-loop deblocking filter for one line.

Parameters:
src source block type
stride block stride
pq block quantizer
Returns:
whether other 3 pairs should be filtered or not
See also:
8.6

Definition at line 141 of file vc1dsp.c.

Referenced by vc1_loop_filter().

static void vc1_h_loop_filter16_c ( uint8_t *  src,
int  stride,
int  pq 
) [static]

Definition at line 226 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_h_loop_filter4_c ( uint8_t *  src,
int  stride,
int  pq 
) [static]

Definition at line 206 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_h_loop_filter8_c ( uint8_t *  src,
int  stride,
int  pq 
) [static]

Definition at line 216 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_h_overlap_c ( uint8_t *  src,
int  stride 
) [static]

Apply overlap transform to vertical edge.

Definition at line 58 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_h_s_overlap_c ( DCTELEM left,
DCTELEM right 
) [static]

Definition at line 107 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_4x4_c ( uint8_t *  dest,
int  linesize,
DCTELEM block 
) [static]

Definition at line 494 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_4x4_dc_c ( uint8_t *  dest,
int  linesize,
DCTELEM block 
) [static]

Do inverse transform on 4x4 part of block.

Definition at line 477 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_4x8_c ( uint8_t *  dest,
int  linesize,
DCTELEM block 
) [static]

Definition at line 420 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_4x8_dc_c ( uint8_t *  dest,
int  linesize,
DCTELEM block 
) [static]

Do inverse transform on 4x8 parts of block.

Definition at line 403 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_8x4_c ( uint8_t *  dest,
int  linesize,
DCTELEM block 
) [static]

Definition at line 346 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_8x4_dc_c ( uint8_t *  dest,
int  linesize,
DCTELEM block 
) [static]

Do inverse transform on 8x4 part of block.

Definition at line 325 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_8x8_c ( DCTELEM  block[64]  )  [static]

Definition at line 254 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_8x8_dc_c ( uint8_t *  dest,
int  linesize,
DCTELEM block 
) [static]

Do inverse transform on 8x8 block.

Definition at line 233 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_loop_filter ( uint8_t *  src,
int  step,
int  stride,
int  len,
int  pq 
) [inline, static]

VC-1 in-loop deblocking filter.

Parameters:
src source block type
step distance between horizontally adjacent elements
stride distance between vertically adjacent elements
len edge length to filter (4 or 8 pixels)
pq block quantizer
See also:
8.6

Definition at line 185 of file vc1dsp.c.

Referenced by vc1_h_loop_filter16_c(), vc1_h_loop_filter4_c(), vc1_h_loop_filter8_c(), vc1_v_loop_filter16_c(), vc1_v_loop_filter4_c(), and vc1_v_loop_filter8_c().

static av_always_inline int vc1_mspel_filter ( const uint8_t *  src,
int  stride,
int  mode,
int  r 
) [static]

Filter used to interpolate fractional pel values.

Definition at line 559 of file vc1dsp.c.

VC1_MSPEL_FILTER_16B ( hor  ,
int16_t   
)

VC1_MSPEL_FILTER_16B ( ver  ,
uint8_t   
)

static void vc1_v_loop_filter16_c ( uint8_t *  src,
int  stride,
int  pq 
) [static]

Definition at line 221 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_v_loop_filter4_c ( uint8_t *  src,
int  stride,
int  pq 
) [static]

Definition at line 201 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_v_loop_filter8_c ( uint8_t *  src,
int  stride,
int  pq 
) [static]

Definition at line 211 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_v_overlap_c ( uint8_t *  src,
int  stride 
) [static]

Apply overlap transform to horizontal edge.

Definition at line 33 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_v_s_overlap_c ( DCTELEM top,
DCTELEM bottom 
) [static]

Definition at line 81 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().


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