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"
Include dependency graph for vc1dsp.c:

Go to the source code of this file.

Macros

#define VC1_MSPEL_FILTER_16B(DIR, TYPE)
 Filter in case of 2 filters. More...
 
#define VC1_MSPEL_MC(OP, OP4, OPNAME)
 Function used to do motion compensation with bicubic interpolation. More...
 
#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. More...
 
static void vc1_h_overlap_c (uint8_t *src, int stride)
 Apply overlap transform to vertical edge. More...
 
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. More...
 
static void vc1_loop_filter (uint8_t *src, int step, int stride, int len, int pq)
 VC-1 in-loop deblocking filter. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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 avg2 (   a,
  b 
)    ((a+b+1)>>1)

Definition at line 719 of file vc1dsp.c.

Referenced by avg_no_rnd_vc1_chroma_mc8_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 op_avg (   a,
  b 
)    a = (a + av_clip_uint8(b) + 1) >> 1

Definition at line 633 of file vc1dsp.c.

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

Definition at line 632 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, \
ptrdiff_t 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, \
ptrdiff_t stride, int rnd) \
{ \
avg_vc1_mspel_mc(dst, src, stride, a, b, rnd); \
}
int stride
Definition: mace.c:144
uint8_t
#define b
Definition: input.c:42
AVS_Value src
Definition: avisynth_c.h:523
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160

Definition at line 642 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 */ \
}
int stride
Definition: mace.c:144
mode
Definition: f_perms.c:27
AVS_Value src
Definition: avisynth_c.h:523
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame This method is called when a frame is wanted on an output For an it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return it should return
#define av_always_inline
Definition: attributes.h:41

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.

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

Referenced by ff_vc1dsp_init().

av_cold void ff_vc1dsp_init ( VC1DSPContext dsp)

Definition at line 804 of file vc1dsp.c.

Referenced by vc1_decode_init(), and wmv9_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 699 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 675 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_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_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_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_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_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 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 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_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_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_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_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_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_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_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 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 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_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_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_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_v_s_overlap_c ( int16_t *  top,
int16_t *  bottom 
)
static

Definition at line 85 of file vc1dsp.c.

Referenced by ff_vc1dsp_init().