FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Typedefs | Functions
vc1dsp_mmi.c File Reference
#include "libavutil/avassert.h"
#include "libavcodec/vc1dsp.h"
#include "constants.h"
#include "vc1dsp_mips.h"
#include "hpeldsp_mips.h"
#include "libavutil/mips/mmiutils.h"

Go to the source code of this file.

Macros

#define VC1_INV_TRANCS_8_TYPE1(o1, o2, r1, r2, r3, r4, c0)
 
#define VC1_INV_TRANCS_8_TYPE2(o1, o2, r1, r2, r3, r4, c0, c1)
 
#define OP_PUT(S, D)
 
#define OP_AVG(S, D)
 
#define NORMALIZE_MMI(SHIFT)
 Add rounder from $f14 to $f6 and pack result at destination. More...
 
#define TRANSFER_DO_PACK(OP)
 
#define TRANSFER_DONT_PACK(OP)
 
#define DO_UNPACK(reg)   "punpcklbh "reg", "reg", $f0 \n\t"
 
#define DONT_UNPACK(reg)
 
#define LOAD_ROUNDER_MMI(ROUND)
 Compute the rounder 32-r or 8-r and unpacks it to $f14. More...
 
#define SHIFT2_LINE(OFF, R0, R1, R2, R3)
 
#define VC1_HOR_16B_SHIFT2(OP, OPNAME)
 Data is already unpacked, so some operations can directly be made from memory. More...
 
#define VC1_SHIFT2(OP, OPNAME)
 Purely vertical or horizontal 1/2 shift interpolation. More...
 
#define MSPEL_FILTER13_CORE(UNPACK, LOAD, M, A1, A2, A3, A4)
 Core of the 1/4 and 3/4 shift bicubic interpolation. More...
 
#define MSPEL_FILTER13_VER_16B(NAME, A1, A2, A3, A4)
 Macro to build the vertical 16bits version of vc1_put_shift[13]. More...
 
#define MSPEL_FILTER13_HOR_16B(NAME, A1, A2, A3, A4, OP, OPNAME)
 Macro to build the horizontal 16bits version of vc1_put_shift[13]. More...
 
#define MSPEL_FILTER13_8B(NAME, A1, A2, A3, A4, OP, OPNAME)
 Macro to build the 8bits, any direction, version of vc1_put_shift[13]. More...
 
#define VC1_MSPEL_MC(OP)
 Interpolate fractional pel values by applying proper vertical then horizontal filter. More...
 
#define DECLARE_FUNCTION(a, b)
 Macro to ease bicubic filter interpolation functions declarations. More...
 
#define CHROMA_MC_8_MMI
 
#define CHROMA_MC_4_MMI
 

Typedefs

typedef void(* vc1_mspel_mc_filter_ver_16bits )(int16_t *dst, const uint8_t *src, mips_reg src_stride, int rnd, int64_t shift)
 1/4 shift bicubic interpolation More...
 
typedef void(* vc1_mspel_mc_filter_hor_16bits )(uint8_t *dst, mips_reg dst_stride, const int16_t *src, int rnd)
 
typedef void(* vc1_mspel_mc_filter_8bits )(uint8_t *dst, const uint8_t *src, mips_reg stride, int rnd, mips_reg offset)
 

Functions

void ff_vc1_inv_trans_8x8_dc_mmi (uint8_t *dest, ptrdiff_t linesize, int16_t *block)
 
void ff_vc1_inv_trans_8x4_dc_mmi (uint8_t *dest, ptrdiff_t linesize, int16_t *block)
 
void ff_vc1_inv_trans_4x8_dc_mmi (uint8_t *dest, ptrdiff_t linesize, int16_t *block)
 
void ff_vc1_inv_trans_4x4_dc_mmi (uint8_t *dest, ptrdiff_t linesize, int16_t *block)
 
void ff_vc1_inv_trans_4x4_mmi (uint8_t *dest, ptrdiff_t linesize, int16_t *block)
 
void ff_vc1_h_overlap_mmi (uint8_t *src, int stride)
 
void ff_vc1_h_s_overlap_mmi (int16_t *left, int16_t *right, int left_stride, int right_stride, int flags)
 
void ff_vc1_v_overlap_mmi (uint8_t *src, int stride)
 
void ff_vc1_v_s_overlap_mmi (int16_t *top, int16_t *bottom)
 
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...
 
void ff_vc1_v_loop_filter4_mmi (uint8_t *src, int stride, int pq)
 
