英特尔 QSV 在 FFMPEG 中的使用(Windows) (总结)

INDE

在 Windows 下通常使用 INDE 中的 Intel Media SDK 而不是 MMS,因为后者只在 Linux 下和 Windows Server 下可用。

INDE 可以免费下载,建议下载它的离线安装包,因为很多功能你并不需要,使用离线安装包,你可以指下载你想要的功能。

安装 Media SDK

在 Windows 上安装 Media SDK 比较简单,请参考这个链接中的安装方法。我们只使用它做视频编码,所以只需要选择build 下的

- Media SDK for Windows
- Media Raw Acclecerator for Windows

这两项就可以了。

Windows 下编译支持 qsv 的 FFMPEG 库

编译 mfx_dispatcher

windows 编译 qsv 之前需要安装 mfx_dispatcher,它相当于是应用程序和具体的硬件加速库之间的一个中间层,它负责帮助应用库定位底层代码,这样应用库就可以不用直接链接到硬件加速的具体实现。

[mfx_dispatcher][] 代码可以在 github 上下载到,在 github 的 README 中也提供了编译方法。需要注意的是,它使用的编译工具是 mingw64 的x86_64 工具链,如果你使用的是 mingw64 的 i686 工具库,记得把教程中的 x86_64替换成 i686

mfx_dispatcher 安装完成之后会在 /usr/i686-w64-mingw32/usr/local/ 下生成相应的库文件和头文件。

链接到 FFMPEG

FFMPEG 需要使用 pkg-config 定位 libmfx 库,这个库的 libmfx.pc 文件在安装完 mfx_dispatcher 之后会安装在/usr/i686-w64-mingw32/usr/local/lib/pkgconfig 目录下。为了让 FFMPEG 的configure 脚本能够找到它你需要把这个地址加入到 PKG_CONFIG_PATH 中。

export PKG_CONFIG_PATH=/usr/i686-w64-mingw32/usr/local/lib/pkgconfig

为了让 FFMPEG 支持 qsv 你需要加入下面三个配置选项:

./configure --enable-libmfx \
            --enable-encoder=h264_qsv \
            --enable-decoder=h264_qsv \
            ...

使用中可能会出现的问题

在使用 h264_qsv 编码器的时候,可能会出现 Error initializing an internal MFX session 错误,目前没有找到具体原因。在把 Media SDK 下的libmfxhw32.dll 文件拷贝到执行目录下之后这个问题就消失看

 

 

MinGW32和64位交叉编译环境的安装和使用

原文出处:

 CompileGraphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64

 http://www.kineticsystem.org/?q=node/19

1 安装MSYS

从下面的地址下载并运行:mingw-get-inst-20120426.exe

http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/mingw-get-inst-20120426/mingw-get-inst-20120426.exe/download

按下面的选项和目录位置安装:

 

英特尔 QSV 在 FFMPEG 中的使用(Windows) (总结)_第1张图片

英特尔 QSV 在 FFMPEG 中的使用(Windows) (总结)_第2张图片

 安装完毕之后运行下面的命令行:

C:\DEVPACK\MinGW\msys\1.0\msys.bat 

逐条输入下面的语句,执行安装软件包:

 
  1. $ mingw-get install msys-rxvt

  2. $ mingw-get install msys-wget

  3. $ mingw-get install msys-zip

  4. $ mingw-get install msys-unzip

  5. $ mingw-get install msys-xz

右键点击文件C:\DEVPACK\MinGW\msys\1.0\msys.bat,在桌面上创建快捷方式, 并在"msys.bat - 快捷方式" 上点击右键, 按下图修改快捷方式的属性:

 英特尔 QSV 在 FFMPEG 中的使用(Windows) (总结)_第3张图片

 

2 安装rubenvb MinGW-w64

1)从下面的链接进入下载页面:

http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/rubenvb/gcc-4.8-release/

下载(为64位Windows编译原生64位):

x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb.7z

2)从下面的链接进入下载页面:

http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/rubenvb/gcc-4.8-release/

下载(为32位Windows编译,也可以运行在Win64上):

i686-w64-mingw32-gcc-4.8.0-win64_rubenvb.7z

 

包的命名规范是:

[i686-w64-mingw32]-[gcc-4.8.0]-[win64]_rubenvb

[目标平台]-[gcc-4.8.0]-[工具链OS]_rubenvb

目标平台指MinGW最终编译好的二进制代码运行的平台,[i686...]表示Win32平台,[x86_64-...]表示Win64平台。工具链OS表示你安装MinGW的计算机OS。

例如,如果想在WinXP32位平台上编译运行于Win7 64位平台的程序或库(dll),需要选择:x86_64-w64-mingw32-gcc-4.8.0-win32_rubenvb.7z。

 因为我的机器是64位Win7,因此我选择了上面2个包。解压后得到:

C:\DEVPACK\MinGW\mingw32\
C:\DEVPACK\MinGW\mingw64\

另外添加3个目录如下,用于存放特定的工具链:

C:\DEVPACK\MinGW\opt
C:\DEVPACK\MinGW\local32
C:\DEVPACK\MinGW\local64

修改文件C:\DEVPACK\MinGW\msys\1.0\etc\fstab如下:

 
  1. # Win32_Path Mount_Point

  2. C:\DEVPACK\MinGW\ /mingw

  3. C:\DEVPACK\MinGW\mingw32\ /mingw32

  4. C:\DEVPACK\MinGW\mingw64\ /mingw64

  5. C:\DEVPACK\MinGW\opt\ /opt

  6. C:\DEVPACK\MinGW\local32\ /local32

  7. C:\DEVPACK\MinGW\local64 /local64

重新打开MSYS命令行工具(以后不特别说明,凡是以$开头的都是指msys-bat命令行MSYS,无$开头指windows命令行cmd),输入下面的命令以创建目录:

 
  1. $ mkdir /opt/bin/local{32,64}/{bin,etc,include,lib,share,dst,src}

  2. $ mkdir /local{32,64}/lib/pkgconfig

最后的目录结构看起来是下图的样子:

英特尔 QSV 在 FFMPEG 中的使用(Windows) (总结)_第4张图片

3 安装CMake

在下面的地址下载cmake-2.8.10.2-win32-x86.zip,解压到/opt下面。

http://www.cmake.org/cmake/resources/software.html

解压后的目录结构如下:

/opt/bin
/opt/doc
/opt/man
/opt/share

4 配置32位和64位编译环境

打开MSYS命令行工具,运行下面的命令创建目录:

 

$ mkdir -p /mingw/local/{bin,docs,include,lib,share,src}


1)为了能分开编译32和64位的程序,为32位编译创建配置文件:/local32/etc/profile.local

 

$ cat >/local32/etc/profile.local << "EOF"

