libhevc 编译与使用
目录
背景
libhevc由Ittiam开发,解码器由Google集成到Android源码/external/libhevc/ 中,libhevc是Android 5.0开始默认使用的265解码器。
libhevc提供:arm64, arm, mips, x86四个版本的汇编优化。
源码获取 Android 镜像使用帮助
git clone https://aosp.tuna.tsinghua.edu.cn/platform/external/libhevc
源码结构
以下为2017-02-15 commit编译,最新commit已经更换为Android.bp
├── common
├── decoder
├── test
├── Android.mk
├── decoder.arm.mk
├── decoder.arm64.mk
├── decoder.mips.mk
├── decoder.mips64.mk
├── decoder.mk
├── decoder.x86.mk
└── decoder.x86_64.mk
common+decoder: 解码器功能
test:包含解码器调用
环境
- MacOS
- ndk-r10e 下载 (注意:r10开始支持arm64,如果编译arm版本可以是更早版本)
编译
ARMv7平台 neon优化
- 新建
Application.mk
APP_ABI := armeabi-v7a
- 修改
decoder.arm.mk
这个文件定义了:LOCAL_SRC_FILES_arm 和 LOCAL_C_INCLUDES_arm
第一行加入:
ARCH_ARM_HAVE_NEON := true
ifeq ($(ARCH_ARM_HAVE_NEON),true)后加入:
LOCAL_ARM_NEON := true
让 NDK 构建支持 NEON 的所有源文件 - 修改
decoder.mk
1.打开注释
include $(LOCAL_PATH)/decoder.arm.mk
2.在include 后面加:
LOCAL_SRC_FILES += $(LOCAL_SRC_FILES_arm)
LOCAL_CFLAGS += $(LOCAL_CFLAGS_arm)
LOCAL_C_INCLUDES += $(LOCAL_C_INCLUDES_arm)
- 新建
ARMv8平台 (与ARMv7大同小异)
- 新建
Application.mk
APP_ABI := arm64-v8a
decoder.arm64.mk
不需要动- 修改
decoder.mk
1.打开注释
include $(LOCAL_PATH)/decoder.arm64.mk
2.在include 后面改加:
LOCAL_SRC_FILES += $(LOCAL_SRC_FILES_arm64)
LOCAL_CFLAGS += $(LOCAL_CFLAGS_arm64)
LOCAL_C_INCLUDES += $(LOCAL_C_INCLUDES_arm64)
- 新建
ndk-build
命令执行编译
在上级目录生成obj/,里面有生成的库文件:libhevcdec.a
参数使用说明
在main.c中可以找到使用参数,简要说明:
--input
[必填]输入文件/mnt/sdcard/265_meishi.hevc--num_frames
[必填]其中-1指完整解码--save_output
与--output
搭配使用,output输出yuv文件,注意android 6.0的写文件问题--chroma_format
YUV_420P,输出chroma format默认初始化为YUV_420SP_UV,--!
--display
需SDL实现支持,仅提供接口--chksum
需md5实现支持,仅提供接口
编译部分转载 ZSL的博客
265并行解码性能对比
对比FFmpeg(openHEVC),测试机型Huawei Mate8 8-cores