[FFmpeg-devel] Does i686 have MMX?

Jason Garrett-Glaser darkshikari
Thu Aug 26 20:29:25 CEST 2010

The issue is simple:

1.  People use --cpu on x86 to mean "it should run on at least this
CPU, and contain optimizations for all better CPUs".  --cpu=i686 is
widely used in order to enable CMOV on normal builds.  Even if this is
wrong, this is what people do.  We cannot silently go and break what
everyone currently does, it's just not reasonable.

2.  This patch SILENTLY DISABLES MMX on almost all ffmpeg builds in
the world.  This is bad.  I don't care if it's right, it's bad.

3.  MMX should NEVER EVER be disabled unless --disable-mmx is passed.
End of story.

Possible solutions:

1.  Revert the emms change.

2.  By policy, make ffmpeg require MMX to run by default.  Add a
runtime check, just in case.  Any --cpu that doesn't support MMX will
error out unless the user specifies --disable-mmx too.

Benefits: --cpu still makes logical sense, keeps the emms change, and
we can enable CMOV by default too (i.e. if --cpu isn't set).
Possible problems: this still breaks everyone's build scripts, but at
least it'll break them loudly, so people will fix them.

3.  By policy, make ffmpeg require MMX to run by default.  Add a
runtime check, just in case, telling the user to recompile without MMX
if they're on an unsupported CPU.  Don't check the user's --cpu option
when it comes to validating this.  This is what x264 does.

Benefits: simple, doesn't break build scripts, and x264 showed that it worked.
Possible problems: --cpu doesn't do quite what it implies -- adds
runtime failure instead of compile-time.

4.  Modify the emms change to take an argument instead of using a
global variable.

Benefits: no behavioral changes, everything works just as before,
except with no global.
Possible problems: ugly.

I will revert any patch that silently disables mmx on any CPU.

Dark Shikari

More information about the ffmpeg-devel mailing list