#==================Begin of /local32/etc/profile.local ====================

 

 
  1. alias dir='ls -la --color=auto'

  2. alias ls='ls --color=auto'

  3.  
  4. export PKG_CONFIG_PATH="/local32/lib/pkgconfig"

  5. export CPPFLAGS="-I/local32/include"

  6. export CFLAGS="-I/local32/include -mms-bitfields -mthreads -mtune=pentium3"

  7. export CXXFLAGS="-I/local32/include -mms-bitfields -mthreads -mtune=pentium3"

  8. export LDFLAGS="-L/local32/lib -lpthread -mthreads"

  9. export PATH=".:/local32/bin:/mingw32/bin:/mingw/bin:/bin:/opt/bin:$PATH"

  10. export PS1='\[\033[32m\]\u@\h \[\033[33m\w\033[0m\]$ '

  11.  
  12. export SRC_DIR=/local32/src

  13. export DST_DIR=/local32/dst

  14. export MINGW_HOME=/mingw32

  15. export PKG_CONFIG=$DST_DIR/pkgconfig/bin/pkg-config.exe

  16.  
  17. # Configure PATH and FLAGS.

  18.  
  19. APPLICATION_ARRAY=(

  20. "LIBICONV_PREFIX:$DST_DIR/libiconv"

  21. "ZLIB_PREFIX:$DST_DIR/zlib"

  22. "BZIP2_PREFIX:$DST_DIR/bzip2"

  23. "LIBTOOL_PREFIX:$DST_DIR/libtool"

  24. "LIBXML2_PREFIX:$DST_DIR/libxml2"

  25. "LIBPNG_PREFIX:$DST_DIR/libpng"

  26. "LIBJPEG_PREFIX:$DST_DIR/libjpeg"

  27. "LIBTIFF_PREFIX:$DST_DIR/libtiff"

  28. "FREETYPE2_PREFIX:$DST_DIR/freetype2"

  29. "LCMS2_PREFIX:$DST_DIR/lcms2"

  30. "FFTW_PREFIX:$DST_DIR/fftw"

  31. "BOTAN_PREFIX:$DST_DIR/botan"

  32. "QT_PREFIX:$DST_DIR/qt"

  33. "OPENCV_PREFIX:$DST_DIR/opencv"

  34. "LIBUSBX_PREFIX:$DST_DIR/libusbx"

  35. "LIBFFI_PREFIX:$DST_DIR/libffi"

  36. "PKGCONFIG_PREFIX:$DST_DIR/pkg-config"

  37. "GETTEXT_PREFIX:$DST_DIR/gettext"

  38. "GLIB_PREFIX:$DST_DIR/glib"

  39. "GMQ8_PREFIX:$DST_DIR/gm-q8"

  40. "GMQ16_PREFIX:$DST_DIR/gm-q16"

  41. "IMQ8_PREFIX:$DST_DIR/im-q8"

  42. "IMQ16_PREFIX:$DST_DIR/im-q16"

  43. "BOOST_PREFIX:$DST_DIR/boost"

  44. "LIBUSBX_PREFIX:$DST_DIR/libusbx"

  45. "GLIB_PREFIX:$DST_DIR/glib"

  46. "YAFARAY_PREFIX:$DST_DIR/yafaray"

  47. "SQLITE3_PREFIX:$DST_DIR/sqlite3"

  48. "LIBTIFF_PREFIX:$DST_DIR/libtiff"

  49. )

  50.  
  51. for app in "${APPLICATION_ARRAY[@]}" ; do

  52.  
  53. KEY=${app%%:*}

  54. VALUE=${app##*:}

  55. export "$KEY"="$VALUE"

  56.  
  57. export PATH="$VALUE/bin:$PATH"

  58. export LDFLAGS="-L$VALUE/lib $LDFLAGS"

  59. export CFLAGS="-I$VALUE/include $CFLAGS"

  60. export CPPFLAGS="-I$VALUE/include $CPPFLAGS"

  61. export CXXFLAGS="-I$VALUE/include $CXXFLAGS"

  62. export PKG_CONFIG_PATH="$VALUE/lib/pkgconfig:$PKG_CONFIG_PATH"

  63.  
  64. done

  65.  
  66. export LIBFFI_CFLAGS="-I $DST_DIR/libffi/lib/libffi-3.0.11/include"

  67. export LIBFFI_LIBS="-L$DST_DIR/libffi/lib"

 

 

#==================End of /local32/etc/profile.local =====================

EOF

 

2)为64位编译创建配置文件:/local64/etc/profile.local

$ cat >/local64/etc/profile.local << "EOF"

