[gstreamer-bugs] [Bug 576997] New: floating point stack corruption : emms_c macro not working in ffdeinterlace

GStreamer (bugzilla.gnome.org) bugzilla-daemon at bugzilla.gnome.org
Fri Mar 27 10:17:58 PDT 2009


If you have any questions why you received this email, please see the text at
the end of this email. Replies to this email are NOT read, please see the text
at the end of this email. You can add comments to this bug at:
  http://bugzilla.gnome.org/show_bug.cgi?id=576997

  GStreamer | gst-ffmpeg | Ver: 0.10.5
           Summary: floating point stack corruption : emms_c macro not
                    working in ffdeinterlace
           Product: GStreamer
           Version: 0.10.5
          Platform: Other
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gst-ffmpeg
        AssignedTo: gstreamer-bugs at lists.sourceforge.net
        ReportedBy: ivanohe at abacom.com
         QAContact: gstreamer-bugs at lists.sourceforge.net
     GNOME version: Unspecified
   GNOME milestone: Unspecified


Hi,

I spent lots of time tracking a voodoo issue on one of our encoder on a 64 bit
machine : There was a big floating point error once when the encoder was
compiled with icc. Doing the calculation once (to get the error) and again will
give correct result afterward...

By compiling with icc using the -fp-stack-check, I got a crash in my encoder at
the place of the floating point calculation error. This means that the floating
point context was not clean at this point. 

After lots of trial, I found the cause of the problem : ffdeinterlace.

There is some mmx instruction in the deinterlace code. Normally, the emms_c()
macro will take care of calling emms() function to clear the state of the
floating point unit. However, the emms_c() macro expect the global mm_flags to
be set properly (mmx support) or else, the macro does nothing.

I also see that this problem occur in the current ffmpeg (2009-03-24) when
using a deinterlace in a raw to raw scenario like this : 

./ffmpeg_g -i test.avi -vcodec rawvideo -an -deinterlace out2.avi

using a compress input file or choosing an encoder will call the dsputil_init()
function and properly set the mm_flags.

I made a patch to ffdeinterlace that fix the issue for me. If there is a fix in
ffmpeg, my patch might not be need after that point.

I am using gst-ffmpeg 0.10.5 but since the problem is cause by ffmpeg code,
this patch still apply for latest gst-ffmpeg


-- 
See http://bugzilla.gnome.org/page.cgi?id=email.html for more info about why you received
this email, why you can't respond via email, how to stop receiving
emails (or reduce the number you receive), and how to contact someone
if you are having problems with the system.

You can add comments to this bug at http://bugzilla.gnome.org/show_bug.cgi?id=576997.




More information about the Gstreamer-bugs mailing list