57 #include "libavutil/common.h"
59 #include "libavutil/intreadwrite.h"
60 #include "libavcodec/avcodec.h"
72 #define MIN(a,b) ((a) > (b) ? (b) : (a))
73 #define MAX(a,b) ((a) < (b) ? (b) : (a))
74 #define ABS(a) ((a) > 0 ? (a) : (-(a)))
98 p->
frame->data[i]= src[i];
99 p->
frame->linesize[i]= src_stride[i];
110 int w= width >>is_chroma;
111 int h= height>>is_chroma;
113 int srcs= src_stride[i];
118 if((x-2)+(y-1)*w>=0 && (x+2)+(y+1)*w<w*h){
120 uint8_t *srcp= &src[i][x + y*srcs];
121 int diff0= filp[-fils] - srcp[-srcs];
122 int diff1= filp[+fils] - srcp[+srcs];
123 int spatial_score=
ABS(srcp[-srcs-1] - srcp[+srcs-1])
124 +
ABS(srcp[-srcs ] - srcp[+srcs ])
125 +
ABS(srcp[-srcs+1] - srcp[+srcs+1]) - 1;
129 { int score= ABS(srcp[-srcs-1+(j)] - srcp[+srcs-1-(j)])\
130 + ABS(srcp[-srcs +(j)] - srcp[+srcs -(j)])\
131 + ABS(srcp[-srcs+1+(j)] - srcp[+srcs+1-(j)]);\
132 if(score < spatial_score){\
133 spatial_score= score;\
134 diff0= filp[-fils+(j)] - srcp[-srcs+(j)];\
135 diff1= filp[+fils-(j)] - srcp[+srcs-(j)];
140 if((diff0 ^ diff1) > 0){
141 int mindiff=
ABS(diff0) >
ABS(diff1) ? diff1 : diff0;
145 if(diff0 + diff1 > 0)
150 temp-= (diff0 + diff1)/2;
156 dst[i][x +
y*dst_stride[i]]=
filp[0];
160 dst[i][x +
y*dst_stride[i]]= p->frame_dec->data[i][x +
y*fils];
165 if(!((
y ^ p->parity) & 1)){
168 p->frame_dec->data[i][x +
y*fils]=
169 dst[i][x +
y*dst_stride[i]]= src[i][x +
y*srcs];
171 dst[i][x +
y*dst_stride[i]]= p->frame_dec->data[i][x +
y*fils];
172 p->frame_dec->data[i][x +
y*fils]= src[i][x +
y*srcs];
184 unsigned int flags,
unsigned int outfmt){
193 int w= ((width + 31) & (~31))>>is_chroma;
194 int h= ((height + 31) & (~31))>>is_chroma;
279 if(!vf->
priv)
return;
334 "motion compensating deinterlacer",
336 "Michael Niedermayer",