diff mbox

[FFmpeg-devel,1/7] avcodec/svq1enc: Clear MMX state after svq1_encode_plane()

Message ID 20161021133146.11956-1-michael@niedermayer.cc
State Accepted
Commit 70dc6bbf1bf0c78d6d5f8a0a195b57b6d66a56c0
Headers show

Commit Message

Michael Niedermayer Oct. 21, 2016, 1:31 p.m. UTC
svq1_encode_plane() uses SIMD and we call libc memory allocation functions after it

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavcodec/svq1enc.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Michael Niedermayer Oct. 22, 2016, 12:18 p.m. UTC | #1
On Fri, Oct 21, 2016 at 03:31:40PM +0200, Michael Niedermayer wrote:
> svq1_encode_plane() uses SIMD and we call libc memory allocation functions after it
> 
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavcodec/svq1enc.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)

applied

[...]
diff mbox

Patch

diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c
index cb7c4a1..d78ede7 100644
--- a/libavcodec/svq1enc.c
+++ b/libavcodec/svq1enc.c
@@ -641,15 +641,17 @@  FF_ENABLE_DEPRECATION_WARNINGS
     ff_side_data_set_encoder_stats(pkt, pict->quality, NULL, 0, s->pict_type);
 
     svq1_write_header(s, s->pict_type);
-    for (i = 0; i < 3; i++)
-        if (svq1_encode_plane(s, i,
+    for (i = 0; i < 3; i++) {
+        int ret = svq1_encode_plane(s, i,
                               pict->data[i],
                               s->last_picture->data[i],
                               s->current_picture->data[i],
                               s->frame_width  / (i ? 4 : 1),
                               s->frame_height / (i ? 4 : 1),
                               pict->linesize[i],
-                              s->current_picture->linesize[i]) < 0) {
+                              s->current_picture->linesize[i]);
+        emms_c();
+        if (ret < 0) {
             int j;
             for (j = 0; j < i; j++) {
                 av_freep(&s->motion_val8[j]);
@@ -658,6 +660,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
             av_freep(&s->scratchbuf);
             return -1;
         }
+    }
 
     // avpriv_align_put_bits(&s->pb);
     while (put_bits_count(&s->pb) & 31)