mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-21 14:03:11 -07:00
Add Chiaki Lib to Android
This commit is contained in:
parent
dbe4839165
commit
7fb4c67f33
11 changed files with 142 additions and 7 deletions
|
@ -5,6 +5,10 @@ project(chiaki)
|
|||
|
||||
option(CHIAKI_ENABLE_TESTS "Enable tests for Chiaki" ON)
|
||||
option(CHIAKI_ENABLE_CLI "Enable CLI for Chiaki" OFF)
|
||||
option(CHIAKI_ENABLE_GUI "Enable Qt GUI" ON)
|
||||
option(CHIAKI_ENABLE_ANDROID "Enable Android (Use only as part of the Gradle Project)" OFF)
|
||||
option(CHIAKI_LIB_ENABLE_OPUS "Use Opus as part of Chiaki Lib" ON)
|
||||
option(CHIAKI_LIB_OPENSSL_EXTERNAL_PROJECT "Use OpenSSL as CMake external project" OFF)
|
||||
option(CHIAKI_GUI_ENABLE_QT_GAMEPAD "Use QtGamepad for Input" OFF)
|
||||
option(CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER "Use SDL Gamecontroller for Input" ON)
|
||||
option(CHIAKI_CLI_ARGP_STANDALONE "Search for standalone argp lib for CLI" OFF)
|
||||
|
@ -20,15 +24,25 @@ add_subdirectory(third-party)
|
|||
|
||||
add_definitions(-DCHIAKI_VERSION_MAJOR=${CHIAKI_VERSION_MAJOR} -DCHIAKI_VERSION_MINOR=${CHIAKI_VERSION_MINOR} -DCHIAKI_VERSION_PATCH=${CHIAKI_VERSION_PATCH} -DCHIAKI_VERSION=\"${CHIAKI_VERSION}\")
|
||||
|
||||
if(CHIAKI_LIB_OPENSSL_EXTERNAL_PROJECT)
|
||||
include(OpenSSLExternalProject)
|
||||
endif()
|
||||
|
||||
add_subdirectory(lib)
|
||||
|
||||
if(CHIAKI_ENABLE_CLI)
|
||||
add_subdirectory(cli)
|
||||
endif()
|
||||
|
||||
add_subdirectory(gui)
|
||||
if(CHIAKI_ENABLE_GUI)
|
||||
add_subdirectory(gui)
|
||||
endif()
|
||||
|
||||
if(CHIAKI_ENABLE_TESTS)
|
||||
enable_testing()
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
|
||||
if(CHIAKI_ENABLE_ANDROID)
|
||||
add_subdirectory(android/app)
|
||||
endif()
|
5
android/app/CMakeLists.txt
Normal file
5
android/app/CMakeLists.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
|
||||
cmake_minimum_required(VERSION 3.2)
|
||||
|
||||
add_library(chiaki-jni SHARED src/main/cpp/chiaki-jni.c)
|
||||
target_link_libraries(chiaki-jni chiaki-lib)
|
|
@ -13,6 +13,23 @@ android {
|
|||
targetSdkVersion 29
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DCHIAKI_ENABLE_TESTS=OFF",
|
||||
"-DCHIAKI_ENABLE_CLI=OFF",
|
||||
"-DCHIAKI_ENABLE_GUI=OFF",
|
||||
"-DCHIAKI_ENABLE_ANDROID=ON",
|
||||
"-DCHIAKI_LIB_ENABLE_OPUS=OFF",
|
||||
"-DCHIAKI_LIB_OPENSSL_EXTERNAL_PROJECT=ON",
|
||||
"-DCMAKE_VERBOSE_MAKEFILE=ON"
|
||||
}
|
||||
}
|
||||
}
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
version "3.10.2+"
|
||||
path "../../CMakeLists.txt"
|
||||
}
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
|
|
9
android/app/src/main/cpp/chiaki-jni.c
Normal file
9
android/app/src/main/cpp/chiaki-jni.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
|
||||
#include <jni.h>
|
||||
|
||||
#include <chiaki/common.h>
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_com_metallic_chiaki_lib_Chiaki_stringFromJNI(JNIEnv* env, jobject thiz)
|
||||
{
|
||||
return (*env)->NewStringUTF(env, chiaki_error_string(CHIAKI_ERR_SUCCESS));
|
||||
}
|
|
@ -2,6 +2,8 @@ package com.metallic.chiaki
|
|||
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
import com.metallic.chiaki.lib.Chiaki
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
|
||||
class MainActivity : AppCompatActivity()
|
||||
{
|
||||
|
@ -9,5 +11,7 @@ class MainActivity : AppCompatActivity()
|
|||
{
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
|
||||
testTextView.text = Chiaki.stringFromJNI()
|
||||
}
|
||||
}
|
||||
|
|
14
android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt
Normal file
14
android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt
Normal file
|
@ -0,0 +1,14 @@
|
|||
package com.metallic.chiaki.lib
|
||||
|
||||
class Chiaki
|
||||
{
|
||||
companion object
|
||||
{
|
||||
init
|
||||
{
|
||||
System.loadLibrary("chiaki-jni")
|
||||
}
|
||||
|
||||
@JvmStatic external fun stringFromJNI(): String
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@
|
|||
tools:context=".MainActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/testTextView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Hello World!"
|
||||
|
|
52
cmake/OpenSSLExternalProject.cmake
Normal file
52
cmake/OpenSSLExternalProject.cmake
Normal file
|
@ -0,0 +1,52 @@
|
|||
|
||||
include(ExternalProject)
|
||||
|
||||
set(OPENSSL_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/openssl-install-prefix")
|
||||
|
||||
unset(OPENSSL_OS_COMPILER)
|
||||
unset(OPENSSL_CONFIG_EXTRA_ARGS)
|
||||
unset(OPENSSL_BUILD_ENV)
|
||||
|
||||
if(ANDROID_ABI)
|
||||
if(ANDROID_ABI STREQUAL "armeabi-v7a")
|
||||
set(OPENSSL_OS_COMPILER "android-arm")
|
||||
elseif(ANDROID_ABI STREQUAL "arm64-v8a")
|
||||
set(OPENSSL_OS_COMPILER "android-arm64")
|
||||
elseif(ANDROID_ABI STREQUAL "x86")
|
||||
set(OPENSSL_OS_COMPILER "android-x86")
|
||||
elseif(ANDROID_ABI STREQUAL "x86_64")
|
||||
set(OPENSSL_OS_COMPILER "android-x86_64")
|
||||
endif()
|
||||
|
||||
set(OPENSSL_CONFIG_EXTRA_ARGS "-D__ANDROID_API__=${ANDROID_NATIVE_API_LEVEL}")
|
||||
get_filename_component(ANDROID_NDK_BIN_PATH "${CMAKE_C_COMPILER}" DIRECTORY)
|
||||
set(OPENSSL_BUILD_ENV "ANDROID_NDK_HOME=${ANDROID_NDK}" "PATH=${ANDROID_NDK_BIN_PATH}:$ENV{PATH}")
|
||||
else()
|
||||
if(UNIX AND NOT APPLE AND CMAKE_SIZEOF_VOID_P STREQUAL "8")
|
||||
set(OPENSSL_OS_COMPILER "linux-x86_64")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT OPENSSL_OS_COMPILER)
|
||||
message(FATAL_ERROR "Failed to match OPENSSL_OS_COMPILER")
|
||||
endif()
|
||||
|
||||
find_program(MAKE_EXE NAMES gmake make)
|
||||
ExternalProject_Add(OpenSSL-ExternalProject
|
||||
URL https://www.openssl.org/source/openssl-1.1.1d.tar.gz
|
||||
URL_HASH SHA256=1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2
|
||||
INSTALL_DIR "${OPENSSL_INSTALL_DIR}"
|
||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${OPENSSL_BUILD_ENV}
|
||||
"<SOURCE_DIR>/Configure" "--prefix=<INSTALL_DIR>" no-shared ${OPENSSL_CONFIG_EXTRA_ARGS} "${OPENSSL_OS_COMPILER}"
|
||||
BUILD_COMMAND ${CMAKE_COMMAND} -E env ${OPENSSL_BUILD_ENV} "${MAKE_EXE}" build_libs
|
||||
INSTALL_COMMAND ${CMAKE_COMMAND} -E env ${OPENSSL_BUILD_ENV} "${MAKE_EXE}" install_dev)
|
||||
|
||||
add_library(OpenSSL_Crypto INTERFACE)
|
||||
add_dependencies(OpenSSL_Crypto OpenSSL-ExternalProject)
|
||||
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0")
|
||||
target_link_directories(OpenSSL_Crypto INTERFACE "${OPENSSL_INSTALL_DIR}/lib")
|
||||
else()
|
||||
link_directories("${OPENSSL_INSTALL_DIR}/lib")
|
||||
endif()
|
||||
target_link_libraries(OpenSSL_Crypto INTERFACE crypto)
|
||||
target_include_directories(OpenSSL_Crypto INTERFACE "${OPENSSL_INSTALL_DIR}/include")
|
|
@ -74,8 +74,11 @@ include_directories("${NANOPB_SOURCE_DIR}")
|
|||
set_source_files_properties(${CHIAKI_LIB_PROTO_SOURCE_FILES} ${CHIAKI_LIB_PROTO_HEADER_FILES} PROPERTIES GENERATED TRUE)
|
||||
include_directories("${CHIAKI_LIB_PROTO_INCLUDE_DIR}")
|
||||
|
||||
find_package(Opus REQUIRED)
|
||||
include_directories(${Opus_INCLUDE_DIRS})
|
||||
if(CHIAKI_LIB_ENABLE_OPUS)
|
||||
find_package(Opus REQUIRED)
|
||||
include_directories(${Opus_INCLUDE_DIRS})
|
||||
add_definitions(-DCHIAKI_LIB_ENABLE_OPUS)
|
||||
endif()
|
||||
|
||||
add_library(chiaki-lib ${HEADER_FILES} ${SOURCE_FILES} ${CHIAKI_LIB_PROTO_SOURCE_FILES} ${CHIAKI_LIB_PROTO_HEADER_FILES})
|
||||
add_dependencies(chiaki-lib chiaki-pb)
|
||||
|
@ -90,10 +93,16 @@ target_include_directories(chiaki-lib PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/includ
|
|||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(chiaki-lib Threads::Threads)
|
||||
|
||||
find_package(OpenSSL REQUIRED)
|
||||
target_link_libraries(chiaki-lib OpenSSL::Crypto)
|
||||
if(CHIAKI_LIB_OPENSSL_EXTERNAL_PROJECT)
|
||||
target_link_libraries(chiaki-lib OpenSSL_Crypto)
|
||||
else()
|
||||
find_package(OpenSSL REQUIRED)
|
||||
target_link_libraries(chiaki-lib OpenSSL::Crypto)
|
||||
endif()
|
||||
|
||||
target_link_libraries(chiaki-lib protobuf-nanopb-static)
|
||||
target_link_libraries(chiaki-lib jerasure)
|
||||
|
||||
target_link_libraries(chiaki-lib ${Opus_LIBRARIES})
|
||||
if(CHIAKI_LIB_ENABLE_OPUS)
|
||||
target_link_libraries(chiaki-lib ${Opus_LIBRARIES})
|
||||
endif()
|
|
@ -18,7 +18,9 @@
|
|||
#include <chiaki/audioreceiver.h>
|
||||
#include <chiaki/session.h>
|
||||
|
||||
#ifdef CHIAKI_LIB_ENABLE_OPUS
|
||||
#include <opus/opus.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
@ -47,7 +49,9 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_audio_receiver_init(ChiakiAudioReceiver *au
|
|||
|
||||
CHIAKI_EXPORT void chiaki_audio_receiver_fini(ChiakiAudioReceiver *audio_receiver)
|
||||
{
|
||||
#ifdef CHIAKI_LIB_ENABLE_OPUS
|
||||
opus_decoder_destroy(audio_receiver->opus_decoder);
|
||||
#endif
|
||||
chiaki_mutex_fini(&audio_receiver->mutex);
|
||||
free(audio_receiver->pcm_buf);
|
||||
}
|
||||
|
@ -65,6 +69,7 @@ CHIAKI_EXPORT void chiaki_audio_receiver_stream_info(ChiakiAudioReceiver *audio_
|
|||
CHIAKI_LOGI(audio_receiver->log, " unknown = %d", audio_header->unknown);
|
||||
memcpy(&audio_receiver->audio_header, audio_header, sizeof(audio_receiver->audio_header));
|
||||
|
||||
#ifdef CHIAKI_LIB_ENABLE_OPUS
|
||||
opus_decoder_destroy(audio_receiver->opus_decoder);
|
||||
|
||||
int error;
|
||||
|
@ -97,6 +102,9 @@ CHIAKI_EXPORT void chiaki_audio_receiver_stream_info(ChiakiAudioReceiver *audio_
|
|||
|
||||
if(audio_receiver->session->audio_settings_cb)
|
||||
audio_receiver->session->audio_settings_cb(audio_header->channels, audio_header->rate, audio_receiver->session->audio_cb_user);
|
||||
#else
|
||||
CHIAKI_LOGE(audio_receiver->log, "Opus disabled, not initializing decoder");
|
||||
#endif
|
||||
|
||||
beach:
|
||||
chiaki_mutex_unlock(&audio_receiver->mutex);
|
||||
|
@ -160,6 +168,7 @@ CHIAKI_EXPORT void chiaki_audio_receiver_av_packet(ChiakiAudioReceiver *audio_re
|
|||
|
||||
static void chiaki_audio_receiver_frame(ChiakiAudioReceiver *audio_receiver, ChiakiSeqNum16 frame_index, uint8_t *buf, size_t buf_size)
|
||||
{
|
||||
#ifdef CHIAKI_LIB_ENABLE_OPUS
|
||||
chiaki_mutex_lock(&audio_receiver->mutex);
|
||||
|
||||
if(!audio_receiver->opus_decoder)
|
||||
|
@ -181,4 +190,5 @@ static void chiaki_audio_receiver_frame(ChiakiAudioReceiver *audio_receiver, Chi
|
|||
|
||||
beach:
|
||||
chiaki_mutex_unlock(&audio_receiver->mutex);
|
||||
#endif
|
||||
}
|
|
@ -72,7 +72,7 @@ CHIAKI_EXPORT void *chiaki_aligned_alloc(size_t alignment, size_t size)
|
|||
{
|
||||
#if defined(_WIN32)
|
||||
return _aligned_malloc(size, alignment);
|
||||
#elif __APPLE__
|
||||
#elif __APPLE__ || __ANDROID__
|
||||
void *r;
|
||||
if(posix_memalign(&r, alignment, size) == 0)
|
||||
return r;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue