FFmpeg
|
#include "libavutil/attributes.h"
#include "libavutil/avassert.h"
#include "libavutil/mem_internal.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, ptrdiff_t stride) |
void | ff_vc1_h_s_overlap_mmi (int16_t *left, int16_t *right, ptrdiff_t left_stride, ptrdiff_t right_stride, int flags) |
void | ff_vc1_v_overlap_mmi (uint8_t *src, ptrdiff_t 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, ptrdiff_t stride, int pq) |
void | ff_vc1_h_loop_filter4_mmi (uint8_t *src, ptrdiff_t stride, int pq) |
void | ff_vc1_v_loop_filter8_mmi (uint8_t *src, ptrdiff_t stride, int pq) |
void | ff_vc1_h_loop_filter8_mmi (uint8_t *src, ptrdiff_t stride, int pq) |
void | ff_vc1_v_loop_filter16_mmi (uint8_t *src, ptrdiff_t stride, int pq) |
void | ff_vc1_h_loop_filter16_mmi (uint8_t *src, ptrdiff_t 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, const uint8_t *src, ptrdiff_t stride, int h, int x, int y) |
void | ff_put_no_rnd_vc1_chroma_mc4_mmi (uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y) |
void | ff_avg_no_rnd_vc1_chroma_mc8_mmi (uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y) |
void | ff_avg_no_rnd_vc1_chroma_mc4_mmi (uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y) |
#define VC1_INV_TRANCS_8_TYPE1 | ( | o1, | |
o2, | |||
r1, | |||
r2, | |||
r3, | |||
r4, | |||
c0 | |||
) |
Definition at line 33 of file vc1dsp_mmi.c.
#define VC1_INV_TRANCS_8_TYPE2 | ( | o1, | |
o2, | |||
r1, | |||
r2, | |||
r3, | |||
r4, | |||
c0, | |||
c1 | |||
) |
Definition at line 77 of file vc1dsp_mmi.c.
Definition at line 1605 of file vc1dsp_mmi.c.
Definition at line 1606 of file vc1dsp_mmi.c.
#define NORMALIZE_MMI | ( | SHIFT | ) |
Add rounder from $f14 to $f6 and pack result at destination.
Definition at line 1611 of file vc1dsp_mmi.c.
#define TRANSFER_DO_PACK | ( | OP | ) |
Definition at line 1617 of file vc1dsp_mmi.c.
#define TRANSFER_DONT_PACK | ( | OP | ) |
Definition at line 1622 of file vc1dsp_mmi.c.
#define DO_UNPACK | ( | reg | ) | "punpcklbh "reg", "reg", $f0 \n\t" |
Definition at line 1629 of file vc1dsp_mmi.c.
#define DONT_UNPACK | ( | reg | ) |
Definition at line 1631 of file vc1dsp_mmi.c.
#define LOAD_ROUNDER_MMI | ( | ROUND | ) |
Compute the rounder 32-r or 8-r and unpacks it to $f14.
Definition at line 1634 of file vc1dsp_mmi.c.
Definition at line 1640 of file vc1dsp_mmi.c.
#define VC1_HOR_16B_SHIFT2 | ( | OP, | |
OPNAME | |||
) |
Data is already unpacked, so some operations can directly be made from memory.
Definition at line 1702 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.
Core of the 1/4 and 3/4 shift bicubic interpolation.
UNPACK | Macro 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. |
A1 | Stride address of 1st tap (beware of unpacked/packed). |
A2 | Stride address of 2nd tap |
A3 | Stride address of 3rd tap |
A4 | Stride address of 4th tap |
Definition at line 1838 of file vc1dsp_mmi.c.
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).
NAME | Either 1 or 3 |
Definition at line 1884 of file vc1dsp_mmi.c.
Macro to build the horizontal 16bits version of vc1_put_shift[13].
Here, offset=16bits, so parameters passed A1 to A4 should be simple.
NAME | Either 1 or 3 |
Definition at line 1959 of file vc1dsp_mmi.c.
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).
NAME | Either 1 or 3 |
Definition at line 2007 of file vc1dsp_mmi.c.
#define VC1_MSPEL_MC | ( | OP | ) |
Interpolate fractional pel values by applying proper vertical then horizontal filter.
dst | Destination buffer for interpolated pels. |
src | Source buffer. |
stride | Stride for both src and dst buffers. |
hmode | Horizontal filter (expressed in quarter pixels shift). |
hmode | Vertical filter. |
rnd | Rounding bias. |
Definition at line 2081 of file vc1dsp_mmi.c.
Macro to ease bicubic filter interpolation functions declarations.
Definition at line 2134 of file vc1dsp_mmi.c.
#define CHROMA_MC_8_MMI |
Definition at line 2183 of file vc1dsp_mmi.c.
#define CHROMA_MC_4_MMI |
Definition at line 2217 of file vc1dsp_mmi.c.
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 2062 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 2065 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 2067 of file vc1dsp_mmi.c.
void ff_vc1_inv_trans_8x8_dc_mmi | ( | uint8_t * | dest, |
ptrdiff_t | linesize, | ||
int16_t * | block | ||
) |
Definition at line 126 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_inv_trans_8x4_dc_mmi | ( | uint8_t * | dest, |
ptrdiff_t | linesize, | ||
int16_t * | block | ||
) |
Definition at line 418 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_inv_trans_4x8_dc_mmi | ( | uint8_t * | dest, |
ptrdiff_t | linesize, | ||
int16_t * | block | ||
) |
Definition at line 869 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_inv_trans_4x4_dc_mmi | ( | uint8_t * | dest, |
ptrdiff_t | linesize, | ||
int16_t * | block | ||
) |
Definition at line 1124 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_inv_trans_4x4_mmi | ( | uint8_t * | dest, |
ptrdiff_t | linesize, | ||
int16_t * | block | ||
) |
Definition at line 1174 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_h_overlap_mmi | ( | uint8_t * | src, |
ptrdiff_t | stride | ||
) |
Definition at line 1378 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_h_s_overlap_mmi | ( | int16_t * | left, |
int16_t * | right, | ||
ptrdiff_t | left_stride, | ||
ptrdiff_t | right_stride, | ||
int | flags | ||
) |
Definition at line 1401 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_v_overlap_mmi | ( | uint8_t * | src, |
ptrdiff_t | stride | ||
) |
Definition at line 1431 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_v_s_overlap_mmi | ( | int16_t * | top, |
int16_t * | bottom | ||
) |
Definition at line 1454 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
|
static |
VC-1 in-loop deblocking filter for one line.
src | source block type |
stride | block stride |
pq | block quantizer |
Definition at line 1488 of file vc1dsp_mmi.c.
Referenced by vc1_loop_filter().
|
inlinestatic |
VC-1 in-loop deblocking filter.
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 |
Definition at line 1537 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, |
ptrdiff_t | stride, | ||
int | pq | ||
) |
Definition at line 1554 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_h_loop_filter4_mmi | ( | uint8_t * | src, |
ptrdiff_t | stride, | ||
int | pq | ||
) |
Definition at line 1559 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_v_loop_filter8_mmi | ( | uint8_t * | src, |
ptrdiff_t | stride, | ||
int | pq | ||
) |
Definition at line 1564 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_h_loop_filter8_mmi | ( | uint8_t * | src, |
ptrdiff_t | stride, | ||
int | pq | ||
) |
Definition at line 1569 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_v_loop_filter16_mmi | ( | uint8_t * | src, |
ptrdiff_t | stride, | ||
int | pq | ||
) |
Definition at line 1574 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_vc1_h_loop_filter16_mmi | ( | uint8_t * | src, |
ptrdiff_t | stride, | ||
int | pq | ||
) |
Definition at line 1579 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_put_vc1_mspel_mc00_mmi | ( | uint8_t * | dst, |
const uint8_t * | src, | ||
ptrdiff_t | stride, | ||
int | rnd | ||
) |
Definition at line 1584 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 1589 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 1594 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 1599 of file vc1dsp_mmi.c.
|
static |
Sacrificing $f12 makes it possible to pipeline loads from src.
Definition at line 1657 of file vc1dsp_mmi.c.
void ff_put_no_rnd_vc1_chroma_mc8_mmi | ( | uint8_t * | dst, |
const uint8_t * | src, | ||
ptrdiff_t | stride, | ||
int | h, | ||
int | x, | ||
int | y | ||
) |
Definition at line 2237 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_put_no_rnd_vc1_chroma_mc4_mmi | ( | uint8_t * | dst, |
const uint8_t * | src, | ||
ptrdiff_t | stride, | ||
int | h, | ||
int | x, | ||
int | y | ||
) |
Definition at line 2293 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_avg_no_rnd_vc1_chroma_mc8_mmi | ( | uint8_t * | dst, |
const uint8_t * | src, | ||
ptrdiff_t | stride, | ||
int | h, | ||
int | x, | ||
int | y | ||
) |
Definition at line 2347 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().
void ff_avg_no_rnd_vc1_chroma_mc4_mmi | ( | uint8_t * | dst, |
const uint8_t * | src, | ||
ptrdiff_t | stride, | ||
int | h, | ||
int | x, | ||
int | y | ||
) |
Definition at line 2406 of file vc1dsp_mmi.c.
Referenced by ff_vc1dsp_init_mips().