⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skl_cpu_specs.h

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 H
字号:
/********************************************************
 * Some code. Copyright (C) 2003 by Pascal Massimino.   *
 * All Rights Reserved.      (http://skal.planet-d.net) *
 * For Educational/Academic use ONLY. See 'LICENSE.TXT'.*
 ********************************************************/
/*
 * skl_cpu_specs.h
 *
 *  CPU's caps
 ********************************************************/

#ifndef _SKL_CPU_SPECS_H_
#define _SKL_CPU_SPECS_H_

//////////////////////////////////////////////////////////
// Implementation choices

  /** @file */
  /** @enum SKL_CPU_FEATURE
     This enumeration select the CPU instruction set low-level
     functions should use, if available.
     @see Skl_Detect_CPU_Feature
     @see SKL_MP4_ENC::Set_CPU
     @see SKL_MP4_DEC::Set_CPU
    */
typedef enum {
  SKL_CPU_C    = 0, /**< Use C version only */
  SKL_CPU_X86  = 1, /**< Use x86 instruction set */
  SKL_CPU_MMX  = 2, /**< Use MMX instruction set */
  SKL_CPU_SSE  = 3, /**< Use SSE instruction set */
  SKL_CPU_SSE2 = 4, /**< Use SSE2 instruction set */
  SKL_CPU_REF  = 5, /**< Use Reference (slow) implementation */
  SKL_CPU_ALT  = 6, /**< Alternative implementation, for tests. */
  SKL_CPU_LAST = 7,

  SKL_CPU_DETECT = 7  /**< System will attempt to autodetect available CPU features */

} SKL_CPU_FEATURE;

extern "C" {

  /** After autoprobing, this function returns the most efficient
      available feature.
    */
extern SKL_CPU_FEATURE Skl_Detect_CPU_Feature();

typedef void (*SKL_DSP_SWITCH)();
extern void Skl_Switch_MMX();
extern void Skl_Switch_None();
extern SKL_DSP_SWITCH Skl_Get_Switch(SKL_CPU_FEATURE Cpu);

#ifdef SKL_USE_ASM

#ifdef __LINUX__
#define SKL_EMMS asm( "emms" : : )
#else
#define SKL_EMMS _asm emms
#endif

#else

#define SKL_EMMS

#endif  /* SKL_USE_ASM */
}

//////////////////////////////////////////////////////////
#ifdef SKL_USE_ASM

extern "C" {
extern int Skl_Detect_CPUID();
extern int Skl_Detect_MMX();
extern int Skl_Detect_SSE();
extern int Skl_Detect_SSE2();
extern int Skl_Detect_3DNOW();
extern void Skl_Get_CPUID(char Id[12+1]);
extern void Skl_Get_ModelID(char Id[48+1]);
}

#endif  /* SKL_USE_ASM */

//////////////////////////////////////////////////////////

class SKL_CPU_SPECS
{
  private:

    static int  _SType;
    static int  _SFlags;
    static char _Vendor[12+1];
    static char _Model[48+1];

    int _Type;
    int _Flags;

  public:

    enum {
      SKL_INTEL   = 0,
      SKL_AMD     = 1,
      SKL_K6      = 2,
      SKL_ATHLON  = 3,
      SKL_CYRIX   = 4,

      SKL_SGI     = 5,
      SKL_SPARC   = 6,
      SKL_ALPHA   = 7,
      SKL_HP      = 8,
      SKL_UNKNOWN = 9
    };
    enum { SKL_CPUID  =  1,
           SKL_MMX    =  2,
           SKL_SSE    =  4,
           SKL_SSE2   =  8,
           SKL_3DNOW  = 16,
           SKL_3DNOW2 = 32,
           SKL_LAST   = 64
    };

    SKL_CPU_SPECS(int Ignore_Feature=0);
    static void Reset();
    static void Detect();
    static int Check_Types();
    static void Test_Float();

    int Get_Flags() const   { return _Flags; }
    int Get_Type() const    { return _Type; }
    int Is_x86() const      { return (_Type==SKL_INTEL)||(_Type==SKL_AMD); }

    int Has_MMX() const    { return (_Flags&SKL_MMX)!=0; }
    int Has_SSE() const    { return (_Flags&SKL_SSE)!=0; }
    int Has_SSE2() const   { return (_Flags&SKL_SSE2)!=0; }
    int Has_3DNow() const  { return (_Flags&SKL_3DNOW)!=0; }
    int Has_3DNow2() const { return (_Flags&SKL_3DNOW2)!=0; }

    void Print_Infos() const;
};

//////////////////////////////////////////////////////////

#endif  /* _SKL_CPU_SPECS_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -