1. 解码器:
A. ffmpeg, 内置有HEVC解码器,其中代码基本来自openHEVC项目,但ffmpeg的HEVC解码器并不保证包含openHEVC项目的最新代码
http://ffmpeg.org/
B. openHEVC,解码器框架完全是基于ffmpeg框架开发的,意味着对ffmpeg的耦合性很强,可以快速集成到ffmpeg中。
https://github.com/OpenHEVC/openHEVC
PC平台的编译:
mkdir build # 在源码目录下建立build文件夹,后续会用cmake来编译;
cd build # 进入编译目录build;
cmake .. # cmake工具生成编译所需的Makefile文件;
sudo make # 编译目标文件;
Android source code下编译:
下面做怎样在Android的source code编译环境中编译出可执行的工具:
需要注意的是用git clone下来的源码在hevc_rext分支,要在Android的source code中编译需要切换分支
git branch -a # 查看所有分支
git checkout remotes/origin/android #切换到android分支
可以看到源码中已经集成了Android.mk文件,这时候只需要在顶层目录下运行mm就可以编译了。
C. libde265, 最初好像只有解码器,目前代码里面已经支持编码器了。
https://github.com/strukturag/libde265
D. Ittiam HEVC decoder, 是印度一家公司编写的解码器(印度阿三也很强大的), 这个编码器被google集成到了Android的源代码中作为HEVC的软解decoder。
http://androidxref.com/7.1.1_r6/xref/external/libhevc/
Android source code下编译:
此开源项目的链接是Android source code的external目录下的libhevc,只有解码器, 应该是ARM平台上性能比较好的解码器,不然google为何集成它?
顶层目录下有Android.mk, 用来生成libhevcdec.a静态库, 测试用的可执行文件位于test目录中,编译后的可执文件为:hevcdec。
E. Cisco的Thor,HEVC的编码器。
https://github.com/cisco/thor
PC平台下的编译:
Android source code 下编译:
2. 编码器:
A. 前面提到的libde265和Thor, 也支持编码。
https://github.com/strukturag/libde265
https://github.com/cisco/thor
B. x265基本上是目前画质最好的编码器。
http://x265.org/
PC平台编译x265:
cd build/linux/
make
编译完成后可生成动态库文件和可执行文件,这个默认是8bit source的编译结果,在同级目录下有8bit, 10bit, 12bit对应的生成结果。
./x265 --profile mainstillpicture --input-res 2560x1440 --fps 1 /tmp/output_2560x1440.yuv -o /tmp/output.265
ffplay /tmp/output.265
验证前最好准备好yuv420p 8-bit的ideo数据, 这里使用的是2K图片用ffmpeg转换后的yuv数据,请注意分辨率。
ffmpeg -i /tmp/BRAVIA-1.jpg -pix_fmt yuvj420p /tmp/output_2560x1440.yuv #此处转换出来的是8-bit YUV数据
ffplay -f rawvideo -video_size 3840x2160 /tmp/output_2560x1440.yuv #播放时默认为YUV420P 8-bit数据
ffmpeg -i /tmp/BRAVIA-1.jpg -pix_fmt yuv420p10be /tmp/output_2560x1440.yuv # 指定输出格式为YUV420P 10-bit数据
ffplay -f rawvideo -video_size 3840x2160 -pix_fmt yuv420p10be /tmp/output_2560x1440.yuv
C. f265, Vantrix开源项目
https://vantrix.com/f-265/