我在代码中使用swscale作为共享库,然后使用Visual Studio使用此命令将FFMpeg(4.1)编译为静态库,只是为了获得swscale:
./configure --toolchain=msvc --arch=x86_32 --disable-everything --disable-programs
我安装了nasm和yasm。这是我的配置输出:
install prefix /usr/local
source path .
C compiler cl
C library msvcrt
ARCH x86 (generic)
big-endian no
runtime cpu detection yes
standalone assembly yes
x86 assembler nasm
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AESNI enabled yes
AVX enabled yes
AVX2 enabled yes
AVX-512 enabled yes
XOP enabled yes
FMA3 enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast no
EBX available no
EBP available no
debug symbols yes
strip symbols no
optimize for size no
optimizations yes
static yes
shared no
postprocessing support no
network support yes
threading support w32threads
safe bitstream reader yes
texi2html enabled no
perl enabled no
pod2man enabled no
makeinfo enabled no
makeinfo supports HTML no
External libraries:
schannel
External libraries providing hardware acceleration:
d3d11va dxva2
Libraries:
avcodec avdevice avfilter avformat avutil swresample swscale
Programs:
Enabled decoders:
Enabled encoders:
Enabled hwaccels:
Enabled parsers:
Enabled demuxers:
Enabled muxers:
Enabled protocols:
Enabled filters:
Enabled bsfs:
null
Enabled indevs:
Enabled outdevs:
编译成功,我在QT中将lib文件替换为.a文件:
INCLUDEPATH += $$PWD/ffmpeg/inc/
LIBS += $$files($$PWD/ffmpeg/lib/*.a, true)
我什么都没改变。 EXE可以正常运行而没有依赖关系,但是问题是静态swscale比共享swscale慢得多。对于1080p, share .DLL需要2ms 收缩并将yuv转换为rgb和 static .A需要6ms 到
我也尝试删除了--disable-everything --disable-programs
,但还是一样。我想知道是因为cl编译器,还是错过了库或设置?
顺便说一下,我的系统是:Win10 / i7 4820K / 16GB / GTX970
我在应用程序输出中得到了这个: 找不到从yuv420p到bgra的加速色彩空间转换。 尽管swscale中的x86文件夹已编译,但似乎未在输出中链接它。