void ff_vc1_h_loop_filter4_mmi (uint8_t *src, int stride, int pq)
 
void ff_vc1_v_loop_filter8_mmi (uint8_t *src, int stride, int pq)
 
void ff_vc1_h_loop_filter8_mmi (uint8_t *src, int stride, int pq)
 
void ff_vc1_v_loop_filter16_mmi (uint8_t *src, int stride, int pq)
 
void ff_vc1_h_loop_filter16_mmi (uint8_t *src, int stride, int pq)
 
void ff_put_vc1_mspel_mc00_mmi (uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int rnd)
 
void ff_put_vc1_mspel_mc00_16_mmi (uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int rnd)
 
void ff_avg_vc1_mspel_mc00_mmi (uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int rnd)
 
void ff_avg_vc1_mspel_mc00_16_mmi (uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int rnd)
 
static void vc1_put_ver_16b_shift2_mmi (int16_t *dst, const uint8_t *src, mips_reg stride, int rnd, int64_t shift)
 Sacrificing $f12 makes it possible to pipeline loads from src. More...
 
void ff_put_no_rnd_vc1_chroma_mc8_mmi (uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
 
void ff_put_no_rnd_vc1_chroma_mc4_mmi (uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
 
void ff_avg_no_rnd_vc1_chroma_mc8_mmi (uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
 
void ff_avg_no_rnd_vc1_chroma_mc4_mmi (uint8_t *dst, uint8_t *src, int stride, int h, int x, int y)
 

Macro Definition Documentation

#define VC1_INV_TRANCS_8_TYPE1 (   o1,
  o2,
  r1,
  r2,
  r3,
  r4,
  c0 
)

Definition at line 30 of file vc1dsp_mmi.c.

#define VC1_INV_TRANCS_8_TYPE2 (   o1,
  o2,
  r1,
  r2,
  r3,
  r4,
  c0,
  c1 
)

Definition at line 74 of file vc1dsp_mmi.c.

#define OP_PUT (   S,
  D 
)

Definition at line 1604 of file vc1dsp_mmi.c.

#define OP_AVG (   S,
  D 
)
Value:
"ldc1 $f16, "#S" \n\t" \
"pavgb "#D", "#D", $f16 \n\t"
#define S(s, c, i)
D(D(float, sse)
Definition: rematrix_init.c:28

Definition at line 1605 of file vc1dsp_mmi.c.

#define NORMALIZE_MMI (   SHIFT)
Value:
"paddh $f6, $f6, $f14 \n\t" /* +bias-r */ \
"paddh $f8, $f8, $f14 \n\t" /* +bias-r */ \
"psrah $f6, $f6, "SHIFT" \n\t" \
"psrah $f8, $f8, "SHIFT" \n\t"

Add rounder from $f14 to $f6 and pack result at destination.

Definition at line 1610 of file vc1dsp_mmi.c.

#define TRANSFER_DO_PACK (   OP)
Value:
"packushb $f6, $f6, $f8 \n\t" \
OP((%[dst]), $f6) \
"sdc1 $f6, 0x00(%[dst]) \n\t"
#define OP(LOAD, STORE)
Definition: hpeldsp_alpha.c:55

Definition at line 1616 of file vc1dsp_mmi.c.

#define TRANSFER_DONT_PACK (   OP)
Value:
OP(0(%[dst]), $f6) \
OP(8(%[dst]), $f8) \
"sdc1 $f6, 0x00(%[dst]) \n\t" \
"sdc1 $f8, 0x08(%[dst]) \n\t"
#define OP(LOAD, STORE)
Definition: hpeldsp_alpha.c:55

Definition at line 1621 of file vc1dsp_mmi.c.

#define DO_UNPACK (   reg)    "punpcklbh "reg", "reg", $f0 \n\t"
See Also
MSPEL_FILTER13_CORE for use as UNPACK macro

Definition at line 1628 of file vc1dsp_mmi.c.

#define DONT_UNPACK (   reg)

Definition at line 1630 of file vc1dsp_mmi.c.

#define LOAD_ROUNDER_MMI (   ROUND)
Value:
"lwc1 $f14, "ROUND" \n\t" \
"punpcklhw $f14, $f14, $f14 \n\t" \
"punpcklwd $f14, $f14, $f14 \n\t"

Compute the rounder 32-r or 8-r and unpacks it to $f14.

Definition at line 1633 of file vc1dsp_mmi.c.

Referenced by vc1_put_ver_16b_shift2_mmi().

#define SHIFT2_LINE (   OFF,
  R0,
  R1,
  R2,
  R3 
)
Value:
"paddh "#R1", "#R1", "#R2" \n\t" \
PTR_ADDU "$9, %[src], %[stride1] \n\t" \
MMI_ULWC1(R0, $9, 0x00) \
"pmullh "#R1", "#R1", $f6 \n\t" \
"punpcklbh "#R0", "#R0", $f0 \n\t" \
PTR_ADDU "$9, %[src], %[stride] \n\t" \
MMI_ULWC1(R3, $9, 0x00) \
"psubh "#R1", "#R1", "#R0" \n\t" \
"punpcklbh "#R3", "#R3", $f0 \n\t" \
"paddh "#R1", "#R1", $f14 \n\t" \
"psubh "#R1", "#R1", "#R3" \n\t" \
"psrah "#R1", "#R1", %[shift] \n\t" \
MMI_SDC1(R1, %[dst], OFF) \
PTR_ADDU "%[src], %[src], %[stride] \n\t"
#define R2
Definition: simple_idct.c:173
#define R0(v, w, x, y, z, i)
Definition: sha.c:56
#define R1
Definition: simple_idct.c:172
#define R3
Definition: simple_idct.c:174
#define PTR_ADDU
Definition: asmdefs.h:47

Definition at line 1639 of file vc1dsp_mmi.c.

Referenced by vc1_put_ver_16b_shift2_mmi().

#define VC1_HOR_16B_SHIFT2 (   OP,
  OPNAME 
)

Data is already unpacked, so some operations can directly be made from memory.

Definition at line 1700 of file vc1dsp_mmi.c.

#define VC1_SHIFT2 (   OP,
  OPNAME 
)

Purely vertical or horizontal 1/2 shift interpolation.

Sacrify $f12 for *9 factor.

Definition at line 1760 of file vc1dsp_mmi.c.

#define MSPEL_FILTER13_CORE (   UNPACK,
  LOAD,
  M,
  A1,
  A2,
  A3,
  A4 
)

Core of the 1/4 and 3/4 shift bicubic interpolation.

Parameters
UNPACKMacro unpacking arguments from 8 to 16bits (can be empty).
LOAD"MMI_ULWC1" or "MMI_ULDC1", if data read is already unpacked.
M"1" for MMI_ULWC1, "2" for MMI_ULDC1.
A1Stride address of 1st tap (beware of unpacked/packed).
A2Stride address of 2nd tap
A3Stride address of 3rd tap
A4Stride address of 4th tap

Definition at line 1839 of file vc1dsp_mmi.c.

#define MSPEL_FILTER13_VER_16B (   NAME,
  A1,
  A2,
  A3,
  A4 
)

Macro to build the vertical 16bits version of vc1_put_shift[13].

Here, offset=src_stride. Parameters passed A1 to A4 must use %3 (src_stride), %4 (2*src_stride) and %5 (3*src_stride).

Parameters
NAMEEither 1 or 3
See Also
MSPEL_FILTER13_CORE for information on A1->A4

Definition at line 1885 of file vc1dsp_mmi.c.

#define MSPEL_FILTER13_HOR_16B (   NAME,
  A1,
  A2,
  A3,
  A4,
  OP,
  OPNAME 
)

Macro to build the horizontal 16bits version of vc1_put_shift[13].

Here, offset=16bits, so parameters passed A1 to A4 should be simple.

Parameters
NAMEEither 1 or 3
See Also
MSPEL_FILTER13_CORE for information on A1->A4

Definition at line 1960 of file vc1dsp_mmi.c.

#define MSPEL_FILTER13_8B (   NAME,
  A1,
  A2,
  A3,
  A4,
  OP,
  OPNAME 
)

Macro to build the 8bits, any direction, version of vc1_put_shift[13].

Here, offset=src_stride. Parameters passed A1 to A4 must use %3 (offset), %4 (2*offset) and %5 (3*offset).

Parameters
NAMEEither 1 or 3
See Also
MSPEL_FILTER13_CORE for information on A1->A4

Definition at line 2010 of file vc1dsp_mmi.c.

#define VC1_MSPEL_MC (   OP)

Interpolate fractional pel values by applying proper vertical then horizontal filter.

Parameters
dstDestination buffer for interpolated pels.
srcSource buffer.
strideStride for both src and dst buffers.
hmodeHorizontal filter (expressed in quarter pixels shift).
hmodeVertical filter.
rndRounding bias.

Definition at line 2086 of file vc1dsp_mmi.c.

#define DECLARE_FUNCTION (   a,
  b 
)
Value:
void ff_put_vc1_mspel_mc ## a ## b ## _mmi(uint8_t *dst, \
const uint8_t *src, \
ptrdiff_t stride, \
int rnd) \
{ \
put_vc1_mspel_mc(dst, src, stride, a, b, rnd); \
} \
void ff_avg_vc1_mspel_mc ## a ## b ## _mmi(uint8_t *dst, \
const uint8_t *src, \
ptrdiff_t stride, \
int rnd) \
{ \
avg_vc1_mspel_mc(dst, src, stride, a, b, rnd); \
} \
void ff_put_vc1_mspel_mc ## a ## b ## _16_mmi(uint8_t *dst, \
const uint8_t *src, \
ptrdiff_t stride, \
int rnd) \
{ \
put_vc1_mspel_mc_16(dst, src, stride, a, b, rnd); \
} \
void ff_avg_vc1_mspel_mc ## a ## b ## _16_mmi(uint8_t *dst, \
const uint8_t *src, \
ptrdiff_t stride, \
int rnd) \
{ \
avg_vc1_mspel_mc_16(dst, src, stride, a, b, rnd); \
}
const char * b
Definition: vf_curves.c:116
#define src
Definition: vp8dsp.c:254
uint8_t
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
GLint GLenum GLboolean GLsizei stride
Definition: opengl_enc.c:105
#define rnd()
Definition: checkasm.h:101

Macro to ease bicubic filter interpolation functions declarations.

Definition at line 2139 of file vc1dsp_mmi.c.

#define CHROMA_MC_8_MMI
#define CHROMA_MC_4_MMI
Value:
"punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \
"punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \
"punpcklbh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" \
"punpcklbh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" \
\
"pmullh %[ftmp1], %[ftmp1], %[A] \n\t" \
"pmullh %[ftmp2], %[ftmp2], %[B] \n\t" \
"pmullh %[ftmp3], %[ftmp3], %[C] \n\t" \
"pmullh %[ftmp4], %[ftmp4], %[D] \n\t" \
\
"paddh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" \
"paddh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \
"paddh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" \
"paddh %[ftmp1], %[ftmp1], %[ff_pw_28] \n\t" \
\
"psrlh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" \
"packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t"

Definition at line 2222 of file vc1dsp_mmi.c.

Referenced by ff_avg_no_rnd_vc1_chroma_mc4_mmi(), and ff_put_no_rnd_vc1_chroma_mc4_mmi().

Typedef Documentation

typedef void(* vc1_mspel_mc_filter_ver_16bits)(int16_t *dst, const uint8_t *src, mips_reg src_stride, int rnd, int64_t shift)

1/4 shift bicubic interpolation

3/4 shift bicubic interpolation

Definition at line 2067 of file vc1dsp_mmi.c.

typedef void(* vc1_mspel_mc_filter_hor_16bits)(uint8_t *dst, mips_reg dst_stride, const int16_t *src, int rnd)

Definition at line 2070 of file vc1dsp_mmi.c.

typedef void(* vc1_mspel_mc_filter_8bits)(uint8_t *dst, const uint8_t *src, mips_reg stride, int rnd, mips_reg offset)

Definition at line 2072 of file vc1dsp_mmi.c.

Function Documentation

void ff_vc1_inv_trans_8x8_dc_mmi ( uint8_t dest,
ptrdiff_t  linesize,
int16_t *  block 
)

Definition at line 123 of file vc1dsp_mmi.c.

void ff_vc1_inv_trans_8x4_dc_mmi ( uint8_t dest,
ptrdiff_t  linesize,
int16_t *  block 
)

Definition at line 416 of file vc1dsp_mmi.c.

void ff_vc1_inv_trans_4x8_dc_mmi ( uint8_t dest,
ptrdiff_t  linesize,
int16_t *  block 
)

Definition at line 867 of file vc1dsp_mmi.c.

void ff_vc1_inv_trans_4x4_dc_mmi ( uint8_t dest,
ptrdiff_t  linesize,
int16_t *  block 
)

Definition at line 1123 of file vc1dsp_mmi.c.

void ff_vc1_inv_trans_4x4_mmi ( uint8_t dest,
ptrdiff_t  linesize,
int16_t *  block 
)

Definition at line 1171 of file vc1dsp_mmi.c.

void ff_vc1_h_overlap_mmi ( uint8_t src,
int  stride 
)

Definition at line 1377 of file vc1dsp_mmi.c.

void ff_vc1_h_s_overlap_mmi ( int16_t *  left,
int16_t *  right,
int  left_stride,
int  right_stride,
int  flags 
)

Definition at line 1400 of file vc1dsp_mmi.c.

void ff_vc1_v_overlap_mmi ( uint8_t src,
int  stride 
)

Definition at line 1430 of file vc1dsp_mmi.c.

void ff_vc1_v_s_overlap_mmi ( int16_t *  top,
int16_t *  bottom 
)

Definition at line 1453 of file vc1dsp_mmi.c.

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 1487 of file vc1dsp_mmi.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 1536 of file vc1dsp_mmi.c.

Referenced by ff_vc1_h_loop_filter16_mmi(), ff_vc1_h_loop_filter4_mmi(), ff_vc1_h_loop_filter8_mmi(), ff_vc1_v_loop_filter16_mmi(), ff_vc1_v_loop_filter4_mmi(), and ff_vc1_v_loop_filter8_mmi().

void ff_vc1_v_loop_filter4_mmi ( uint8_t src,
int  stride,
int  pq 
)

Definition at line 1553 of file vc1dsp_mmi.c.

void ff_vc1_h_loop_filter4_mmi ( uint8_t src,
int  stride,
int  pq 
)

Definition at line 1558 of file vc1dsp_mmi.c.

void ff_vc1_v_loop_filter8_mmi ( uint8_t src,
int  stride,
int  pq 
)

Definition at line 1563 of file vc1dsp_mmi.c.

void ff_vc1_h_loop_filter8_mmi ( uint8_t src,
int  stride,
int  pq 
)

Definition at line 1568 of file vc1dsp_mmi.c.

void ff_vc1_v_loop_filter16_mmi ( uint8_t src,
int  stride,
int  pq 
)

Definition at line 1573 of file vc1dsp_mmi.c.

void ff_vc1_h_loop_filter16_mmi ( uint8_t src,
int  stride,
int  pq 
)

Definition at line 1578 of file vc1dsp_mmi.c.

void ff_put_vc1_mspel_mc00_mmi ( uint8_t dst,
const uint8_t src,
ptrdiff_t  stride,
int  rnd 
)

Definition at line 1583 of file vc1dsp_mmi.c.

void ff_put_vc1_mspel_mc00_16_mmi ( uint8_t dst,
const uint8_t src,
ptrdiff_t  stride,
int  rnd 
)

Definition at line 1588 of file vc1dsp_mmi.c.

void ff_avg_vc1_mspel_mc00_mmi ( uint8_t dst,
const uint8_t src,
ptrdiff_t  stride,
int  rnd 
)

Definition at line 1593 of file vc1dsp_mmi.c.

void ff_avg_vc1_mspel_mc00_16_mmi ( uint8_t dst,
const uint8_t src,
ptrdiff_t  stride,
int  rnd 
)

Definition at line 1598 of file vc1dsp_mmi.c.

static void vc1_put_ver_16b_shift2_mmi ( int16_t *  dst,
const uint8_t src,
mips_reg  stride,
int  rnd,
int64_t  shift 
)
static

Sacrificing $f12 makes it possible to pipeline loads from src.

Definition at line 1656 of file vc1dsp_mmi.c.

void ff_put_no_rnd_vc1_chroma_mc8_mmi ( uint8_t dst,
uint8_t src,
int  stride,
int  h,
int  x,
int  y 
)

Definition at line 2242 of file vc1dsp_mmi.c.

void ff_put_no_rnd_vc1_chroma_mc4_mmi ( uint8_t dst,
uint8_t src,
int  stride,
int  h,
int  x,
int  y 
)

Definition at line 2297 of file vc1dsp_mmi.c.

void ff_avg_no_rnd_vc1_chroma_mc8_mmi ( uint8_t dst,
uint8_t src,
int  stride,
int  h,
int  x,
int  y 
)

Definition at line 2350 of file vc1dsp_mmi.c.

void ff_avg_no_rnd_vc1_chroma_mc4_mmi ( uint8_t dst,
uint8_t src,
int  stride,
int  h,
int  x,
int  y 
)

Definition at line 2408 of file vc1dsp_mmi.c.