From 6bb925f47dbcb073ee505ed71231c6662aec5ed1 Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Thu, 31 Oct 2002 12:11:53 +0000
Subject: [PATCH] dont call emms_c() for each MB

Originally committed as revision 1127 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavcodec/mpegvideo.c | 9 ++++-----
 libavcodec/utils.c     | 6 ++++++
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 5571148b716..ad8e5b59b59 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -1819,7 +1819,7 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
                 /* if previous was skipped too, then nothing to do ! 
                    skip only during decoding as we might trash the buffers during encoding a bit */
                 if (*mbskip_ptr >= s->ip_buffer_count  && !s->encoding) 
-                    goto the_end;
+                    return;
             } else {
                 *mbskip_ptr = 0; /* not skipped */
             }
@@ -1866,7 +1866,7 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
             }
 
             /* skip dequant / idct if we are really late ;) */
-            if(s->hurry_up>1) goto the_end;
+            if(s->hurry_up>1) return;
 
             /* add dct residue */
             if(s->encoding || !(   s->mpeg2 || s->h263_msmpeg4 || s->codec_id==CODEC_ID_MPEG1VIDEO 
@@ -1916,8 +1916,6 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
             }
         }
     }
- the_end:
-    emms_c(); //FIXME remove
 }
 
 static inline void dct_single_coeff_elimination(MpegEncContext *s, int n, int threshold)
@@ -2574,7 +2572,6 @@ static void encode_picture(MpegEncContext *s, int picture_number)
 //                s->mb_type[mb_y*s->mb_width + mb_x]=MB_TYPE_INTER;
             }
         }
-        emms_c();
     }else /* if(s->pict_type == I_TYPE) */{
         /* I-Frame */
         //FIXME do we need to zero them?
@@ -2601,6 +2598,8 @@ static void encode_picture(MpegEncContext *s, int picture_number)
             }
         }
     }
+    emms_c();
+
     if(s->scene_change_score > 0 && s->pict_type == P_TYPE){
         s->pict_type= I_TYPE;
         memset(s->mb_type   , MB_TYPE_INTRA, sizeof(UINT8)*s->mb_width*s->mb_height);
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index fcd65364b68..f7449d3b137 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -120,6 +120,9 @@ int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size,
     int ret;
 
     ret = avctx->codec->encode(avctx, buf, buf_size, (void *)pict);
+    
+    emms_c(); //needed to avoid a emms_c() call before every return;
+
     avctx->frame_number++;
     return ret;
 }
@@ -135,6 +138,9 @@ int avcodec_decode_video(AVCodecContext *avctx, AVPicture *picture,
 
     ret = avctx->codec->decode(avctx, picture, got_picture_ptr, 
                                buf, buf_size);
+
+    emms_c(); //needed to avoid a emms_c() call before every return;
+
     if (*got_picture_ptr)                           
         avctx->frame_number++;
     return ret;
-- 
GitLab