allow defining package names on compile time

development
Taner Sener 7 months ago
parent 2e9fe1f3ce
commit b476453c5f
  1. 20
      android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c
  2. 7
      android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.h
  3. 2
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_demux.c
  4. 7
      android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java
  5. 4
      android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Packages.java
  6. 10
      apple/src/Packages.m
  7. 2
      apple/src/fftools_ffmpeg_demux.c
  8. 10
      linux/src/Packages.cpp
  9. 2
      linux/src/fftools_ffmpeg_demux.c
  10. 2
      scripts/function-android.sh

@ -120,6 +120,7 @@ JNINativeMethod configMethods[] = {
{"getNativeLogLevel", "()I", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeLogLevel}, {"getNativeLogLevel", "()I", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeLogLevel},
{"getNativeFFmpegVersion", "()Ljava/lang/String;", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeFFmpegVersion}, {"getNativeFFmpegVersion", "()Ljava/lang/String;", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeFFmpegVersion},
{"getNativeVersion", "()Ljava/lang/String;", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeVersion}, {"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}, {"nativeFFmpegExecute", "(J[Ljava/lang/String;)I", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFmpegExecute},
{"nativeFFmpegCancel", "(J)V", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFmpegCancel}, {"nativeFFmpegCancel", "(J)V", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFmpegCancel},
{"nativeFFprobeExecute", "(J[Ljava/lang/String;)I", (void*) Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute}, {"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; 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); LOGE("OnLoad failed to RegisterNatives for class %s.\n", configClassName);
return JNI_FALSE; return JNI_FALSE;
} }
@ -724,7 +725,7 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
redirectionEnabled = 0; redirectionEnabled = 0;
#ifdef _USES_FFMPEG_KIT_PROTOCOLS #ifdef USES_FFMPEG_KIT_PROTOCOLS
av_set_saf_open(saf_open); av_set_saf_open(saf_open);
av_set_saf_close(saf_close); av_set_saf_close(saf_close);
#endif #endif
@ -811,6 +812,21 @@ JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNative
return (*env)->NewStringUTF(env, FFMPEG_KIT_VERSION); 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. * Synchronously executes FFmpeg natively with arguments provided.
* *

@ -89,6 +89,13 @@ JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNative
*/ */
JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeVersion(JNIEnv *, jclass); 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 * Class: com_arthenica_ffmpegkit_FFmpegKitConfig
* Method: nativeFFmpegExecute * Method: nativeFFmpegExecute

@ -987,7 +987,7 @@ int ifile_open(const OptionsContext *o, const char *filename)
if (scan_all_pmts_set) if (scan_all_pmts_set)
av_dict_set(&o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE); 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); 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); assert_avoptions(o->g->format_opts);
#endif #endif

