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

Go to the source code of this file.

Macros

#define MM   "%%mm"
 
#define MOV   "movd"
 
#define MOVQ   "movq"
 
#define MOVQU   "movq"
 
#define STEP   4
 
#define LOAD(mem, dst)
 
#define PSRL1(reg)   "psrlq $8, "reg" \n\t"
 
#define PSRL2(reg)   "psrlq $16, "reg" \n\t"
 
#define PSHUF(src, dst)   "pshufw $9, "dst", "src" \n\t"
 
#define PABS(tmp, dst)
 
#define CHECK(pj, mj)
 
#define CHECK1
 
#define CHECK2
 
#define FILTER
 
#define prev2   "prev"
 
#define next2   "cur"
 
#define prev2   "cur"
 
#define next2   "next"
 

Functions

static void yadif_filter_line_TMPL (uint8_t *dst, uint8_t *prev, uint8_t *cur, uint8_t *next, int w, int prefs, int mrefs, int parity, int mode)
 

Macro Definition Documentation

#define MM   "%%mm"

Definition at line 35 of file yadif_template.c.

#define MOV   "movd"

Definition at line 36 of file yadif_template.c.

Referenced by av_register_all().

#define MOVQ   "movq"

Definition at line 37 of file yadif_template.c.

#define MOVQU   "movq"

Definition at line 38 of file yadif_template.c.

#define STEP   4

Definition at line 39 of file yadif_template.c.

#define LOAD (   mem,
  dst 
)
Value:
MOV" "mem", "dst" \n\t"\
"punpcklbw "MM"7, "dst" \n\t"

Definition at line 40 of file yadif_template.c.

#define PSRL1 (   reg)    "psrlq $8, "reg" \n\t"

Definition at line 43 of file yadif_template.c.

#define PSRL2 (   reg)    "psrlq $16, "reg" \n\t"

Definition at line 44 of file yadif_template.c.

#define PSHUF (   src,
  dst 
)    "pshufw $9, "dst", "src" \n\t"

Definition at line 45 of file yadif_template.c.

#define PABS (   tmp,
  dst 
)
Value:
"pxor "tmp", "tmp" \n\t"\
"psubw "dst", "tmp" \n\t"\
"pmaxsw "tmp", "dst" \n\t"

Definition at line 52 of file yadif_template.c.

#define CHECK (   pj,
  mj 
)
Value:
MOVQU" "#pj"(%[cur],%[mrefs]), "MM"2 \n\t" /* cur[x-refs-1+j] */\
MOVQU" "#mj"(%[cur],%[prefs]), "MM"3 \n\t" /* cur[x+refs-1-j] */\
MOVQ" "MM"2, "MM"4 \n\t"\
MOVQ" "MM"2, "MM"5 \n\t"\
"pxor "MM"3, "MM"4 \n\t"\
"pavgb "MM"3, "MM"5 \n\t"\
"pand "MANGLE(pb_1)", "MM"4 \n\t"\
"psubusb "MM"4, "MM"5 \n\t"\
PSRL1(MM"5") \
"punpcklbw "MM"7, "MM"5 \n\t" /* (cur[x-refs+j] + cur[x+refs-j])>>1 */\
MOVQ" "MM"2, "MM"4 \n\t"\
"psubusb "MM"3, "MM"2 \n\t"\
"psubusb "MM"4, "MM"3 \n\t"\
"pmaxub "MM"3, "MM"2 \n\t"\
MOVQ" "MM"2, "MM"3 \n\t"\
MOVQ" "MM"2, "MM"4 \n\t" /* ABS(cur[x-refs-1+j] - cur[x+refs-1-j]) */\
PSRL1(MM"3") /* ABS(cur[x-refs +j] - cur[x+refs -j]) */\
PSRL2(MM"4") /* ABS(cur[x-refs+1+j] - cur[x+refs+1-j]) */\
"punpcklbw "MM"7, "MM"2 \n\t"\
"punpcklbw "MM"7, "MM"3 \n\t"\
"punpcklbw "MM"7, "MM"4 \n\t"\
"paddw "MM"3, "MM"2 \n\t"\
"paddw "MM"4, "MM"2 \n\t" /* score */

Definition at line 58 of file yadif_template.c.

#define CHECK1
Value:
MOVQ" "MM"0, "MM"3 \n\t"\
"pcmpgtw "MM"2, "MM"3 \n\t" /* if(score < spatial_score) */\
"pminsw "MM"2, "MM"0 \n\t" /* spatial_score= score; */\
MOVQ" "MM"3, "MM"6 \n\t"\
"pand "MM"3, "MM"5 \n\t"\
"pandn "MM"1, "MM"3 \n\t"\
"por "MM"5, "MM"3 \n\t"\
MOVQ" "MM"3, "MM"1 \n\t" /* spatial_pred= (cur[x-refs+j] + cur[x+refs-j])>>1; */

Definition at line 83 of file yadif_template.c.

#define CHECK2
Value:
/* pretend not to have checked dir=2 if dir=1 was bad.\
hurts both quality and speed, but matches the C version. */\
"paddw "MANGLE(pw_1)", "MM"6 \n\t"\
"psllw $14, "MM"6 \n\t"\
"paddsw "MM"6, "MM"2 \n\t"\
MOVQ" "MM"0, "MM"3 \n\t"\
"pcmpgtw "MM"2, "MM"3 \n\t"\
"pminsw "MM"2, "MM"0 \n\t"\
"pand "MM"3, "MM"5 \n\t"\
"pandn "MM"1, "MM"3 \n\t"\
"por "MM"5, "MM"3 \n\t"\
MOVQ" "MM"3, "MM"1 \n\t"

Definition at line 93 of file yadif_template.c.

#define FILTER
#define prev2   "prev"
#define next2   "cur"
#define prev2   "cur"
#define next2   "next"

Function Documentation

static void yadif_filter_line_TMPL ( uint8_t dst,
uint8_t prev,
uint8_t cur,
uint8_t next,
int  w,
int  prefs,
int  mrefs,
int  parity,
int  mode 
)
static

Definition at line 105 of file yadif_template.c.