#==================Begin of /local64/etc/profile.local ====================

 

 
  1. alias dir='ls -la --color=auto'

  2. alias ls='ls --color=auto'

  3.  
  4. export PKG_CONFIG_PATH="/local64/lib/pkgconfig"

  5. export CPPFLAGS="-I/local64/include"

  6. export CFLAGS="-I/local64/include -mms-bitfields -mthreads"

  7. export CXXFLAGS="-I/local64/include -mms-bitfields -mthreads"

  8. export LDFLAGS="-L/local64/lib -lpthread"

  9. export PATH=".:/local64/bin:/mingw64/bin:/mingw/bin:/bin:/opt/bin:$PATH"

  10. export PS1='\[\033[32m\]\u@\h \[\033[33m\w\033[0m\]$ '

  11.  
  12. export SRC_DIR=/local64/src

  13. export DST_DIR=/local64/dst

  14. export MINGW_HOME=/mingw64

  15. export PKG_CONFIG=$DST_DIR/pkgconfig/bin/pkg-config.exe

  16.  
  17. # Configure PATH and FLAGS.

  18.  
  19. APPLICATION_ARRAY=(

  20. "LIBICONV_PREFIX:$DST_DIR/libiconv"

  21. "ZLIB_PREFIX:$DST_DIR/zlib"

  22. "BZIP2_PREFIX:$DST_DIR/bzip2"

  23. "LIBTOOL_PREFIX:$DST_DIR/libtool"

  24. "LIBXML2_PREFIX:$DST_DIR/libxml2"

  25. "LIBPNG_PREFIX:$DST_DIR/libpng"

  26. "LIBJPEG_PREFIX:$DST_DIR/libjpeg"

  27. "LIBTIFF_PREFIX:$DST_DIR/libtiff"

  28. "FREETYPE2_PREFIX:$DST_DIR/freetype2"

  29. "LCMS2_PREFIX:$DST_DIR/lcms2"

  30. "FFTW_PREFIX:$DST_DIR/fftw"

  31. "BOTAN_PREFIX:$DST_DIR/botan"

  32. "QT_PREFIX:$DST_DIR/qt"

  33. "OPENCV_PREFIX:$DST_DIR/opencv"

  34. "LIBUSBX_PREFIX:$DST_DIR/libusbx"

  35. "LIBFFI_PREFIX:$DST_DIR/libffi"

  36. "PKGCONFIG_PREFIX:$DST_DIR/pkg-config"

  37. "GETTEXT_PREFIX:$DST_DIR/gettext"

  38. "GLIB_PREFIX:$DST_DIR/glib"

  39. "GMQ8_PREFIX:$DST_DIR/gm-q8"

  40. "GMQ16_PREFIX:$DST_DIR/gm-q16"

  41. "IMQ8_PREFIX:$DST_DIR/im-q8"

  42. "IMQ16_PREFIX:$DST_DIR/im-q16"

  43. "BOOST_PREFIX:$DST_DIR/boost"

  44. "LIBUSBX_PREFIX:$DST_DIR/libusbx"

  45. "GLIB_PREFIX:$DST_DIR/glib"

  46. "YAFARAY_PREFIX:$DST_DIR/yafaray"

  47. "SQLITE3_PREFIX:$DST_DIR/sqlite3"

  48. "LIBTIFF_PREFIX:$DST_DIR/libtiff"

  49. )

  50.  
  51. for app in "${APPLICATION_ARRAY[@]}" ; do

  52.  
  53. KEY=${app%%:*}

  54. VALUE=${app##*:}

  55. export "$KEY"="$VALUE"

  56.  
  57. export PATH="$VALUE/bin:$PATH"

  58. export LDFLAGS="-L$VALUE/lib $LDFLAGS"

  59. export CFLAGS="-I$VALUE/include $CFLAGS"

  60. export CPPFLAGS="-I$VALUE/include $CPPFLAGS"

  61. export CXXFLAGS="-I$VALUE/include $CXXFLAGS"

  62. export PKG_CONFIG_PATH="$VALUE/lib/pkgconfig:$PKG_CONFIG_PATH"

  63.  
  64. done

  65.  
  66. export LIBFFI_CFLAGS="-I $DST_DIR/libffi/lib/libffi-3.0.11/include"

  67. export LIBFFI_LIBS="-L$DST_DIR/libffi/lib"


#==================End of /local64/etc/profile.local ======================

 

EOF

3)每次打开msys时,默认采用64位编译环境,因此更改脚本:

$ cat >> /etc/profile << "EOF"
 
  1. if [ -f /local64/etc/profile.local ]; then

  2. source /local64/etc/profile.local

  3. fi

EOF

 

如果每次打开msys时,默认想用win32, 则/etc/profile的内容为:

 

 
  1. .....

  2. if [ -f /local32/etc/profile.local ]; then

  3. source /local32/etc/profile.local

  4. fi

 

4)在MYSYS命令行中使用下面的语句可以在32/64位编译环境之间切换(只对当前窗口有效):

 
  1. $ source /local64/etc/profile.local

  2. $ source /local32/etc/profile.local

5 编译安装x64库

5.1 Pkg-config Lite

pkg-config程序就是向用户向程序提供相应库的路径、版本号等信息的程序。譬如说我们运行以下命令pkg-config 查看gcc的CFLAGS参数:

$pkg-config --libs --cflags opencv

会显示如下信息:

-I/usr/include/opencv -lcxcore -lcv -lhighgui-lcvaux

这就是用gcc编译连接时CFLAGS的参数。因此当我们需要编译连接某个库时,我们只需把上面那行加入gcc 的参数里面即可。这也是configure的作用,它会检查你需要的包,产生相应的信息。

下载:pkg-config-lite-0.27.1-1.tar.gz

地址:http://sourceforge.net/projects/pkgconfiglite/files/0.27.1-1/

解压到$SRC_DIR:/local64/src

 
  1. $ cd $SRC_DIR

  2. $ tar -zxf pkg-config-lite-0.27.1-1.tar.gz

  3. $ cd pkg-config-lite-0.27.1-1

  4. $ sh configure --prefix=$PKGCONFIG_PREFIX

  5. $ make -j4 # 指定使用4CPU构建,仅仅加速编译过程,不影响最后结果

  6. $ make install

按照上面的过程,很顺利我们编译好了64位版本的程序pkg-config。下面继续。

 

5.2 编译zlib

http://zlib.net

 

下载:zlib-1.2.8.tar.gz 到$SRC_DIR

 

 
  1. $ source /local64/etc/profile.local

  2. $ tar -zxf zlib-1.2.8.tar.gz

  3. $ make -f win32/Makefile.gcc

  4. $ export "INCLUDE_PATH=$ZLIB_PREFIX/include"

  5. $ export "LIBRARY_PATH=$ZLIB_PREFIX/lib"

  6. $ export "BINARY_PATH=$ZLIB_PREFIX/bin"

  7. $ mkdir -p $ZLIB_PREFIX/bin && cp zlib1.dll $ZLIB_PREFIX/bin/

  8. $ make -f win32/Makefile.gcc install

 

5.3 编译libiconv

这是个字符编码转换库和工具。比如GBK->UTF-8。
下载libiconv-1.14.tar.gz到$SRC_DIR:
地址:

http://ftp.gnu.org/pub/gnu/libiconv/

运行下面的命令,解压源码包,编译和安装:

 
  1. $ tar -zxf libiconv-1.14.tar.gz

  2. $ cd $SRC_DIR/libiconv-1.14/

  3. $ sh configure –-prefix=$LIBICONV_PREFIX

  4. $ make -j4

  5. $ make install

同样的办法可以编译win32版本的libiconv:

 

 
  1. $ source /local32/etc/profile.local

  2. $ tar -zxf libiconv-1.14.tar.gz

  3. $ cd $SRC_DIR/libiconv-1.14/

  4. $ sh configure –-prefix=$LIBICONV_PREFIX

  5. $ make -j4

  6. $ make install

 

