changeset 11129:0bca1b2ac58d libavcodec

Move apply_loop_filter above render_slice, it'll be used by the latter soon
author conrad
date Fri, 12 Feb 2010 22:01:25 +0000
parents b6a0e8a27941
children fb5358e0dded
files vp3.c
diffstat 1 files changed, 64 insertions(+), 64 deletions(-) [+]
line wrap: on
line diff
--- a/vp3.c	Fri Feb 12 22:01:22 2010 +0000
+++ b/vp3.c	Fri Feb 12 22:01:25 2010 +0000
@@ -1389,6 +1389,70 @@
     }
 }
 
+static void apply_loop_filter(Vp3DecodeContext *s)
+{
+    int plane;
+    int x, y;
+    int *bounding_values= s->bounding_values_array+127;
+
+    for (plane = 0; plane < 3; plane++) {
+        int width           = s->fragment_width  >> !!plane;
+        int height          = s->fragment_height >> !!plane;
+        int fragment        = s->fragment_start        [plane];
+        int stride          = s->current_frame.linesize[plane];
+        uint8_t *plane_data = s->current_frame.data    [plane];
+        if (!s->flipped_image) stride = -stride;
+
+        for (y = 0; y < height; y++) {
+
+            for (x = 0; x < width; x++) {
+                /* This code basically just deblocks on the edges of coded blocks.
+                 * However, it has to be much more complicated because of the
+                 * braindamaged deblock ordering used in VP3/Theora. Order matters
+                 * because some pixels get filtered twice. */
+                if( s->all_fragments[fragment].coding_method != MODE_COPY )
+                {
+                    /* do not perform left edge filter for left columns frags */
+                    if (x > 0) {
+                        s->dsp.vp3_h_loop_filter(
+                            plane_data + s->all_fragments[fragment].first_pixel,
+                            stride, bounding_values);
+                    }
+
+                    /* do not perform top edge filter for top row fragments */
+                    if (y > 0) {
+                        s->dsp.vp3_v_loop_filter(
+                            plane_data + s->all_fragments[fragment].first_pixel,
+                            stride, bounding_values);
+                    }
+
+                    /* do not perform right edge filter for right column
+                     * fragments or if right fragment neighbor is also coded
+                     * in this frame (it will be filtered in next iteration) */
+                    if ((x < width - 1) &&
+                        (s->all_fragments[fragment + 1].coding_method == MODE_COPY)) {
+                        s->dsp.vp3_h_loop_filter(
+                            plane_data + s->all_fragments[fragment + 1].first_pixel,
+                            stride, bounding_values);
+                    }
+
+                    /* do not perform bottom edge filter for bottom row
+                     * fragments or if bottom fragment neighbor is also coded
+                     * in this frame (it will be filtered in the next row) */
+                    if ((y < height - 1) &&
+                        (s->all_fragments[fragment + width].coding_method == MODE_COPY)) {
+                        s->dsp.vp3_v_loop_filter(
+                            plane_data + s->all_fragments[fragment + width].first_pixel,
+                            stride, bounding_values);
+                    }
+                }
+
+                fragment++;
+            }
+        }
+    }
+}
+
 /*
  * Perform the final rendering for a particular slice of data.
  * The slice number ranges from 0..(macroblock_height - 1).
@@ -1562,70 +1626,6 @@
     emms_c();
 }
 
-static void apply_loop_filter(Vp3DecodeContext *s)
-{
-    int plane;
-    int x, y;
-    int *bounding_values= s->bounding_values_array+127;
-
-    for (plane = 0; plane < 3; plane++) {
-        int width           = s->fragment_width  >> !!plane;
-        int height          = s->fragment_height >> !!plane;
-        int fragment        = s->fragment_start        [plane];
-        int stride          = s->current_frame.linesize[plane];
-        uint8_t *plane_data = s->current_frame.data    [plane];
-        if (!s->flipped_image) stride = -stride;
-
-        for (y = 0; y < height; y++) {
-
-            for (x = 0; x < width; x++) {
-                /* This code basically just deblocks on the edges of coded blocks.
-                 * However, it has to be much more complicated because of the
-                 * braindamaged deblock ordering used in VP3/Theora. Order matters
-                 * because some pixels get filtered twice. */
-                if( s->all_fragments[fragment].coding_method != MODE_COPY )
-                {
-                    /* do not perform left edge filter for left columns frags */
-                    if (x > 0) {
-                        s->dsp.vp3_h_loop_filter(
-                            plane_data + s->all_fragments[fragment].first_pixel,
-                            stride, bounding_values);
-                    }
-
-                    /* do not perform top edge filter for top row fragments */
-                    if (y > 0) {
-                        s->dsp.vp3_v_loop_filter(
-                            plane_data + s->all_fragments[fragment].first_pixel,
-                            stride, bounding_values);
-                    }
-
-                    /* do not perform right edge filter for right column
-                     * fragments or if right fragment neighbor is also coded
-                     * in this frame (it will be filtered in next iteration) */
-                    if ((x < width - 1) &&
-                        (s->all_fragments[fragment + 1].coding_method == MODE_COPY)) {
-                        s->dsp.vp3_h_loop_filter(
-                            plane_data + s->all_fragments[fragment + 1].first_pixel,
-                            stride, bounding_values);
-                    }
-
-                    /* do not perform bottom edge filter for bottom row
-                     * fragments or if bottom fragment neighbor is also coded
-                     * in this frame (it will be filtered in the next row) */
-                    if ((y < height - 1) &&
-                        (s->all_fragments[fragment + width].coding_method == MODE_COPY)) {
-                        s->dsp.vp3_v_loop_filter(
-                            plane_data + s->all_fragments[fragment + width].first_pixel,
-                            stride, bounding_values);
-                    }
-                }
-
-                fragment++;
-            }
-        }
-    }
-}
-
 /*
  * This function computes the first pixel addresses for each fragment.
  * This function needs to be invoked after the first frame is allocated