changeset 7846:a7162bb60138 libavcodec

Make it possible to disable loop filter in VC-1. Unlike H.264 it does not affect picture quality on any files I've watched.
author kostya
date Thu, 11 Sep 2008 06:35:37 +0000
parents e4edcbbca3f3
children 5a114f24632a
files vc1.c
diffstat 1 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/vc1.c	Thu Sep 11 01:22:34 2008 +0000
+++ b/vc1.c	Thu Sep 11 06:35:37 2008 +0000
@@ -877,6 +877,8 @@
         av_log(avctx, AV_LOG_ERROR,
                "LOOPFILTER shell not be enabled in simple profile\n");
     }
+    if(v->s.avctx->skip_loop_filter >= AVDISCARD_ALL)
+        v->s.loop_filter = 0;
 
     v->res_x8 = get_bits1(gb); //reserved
     v->multires = get_bits1(gb);
@@ -3119,6 +3121,7 @@
     int dst_idx, off;
     int skipped, fourmv;
     int block_cbp = 0, pat;
+    int apply_loop_filter;
 
     mquant = v->pq; /* Loosy initialization */
 
@@ -3133,6 +3136,7 @@
 
     s->dsp.clear_blocks(s->block[0]);
 
+    apply_loop_filter = s->loop_filter && !(s->avctx->skip_loop_filter >= AVDISCARD_NONKEY);
     if (!fourmv) /* 1MV mode */
     {
         if (!skipped)
@@ -3197,7 +3201,7 @@
                         if(v->a_avail)
                             s->dsp.vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2));
                     }
-                    if(v->s.loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){
+                    if(apply_loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){
                         int left_cbp, top_cbp;
                         if(i & 4){
                             left_cbp = v->cbp[s->mb_x - 1]            >> (i * 4);
@@ -3214,7 +3218,7 @@
                     block_cbp |= 0xF << (i << 2);
                 } else if(val) {
                     int left_cbp = 0, top_cbp = 0, filter = 0;
-                    if(v->s.loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){
+                    if(apply_loop_filter && s->mb_x && s->mb_x != (s->mb_width - 1) && s->mb_y && s->mb_y != (s->mb_height - 1)){
                         filter = 1;
                         if(i & 4){
                             left_cbp = v->cbp[s->mb_x - 1]            >> (i * 4);