• VC 使用mingw32编译ffmpeg静态库所需文件(二),mingwexsrc.cpp


    VC 使用mingw32编译ffmpeg静态库所需文件(二),mingwexsrc.cpp

    哈哈,这是我从一些项目里面看到的,这些函数是ffmpeg.a缺少的函数。估计大家会用得上.

    当然我移植的的项目都不需要这些,因为我是用VC编译,所以不存在缺少mingw32里面的函数.

    // mingwexsource.cpp
    // ---------------------
    // This file is to define and fill in libmingwex.a functions
    // This is not a complete list by any means, and was coded due to incompatabilities of libmingwex.a
    // With MSVC.  This file was created by Justin Ahn, and any questions can be directed to justin@soonahn.ca
    //
    #define WIN32_LEAN_AND_MEAN
    #define _CRTIMP
    
    #include <windows.h>
    #include <stdio.h>
    #include <stdarg.h>
    #include <stdlib.h>
    #include <time.h>
    #include <errno.h>
    #include <float.h>
    #include <math.h>
    #include <io.h>
    #include <sys/timeb.h>
    #include <time.h>
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    extern int __cdecl _fpclass (double);
    /*
    #ifndef _ieeemisc_.obj
    int __cdecl _fpclassf (float x) {
       return _fpclass(double(x));
    }
    #else
    extern int __cdecl _fpclassf (float);
    #endif
    */
    int __cdecl _fpclassf (float x) {
       return _fpclass(double(x));
    }
    int __cdecl _fpclassl (long double x) {
       return _fpclass(double(x));
    }
    int __cdecl __fpclassify (float x) {
       return _fpclass(double(x));
    }
    
    #if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
       #define DELTA_EPOCH_IN_MICROSECS  11644473600000000Ui64
    #else
       #define DELTA_EPOCH_IN_MICROSECS  11644473600000000ULL
    #endif
    #define fpclass(x) (sizeof (x) == sizeof (float) ? _fpclassf (x)     \
      : sizeof (x) == sizeof (double) ? _fpclass (x) \
      : _fpclassl (x))
    #ifndef _WINSOCK2API_
    struct timeval {
        long tv_sec;
        long tv_usec;
    };
    #endif
    #define isfinite(x) ((fpclass(x) & FP_NAN) == 0)
    #define FP_NAN      0x0100
    #define FP_NORMAL   0x0400
    #define FP_ZERO      0x4000
    #define APICHAR char
    #define PFORMAT_NOLIMIT     0x4000
    extern int __cdecl _fstat64 (int,struct _stat64*);
    extern void __cdecl _ftime (struct __timeb64*);
    extern __int64 __cdecl _strtoi64 (const char * _String, char ** _EndPtr, int _Radix);
    extern float __cdecl log10f (float);
    extern float __cdecl sqrtf (float);
    extern double __cdecl round (double);
    extern float __cdecl cosf (float);
    extern float __cdecl sinf (float);
    extern float __cdecl log2f (float);
    extern float __cdecl atan2f (float, float);
    extern float __cdecl atanf (float);
    extern double  __cdecl log(double);
    extern __int64 __cdecl _filelengthi64 (int);
    extern char* __cdecl gai_strerrorA (int);
    typedef long _off64_t;
    typedef long off64_t;
    
    struct timezone {
        int  tz_minuteswest; /* minutes W of Greenwich */
        int  tz_dsttime;     /* type of dst correction */
    };
    
    float __cdecl truncf(float n) {
        return n > 0.0 ? floorf(n) : ceilf(n);
    }
    
    int __cdecl __imp___fstat64(__in int _FileDes, __out struct _stat64 * _Stat) {
       return _fstat64(_FileDes, _Stat);
    }
    
    void __cdecl __imp___ftime64(__out struct __timeb64 *_Time) {
       _ftime(_Time);
    }
    /*
    int __cdecl __imp_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res) {
       return getaddrinfo(node, service, hints, res);
    }
    */
    double log2(double n) { 
        return log(n)/log(2.0); 
    }
    float log2f(float n) { 
        return logf(n)/logf(2.0); 
    }
    
    float exp2f(float n) {
       return powf(2.0, n);
    }
    
    float roundf(float x)
    {
    	return floor(x + 0.5f);
    }
    
    int __cdecl snprintf(char* buffer, size_t n, const char *format, ...)
    {
      int retval;
      va_list argptr;
    
      va_start(argptr, format);
      retval = _vsnprintf (buffer, n, format, argptr);
      va_end(argptr);
      return retval;
    }
    
    long long __cdecl strtoll (const char* __restrict nptr, char ** __restrict endptr, int base){
       return _strtoi64(nptr, endptr, base);
    }
    
    static const float CBRT2 = 1.25992104989487316477f;
    static const float CBRT4 = 1.58740105196819947475f;
    float cbrtf (float x) {
            int e, rem, sign;
            float z;
          if (!isfinite (x) || x == 0.0F)
                    return x;
            if (x > 0)
                    sign = 1;
            else
            {
                    sign = -1;
                    x = -x;
            }
    
            z = x;
            // extract power of 2, leaving                                                                                             
            // mantissa between 0.5 and 1                                                                                               
            //
            x = frexpf(x, &e);
    
            // Approximate cube root of number between .5 and 1,                                                                       
            // peak relative error = 9.2e-6                                                                                             
            //
            x = (((-0.13466110473359520655053f  * x
                  + 0.54664601366395524503440f ) * x
                  - 0.95438224771509446525043f ) * x
                  + 1.1399983354717293273738f  ) * x
                  + 0.40238979564544752126924f;
    
            // exponent divided by 3
            if (e >= 0)
            {
                    rem = e;
                    e /= 3;
                    rem -= 3*e;
                    if (rem == 1)
                            x *= CBRT2;
                    else if (rem == 2)
                            x *= CBRT4;
            }
    // argument less than 1
            else
            {
                    e = -e;
                    rem = e;
                    e /= 3;
                    rem -= 3*e;
                    if (rem == 1)
                            x /= CBRT2;
                    else if (rem == 2)
                            x /= CBRT4;
                    e = -e;
            }
    
            // multiply by power of 2
            x = ldexpf(x, e);
    
            // Newton iteration
            x -= ( x - (z/(x*x)) ) * 0.333333333333f;
    
            if (sign < 0)
                    x = -x;
            return (x);
    }
    
    double round (double x) {
      double res;
      if (x >= 0.0)
        {
          res = ceil (x);
          if (res - x > 0.5)
            res -= 1.0;
        }
      else
        {
          res = ceil (-x);
          if (res + x > 0.5)
            res -= 1.0;
          res = -res;
        }
      return res;
    }
    
    int fseeko64 (FILE* stream, _off64_t offset, int whence) {
      fpos_t pos;
      if (whence == SEEK_CUR)
        {
          // If stream is invalid, fgetpos sets errno.
          if (fgetpos (stream, &pos))
            return (-1);
          pos += (fpos_t) offset;
        }
      else if (whence == SEEK_END)
        {
          // If writing, we need to flush before getting file length.
          fflush (stream);
          pos = (fpos_t) (_filelengthi64 (_fileno (stream)) + offset);
        }
      else if (whence == SEEK_SET)
        pos = (fpos_t) offset;
      else
        {
          errno = EINVAL;
          return (-1);
        }
      return fsetpos (stream, &pos);
    }
    
    _off64_t ftello64 (FILE * stream) {
      fpos_t pos;
      if (fgetpos(stream, &pos))
        return  -1LL;
      else
       return ((off64_t) pos);
    }
    
    
    #ifdef __cplusplus
    }
    #endif


    wzplayer 相关链接:

    delphi:支持:http://blog.csdn.net/weinyzhou/article/details/8105126

    ios:http://blog.csdn.net/weinyzhou/article/details/8091688

    android:http://blog.csdn.net/weinyzhou/article/details/7723673


    ffmpeg移植相关

    android mk auto build:http://blog.csdn.net/weinyzhou/article/details/7559205

    ffmpeg vc移植项目,支持ffmpeg 代码VC调试:http://blog.csdn.net/weinyzhou/article/details/7559205

    以上项目,都是付费,需要的用户可以联系.



    版权所有,禁止用于商业用途及转载.
    发布自:http://blog.csdn.net/weinyzhou/article/details/8120015

  • 相关阅读:
    Tomcat启动过程[更详细]
    数据库连接池原理
    Druid
    Spring的注解积累
    React基础知识
    mac里git项目删除.DS_Store文件
    GET请求参数为中文时乱码分析
    npm中package.json详解
    前后端分离工具之ftl-server
    利用performance属性查看网页性能
  • 原文地址:https://www.cnblogs.com/weinyzhou/p/2750045.html
Copyright © 2020-2023  润新知