@ -1485,6 +1485,13 @@ public class FFmpegKitConfig {
*/ */
private native static String getNativeVersion(); private native static String getNativeVersion();
/**
* <p>Returns the native FFmpegKit package name.
*
* @return native FFmpegKit package name
*/
native static String getNativePackageName();
/** /**
* <p>Synchronously executes FFmpeg natively. * <p>Synchronously executes FFmpeg natively.
* *

@ -74,6 +74,10 @@ public class Packages {
* @return predicted FFmpegKit binary package name * @return predicted FFmpegKit binary package name
*/ */
public static String getPackageName() { public static String getPackageName() {
String nativePackageName = FFmpegKitConfig.getNativePackageName();
if (nativePackageName != null && !nativePackageName.isEmpty()) {
return nativePackageName;
}
final List<String> externalLibraryList = getExternalLibraries(); final List<String> externalLibraryList = getExternalLibraries();
final boolean speex = externalLibraryList.contains("speex"); final boolean speex = externalLibraryList.contains("speex");
final boolean fribidi = externalLibraryList.contains("fribidi"); final boolean fribidi = externalLibraryList.contains("fribidi");

@ -66,7 +66,7 @@ static NSMutableArray *supportedExternalLibraries;
return [NSString stringWithUTF8String:FFMPEG_CONFIGURATION]; return [NSString stringWithUTF8String:FFMPEG_CONFIGURATION];
} }
+ (NSString*)getPackageName { + (NSString*)extractPackageNameFromExternalLibraries {
NSArray *enabledLibraryArray = [Packages getExternalLibraries]; NSArray *enabledLibraryArray = [Packages getExternalLibraries];
Boolean speex = [enabledLibraryArray containsObject:@"speex"]; Boolean speex = [enabledLibraryArray containsObject:@"speex"];
Boolean fribidi = [enabledLibraryArray containsObject:@"fribidi"]; Boolean fribidi = [enabledLibraryArray containsObject:@"fribidi"];
@ -237,6 +237,14 @@ static NSMutableArray *supportedExternalLibraries;
return @"min"; return @"min";
} }
+ (NSString*)getPackageName {
#ifdef FFMPEG_KIT_PACKAGE
return [NSString stringWithUTF8String:FFMPEG_KIT_PACKAGE];
#else
return [self extractPackageNameFromExternalLibraries];
#endif
}
+ (NSArray*)getExternalLibraries { + (NSArray*)getExternalLibraries {
NSString *buildConfiguration = [Packages getBuildConf]; NSString *buildConfiguration = [Packages getBuildConf];
NSMutableArray *enabledLibraryArray = [[NSMutableArray alloc] init]; NSMutableArray *enabledLibraryArray = [[NSMutableArray alloc] init];

@ -987,7 +987,7 @@ int ifile_open(const OptionsContext *o, const char *filename)
if (scan_all_pmts_set) if (scan_all_pmts_set)
av_dict_set(&o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE); 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); 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); assert_avoptions(o->g->format_opts);
#endif #endif

@ -22,7 +22,7 @@
#include <memory> #include <memory>
#include <algorithm> #include <algorithm>
std::string ffmpegkit::Packages::getPackageName() { std::string extractPackageNameFromExternalLibraries() {
std::shared_ptr<std::set<std::string>> enabledLibrarySet = getExternalLibraries(); std::shared_ptr<std::set<std::string>> enabledLibrarySet = getExternalLibraries();
#define contains_ext_lib(element) enabledLibrarySet->find(element) != enabledLibrarySet->end() #define contains_ext_lib(element) enabledLibrarySet->find(element) != enabledLibrarySet->end()
bool speex = contains_ext_lib("speex"); bool speex = contains_ext_lib("speex");
@ -197,6 +197,14 @@ std::string ffmpegkit::Packages::getPackageName() {
return "min"; return "min";
} }
std::string ffmpegkit::Packages::getPackageName() {
#ifdef FFMPEG_KIT_PACKAGE
return std::string(FFMPEG_KIT_PACKAGE);
#else
return extractPackageNameFromExternalLibraries();
#endif
}
std::shared_ptr<std::set<std::string>> ffmpegkit::Packages::getExternalLibraries() { std::shared_ptr<std::set<std::string>> ffmpegkit::Packages::getExternalLibraries() {
const std::set<const char*> supportedExternalLibraries{ const std::set<const char*> supportedExternalLibraries{
"dav1d", "dav1d",

@ -987,7 +987,7 @@ int ifile_open(const OptionsContext *o, const char *filename)
if (scan_all_pmts_set) if (scan_all_pmts_set)
av_dict_set(&o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE); 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); 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); assert_avoptions(o->g->format_opts);
#endif #endif

@ -78,7 +78,7 @@ build_application_mk() {
local BUILD_DATE="-DFFMPEG_KIT_BUILD_DATE=$(date +%Y%m%d 2>>"${BASEDIR}"/build.log)" local BUILD_DATE="-DFFMPEG_KIT_BUILD_DATE=$(date +%Y%m%d 2>>"${BASEDIR}"/build.log)"
if [[ -z ${NO_FFMPEG_KIT_PROTOCOLS} ]]; then 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 fi
rm -f "${BASEDIR}/android/jni/Application.mk" rm -f "${BASEDIR}/android/jni/Application.mk"

Loading…
Cancel
Save