idct_mmi.c File Reference
#include "libavutil/common.h"
#include "libavcodec/dsputil.h"
#include "mmi.h"

Go to the source code of this file.

Macros

#define BITS_INV_ACC   5
#define SHIFT_INV_ROW   (16 - BITS_INV_ACC)
#define SHIFT_INV_COL   (1 + BITS_INV_ACC)
#define TG1   6518
#define TG2   13573
#define TG3   21895
#define CS4   23170
#define ROUNDER_0   0
#define ROUNDER_1   16
#define TAB_i_04   (32+0)
#define TAB_i_17   (32+64)
#define TAB_i_26   (32+128)
#define TAB_i_35   (32+192)
#define TG_1_16   (32+256+0)
#define TG_2_16   (32+256+16)
#define TG_3_16   (32+256+32)
#define COS_4_16   (32+256+48)
#define CLIPMAX   (32+256+64+0)
#define DCT_8_INV_ROW1(blk, rowoff, taboff, rnd, outreg)
#define DCT_8_INV_COL8()
#define DCT_8_INV_COL8_STORE(blk)
#define DCT_8_INV_COL8_PMS()
#define PUT(rs)
#define DCT_8_INV_COL8_PUT()
#define ADD(rs)
#define DCT_8_INV_COL8_ADD()

Functions

void ff_mmi_idct (int16_t *block)
void ff_mmi_idct_put (uint8_t *dest, int line_size, DCTELEM *block)
void ff_mmi_idct_add (uint8_t *dest, int line_size, DCTELEM *block)

Variables

static short consttable[] align16

Macro Definition Documentation

#define ADD (   rs)
Value:
ld3(4, 0, 2); \
pextlb($0, $2, $2); \
paddh($2, rs, $2); \
pminh($2, $11, $2); \
pmaxh($2, $0, $2); \
ppacb($0, $2, $2); \
sd3(2, 0, 4); \
__asm__ volatile ("add $4, $5, $4");

Definition at line 272 of file idct_mmi.c.

#define BITS_INV_ACC   5

Definition at line 32 of file idct_mmi.c.

#define CLIPMAX   (32+256+64+0)

Definition at line 54 of file idct_mmi.c.

Referenced by ff_mmi_idct_add(), and ff_mmi_idct_put().

#define COS_4_16   (32+256+48)

Definition at line 52 of file idct_mmi.c.

#define CS4   23170

Definition at line 39 of file idct_mmi.c.

#define DCT_8_INV_COL8 ( )

Definition at line 121 of file idct_mmi.c.

Referenced by ff_mmi_idct(), ff_mmi_idct_add(), and ff_mmi_idct_put().

#define DCT_8_INV_COL8_ADD ( )
Value:
ADD($16); \
ADD($17); \
ADD($18); \
ADD($19); \
ADD($23); \
ADD($22); \
ADD($21); \
ADD($20);

Definition at line 283 of file idct_mmi.c.

Referenced by ff_mmi_idct_add().

#define DCT_8_INV_COL8_PMS ( )
Value:
paddh($16, $20, $2); /* y0 a0+b0 */ \
psubh($16, $20, $20); /* y7 a0-b0 */ \
psrah($2, SHIFT_INV_COL, $16); \
psrah($20, SHIFT_INV_COL, $20); \
paddh($17, $21, $3); /* y1 a1+b1 */ \
psubh($17, $21, $21); /* y6 a1-b1 */ \
psrah($3, SHIFT_INV_COL, $17); \
psrah($21, SHIFT_INV_COL, $21); \
paddh($18, $22, $2); /* y2 a2+b2 */ \
psubh($18, $22, $22); /* y5 a2-b2 */ \
psrah($2, SHIFT_INV_COL, $18); \
psrah($22, SHIFT_INV_COL, $22); \
paddh($19, $23, $3); /* y3 a3+b3 */ \
psubh($19, $23, $23); /* y4 a3-b3 */ \
psrah($3, SHIFT_INV_COL, $19); \
psrah($23, SHIFT_INV_COL, $23);

Definition at line 234 of file idct_mmi.c.

Referenced by ff_mmi_idct_add(), and ff_mmi_idct_put().

#define DCT_8_INV_COL8_PUT ( )
Value:
PUT($16); \
PUT($17); \
PUT($18); \
PUT($19); \
PUT($23); \
PUT($22); \
PUT($21); \
PUT($20);

Definition at line 262 of file idct_mmi.c.

Referenced by ff_mmi_idct_put().

#define DCT_8_INV_COL8_STORE (   blk)
Value:
\
paddh($16, $20, $2); /* y0 a0+b0 */ \
psubh($16, $20, $16); /* y7 a0-b0 */ \
psrah($2, SHIFT_INV_COL, $2); \
psrah($16, SHIFT_INV_COL, $16); \
sq($2, 0, blk); \
sq($16, 112, blk); \
paddh($17, $21, $3); /* y1 a1+b1 */ \
psubh($17, $21, $17); /* y6 a1-b1 */ \
psrah($3, SHIFT_INV_COL, $3); \
psrah($17, SHIFT_INV_COL, $17); \
sq($3, 16, blk); \
sq($17, 96, blk); \
paddh($18, $22, $2); /* y2 a2+b2 */ \
psubh($18, $22, $18); /* y5 a2-b2 */ \
psrah($2, SHIFT_INV_COL, $2); \
psrah($18, SHIFT_INV_COL, $18); \
sq($2, 32, blk); \
sq($18, 80, blk); \
paddh($19, $23, $3); /* y3 a3+b3 */ \
psubh($19, $23, $19); /* y4 a3-b3 */ \
psrah($3, SHIFT_INV_COL, $3); \
psrah($19, SHIFT_INV_COL, $19); \
sq($3, 48, blk); \
sq($19, 64, blk);

