FFmpegSource2: more portability
Originally committed to SVN as r2354.
This commit is contained in:
parent
14037b8a64
commit
811483bc7a
3 changed files with 8 additions and 38 deletions
|
@ -19,6 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include "ffvideosource.h"
|
#include "ffvideosource.h"
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
int VideoBase::InitPP(const char *PP, int PixelFormat, char *ErrorMsg, unsigned MsgSize) {
|
int VideoBase::InitPP(const char *PP, int PixelFormat, char *ErrorMsg, unsigned MsgSize) {
|
||||||
if (PP == NULL || !strcmp(PP, ""))
|
if (PP == NULL || !strcmp(PP, ""))
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <errno.h>
|
||||||
#include "indexing.h"
|
#include "indexing.h"
|
||||||
#include "wave64writer.h"
|
#include "wave64writer.h"
|
||||||
|
|
||||||
|
|
|
@ -19,51 +19,19 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <intrin.h>
|
||||||
|
|
||||||
int GetCPUFlags() {
|
int GetCPUFlags() {
|
||||||
bool hasmmx, hassse, hasisse = false;
|
int CPUInfo[4];
|
||||||
|
__cpuid(CPUInfo, 0);
|
||||||
__asm {
|
|
||||||
mov eax, 1 // CPU feature detection
|
|
||||||
CPUID
|
|
||||||
|
|
||||||
shr edx, 23 // MMX
|
|
||||||
mov eax, edx
|
|
||||||
and eax, 1
|
|
||||||
mov [hasmmx], al
|
|
||||||
|
|
||||||
shr edx, 2 // SSE
|
|
||||||
mov eax, edx
|
|
||||||
and eax, 1
|
|
||||||
mov [hassse], al
|
|
||||||
jnz End // End if SSE detected, else...
|
|
||||||
|
|
||||||
|
|
||||||
//Athlon TBird Detection, since it has iSSE but not SSE
|
|
||||||
xor eax, eax // CPU Vendor detection (eax=0)
|
|
||||||
CPUID // call CPU identification function
|
|
||||||
|
|
||||||
cmp ebx, 'htuA'
|
|
||||||
jne End
|
|
||||||
cmp edx, 'itne'
|
|
||||||
jne End
|
|
||||||
cmp ebx, 'DMAc'
|
|
||||||
jne End
|
|
||||||
|
|
||||||
//detect Athlon Tbird, which has iSSE but not SSE
|
|
||||||
sub eax, 0x460000 //Find Family 6, Model 4 = Athlon Tbird
|
|
||||||
cmp eax, 0
|
|
||||||
sete [hasisse]
|
|
||||||
|
|
||||||
End:
|
|
||||||
}
|
|
||||||
|
|
||||||
int Flags = 0;
|
int Flags = 0;
|
||||||
|
|
||||||
// PP and SWS defines have the same values for their defines so this actually works
|
// PP and SWS defines have the same values for their defines so this actually works
|
||||||
if (hasmmx)
|
if (CPUInfo[3] & (1 << 23))
|
||||||
Flags |= PP_CPU_CAPS_MMX;
|
Flags |= PP_CPU_CAPS_MMX;
|
||||||
if (hasisse)
|
if (CPUInfo[3] & (1 << 25))
|
||||||
Flags |= PP_CPU_CAPS_MMX2;
|
Flags |= PP_CPU_CAPS_MMX2;
|
||||||
|
|
||||||
return Flags;
|
return Flags;
|
||||||
|
|
Loading…
Reference in a new issue