[Ffmpeg-cvslog] r5685 - trunk/libavcodec/vc1.c

kostya subversion
Sun Jul 9 04:47:10 CEST 2006


Author: kostya
Date: Sun Jul  9 04:47:09 2006
New Revision: 5685

Modified:
   trunk/libavcodec/vc1.c

Log:
Use overlap filter instead of loop filter.


Modified: trunk/libavcodec/vc1.c
==============================================================================
--- trunk/libavcodec/vc1.c	(original)
+++ trunk/libavcodec/vc1.c	Sun Jul  9 04:47:09 2006
@@ -825,24 +825,10 @@
     }
 }
 
-/** Apply overlap transform
+/** Apply overlap transform to vertical edge
  * @todo optimize
  * @todo move to DSPContext
  */
-static void vc1_overlap_block(MpegEncContext *s, DCTELEM block[64], int n, int do_hor, int do_vert)
-{
-    int i;
-
-    if(do_hor) { //TODO
-    }
-    if(do_vert) { //TODO
-    }
-
-    for(i = 0; i < 64; i++)
-        block[i] += 128;
-}
-
-
 static void vc1_v_overlap(uint8_t* src, int stride)
 {
     int i;
@@ -861,6 +847,10 @@
     }
 }
 
+/** Apply overlap transform to horizontal edge
+ * @todo optimize
+ * @todo move to DSPContext
+ */
 static void vc1_h_overlap(uint8_t* src, int stride)
 {
     int i;
@@ -2450,9 +2440,9 @@
                     /* TODO: proper loop filtering */
                     if(v->pq >= 9 && v->overlap) {
                         if(v->a_avail)
-                            s->dsp.h263_v_loop_filter(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), s->y_dc_scale);
+                            vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
                         if(v->c_avail)
-                            s->dsp.h263_h_loop_filter(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), s->y_dc_scale);
+                            vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
                     }
                 } else if(val) {
                     vc1_decode_p_block(v, block[i], i, mquant, ttmb, first_block);
@@ -2546,9 +2536,9 @@
                     /* TODO: proper loop filtering */
                     if(v->pq >= 9 && v->overlap) {
                         if(v->a_avail)
-                            s->dsp.h263_v_loop_filter(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), s->y_dc_scale);
+                            vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
                         if(v->c_avail)
-                            s->dsp.h263_h_loop_filter(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), s->y_dc_scale);
+                            vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
                     }
                 } else if(is_coded[i]) {
                     status = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block);
@@ -2582,7 +2572,7 @@
  */
 static void vc1_decode_i_blocks(VC1Context *v)
 {
-    int k;
+    int k, j;
     MpegEncContext *s = &v->s;
     int cbp, val;
     uint8_t *coded_val;
@@ -2649,28 +2639,28 @@
 
                 vc1_inv_trans(s->block[k], 8, 8);
                 if(v->pq >= 9 && v->overlap) {
-                    vc1_overlap_block(s, s->block[k], k, (s->mb_y || k>1), (s->mb_x || (k != 0 && k != 2)));
+                    for(j = 0; j < 64; j++) s->block[k][j] += 128;
                 }
             }
 
             vc1_put_block(v, s->block);
             if(v->pq >= 9 && v->overlap) { /* XXX: do proper overlapping insted of loop filter */
-                if(s->mb_y) {
-                    s->dsp.h263_v_loop_filter(s->dest[0], s->linesize, s->y_dc_scale);
-                    s->dsp.h263_v_loop_filter(s->dest[0] + 8, s->linesize, s->y_dc_scale);
-                    s->dsp.h263_v_loop_filter(s->dest[1], s->uvlinesize, s->y_dc_scale);
-                    s->dsp.h263_v_loop_filter(s->dest[2], s->uvlinesize, s->y_dc_scale);
+                if(!s->first_slice_line) {
+                    vc1_v_overlap(s->dest[0], s->linesize);
+                    vc1_v_overlap(s->dest[0] + 8, s->linesize);
+                    vc1_v_overlap(s->dest[1], s->uvlinesize);
+                    vc1_v_overlap(s->dest[2], s->uvlinesize);
                 }
-                s->dsp.h263_v_loop_filter(s->dest[0] + 8 * s->linesize, s->linesize, s->y_dc_scale);
-                s->dsp.h263_v_loop_filter(s->dest[0] + 8 * s->linesize + 8, s->linesize, s->y_dc_scale);
+                vc1_v_overlap(s->dest[0] + 8 * s->linesize, s->linesize);
+                vc1_v_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize);
                 if(s->mb_x) {
-                    s->dsp.h263_h_loop_filter(s->dest[0], s->linesize, s->y_dc_scale);
-                    s->dsp.h263_h_loop_filter(s->dest[0] + 8 * s->linesize, s->linesize, s->y_dc_scale);
-                    s->dsp.h263_h_loop_filter(s->dest[1], s->uvlinesize, s->y_dc_scale);
-                    s->dsp.h263_h_loop_filter(s->dest[2], s->uvlinesize, s->y_dc_scale);
+                    vc1_h_overlap(s->dest[0], s->linesize);
+                    vc1_h_overlap(s->dest[0] + 8 * s->linesize, s->linesize);
+                    vc1_h_overlap(s->dest[1], s->uvlinesize);
+                    vc1_h_overlap(s->dest[2], s->uvlinesize);
                 }
-                s->dsp.h263_h_loop_filter(s->dest[0] + 8, s->linesize, s->y_dc_scale);
-                s->dsp.h263_h_loop_filter(s->dest[0] + 8 * s->linesize + 8, s->linesize, s->y_dc_scale);
+                vc1_h_overlap(s->dest[0] + 8, s->linesize);
+                vc1_h_overlap(s->dest[0] + 8 * s->linesize + 8, s->linesize);
             }
 
             if(get_bits_count(&s->gb) > v->bits) {




More information about the ffmpeg-cvslog mailing list