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];
182 static int config(
struct vf_instance *vf,
184 unsigned int flags,
unsigned int outfmt){
193 int w= ((width + 31) & (~31))>>is_chroma;
194 int h= ((height + 31) & (~31))>>is_chroma;
196 vf->priv->temp_stride[i]= w;
197 vf->priv->temp[i]= malloc(vf->priv->temp_stride[i]*h*
sizeof(int16_t));
198 vf->priv->src [i]= malloc(vf->priv->temp_stride[i]*h*
sizeof(
uint8_t));
216 switch(vf->priv->mode){
235 vf->priv->outbuf_size= width*height*10;
236 vf->priv->outbuf= malloc(vf->priv->outbuf_size);
247 mpi->
planes[0]=vf->dmpi->planes[0];
248 mpi->
stride[0]=vf->dmpi->stride[0];
249 mpi->
width=vf->dmpi->width;
251 mpi->
planes[1]=vf->dmpi->planes[1];
252 mpi->
planes[2]=vf->dmpi->planes[2];
253 mpi->
stride[1]=vf->dmpi->stride[1];
254 mpi->
stride[2]=vf->dmpi->stride[2];
278 static void uninit(
struct vf_instance *vf){
279 if(!vf->priv)
return;
283 free(vf->priv->temp[i]);
284 vf->priv->temp[i]=
NULL;
285 free(vf->priv->src[i]);
286 vf->priv->src[i]=
NULL;
289 if (vf->priv->avctx_enc) {
294 free(vf->priv->outbuf);
334 "motion compensating deinterlacer",
336 "Michael Niedermayer",