Definition at line 202 of file idct_mmi.c.

Referenced by ff_mmi_idct().

#define DCT_8_INV_ROW1 (   blk,
  rowoff,
  taboff,
  rnd,
  outreg 
)
Value:
{ \
lq(blk, rowoff, $16); /* r16 = x7 x5 x3 x1 x6 x4 x2 x0 */ \
/*slot*/ \
lq($24, 0+taboff, $17); /* r17 = w */ \
/*delay slot $16*/ \
lq($24, 16+taboff, $18);/* r18 = w */ \
prevh($16, $2); /* r2 = x1 x3 x5 x7 x0 x2 x4 x6 */ \
lq($24, 32+taboff, $19);/* r19 = w */ \
phmadh($17, $16, $17); /* r17 = b1"b0'a1"a0' */ \
lq($24, 48+taboff, $20);/* r20 = w */ \
phmadh($18, $2, $18); /* r18 = b1'b0"a1'a0" */ \
phmadh($19, $16, $19); /* r19 = b3"b2'a3"a2' */ \
phmadh($20, $2, $20); /* r20 = b3'b2"a3'a2" */ \
paddw($17, $18, $17); /* r17 = (b1)(b0)(a1)(a0) */ \
paddw($19, $20, $19); /* r19 = (b3)(b2)(a3)(a2) */ \
pcpyld($19, $17, $18); /* r18 = (a3)(a2)(a1)(a0) */ \
pcpyud($17, $19, $20); /* r20 = (b3)(b2)(b1)(b0) */ \
paddw($18, rnd, $18); /* r18 = (a3)(a2)(a1)(a0) */\
paddw($18, $20, $17); /* r17 = ()()()(a0+b0) */ \
psubw($18, $20, $20); /* r20 = ()()()(a0-b0) */ \
psraw($17, SHIFT_INV_ROW, $17); /* r17 = (y3 y2 y1 y0) */ \
psraw($20, SHIFT_INV_ROW, $20); /* r20 = (y4 y5 y6 y7) */ \
ppach($20, $17, outreg);/* out = y4 y5 y6 y7 y3 y2 y1 y0 Note order */ \
prevh(outreg, $2); \
pcpyud($2, $2, $2); \
pcpyld($2, outreg, outreg); \
}

Definition at line 91 of file idct_mmi.c.

Referenced by ff_mmi_idct(), ff_mmi_idct_add(), and ff_mmi_idct_put().

#define PUT (   rs)
Value:
pminh(rs, $11, $2); \
pmaxh($2, $0, $2); \
ppacb($0, $2, $2); \
sd3(2, 0, 4); \
__asm__ volatile ("add $4, $5, $4");

Definition at line 255 of file idct_mmi.c.

#define ROUNDER_0   0

Definition at line 41 of file idct_mmi.c.

Referenced by ff_mmi_idct(), ff_mmi_idct_add(), and ff_mmi_idct_put().

#define ROUNDER_1   16

Definition at line 42 of file idct_mmi.c.

Referenced by ff_mmi_idct(), ff_mmi_idct_add(), and ff_mmi_idct_put().

#define SHIFT_INV_COL   (1 + BITS_INV_ACC)

Definition at line 34 of file idct_mmi.c.

#define SHIFT_INV_ROW   (16 - BITS_INV_ACC)

Definition at line 33 of file idct_mmi.c.

#define TAB_i_04   (32+0)

Definition at line 44 of file idct_mmi.c.

Referenced by ff_mmi_idct(), ff_mmi_idct_add(), and ff_mmi_idct_put().

#define TAB_i_17   (32+64)

Definition at line 45 of file idct_mmi.c.

Referenced by ff_mmi_idct(), ff_mmi_idct_add(), and ff_mmi_idct_put().

#define TAB_i_26   (32+128)

Definition at line 46 of file idct_mmi.c.

Referenced by ff_mmi_idct(), ff_mmi_idct_add(), and ff_mmi_idct_put().

#define TAB_i_35   (32+192)

Definition at line 47 of file idct_mmi.c.

Referenced by ff_mmi_idct(), ff_mmi_idct_add(), and ff_mmi_idct_put().

#define TG1   6518

Definition at line 36 of file idct_mmi.c.

#define TG2   13573

Definition at line 37 of file idct_mmi.c.

Referenced by av_register_all().

#define TG3   21895

Definition at line 38 of file idct_mmi.c.

#define TG_1_16   (32+256+0)

Definition at line 49 of file idct_mmi.c.

#define TG_2_16   (32+256+16)

Definition at line 50 of file idct_mmi.c.

#define TG_3_16   (32+256+32)

Definition at line 51 of file idct_mmi.c.

Function Documentation

void ff_mmi_idct ( int16_t *  block)

Definition at line 294 of file idct_mmi.c.

void ff_mmi_idct_add ( uint8_t *  dest,
int  line_size,
DCTELEM block 
)

Definition at line 340 of file idct_mmi.c.

Referenced by dsputil_init_mmi().

void ff_mmi_idct_put ( uint8_t *  dest,
int  line_size,
DCTELEM block 
)

Definition at line 316 of file idct_mmi.c.

Referenced by dsputil_init_mmi().

Variable Documentation

short consttable [] align16
static

Definition at line 56 of file idct_mmi.c.