[FFmpeg-devel] MMX function crash with icc -fp-stack-check
ivanohe at abacom.com
ivanohe
Fri Mar 27 18:01:36 CET 2009
Guillaume POIRIER wrote:
> This is the intendend behaviour (so to speak). -fp-stack-check will
> rightfully crash if an MMX code has been called without clearing the
> FPU state afterwards.
>
> However, if you read the code of libavcodec/imgconvert.c::int
> avpicture_deinterlace
>
> you'll see that emms_c() is called after deinterlace_bottom_field() or
> deinterlace_bottom_field_inplace() is called on all planes.
>
>
Since my original problem was caused by the mmx deinterlace code (from
ffdeinterlace gstreamer filter), I finally found the cause :
The emms_c() macro never call the emms() function since the
dsputil_init()/dsputil_init_mmx() function is never called in a raw to raw
conversion like this :
./ffmpeg_g -i test.avi -vcodec rawvideo -an -deinterlace out2.avi
The mm_flags are set in dsputil_init_mmx(). I confirm I can prevent the crash by
changing the emms_c macro from this :
#define emms_c() \
{\
if (mm_flags & MM_MMX)\
emms();\
}
to this
#define emms_c() \
{ emms();}
I look a bit but I am not familar enough with ffmpeg to know where the
dsputil_init() function should be called for imgconvert... Or maybe just calling
mm_flags=mm_support() at the right place...
Anyway, I was able to fix it in gst-ffmpeg deinterlace filter. will post my
patch to gstreamer.
If I use a compressed input, or a vcodec is choosen (mpeg4, h263), the
dsputil_init()/ dsputil_init_mmx() is called. In that case emms_c() does it job
correctly and the other crash I see from icc -fp-stack-check are probably false
positive like you said.
Regards,
Yves
_____________________________________________
Envoy? via / Sent via
Les Services Internet ABACOM inc.
http://www.abacom.com/
Exp?diteur / Sender: 69.70.44.70
More information about the ffmpeg-devel
mailing list