71 #define MIN(a,b) ((a) > (b) ? (b) : (a))
72 #define MAX(a,b) ((a) < (b) ? (b) : (a))
73 #define ABS(a) ((a) > 0 ? (a) : (-(a)))
97 p->
frame->data[i]= src[i];
98 p->
frame->linesize[i]= src_stride[i];
109 int w= width >>is_chroma;
110 int h= height>>is_chroma;
112 int srcs= src_stride[i];
117 if((x-2)+(y-1)*w>=0 && (x+2)+(y+1)*w<w*h){
119 uint8_t *srcp= &src[i][x + y*srcs];
120 int diff0= filp[-fils] - srcp[-srcs];
121 int diff1= filp[+fils] - srcp[+srcs];
122 int spatial_score=
ABS(srcp[-srcs-1] - srcp[+srcs-1])
123 +
ABS(srcp[-srcs ] - srcp[+srcs ])
124 +
ABS(srcp[-srcs+1] - srcp[+srcs+1]) - 1;
128 { int score= ABS(srcp[-srcs-1+(j)] - srcp[+srcs-1-(j)])\
129 + ABS(srcp[-srcs +(j)] - srcp[+srcs -(j)])\
130 + ABS(srcp[-srcs+1+(j)] - srcp[+srcs+1-(j)]);\
131 if(score < spatial_score){\
132 spatial_score= score;\
133 diff0= filp[-fils+(j)] - srcp[-srcs+(j)];\
134 diff1= filp[+fils-(j)] - srcp[+srcs-(j)];
139 if((diff0 ^ diff1) > 0){
140 int mindiff=
ABS(diff0) >
ABS(diff1) ? diff1 : diff0;
144 if(diff0 + diff1 > 0)
149 temp-= (diff0 + diff1)/2;
155 dst[i][x + y*dst_stride[i]]=
filp[0];
159 dst[i][x + y*dst_stride[i]]= p->frame_dec->data[i][x + y*fils];
164 if(!((y ^ p->parity) & 1)){
167 p->frame_dec->data[i][x + y*fils]=
168 dst[i][x + y*dst_stride[i]]= src[i][x + y*srcs];
170 dst[i][x + y*dst_stride[i]]= p->frame_dec->data[i][x + y*fils];
171 p->frame_dec->data[i][x + y*fils]= src[i][x + y*srcs];
181 static int config(
struct vf_instance *vf,
183 unsigned int flags,
unsigned int outfmt){
191 int w= ((width + 31) & (~31))>>is_chroma;
192 int h= ((height + 31) & (~31))>>is_chroma;
194 vf->priv->temp_stride[i]= w;
195 vf->priv->temp[i]= malloc(vf->priv->temp_stride[i]*h*
sizeof(int16_t));
196 vf->priv->src [i]= malloc(vf->priv->temp_stride[i]*h*
sizeof(
uint8_t));
199 vf->priv->avctx_enc= avcodec_alloc_context();
214 switch(vf->priv->mode){
227 avcodec_open(avctx_enc, enc);
232 vf->priv->outbuf_size= width*height*10;
233 vf->priv->outbuf= malloc(vf->priv->outbuf_size);
244 mpi->
planes[0]=vf->dmpi->planes[0];
245 mpi->
stride[0]=vf->dmpi->stride[0];
246 mpi->
width=vf->dmpi->width;
248 mpi->
planes[1]=vf->dmpi->planes[1];
249 mpi->
planes[2]=vf->dmpi->planes[2];
250 mpi->
stride[1]=vf->dmpi->stride[1];
251 mpi->
stride[2]=vf->dmpi->stride[2];
275 static void uninit(
struct vf_instance *vf){
276 if(!vf->priv)
return;
280 free(vf->priv->temp[i]);
281 vf->priv->temp[i]=
NULL;
282 free(vf->priv->src[i]);
283 vf->priv->src[i]=
NULL;
286 if (vf->priv->avctx_enc) {
291 free(vf->priv->outbuf);
331 "motion compensating deinterlacer",
333 "Michael Niedermayer",