VC使用mingw32编译ffmpeg静态库所需文件(一),ffmpegshim.c
VC使用mingw32编译ffmpeg静态库所需文件(一),ffmpegshim.c
哈哈,这是我从一些项目里面看到的,这些函数是ffmpeg.a缺少的函数。估计大家会用得上.
当然我移植的的项目都不需要这些,因为我是用VC编译,所以不存在缺少mingw32里面的函数.
// ffmpegshim.c // this file is part of Context Free // --------------------- // Copyright (C) 2012 John Horigan - john@glyphic.com // Copyright (C) 2000 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // John Horigan can be contacted at john@glyphic.com or at // John Horigan, 1209 Villa St., Mountain View, CA 94041-1123, USA // // #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_WARNINGS #include <windows.h> #include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include <time.h> #include <errno.h> #include <math.h> int __cdecl __mingw_vsnprintf( char *buffer, size_t count, const char *format, va_list argptr ) { return vsnprintf_s(buffer, count, _TRUNCATE, format, argptr); } int __cdecl __ms_vsnprintf( char *buffer, size_t count, const char *format, va_list argptr ) { return vsnprintf_s(buffer, count, _TRUNCATE, format, argptr); } int __cdecl __mingw_vfprintf( FILE *stream, const char *format, va_list argptr ) { return vfprintf_s(stream, format, argptr); } int __cdecl __mingw_vsprintf (char * s, const char * format, va_list arg ) { return vsprintf (s, format, arg ); } #if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) #define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 #else #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL #endif struct timezone { int tz_minuteswest; /* minutes W of Greenwich */ int tz_dsttime; /* type of dst correction */ }; struct timeval { long tv_sec; long tv_usec; }; int __cdecl gettimeofday( struct timeval *tv, struct timezone *tz ) { FILETIME ft; unsigned __int64 tmpres = 0; static int tzflag; if (NULL != tv) { GetSystemTimeAsFileTime(&ft); tmpres |= ft.dwHighDateTime; tmpres <<= 32; tmpres |= ft.dwLowDateTime; /*converting file time to unix epoch*/ tmpres -= DELTA_EPOCH_IN_MICROSECS; tmpres /= 10; /*convert into microseconds*/ tv->tv_sec = (long)(tmpres / 1000000UL); tv->tv_usec = (long)(tmpres % 1000000UL); } if (NULL != tz) { int i; long l = 0; if (!tzflag) { _tzset(); tzflag++; } _get_timezone(&l); tz->tz_minuteswest = l / 60; _get_daylight(&i); tz->tz_dsttime = i; } return 0; } int __cdecl usleep( unsigned int useconds ) { if(useconds == 0) return 0; if(useconds >= 1000000) return EINVAL; Sleep((useconds + 999) / 1000); return 0; } double __cdecl __strtod( const char *nptr, char **endptr ) { return strtod(nptr, endptr); } double __cdecl trunc( double n ) { return n > 0.0 ? floor(n) : ceil(n); } int __cdecl __mingw_vsscanf( const char *s, const char *fmt, va_list ap ) { void *a[5]; int i; for (i=0; i < sizeof(a)/sizeof(a[0]); i++) a[i] = va_arg(ap, void *); return sscanf(s, fmt, a[0], a[1], a[2], a[3], a[4]); } unsigned __int64 __cdecl udivmodsi4( unsigned __int64 num, unsigned __int64 den, int modwanted ) { unsigned __int64 bit = 1; unsigned __int64 res = 0; while (den < num && bit && !(den & (1L<<31))) { den <<=1; bit <<=1; } while (bit) { if (num >= den) { num -= den; res |= bit; } bit >>=1; den >>=1; } return modwanted ? num : res; } __int64 __cdecl __divdi3( __int64 a, __int64 b ) { int neg = 0; __int64 res; if (a < 0) { a = -a; neg = !neg; } if (b < 0) { b = -b; neg = !neg; } res = udivmodsi4(a, b, 0); if (neg) res = -res; return res; } __int64 __cdecl __moddi3( __int64 a, __int64 b ) { int neg = 0; __int64 res; if (a < 0) { a = -a; neg = 1; } if (b < 0) b = -b; res = udivmodsi4(a, b, 1); if (neg) res = -res; return res; } unsigned __int64 __cdecl __udivdi3( unsigned __int64 a, unsigned __int64 b ) { return udivmodsi4 (a, b, 0); } unsigned __int64 __cdecl __umoddi3( unsigned __int64 a, unsigned __int64 b ) { return udivmodsi4 (a, b, 1); }
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/8120005