changeset 717:6cba3b6196f0 libavcodec

optimization
author michaelni
date Wed, 02 Oct 2002 17:07:39 +0000
parents 2ec5bd9f7116
children 16dab8296293
files h263dec.c mpeg12.c mpegvideo.c
diffstat 3 files changed, 19 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/h263dec.c	Wed Oct 02 16:36:43 2002 +0000
+++ b/h263dec.c	Wed Oct 02 17:07:39 2002 +0000
@@ -362,7 +362,12 @@
             h = s->height - y;
             if (h > 16)
                 h = 16;
-            offset = y * s->linesize;
+
+            if(s->pict_type==B_TYPE)
+                offset = 0;
+            else
+                offset = y * s->linesize;
+
             if(s->pict_type==B_TYPE || (!s->has_b_frames)){
                 src_ptr[0] = s->current_picture[0] + offset;
                 src_ptr[1] = s->current_picture[1] + (offset >> 2);
--- a/mpeg12.c	Wed Oct 02 16:36:43 2002 +0000
+++ b/mpeg12.c	Wed Oct 02 17:07:39 2002 +0000
@@ -1604,7 +1604,10 @@
                 h = s->height - y;
                 if (h > 16)
                     h = 16;
-                offset = y * s->linesize;
+                if(s->pict_type==B_TYPE)
+                    offset = 0;
+                else
+                    offset = y * s->linesize;
                 if(s->pict_type==B_TYPE || (!s->has_b_frames)){
                     src_ptr[0] = s->current_picture[0] + offset;
                     src_ptr[1] = s->current_picture[1] + (offset >> 2);
--- a/mpegvideo.c	Wed Oct 02 16:36:43 2002 +0000
+++ b/mpegvideo.c	Wed Oct 02 17:07:39 2002 +0000
@@ -1684,9 +1684,15 @@
             }
         }
 
-        dest_y = s->current_picture [0] + (mb_y * 16* s->linesize  ) + mb_x * 16;
-        dest_cb = s->current_picture[1] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
-        dest_cr = s->current_picture[2] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
+        if(s->pict_type==B_TYPE && s->avctx->draw_horiz_band){
+            dest_y = s->current_picture [0] + mb_x * 16;
+            dest_cb = s->current_picture[1] + mb_x * 8;
+            dest_cr = s->current_picture[2] + mb_x * 8;
+        }else{
+            dest_y = s->current_picture [0] + (mb_y * 16* s->linesize  ) + mb_x * 16;
+            dest_cb = s->current_picture[1] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
+            dest_cr = s->current_picture[2] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
+        }
 
         if (s->interlaced_dct) {
             dct_linesize = s->linesize * 2;