changeset 2686:979a847cb943 libavcodec

various 10l fixes for the loop filter
author michael
date Mon, 16 May 2005 17:22:36 +0000
parents bdd509b4b554
children fa86fa423e92
files vp3.c
diffstat 1 files changed, 10 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/vp3.c	Mon May 16 14:55:22 2005 +0000
+++ b/vp3.c	Mon May 16 17:22:36 2005 +0000
@@ -2269,7 +2269,9 @@
     int fragment;
     int stride;
     unsigned char *plane_data;
-    int bounding_values[256];
+
+    int bounding_values_array[256];
+    int *bounding_values= bounding_values_array+127;
     int filter_limit;
 
     /* find the right loop limit value */
@@ -2277,10 +2279,10 @@
         if (vp31_ac_scale_factor[x] >= s->quality_index)
             break;
     }
-    filter_limit = vp31_filter_limit_values[x];
+    filter_limit = vp31_filter_limit_values[s->quality_index];
 
     /* set up the bounding values */
-    memset(bounding_values, 0, 256 * sizeof(int));
+    memset(bounding_values_array, 0, 256 * sizeof(int));
     for (x = 0; x < filter_limit; x++) {
         bounding_values[-x - filter_limit] = -filter_limit + x;
         bounding_values[-x] = -x;
@@ -2321,7 +2323,7 @@
                 if ((x > 0) &&
                     (s->all_fragments[fragment].coding_method != MODE_COPY)) {
                     horizontal_filter(
-                        plane_data + s->all_fragments[fragment].first_pixel, 
+                        plane_data + s->all_fragments[fragment].first_pixel - 7*stride, 
                         stride, bounding_values);
                 }
 
@@ -2329,7 +2331,7 @@
                 if ((y > 0) &&
                     (s->all_fragments[fragment].coding_method != MODE_COPY)) {
                     vertical_filter(
-                        plane_data + s->all_fragments[fragment].first_pixel, 
+                        plane_data + s->all_fragments[fragment].first_pixel + stride, 
                         stride, bounding_values);
                 }
 
@@ -2340,7 +2342,7 @@
                     (s->all_fragments[fragment].coding_method != MODE_COPY) &&
                     (s->all_fragments[fragment + 1].coding_method == MODE_COPY)) {
                     horizontal_filter(
-                        plane_data + s->all_fragments[fragment + 1].first_pixel, 
+                        plane_data + s->all_fragments[fragment + 1].first_pixel - 7*stride, 
                         stride, bounding_values);
                 }
 
@@ -2351,7 +2353,7 @@
                     (s->all_fragments[fragment].coding_method != MODE_COPY) &&
                     (s->all_fragments[fragment + width].coding_method == MODE_COPY)) {
                     vertical_filter(
-                        plane_data + s->all_fragments[fragment + width].first_pixel, 
+                        plane_data + s->all_fragments[fragment + width].first_pixel + stride, 
                         stride, bounding_values);
                 }
 
@@ -2740,7 +2742,6 @@
 
     reverse_dc_prediction(s, 0, s->fragment_width, s->fragment_height);
     render_fragments(s, 0, s->width, s->height, 0);
-//    apply_loop_filter(s);
 
     if ((avctx->flags & CODEC_FLAG_GRAY) == 0) {
         reverse_dc_prediction(s, s->u_fragment_start,
@@ -2754,6 +2755,7 @@
         memset(s->current_frame.data[2], 0x80, s->width * s->height / 4);
     }
 
+    apply_loop_filter(s);
 #if KEYFRAMES_ONLY
 }
 #endif