openHEVC在Windows下编译—VS2013+Win7为例子

前期准备:

yasm下载:http://yasm.tortall.net/Download.html

openHEVC源码下载: https://github.com/OpenHEVC/openHEVC

SDL2.0下载: http://www.libsdl.org/

CMake下载: https://cmake.org/

FFmpeg下载: https://ffmpeg.org/


注意: 可能由于openHEVC在github上,便于协作开发,但有点小问题,可能大牛们在提交源码的时,漏了点代码,导致在编译的过程中出现各种问题:

1、提示缺XXX函数在XXX中,引用无法找到:原因是缺以下几个文件:


首先从FFmpeg源码中拷贝以下几个文件到openHEVC同名字的文件夹下

libavutil/fifo.c

libavcodec/frame_thread_encoder.c


在打开CMakeLists.txt,找到

find_package(SDL)
find_package(SDL2)


set(libfilenames
    libavutil/avstring.c
    libavutil/atomic.c
    libavutil/base64.c
    libavutil/bprint.c

............................

)


在set命令中添加以下几条命令:

libavutil/fifo.c

libavcodec/frame_thread_encoder.c


然后在CMakeLists.txt中找到target_link_libraries(LibOpenHevcWrapper m) 这条语句,这条语句的作用是添加m.lib到LibOpenHevcWrapper这一项目的链接器中。然而m.lib是没有的,找不到,既不是编译阶段能产生的,网上也无法找到,谁知道!因此注释掉:Cmake中 “#”是注释命令!


set()在Cmake中的意思是 将libavutil/avstring.c  libavutil/atomic.c 等赋值给变量libfilenames;


然而openHEVC中用到了线程:因此你还需下载:

pthread 这东西网上很多下载地方:ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe

解压后,只需要pthreadVC2.lib pthreadVC2.dll这两个文件就可以了;这两个文件可以放到C:\Windows下;还可以放到build下,(build在openHEVC文件里新建一个)


--------------------------------------------分割线----------------------------------

准备工作弄完了,可以开始编译了:如果电脑是64位的 最好所有的配置都用x64!包括库

1、在openHEVC文件夹里新建一个文件夹:习惯命名build

2、为了在别的电脑上(没安装SDL2.X)方便用,将准备过程中下载的SDL包解压后,放到openHEVC文件夹里

3、将下载的yasm2x.exe改名为yasm.exe,放在openHEVC文件夹里(或系统目录里,例如C:\windows 其实放哪里都行,因为看图,你第一次configure后,出来的红色区域,路径都是可以改的)

4、将pthreadVC2.lib pthreadVC2.dll这两个文件放到build文件夹下(目的是为了等项目的解决方案即xxx.sln生成后,在链接器中加入pthreadVC2.lib)。也可以放在openHEVC文件夹里,通过在CMakeLists.txt加入以下红色语句:

add_library (LibOpenHevcWrapper ${libfilenames} ${YASM_OBJECTS})  //可以通过这条语句在CMakeLists.txt中定位要加的位置

#target_link_libraries(LibOpenHevcWrapper m)
set(pthreadPATH ../pthreadVC2)
target_link_libraries(LibOpenHevcWrapper ${LINK_LIBRARIES_LIST} ${pthreadPATH})

5、打开Cmake

如图:

路径是你自己的路径,路径配好后,点击configure,出现红色背景区域,这红色背景区域的地址都可以改的,特别的是将黄色方框标记的路径改成openHEVC里面的路径:不懂看图

第一次configure:

openHEVC在Windows下编译—VS2013+Win7为例子_第1张图片


第二次configure:

openHEVC在Windows下编译—VS2013+Win7为例子_第2张图片


6. 点击Cmake的generate按钮,vs项目就生成了!

7、打开build文件夹,将里面没用的工程删掉,不然心烦,如下面左图,删掉后打开vs工程 后缀名为.sln的 就是解决方案的简称,没错打开的就是这个!发现如图右所示,按图右,在无法加载的工程上右击鼠标,选择移除。

openHEVC在Windows下编译—VS2013+Win7为例子_第3张图片openHEVC在Windows下编译—VS2013+Win7为例子_第4张图片

右击LibOpenHevcWrapper项目,选择生成,会发现出现以下错误:

openHEVC在Windows下编译—VS2013+Win7为例子_第5张图片


解决办法:在libavcodec/avcodec.h 里面#include "version.h" 后面,其实随便。添加:

#define AV_CODEC_CAP_INTRA_ONLY   0x40000000

#define AV_CODEC_FLAG_QSCALE          (1 <<  1)

#define AV_CODEC_FLAG_PASS1   (1 << 9)

以上三条语句,根据这个错误在FFmpeg的文件夹libavcodec/avcodec.h里面去ctrl+f 查找,复制到openHEVC的libavcodec/avcodec.h里面

在运行,发现还是错误:如图中注释,总共有三处。

openHEVC在Windows下编译—VS2013+Win7为例子_第6张图片

在运行,还是出现错误,如:还是注释掉这条语句,总共二处

openHEVC在Windows下编译—VS2013+Win7为例子_第7张图片

在运行,还是出现错误:如:这里的错误,

openHEVC在Windows下编译—VS2013+Win7为例子_第8张图片

可以这么解决,将pthreadVC2.lib pthreadVC2.dll拷贝到build文件夹下,然后在项目的链接器中加入pthreadVC2.lib。如

openHEVC在Windows下编译—VS2013+Win7为例子_第9张图片

在运行,还是有错误:如:找到这些错误,注释掉,这个错误跟机器有关,我们只用到了x86.

openHEVC在Windows下编译—VS2013+Win7为例子_第10张图片


在运行,相信会是对了。注意上面说的运行,只运行LibOpenHevcWrapper 项目


现在,将hevc_sdl2设置 为启动项,启动项的设置是右击hevc_sdl2,在填出菜单中,选择设置为启动项。

然后运行,OK,完美!!

openHEVC在Windows下编译—VS2013+Win7为例子_第11张图片


最后,可能还出现一个问题,可能你在编译的时候在D盘进行,你突然想拷贝到E盘去运行,那么你可能还要做一步工作,如果出现了错误就按如下做:

用UltraEdit打开build文件夹下类似hevc_sdl2.vcxproj  这个带有.vcxpro后缀名的文件,然后ctrl+f  查找D:\openHEVC-hevc_rext\ ,统一都替换为../  就ok 了!

你可能感兴趣的:(openHEVC在Windows下编译—VS2013+Win7为例子)