5.4 编译LibTIFF

下载:tiff-4.0.3.tar.gz

地址:ftp://ftp.remotesensing.org/pub/libtiff/

解压到:$SRC_DIR (32位是/local32/src, 64位是/local64/src)

 
  1. $ tar -zxf tiff-4.0.3.tar.gz

  2. $ cd $SRC_DIR/tiff-4.0.3/

  3. $ sh configure –-prefix=$LIBTIFF_PREFIX

  4. $ make -j4

  5. $ make install

5.5 编译Sqlite3

下载:sqlite-autoconf-3071602.tar.gz

地址:http://sqlite.org/2013/sqlite-autoconf-3071602.tar.gz

运行:

 
  1. $ tar -zxf sqlite-autoconf-3071602.tar.gz

  2. $ sh configure --prefix=$SQLITE3_PREFIX

  3. $ make -j4

  4. $ make install

总结一下,编译和安装 YourLib 步骤是:

3-1)下载库源码包 YourLib.tar.gz 到 $SRC_DIR

3-2)在/local??/etc/profile.local文件中添加我们要编译的库配置,例如:

 

 
  1. ......

  2. "SQLITE3_PREFIX:$DST_DIR/sqlite3"

  3. "YourLib_PREFIX:$DST_DIR/yourlib"

3-3)运行解压和编译命令:

 

 

 
  1. $ tar -zxf YourLib.tar.gz

  2. $ sh configure --prefix=$YourLib_PREFIX

  3. $ make -j4

  4. $ make install

然后就可以把YourLib.dll拷贝到Win32/64系统中使用了。仿照此方法,可以编译其他库。

6 使用Libiconv的64位版本

使用MSVS2010创建win32控制台空项目,添加下面的文件main.c。然后更改项目平台为:x64。

