changeset 19828:1d5832b4b204

cosmetics
author lorenm
date Thu, 14 Sep 2006 03:59:28 +0000
parents 5d3bd75d4deb
children 4f4a58a3fba8
files libmpcodecs/vf_yadif.c
diffstat 1 files changed, 35 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/vf_yadif.c	Wed Sep 13 16:14:08 2006 +0000
+++ b/libmpcodecs/vf_yadif.c	Thu Sep 14 03:59:28 2006 +0000
@@ -68,24 +68,11 @@
     }
 }
 
-static void filter(struct vf_priv_s *p, uint8_t *dst[3], int dst_stride[3], int width, int height, int parity, int tff){
-    int x, y, i;
-
-    for(i=0; i<3; i++){
-        int is_chroma= !!i;
-        int w= width >>is_chroma;
-        int h= height>>is_chroma;
-        int refs= p->stride[i];
-
-        for(y=0; y<h; y++){
-            if((y ^ parity) & 1){
+static void filter_line(struct vf_priv_s *p, uint8_t *dst, uint8_t *prev, uint8_t *cur, uint8_t *next, int w, int refs, int parity){
+    int x;
+    uint8_t *prev2= parity ? prev : cur ;
+    uint8_t *next2= parity ? cur  : next;
                 for(x=0; x<w; x++){
-                        uint8_t *prev= &p->ref[0][i][x + y*refs];
-                        uint8_t *cur = &p->ref[1][i][x + y*refs];
-                        uint8_t *next= &p->ref[2][i][x + y*refs];
-                        uint8_t *prev2= (tff ^ parity) ? prev : cur ;
-                        uint8_t *next2= (tff ^ parity) ? cur  : next;
-
                         int c= cur[-refs];
                         int d= (prev2[0] + next2[0])>>1;
                         int e= cur[+refs];
@@ -124,11 +111,38 @@
                             diff= MAX3(diff, min, -max);
                         }
 
-                        if(d < spatial_pred) d= MIN(d + diff, spatial_pred);
-                        else                 d= MAX(d - diff, spatial_pred);
+                        if(spatial_pred > d + diff)
+                           spatial_pred = d + diff;
+                        else if(spatial_pred < d - diff)
+                           spatial_pred = d - diff;
+
+                        dst[0] = spatial_pred;
+
+                        dst++;
+                        cur++;
+                        prev++;
+                        next++;
+                        prev2++;
+                        next2++;
+                }
+}
 
-                        dst[i][x + y*dst_stride[i]]= d;
-                }
+static void filter(struct vf_priv_s *p, uint8_t *dst[3], int dst_stride[3], int width, int height, int parity, int tff){
+    int x, y, i;
+
+    for(i=0; i<3; i++){
+        int is_chroma= !!i;
+        int w= width >>is_chroma;
+        int h= height>>is_chroma;
+        int refs= p->stride[i];
+
+        for(y=0; y<h; y++){
+            if((y ^ parity) & 1){
+                uint8_t *prev= &p->ref[0][i][y*refs];
+                uint8_t *cur = &p->ref[1][i][y*refs];
+                uint8_t *next= &p->ref[2][i][y*refs];
+                uint8_t *dst2= &dst[i][y*dst_stride[i]];
+                filter_line(p, dst2, prev, cur, next, w, refs, parity ^ tff);
             }else{
                 memcpy(&dst[i][y*dst_stride[i]], &p->ref[1][i][y*refs], w);
             }