[MPlayer-cvslog] r34691 - trunk/libmpcodecs/vf_yadif.c

iive subversion at mplayerhq.hu
Sat Feb 11 23:33:23 CET 2012


Author: iive
Date: Sat Feb 11 23:33:22 2012
New Revision: 34691

Log:
Fix green bottom line on yadif with certain parity.

This implementation of the filter method needs a padding,
that mplayer allocates but never fills with data. 
Do the padding properly and tweak the height alignment to 
even number of lines, instead of rounding to 32.

Modified:
   trunk/libmpcodecs/vf_yadif.c

Modified: trunk/libmpcodecs/vf_yadif.c
==============================================================================
--- trunk/libmpcodecs/vf_yadif.c	Sat Feb 11 22:17:50 2012	(r34690)
+++ trunk/libmpcodecs/vf_yadif.c	Sat Feb 11 23:33:22 2012	(r34691)
@@ -60,8 +60,19 @@ static void store_ref(struct vf_priv_s *
 
     for(i=0; i<3; i++){
         int is_chroma= !!i;
+        int pn_width  = width >>is_chroma;
+        int pn_height = height>>is_chroma;
 
-        memcpy_pic(p->ref[2][i], src[i], width>>is_chroma, height>>is_chroma, p->stride[i], src_stride[i]);
+
+        memcpy_pic(p->ref[2][i], src[i], pn_width, pn_height, p->stride[i], src_stride[i]);
+
+        fast_memcpy(p->ref[2][i] +  pn_height   * p->stride[i],
+                          src[i] + (pn_height-1)*src_stride[i], pn_width);
+        fast_memcpy(p->ref[2][i] + (pn_height+1)* p->stride[i],
+                          src[i] + (pn_height-1)*src_stride[i], pn_width);
+
+        fast_memcpy(p->ref[2][i] -   p->stride[i], src[i], pn_width);
+        fast_memcpy(p->ref[2][i] - 2*p->stride[i], src[i], pn_width);
     }
 }
 
@@ -373,7 +384,7 @@ static int config(struct vf_instance *vf
         for(i=0; i<3; i++){
             int is_chroma= !!i;
             int w= ((width   + 31) & (~31))>>is_chroma;
-            int h= ((height+6+ 31) & (~31))>>is_chroma;
+            int h=(((height  +  1) & ( ~1))>>is_chroma) + 6;
 
             vf->priv->stride[i]= w;
             for(j=0; j<3; j++)


More information about the MPlayer-cvslog mailing list