项目属性里面,链接器->高级里面选择:MachineX64 (/MACHINE:X64)。常规->字符集->未设置。经过这样的配置,就可以编译32 / 64位windows程序了。main.c的全部代码如下,可以很好地编译出32位和64位版本:

 

 
  1. /* main.c

  2. * using Libiconv 64bits

  3. * cheungmine

  4. * 2013-5-13

  5. */

  6. #include

  7. #include

  8. #include

  9. #include

  10.  
  11. #include

  12.  
  13. /* x64 */

  14. #include "C:/DEVPACK/MinGW/local64/dst/libiconv/include/iconv.h"

  15.  
  16. /* x86-32 */

  17. #include "C:/DEVPACK/MinGW/local32/dst/libiconv/include/iconv.h"

  18.  
  19. typedef iconv_t (*def_libiconv_open) (const char* tocode, const char* fromcode);

  20. typedef size_t (*def_libiconv) (iconv_t cd, char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

  21. typedef int (*def_libiconv_close) (iconv_t cd);

  22.  
  23. int main (int argc, char **argv)

  24. {

  25. size_t ret;

  26. iconv_t cd, cd2;

  27. char *inbuf, *in, *outbuf, *out;

  28. size_t inlen, outlen;

  29.  
  30. HMODULE hDll;

  31. def_libiconv_open __iconv_open;

  32. def_libiconv_close __iconv_close;

  33. def_libiconv __iconv;

  34.  
  35. in = (char*) malloc(100);

  36. strcpy(in, "Hello, 中国!");

  37. inbuf = in;

  38. inlen = strlen(in) + 1;

  39.  
  40. out = (char*) malloc(100);

  41. *out = 0;

  42. outbuf = out;

  43. outlen = 100;

  44.  
  45. if (sizeof(void*) == 8) {

  46. printf("build for x64 Windows.\n");

  47. hDll = LoadLibrary("C:/DEVPACK/MinGW/local64/dst/libiconv/bin/libiconv-2.dll");

  48. } else {

  49. printf("build for 32-bits Windows.\n");

  50. hDll = LoadLibrary("C:/DEVPACK/MinGW/local32/dst/libiconv/bin/libiconv-2.dll");

  51. }

  52.  
  53. if (!hDll) {

  54. printf("DLL not found.\n");

  55. exit(0);

  56. }

  57.  
  58. __iconv_open = (def_libiconv_open) GetProcAddress(hDll, "libiconv_open");

  59. if (!__iconv_open) {

  60. printf("libiconv_open not found.\n");

  61. exit(0);

  62. }

  63.  
  64. __iconv = (def_libiconv) GetProcAddress(hDll, "libiconv");

  65. if (!__iconv_open) {

  66. printf("libiconv not found.\n");

  67. exit(0);

  68. }

  69.  
  70. __iconv_close = (def_libiconv_close) GetProcAddress(hDll, "libiconv_close");

  71. if (!__iconv_open) {

  72. printf("libiconv_close not found.\n");

  73. exit(0);

  74. }

  75.  
  76. cd = __iconv_open("UTF-8", "GBK");

  77. cd2 = __iconv_open("GBK", "UTF-8");

  78.  
  79. ret = __iconv(cd, (char**)&in, &inlen, (char**)&out, &outlen);

  80. printf("GBK(%s) => UTF-8(%s)\n", inbuf, outbuf);

  81.  
  82. /* now in is utf-8 string */

  83. in = outbuf;

  84. inlen = strlen(in)+1;

  85.  
  86. /* now out is empty */

  87. *inbuf = 0;

  88. out = inbuf;

  89. outlen = 100;

  90.  
  91. ret = __iconv(cd2, (char**)&in, &inlen, (char**)&out, &outlen);

  92. printf("UTF-8(%s) => GBK(%s)\n", outbuf, inbuf);

  93.  
  94. __iconv_close(cd);

  95. __iconv_close(cd2);

  96.  
  97. free(inbuf);

  98. free(outbuf);

  99.  
  100. FreeLibrary(hDll);

  101. return 0;

  102. }

 

7 总结

MinGW作为组织开发、持续集成大型Windows项目,充分利用开源软件,的一款极为优秀的交叉编译环境,提供了我们在不同的平台上编译 Windows程序的能力。举例子来说:

1)x86_64-w64-mingw32-gcc-4.8.0-cygwin_rubenvb.tar.xz

这个包在Cygwin环境下使用MinGW编译出原生的64位Windows二进制APP(静态库,动态库和可执行程序)。

 

2)x86_64-w64-mingw32-gcc-4.8.0-linux64_rubenvb.tar.xz

这个包在Linux amd64环境下使用MinGW编译出原生的64位Windows二进制APP。

 

3)i686-w64-mingw32-gcc-4.8.0-win64_rubenvb.7z

这个包在Window x64环境下使用MinGW编译出原生的32位Windows二进制APP。

 

FFMPEG安装没有编译FFPLAY问题

1:ffmpeg的config.h中修改#define CONFIG_FFPLAY 1

2:安装SDL库

   http://www.libsdl.org/download-1.2.php下载sdl库

   本人系统CENTOS6.9,下载的是SDL-1.2.15.tar.gz。

    直接解压./configure,make,make install

 

    一切顺利的话SDL就安装编译好了。

    库文件在 /usr/local/lib中

    头文件在 /usr/local/include/SDL 中。

 

3、需要修改common.mak,增加如下红色部分

# NASM requires -I path terminated with /
IFLAGS     := -I/usr/local/include/SDL -I. -I$(SRC_LINK)/

 

4、修改common.mak,增加SDL库即可

ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample SD

 

5、确认Makefile中指定的config.mak(在ffmpeg根目录下)中:CONFIG_FFPLAY=yes

你可能感兴趣的:(英特尔 QSV 在 FFMPEG 中的使用(Windows) (总结))