android-ndk - 编译适用于 Android 的 Opus 编解码器所需的 Makefile

标签 android-ndk arm opus

我正在尝试编译 opus 音频编解码器 ( http://www.opus-codec.org/downloads/ ) 以在 Android 应用程序中使用。我正在使用 Android NDK(第 6 版)来编译我的库。到目前为止,我必须为我的应用程序编译的本地 C 库非常简单,我已经能够将我的 Android.mk 文件建立在 jni 中,主要是基于教程或其他示例。然而,Opus 的编译看起来有些复杂。 tar.gz 文件包含一个用于为 Windows 编译库的解决方案文件,它还包含一些用于标准 Unix 实现的 Makefile,但将这些转换为 Android.mk 生成文件以供 Android NDK 使用是一个挑战。

我已经搜索过,但一直无法找到用于编译 libopus 的 Android 生成文件的在线版本。有人可以将我链接到这样的makefile吗?或者,我可能会错过一些更简单的东西?是否可以使用 Automake 或某种转换器从 tar.gz 中已包含的 unix makefile 为我生成 Android.mk 文件?

最佳答案

以下是最终对我有用的 Android.mk 生成文件。我希望这将来也能帮助其他人。请注意,在 Opus 文件中包含的 unix makefile 中,是否使用固定或 float 丝源的决定被定义为“ifdef”,而在这里我使用的是“固定”。 (使用“float”很简单——只需更新路径“silk/fixed”以指向“silk/float”并更新CFLAGS。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

MY_MODULE_DIR       := opus

LOCAL_MODULE        := $(MY_MODULE_DIR)
LOCAL_SRC_FILES     := \
    $(subst $(ROOT_DIR)/$(MY_MODULE_DIR)/,,$(wildcard $(ROOT_DIR)/$(MY_MODULE_DIR)/src/*.c*)) \
    $(subst $(ROOT_DIR)/$(MY_MODULE_DIR)/,,$(wildcard $(ROOT_DIR)/$(MY_MODULE_DIR)/celt/*.c*)) \
    $(subst $(ROOT_DIR)/$(MY_MODULE_DIR)/,,$(wildcard $(ROOT_DIR)/$(MY_MODULE_DIR)/silk/*.c*)) \
    $(subst $(ROOT_DIR)/$(MY_MODULE_DIR)/,,$(wildcard $(ROOT_DIR)/$(MY_MODULE_DIR)/silk/fixed/*.c*))
LOCAL_LDLIBS        := -lm -llog
LOCAL_C_INCLUDES    := \
    $(ROOT_DIR)/$(MY_MODULE_DIR)/include \
    $(ROOT_DIR)/$(MY_MODULE_DIR)/silk \
    $(ROOT_DIR)/$(MY_MODULE_DIR)/silk/fixed \
    $(ROOT_DIR)/$(MY_MODULE_DIR)/celt
LOCAL_CFLAGS        := -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS    += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -O3 -fno-math-errno
LOCAL_CPPFLAGS      := -DBSD=1 
LOCAL_CPPFLAGS          += -ffast-math -O3 -funroll-loops

include $(BUILD_STATIC_LIBRARY)

关于android-ndk - 编译适用于 Android 的 Opus 编解码器所需的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17869333/

相关文章:

linux - clock_gettime 在 android 上不是单调的

assembly - ARM 汇编中是否需要 .text 和 .data?

android - Android App 无法播放 "opus"文件

audio - 网络音频 API : decodeAudioData doesn't decode opus in Chrome

android - 错误 :(289, 23)C++/JNI/NDK - 错误:无法使用 'char *' 类型的左值(又名 'jstring')初始化 '_jstring *' 类型的参数

android - android dlopen()中的竞争条件?

android - 运行二进制文件时如何加载android库?

debugging - ARM Gdb 在处理器模式更改时中断

arm - 对 uint8x8 Neon 向量的所有 channel 执行水平逻辑/按位与运算

audio - 使用 4 KB/sec 信道进行语音传输