[MPlayer-users] via epia nehemiah mmx detection bug

Geoffrey Espin espin at idiom.com
Sat Oct 18 10:15:39 CEST 2003


Some MMX detect code fails with the new Nehemiah C3-2 (CPUID 693) chip.
Using mencoder to do any reasonable captures, soon results in the dreaded:

	video buffer full - dropping frame
	...
	too bad - dropping audio frame !
	...


% cpuid   # on Nehemiah 691
 eax in    eax      ebx      ecx      edx
00000000 00000001 746e6543 736c7561 48727561
00000001 00000691 00000000 00000000 0380b035
80000000 80000009 00000000 00000000 00000000
80000001 00000691 00000000 00000000 1380b035    <-- edx good
80000002 20414956 6568654e 6861696d 00000000
...
% cpuid  # on Nehemiah 693
 eax in    eax      ebx      ecx      edx
00000000 00000001 746e6543 736c7561 48727561
00000001 00000693 00000000 00000000 0380b03d
80000000 80000006 00000000 00000000 00000000
80000001 00000000 00000000 00000000 00000000    <-- edx bad!
80000002 20414956 6568654e 6861696d 00000000

mplayer/libavcodec/i386/cputest.c

	...
	 } else if (ebx == 0x746e6543 &&
               edx == 0x48727561 &&
               ecx == 0x736c7561) {  /*  "CentaurHauls" */
        /* VIA C3 */
        cpuid(0x80000000, eax, ebx, ecx, edx);
        if ((unsigned)eax < 0x80000001)
            goto inteltest;
        cpuid(0x80000001, eax, ebx, ecx, edx);
->>	edx = 0x1380b035;	// XXX *** broken C3-2 CPUID 693 *** XXX
        rval = 0;
        if( edx & ( 1 << 31) )
          rval |= MM_3DNOW;
        if( edx & ( 1 << 23) )
          rval |= MM_MMX;
        if( edx & ( 1 << 24) )
          rval |= MM_MMXEXT;
        return rval;
	...

Dunno why...  I hacked by pretending the edx returns the good value
instead of 0.

Geoff



More information about the MPlayer-users mailing list