changeset 2291:c4e882a7c07c libavcodec

h.261 loop filter fix closes bug #1033108
author michael
date Fri, 08 Oct 2004 22:57:39 +0000
parents 89a5e4601343
children 8556f080fcc2
files h261.c mpegvideo.c mpegvideo.h
diffstat 3 files changed, 14 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/h261.c	Fri Oct 08 21:45:29 2004 +0000
+++ b/h261.c	Fri Oct 08 22:57:39 2004 +0000
@@ -57,14 +57,17 @@
     int gob_start_code_skipped; // 1 if gob start code is already read before gob header is read
 }H261Context;
 
-void ff_h261_loop_filter(H261Context * h){
-    MpegEncContext * const s = &h->s;
+void ff_h261_loop_filter(MpegEncContext *s){
+    H261Context * h= (H261Context*)s;
     const int linesize  = s->linesize;
     const int uvlinesize= s->uvlinesize;
     uint8_t *dest_y = s->dest[0];
     uint8_t *dest_cb= s->dest[1];
     uint8_t *dest_cr= s->dest[2];
-    
+
+    if(!(IS_FIL (h->mtype)))
+        return;
+
     s->dsp.h261_loop_filter(dest_y                   , linesize);
     s->dsp.h261_loop_filter(dest_y                + 8, linesize);
     s->dsp.h261_loop_filter(dest_y + 8 * linesize    , linesize);
@@ -256,6 +259,7 @@
         s->mv[0][0][0] = 0;
         s->mv[0][0][1] = 0;
         s->mb_skiped = 1;
+        h->mtype &= ~MB_TYPE_H261_FIL;
 
         MPV_decode_mb(s, s->block);
     }
@@ -388,10 +392,6 @@
 
     MPV_decode_mb(s, s->block);
 
-    if(IS_FIL (h->mtype)){
-        ff_h261_loop_filter(h);
-    }
-
     return SLICE_OK;
 }
 
--- a/mpegvideo.c	Fri Oct 08 21:45:29 2004 +0000
+++ b/mpegvideo.c	Fri Oct 08 22:57:39 2004 +0000
@@ -2608,6 +2608,9 @@
         pix_op[s->chroma_x_shift][uvdxy](dest_cb, ptr_cb, uvlinesize, h >> s->chroma_y_shift);
         pix_op[s->chroma_x_shift][uvdxy](dest_cr, ptr_cr, uvlinesize, h >> s->chroma_y_shift);
     }
+    if(s->out_format == FMT_H261){
+        ff_h261_loop_filter(s);
+    }
 }
 
 /* apply one mpeg motion vector to the three components */
@@ -2704,6 +2707,7 @@
         pix_op[lowres](dest_cb, ptr_cb, uvlinesize, h >> s->chroma_y_shift, uvsx, uvsy);
         pix_op[lowres](dest_cr, ptr_cr, uvlinesize, h >> s->chroma_y_shift, uvsx, uvsy);
     }
+    //FIXME h261 lowres loop filter
 }
 
 //FIXME move to dsputil, avg variant, 16x16 version
--- a/mpegvideo.h	Fri Oct 08 21:45:29 2004 +0000
+++ b/mpegvideo.h	Fri Oct 08 22:57:39 2004 +0000
@@ -863,6 +863,9 @@
 extern const uint8_t ff_h263_chroma_qscale_table[32];
 extern const uint8_t ff_h263_loop_filter_strength[32];
 
+/* h261.c */
+void ff_h261_loop_filter(MpegEncContext *s);
+
 
 /* h263.c, h263dec.c */
 int ff_h263_decode_init(AVCodecContext *avctx);