ffmpeg neon优化必看!!android下编译ffmpeg with neon的正确方法(已验证)
16lz
2022-05-01
ffmpegneon优化必看!!android下编译ffmpegwithneon的正确方法(已验证)
(2013-01-29 15:28:23) 转载▼ 标签: androidffmpegmakeneon优化 | 分类:软件开发 |
1)首先贴一下我们用的config文件:(红色的是需要注意的地方,使用的时候注意删除#后面的话) #!/bin/sh export TMPDIR="/tmp/" export NDKROOT="/opt/android-ndk-r8c" #这个是你ndk安装的目录,自己改 PREBUILT=$NDKROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86 ./configure --target-os=linux \ --arch=arm \ --cpu=armv7-a \ #指定处理器 --enable-cross-compile \ #使能交叉编译 --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ --extra-cflags="-fPIC -DANDROID -mfpu=neon -mfloat-abi=softfp -I$NDKROOT/platforms/android-9/arch-arm/usr/include" \ --enable-asm \ --disable-yasm \ --enable-static \ --disable-shared \ --enable-small \ --enable-gpl \ --enable-version3 \ --enable-nonfree \ --enable-neon \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffserver \ --disable-ffprobe \ --prefix=/home/ffmpeg-android-bin \ --extra-ldflags="-Wl,-T,$PREBUILT/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x -Wl,-rpath-link=$NDKROOT/platforms/android-9/arch-arm/usr/lib -L$NDKROOT/platforms/android-9/arch-arm/usr/lib -nostdlib$PREBUILT/lib/gcc/arm-linux-androideabi/4.6/crtbegin.o $PREBUILT/lib/gcc/arm-linux-androideabi/4.6/crtend.o -lc -lm -ldl"
2)编译静态库: 这个就很简单了, 到ffmpeg目录下面make即可。将生成出来的几个.a文件移到jni目录下 3)编写jni目录下mk文件: include $(CLEAR_VARS) LOCAL_MODULE := avfilter LOCAL_SRC_FILES := libavfilter.a #这几个prebuild是为了把库预编译一下,ndk会将它移动到libs目录下面去 include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := avutil LOCAL_SRC_FILES := libavutil.a include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := avcodec LOCAL_SRC_FILES := libavcodec.a include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := avdevice LOCAL_SRC_FILES := libavdevice.a include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := swscale LOCAL_SRC_FILES := libswscale.a include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := swresample LOCAL_SRC_FILES := libswresample.a include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS -Wno-sign-compare -Wno-switch -Wno-pointer-sign -DHAVE_NEON=1 \ -mfpu=neon -mfloat-abi=softfp -fPIC -DANDROID #这里的Cflag是照抄之前的config.sh里面的,实际可能用不到这么多
LOCAL_C_INCLUDES += \ $(LOCAL_PATH)/ffmpeg \
LOCAL_SRC_FILES := \ hello-jni.c #这个写你自己的jni文件名
LOCAL_LDLIBS := -L$(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm/usr/lib \ -L$(LOCAL_PATH) -lavformat -lavcodec -lavdevice -lavfilter -lavutil \ -lswscale -lswresample -llog -ljnigraphics -lz -ldl -lgcc #这两个-L很重要, 保证程序能找到库 LOCAL_MODULE := libffmpeg_jni include $(BUILD_SHARED_LIBRARY)
4) 之后在工程根目录下ndk-build 就能生成带neon的so库拉! 大功告成!
更多相关文章
- 《Android(安卓)群英传》 阅读笔记 第一章~第三章
- Java事件模型与Android事件模型的比较
- Android屏幕适配-终结者
- Android与J2ME区别之我见(3)
- (推荐)彻底解析Android缓存机制——LruCache
- 浅谈Java中Collections.sort对List排序的两种方法
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程