package com.arthenica.ffmpegkit; import android.os.Build; import android.util.Log; import com.arthenica.smartexception.java.Exceptions; import java.util.Collections; import java.util.List; public class NativeLoader { static final String[] FFMPEG_LIBRARIES = {"avutil", "swresample", "avcodec", "avformat", "avfilter", "avdevice"}; private static void loadLibrary(String libraryName) { System.loadLibrary(libraryName); } private static List loadExternalLibraries() { //return Packages.getExternalLibraries(); return Collections.emptyList(); } private static String loadNativeAbi() { return AbiDetect.getNativeAbi(); } static String loadAbi() { return AbiDetect.getAbi(); } static String loadPackageName() { return Packages.getPackageName(); } static String loadVersion() { return FFmpegKitConfig.getVersion(); } static boolean loadIsLTSBuild() { return AbiDetect.isNativeLTSBuild(); } static int loadLogLevel() { return FFmpegKitConfig.getNativeLogLevel(); } static String loadBuildDate() { return FFmpegKitConfig.getBuildDate(); } static void enableRedirection() { FFmpegKitConfig.enableRedirection(); } static void loadFFmpegKitAbiDetect() { loadLibrary("ffmpegkit_abidetect"); } static boolean loadFFmpeg() { boolean nativeFFmpegLoaded = false; boolean nativeFFmpegTriedAndFailed = false; if (AbiDetect.ARM_V7A.equals(loadNativeAbi())) { try { for (String ffmpegLibrary : FFMPEG_LIBRARIES) { loadLibrary(ffmpegLibrary + "_neon"); } nativeFFmpegLoaded = true; } catch (final Error e) { android.util.Log.i(FFmpegKitConfig.TAG, String.format("NEON supported armeabi-v7a ffmpeg library not found. Loading default armeabi-v7a library.%s", Exceptions.getStackTraceString(e))); nativeFFmpegTriedAndFailed = true; } } if (!nativeFFmpegLoaded) { for (String ffmpegLibrary : FFMPEG_LIBRARIES) { loadLibrary(ffmpegLibrary); } } return nativeFFmpegTriedAndFailed; } static void loadFFmpegKit(boolean nativeFFmpegTriedAndFailed) { boolean nativeFFmpegKitLoaded = false; if (!nativeFFmpegTriedAndFailed && "arm-v7a".equals(loadNativeAbi())) { try { loadLibrary("ffmpegkit_armv7a_neon"); nativeFFmpegKitLoaded = true; AbiDetect.setArmV7aNeonLoaded(); } catch (Error e) { Log.i("ffmpeg-kit", String.format("NEON supported armeabi-v7a ffmpegkit library not found. Loading default armeabi-v7a library.%s", Exceptions.getStackTraceString(e))); } } if (!nativeFFmpegKitLoaded) { loadLibrary("ffmpegkit"); } } static String getDeviceDebugInformation() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("brand: "); stringBuilder.append(Build.BRAND); stringBuilder.append(", model: "); stringBuilder.append(Build.MODEL); stringBuilder.append(", device: "); stringBuilder.append(Build.DEVICE); stringBuilder.append(", api level: "); stringBuilder.append(Build.VERSION.SDK_INT); if (Build.VERSION.SDK_INT >= 21) { stringBuilder.append(", abis: "); stringBuilder.append(FFmpegKitConfig.argumentsToString(Build.SUPPORTED_ABIS)); stringBuilder.append(", 32bit abis: "); stringBuilder.append(FFmpegKitConfig.argumentsToString(Build.SUPPORTED_32_BIT_ABIS)); stringBuilder.append(", 64bit abis: "); stringBuilder.append(FFmpegKitConfig.argumentsToString(Build.SUPPORTED_64_BIT_ABIS)); } else { stringBuilder.append(", cpu abis: "); stringBuilder.append(Build.CPU_ABI); stringBuilder.append(", cpu abi2s: "); stringBuilder.append(Build.CPU_ABI2); } return stringBuilder.toString(); } }