From b476453c5fd99fd17d3a80e2e5af2673af16830c Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Sun, 10 Nov 2024 21:46:48 +0000 Subject: [PATCH] allow defining package names on compile time --- .../src/main/cpp/ffmpegkit.c | 20 +++++++++++++++++-- .../src/main/cpp/ffmpegkit.h | 7 +++++++ .../src/main/cpp/fftools_ffmpeg_demux.c | 2 +- .../arthenica/ffmpegkit/FFmpegKitConfig.java | 7 +++++++ .../com/arthenica/ffmpegkit/Packages.java | 4 ++++ apple/src/Packages.m | 10 +++++++++- apple/src/fftools_ffmpeg_demux.c | 2 +- linux/src/Packages.cpp | 10 +++++++++- linux/src/fftools_ffmpeg_demux.c | 2 +- scripts/function-android.sh | 2 +- 10 files changed, 58 insertions(+), 8 deletions(-) diff --git a/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c b/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c index 05169fd..0d7da37 100644 --- a/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c +++ b/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c @@ -120,6 +120,7 @@ JNINativeMethod configMethods[] = { {"getNativeLogLevel", "()I", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeLogLevel}, {"getNativeFFmpegVersion", "()Ljava/lang/String;", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeFFmpegVersion}, {"getNativeVersion", "()Ljava/lang/String;", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeVersion}, + {"getNativePackageName", "()Ljava/lang/String;", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativePackageName}, {"nativeFFmpegExecute", "(J[Ljava/lang/String;)I", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFmpegExecute}, {"nativeFFmpegCancel", "(J)V", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFmpegCancel}, {"nativeFFprobeExecute", "(J[Ljava/lang/String;)I", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute}, @@ -663,7 +664,7 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) { return JNI_FALSE; } - if ((*env)->RegisterNatives(env, localConfigClass, configMethods, 14) < 0) { + if ((*env)->RegisterNatives(env, localConfigClass, configMethods, 15) < 0) { LOGE("OnLoad failed to RegisterNatives for class %s.\n", configClassName); return JNI_FALSE; } @@ -724,7 +725,7 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) { redirectionEnabled = 0; -#ifdef _USES_FFMPEG_KIT_PROTOCOLS +#ifdef USES_FFMPEG_KIT_PROTOCOLS av_set_saf_open(saf_open); av_set_saf_close(saf_close); #endif @@ -811,6 +812,21 @@ JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNative return (*env)->NewStringUTF(env, FFMPEG_KIT_VERSION); } +/** + * Returns the native FFmpegKit package name. + * + * @param env pointer to native method interface + * @param object reference to the class on which this method is invoked + * @return native FFmpegKit package name + */ +JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativePackageName(JNIEnv *env, jclass object) { +#ifdef FFMPEG_KIT_PACKAGE + return (*env)->NewStringUTF(env, FFMPEG_KIT_PACKAGE); +#else + return (*env)->NewStringUTF(env, ""); +#endif +} + /** * Synchronously executes FFmpeg natively with arguments provided. * diff --git a/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.h b/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.h index dde9b19..b0dfc9c 100644 --- a/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.h +++ b/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.h @@ -89,6 +89,13 @@ JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNative */ JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeVersion(JNIEnv *, jclass); +/* + * Class: com_arthenica_ffmpegkit_FFmpegKitConfig + * Method: getNativePackageName + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativePackageName(JNIEnv *, jclass); + /* * Class: com_arthenica_ffmpegkit_FFmpegKitConfig * Method: nativeFFmpegExecute diff --git a/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_demux.c b/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_demux.c index c80315a..5ad6014 100644 --- a/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_demux.c +++ b/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_demux.c @@ -987,7 +987,7 @@ int ifile_open(const OptionsContext *o, const char *filename) if (scan_all_pmts_set) av_dict_set(&o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE); remove_avoptions(&o->g->format_opts, o->g->codec_opts); -#ifndef _USES_FFMPEG_KIT_PROTOCOLS +#ifndef USES_FFMPEG_KIT_PROTOCOLS assert_avoptions(o->g->format_opts); #endif diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java index a927e2d..93efad7 100644 --- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java +++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java @@ -1485,6 +1485,13 @@ public class FFmpegKitConfig { */ private native static String getNativeVersion(); + /** + *

Returns the native FFmpegKit package name. + * + * @return native FFmpegKit package name + */ + native static String getNativePackageName(); + /** *

Synchronously executes FFmpeg natively. * diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Packages.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Packages.java index 70f9dea..582b307 100644 --- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Packages.java +++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Packages.java @@ -74,6 +74,10 @@ public class Packages { * @return predicted FFmpegKit binary package name */ public static String getPackageName() { + String nativePackageName = FFmpegKitConfig.getNativePackageName(); + if (nativePackageName != null && !nativePackageName.isEmpty()) { + return nativePackageName; + } final List externalLibraryList = getExternalLibraries(); final boolean speex = externalLibraryList.contains("speex"); final boolean fribidi = externalLibraryList.contains("fribidi"); diff --git a/apple/src/Packages.m b/apple/src/Packages.m index 6ba330c..9116d6f 100644 --- a/apple/src/Packages.m +++ b/apple/src/Packages.m @@ -66,7 +66,7 @@ static NSMutableArray *supportedExternalLibraries; return [NSString stringWithUTF8String:FFMPEG_CONFIGURATION]; } -+ (NSString*)getPackageName { ++ (NSString*)extractPackageNameFromExternalLibraries { NSArray *enabledLibraryArray = [Packages getExternalLibraries]; Boolean speex = [enabledLibraryArray containsObject:@"speex"]; Boolean fribidi = [enabledLibraryArray containsObject:@"fribidi"]; @@ -237,6 +237,14 @@ static NSMutableArray *supportedExternalLibraries; return @"min"; } ++ (NSString*)getPackageName { + #ifdef FFMPEG_KIT_PACKAGE + return [NSString stringWithUTF8String:FFMPEG_KIT_PACKAGE]; + #else + return [self extractPackageNameFromExternalLibraries]; + #endif +} + + (NSArray*)getExternalLibraries { NSString *buildConfiguration = [Packages getBuildConf]; NSMutableArray *enabledLibraryArray = [[NSMutableArray alloc] init]; diff --git a/apple/src/fftools_ffmpeg_demux.c b/apple/src/fftools_ffmpeg_demux.c index c80315a..5ad6014 100644 --- a/apple/src/fftools_ffmpeg_demux.c +++ b/apple/src/fftools_ffmpeg_demux.c @@ -987,7 +987,7 @@ int ifile_open(const OptionsContext *o, const char *filename) if (scan_all_pmts_set) av_dict_set(&o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE); remove_avoptions(&o->g->format_opts, o->g->codec_opts); -#ifndef _USES_FFMPEG_KIT_PROTOCOLS +#ifndef USES_FFMPEG_KIT_PROTOCOLS assert_avoptions(o->g->format_opts); #endif diff --git a/linux/src/Packages.cpp b/linux/src/Packages.cpp index 95dde38..0206f34 100644 --- a/linux/src/Packages.cpp +++ b/linux/src/Packages.cpp @@ -22,7 +22,7 @@ #include #include -std::string ffmpegkit::Packages::getPackageName() { +std::string extractPackageNameFromExternalLibraries() { std::shared_ptr> enabledLibrarySet = getExternalLibraries(); #define contains_ext_lib(element) enabledLibrarySet->find(element) != enabledLibrarySet->end() bool speex = contains_ext_lib("speex"); @@ -197,6 +197,14 @@ std::string ffmpegkit::Packages::getPackageName() { return "min"; } +std::string ffmpegkit::Packages::getPackageName() { +#ifdef FFMPEG_KIT_PACKAGE + return std::string(FFMPEG_KIT_PACKAGE); +#else + return extractPackageNameFromExternalLibraries(); +#endif +} + std::shared_ptr> ffmpegkit::Packages::getExternalLibraries() { const std::set supportedExternalLibraries{ "dav1d", diff --git a/linux/src/fftools_ffmpeg_demux.c b/linux/src/fftools_ffmpeg_demux.c index c80315a..5ad6014 100644 --- a/linux/src/fftools_ffmpeg_demux.c +++ b/linux/src/fftools_ffmpeg_demux.c @@ -987,7 +987,7 @@ int ifile_open(const OptionsContext *o, const char *filename) if (scan_all_pmts_set) av_dict_set(&o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE); remove_avoptions(&o->g->format_opts, o->g->codec_opts); -#ifndef _USES_FFMPEG_KIT_PROTOCOLS +#ifndef USES_FFMPEG_KIT_PROTOCOLS assert_avoptions(o->g->format_opts); #endif diff --git a/scripts/function-android.sh b/scripts/function-android.sh index 0daa211..c58796d 100755 --- a/scripts/function-android.sh +++ b/scripts/function-android.sh @@ -78,7 +78,7 @@ build_application_mk() { local BUILD_DATE="-DFFMPEG_KIT_BUILD_DATE=$(date +%Y%m%d 2>>"${BASEDIR}"/build.log)" if [[ -z ${NO_FFMPEG_KIT_PROTOCOLS} ]]; then - local USES_FFMPEG_KIT_PROTOCOLS="-D_USES_FFMPEG_KIT_PROTOCOLS" + local USES_FFMPEG_KIT_PROTOCOLS="-DUSES_FFMPEG_KIT_PROTOCOLS" fi rm -f "${BASEDIR}/android/jni/Application.mk"