FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions
vc1dsp.c File Reference

VC-1 and WMV3 decoder. More...

#include "libavutil/avassert.h"
#include "libavutil/common.h"
#include "h264chroma.h"
#include "rnd_avg.h"
#include "vc1dsp.h"

Go to the source code of this file.

Macros

#define VC1_MSPEL_FILTER_16B(DIR, TYPE)
 Filter in case of 2 filters.
 
#define VC1_MSPEL_MC(OP, OP4, 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 op4_avg(a, b)   a = rnd_avg32(a, b)
 
#define op4_put(a, b)   a = b
 
#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 (int16_t *top, int16_t *bottom)
 
static void vc1_h_s_overlap_c (int16_t *left, int16_t *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, int16_t *block)
 Do inverse transform on 8x8 block.
 
static void vc1_inv_trans_8x8_c (int16_t block[64])
 
static void vc1_inv_trans_8x4_dc_c (uint8_t *dest, int linesize, int16_t *block)
 Do inverse transform on 8x4 part of block.
 
static void vc1_inv_trans_8x4_c (uint8_t *dest, int linesize, int16_t *block)
 
static void vc1_inv_trans_4x8_dc_c (uint8_t *dest, int linesize, int16_t *block)
 Do inverse transform on 4x8 parts of block.
 
static void vc1_inv_trans_4x8_c (uint8_t *dest, int linesize, int16_t *block)
 
static void vc1_inv_trans_4x4_dc_c (uint8_t *dest, int linesize, int16_t *block)
 Do inverse transform on 4x4 part of block.
 
static void vc1_inv_trans_4x4_c (uint8_t *dest, int linesize, int16_t *block)
 
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.

Macro Definition Documentation

#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 528 of file vc1dsp.c.

#define VC1_MSPEL_MC (   OP,
  OP4,
  OPNAME 
)

Function used to do motion compensation with bicubic interpolation.

Definition at line 567 of file vc1dsp.c.

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

Definition at line 632 of file vc1dsp.c.

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

Definition at line 633 of file vc1dsp.c.

#define op4_avg (   a,
  b 
)    a = rnd_avg32(a, b)

Definition at line 634 of file vc1dsp.c.

#define op4_put (   a,
  b 
)    a = b

Definition at line 635 of file vc1dsp.c.

#define PUT_VC1_MSPEL (   a,
  b 
)
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 642 of file vc1dsp.c.

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

Definition at line 713 of file vc1dsp.c.

Referenced by avg_no_rnd_vc1_chroma_mc8_c().

Function Documentation

static void vc1_v_overlap_c ( uint8_t src,
int  stride 
)
static

Apply overlap transform to horizontal edge.

Definition at line 37 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 62 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_v_s_overlap_c ( int16_t *  top,
int16_t *  bottom 
)
static

Definition at line 85 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_h_s_overlap_c ( int16_t *  left,
int16_t *  right 
)
static

Definition at line 111 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
srcsource block type
strideblock stride
pqblock quantizer
Returns
whether other 3 pairs should be filtered or not
See Also
8.6

Definition at line 145 of file vc1dsp.c.

Referenced by vc1_loop_filter().

static void vc1_loop_filter ( uint8_t src,
int  step,
int  stride,
int  len,
int  pq 
)
inlinestatic

VC-1 in-loop deblocking filter.

Parameters
srcsource block type
stepdistance between horizontally adjacent elements
stridedistance between vertically adjacent elements
lenedge length to filter (4 or 8 pixels)
pqblock quantizer
See Also
8.6

Definition at line 187 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 void vc1_v_loop_filter4_c ( uint8_t src,
int  stride,
int  pq 
)
static

Definition at line 203 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 208 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 213 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 218 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_v_loop_filter16_c ( uint8_t src,
int  stride,
int  pq 
)
static

Definition at line 223 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_h_loop_filter16_c ( uint8_t src,
int  stride,
int  pq 
)
static

Definition at line 228 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_8x8_dc_c ( uint8_t dest,
int  linesize,
int16_t *  block 
)
static

Do inverse transform on 8x8 block.

Definition at line 235 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_8x8_c ( int16_t  block[64])
static

Definition at line 254 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_8x4_dc_c ( uint8_t dest,
int  linesize,
int16_t *  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_8x4_c ( uint8_t dest,
int  linesize,
int16_t *  block 
)
static

Definition at line 344 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_4x8_dc_c ( uint8_t dest,
int  linesize,
int16_t *  block 
)
static

Do inverse transform on 4x8 parts of block.

Definition at line 400 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_4x8_c ( uint8_t dest,
int  linesize,
int16_t *  block 
)
static

Definition at line 415 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_4x4_dc_c ( uint8_t dest,
int  linesize,
int16_t *  block 
)
static

Do inverse transform on 4x4 part of block.

Definition at line 471 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

static void vc1_inv_trans_4x4_c ( uint8_t dest,
int  linesize,
int16_t *  block 
)
static

Definition at line 486 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

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 550 of file vc1dsp.c.

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 669 of file vc1dsp.c.

Referenced by ff_vc1dsp_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 693 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

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 714 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().

av_cold void ff_vc1dsp_init ( VC1DSPContext dsp)

Definition at line 798 of file vc1dsp.c.

Referenced by vc1_decode_init(), and wmv9_init().