From a2050085c920e4effbe9c48d17b29b65c5640420 Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Wed, 19 Jul 2017 17:01:38 +0300 Subject: [PATCH 01/15] Fixed singleton context issue and kill process bug (hopefully) --- FFmpegAndroid/build.gradle | 1 + .../hiteshsondhi88/libffmpeg/FFmpeg.java | 18 +++++++++--------- .../libffmpeg/FFmpegContextProvider.java | 7 +++++++ .../libffmpeg/FFmpegExecuteAsyncTask.java | 1 + .../libffmpeg/FFmpegLoadLibraryAsyncTask.java | 10 +++++----- .../github/hiteshsondhi88/libffmpeg/Util.java | 9 +++++++-- app/build.gradle | 1 + build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 9 files changed, 35 insertions(+), 20 deletions(-) create mode 100644 FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegContextProvider.java diff --git a/FFmpegAndroid/build.gradle b/FFmpegAndroid/build.gradle index c6178c7..7a99208 100644 --- a/FFmpegAndroid/build.gradle +++ b/FFmpegAndroid/build.gradle @@ -28,6 +28,7 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + buildToolsVersion '25.0.0' } dependencies { diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java index 42bc05f..0e16ed9 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java @@ -12,7 +12,7 @@ @SuppressWarnings("unused") public class FFmpeg implements FFmpegInterface { - private final Context context; + private final FFmpegContextProvider context; private FFmpegExecuteAsyncTask ffmpegExecuteAsyncTask; private FFmpegLoadLibraryAsyncTask ffmpegLoadLibraryAsyncTask; @@ -21,14 +21,14 @@ public class FFmpeg implements FFmpegInterface { private static FFmpeg instance = null; - private FFmpeg(Context context) { - this.context = context.getApplicationContext(); - Log.setDEBUG(Util.isDebug(this.context)); + private FFmpeg(FFmpegContextProvider contextProvider) { + this.context = contextProvider; + Log.setDEBUG(Util.isDebug(this.context.provide())); } - public static FFmpeg getInstance(Context context) { + public static FFmpeg getInstance(FFmpegContextProvider contextProvider) { if (instance == null) { - instance = new FFmpeg(context); + instance = new FFmpeg(contextProvider); } return instance; } @@ -63,7 +63,7 @@ public void execute(Map environvenmentVars, String[] cmd, FFmpeg throw new FFmpegCommandAlreadyRunningException("FFmpeg command is already running, you are only allowed to run single command at a time"); } if (cmd.length != 0) { - String[] ffmpegBinary = new String[] { FileUtils.getFFmpeg(context, environvenmentVars) }; + String[] ffmpegBinary = new String[] { FileUtils.getFFmpeg(context.provide(), environvenmentVars) }; String[] command = concatenate(ffmpegBinary, cmd); ffmpegExecuteAsyncTask = new FFmpegExecuteAsyncTask(command , timeout, ffmpegExecuteResponseHandler); ffmpegExecuteAsyncTask.execute(); @@ -92,7 +92,7 @@ public void execute(String[] cmd, FFmpegExecuteResponseHandler ffmpegExecuteResp @Override public String getDeviceFFmpegVersion() throws FFmpegCommandAlreadyRunningException { ShellCommand shellCommand = new ShellCommand(); - CommandResult commandResult = shellCommand.runWaitFor(new String[] { FileUtils.getFFmpeg(context), "-version" }); + CommandResult commandResult = shellCommand.runWaitFor(new String[] { FileUtils.getFFmpeg(context.provide()), "-version" }); if (commandResult.success) { return commandResult.output.split(" ")[2]; } @@ -102,7 +102,7 @@ public String getDeviceFFmpegVersion() throws FFmpegCommandAlreadyRunningExcepti @Override public String getLibraryFFmpegVersion() { - return context.getString(R.string.shipped_ffmpeg_version); + return context.provide().getString(R.string.shipped_ffmpeg_version); } @Override diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegContextProvider.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegContextProvider.java new file mode 100644 index 0000000..748845c --- /dev/null +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegContextProvider.java @@ -0,0 +1,7 @@ +package com.github.hiteshsondhi88.libffmpeg; + +import android.content.Context; + +interface FFmpegContextProvider { + Context provide(); +} \ No newline at end of file diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegExecuteAsyncTask.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegExecuteAsyncTask.java index 74b028e..01b8e1a 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegExecuteAsyncTask.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegExecuteAsyncTask.java @@ -90,6 +90,7 @@ private void checkAndUpdateProcess() throws TimeoutException, InterruptedExcepti BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream())); while ((line = reader.readLine()) != null) { if (isCancelled()) { + process.destroy(); return; } diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegLoadLibraryAsyncTask.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegLoadLibraryAsyncTask.java index 6783d28..953dc8a 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegLoadLibraryAsyncTask.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegLoadLibraryAsyncTask.java @@ -9,9 +9,9 @@ class FFmpegLoadLibraryAsyncTask extends AsyncTask { private final String cpuArchNameFromAssets; private final FFmpegLoadBinaryResponseHandler ffmpegLoadBinaryResponseHandler; - private final Context context; + private final FFmpegContextProvider context; - FFmpegLoadLibraryAsyncTask(Context context, String cpuArchNameFromAssets, FFmpegLoadBinaryResponseHandler ffmpegLoadBinaryResponseHandler) { + FFmpegLoadLibraryAsyncTask(FFmpegContextProvider context, String cpuArchNameFromAssets, FFmpegLoadBinaryResponseHandler ffmpegLoadBinaryResponseHandler) { this.context = context; this.cpuArchNameFromAssets = cpuArchNameFromAssets; this.ffmpegLoadBinaryResponseHandler = ffmpegLoadBinaryResponseHandler; @@ -19,12 +19,12 @@ class FFmpegLoadLibraryAsyncTask extends AsyncTask { @Override protected Boolean doInBackground(Void... params) { - File ffmpegFile = new File(FileUtils.getFFmpeg(context)); + File ffmpegFile = new File(FileUtils.getFFmpeg(context.provide())); if (ffmpegFile.exists() && isDeviceFFmpegVersionOld() && !ffmpegFile.delete()) { return false; } if (!ffmpegFile.exists()) { - boolean isFileCopied = FileUtils.copyBinaryFromAssetsToData(context, + boolean isFileCopied = FileUtils.copyBinaryFromAssetsToData(context.provide(), cpuArchNameFromAssets + File.separator + FileUtils.ffmpegFileName, FileUtils.ffmpegFileName); @@ -58,6 +58,6 @@ protected void onPostExecute(Boolean isSuccess) { } private boolean isDeviceFFmpegVersionOld() { - return CpuArch.fromString(FileUtils.SHA1(FileUtils.getFFmpeg(context))).equals(CpuArch.NONE); + return CpuArch.fromString(FileUtils.SHA1(FileUtils.getFFmpeg(context.provide()))).equals(CpuArch.NONE); } } diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java index 378a863..2a7dcb9 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java @@ -53,8 +53,13 @@ static String convertInputStreamToString(InputStream inputStream) { } static void destroyProcess(Process process) { - if (process != null) - process.destroy(); + if (process != null) { + try { + process.destroy(); + } catch (Exception e) { + Log.e("process destroy error", e); + } + } } static boolean killAsync(AsyncTask asyncTask) { diff --git a/app/build.gradle b/app/build.gradle index f6d48ab..0090a32 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,6 +28,7 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + buildToolsVersion '25.0.0' } dependencies { diff --git a/build.gradle b/build.gradle index 939b683..f398aea 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0-beta3' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' + classpath 'com.android.tools.build:gradle:3.0.0-alpha7' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.1" // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5acddb1..cfbd56e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 20 11:52:28 GMT+05:30 2016 +#Wed Jul 19 16:37:50 EET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-milestone-1-all.zip From 7942a958b876c2dc924ce6c01577e0a7fcd7864f Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Wed, 19 Jul 2017 17:55:26 +0300 Subject: [PATCH 02/15] Fixed gradle issues --- FFmpegAndroid/build.gradle | 1 - app/build.gradle | 1 - build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/FFmpegAndroid/build.gradle b/FFmpegAndroid/build.gradle index 7a99208..c6178c7 100644 --- a/FFmpegAndroid/build.gradle +++ b/FFmpegAndroid/build.gradle @@ -28,7 +28,6 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - buildToolsVersion '25.0.0' } dependencies { diff --git a/app/build.gradle b/app/build.gradle index 0090a32..f6d48ab 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,7 +28,6 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - buildToolsVersion '25.0.0' } dependencies { diff --git a/build.gradle b/build.gradle index f398aea..939b683 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-alpha7' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' + classpath 'com.android.tools.build:gradle:2.1.0-beta3' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.1" // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cfbd56e..5acddb1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Jul 19 16:37:50 EET 2017 +#Wed Apr 20 11:52:28 GMT+05:30 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-milestone-1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip From 7885d955b72fe454b09ff7163878cd25f9febce9 Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Wed, 19 Jul 2017 18:01:26 +0300 Subject: [PATCH 03/15] Fixed visibility of context provider --- .../github/hiteshsondhi88/libffmpeg/FFmpegContextProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegContextProvider.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegContextProvider.java index 748845c..7e1ec49 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegContextProvider.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegContextProvider.java @@ -2,6 +2,6 @@ import android.content.Context; -interface FFmpegContextProvider { +public interface FFmpegContextProvider { Context provide(); } \ No newline at end of file From d8af06f659a36c0c0bfa54bc4819ce003fdb436f Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Wed, 19 Jul 2017 18:19:25 +0300 Subject: [PATCH 04/15] Trying to fix kill bug --- .../github/hiteshsondhi88/libffmpeg/FFmpegExecuteAsyncTask.java | 1 + 1 file changed, 1 insertion(+) diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegExecuteAsyncTask.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegExecuteAsyncTask.java index 01b8e1a..011e986 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegExecuteAsyncTask.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegExecuteAsyncTask.java @@ -91,6 +91,7 @@ private void checkAndUpdateProcess() throws TimeoutException, InterruptedExcepti while ((line = reader.readLine()) != null) { if (isCancelled()) { process.destroy(); + process.waitFor(); return; } From d11505aff2b6289030a346e9ba792f2133ad25ac Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Wed, 19 Jul 2017 18:35:48 +0300 Subject: [PATCH 05/15] Added a way to wait for ffmpeg to get ready --- .../hiteshsondhi88/libffmpeg/FFmpeg.java | 11 +++- .../libffmpeg/FFmpegInterface.java | 7 +++ .../libffmpeg/FFmpegObserver.java | 5 ++ .../github/hiteshsondhi88/libffmpeg/Util.java | 53 +++++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegObserver.java diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java index 0e16ed9..3eb6b9a 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java @@ -1,6 +1,5 @@ package com.github.hiteshsondhi88.libffmpeg; -import android.content.Context; import android.text.TextUtils; import java.lang.reflect.Array; @@ -121,4 +120,14 @@ public void setTimeout(long timeout) { this.timeout = timeout; } } + + @Override + public FFmpegObserver whenFFmpegIsReady(Runnable onReady, int timeout) { + return Util.observeOnce(new Util.ObservePredicate() { + @Override + public Boolean isReadyToProceed() { + return !isFFmpegCommandRunning(); + } + }, onReady, timeout); + } } diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegInterface.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegInterface.java index 6f8b76d..5247a12 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegInterface.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegInterface.java @@ -63,4 +63,11 @@ interface FFmpegInterface { */ public void setTimeout(long timeout); + /** + * Wait for ffmpeg to get ready asynchronously + * @param onReady code to run when FFmpeg is ready + * @param timeout when to give up in miliseconds + */ + public FFmpegObserver whenFFmpegIsReady(Runnable onReady, int timeout); + } diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegObserver.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegObserver.java new file mode 100644 index 0000000..3ccebd0 --- /dev/null +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpegObserver.java @@ -0,0 +1,5 @@ +package com.github.hiteshsondhi88.libffmpeg; + +public interface FFmpegObserver extends Runnable { + void cancel(); +} \ No newline at end of file diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java index 2a7dcb9..408bbbf 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java @@ -76,4 +76,57 @@ static boolean isProcessCompleted(Process process) { } return false; } + + public interface ObservePredicate { + @Nullable + Boolean isReadyToProceed(); + } + + public static FFmpegObserver observeOnce(@NonNull final ObservePredicate predicate, @NonNull final Runnable run, final int timeout) { + final android.os.Handler observer = new android.os.Handler(); + + // Enable this to detect neverending observers +// final Exception e = new RuntimeException("WTF"); + + final FFmpegObserver observeAction = new FFmpegObserver() { + private boolean canceled = false; + private int timeElapsed = 0; + + @Override + public void run() { + if (timeElapsed + 40 > timeout) cancel(); + timeElapsed += 40; + + if (canceled) return; + + Boolean readyToProceed = null; + try { + readyToProceed = predicate.isReadyToProceed(); + } catch (Exception e) { + Log.v("Observing " + e.getMessage()); + observer.postDelayed(this, 40); + return; + } + + if (readyToProceed != null && readyToProceed) { + Log.v("Observed"); + run.run(); + } else { + // Enable this to detect neverending observers +// Log.v("Util", "Observing", e); + Log.v("Observing"); + observer.postDelayed(this, 40); + } + } + + @Override + public void cancel() { + canceled = true; + } + }; + + observer.post(observeAction); + + return observeAction; + } } From de910b154e2641df41cc05959c1fe1b8aefce956 Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Wed, 19 Jul 2017 18:36:31 +0300 Subject: [PATCH 06/15] Removed unnecessary annotations --- .../main/java/com/github/hiteshsondhi88/libffmpeg/Util.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java index 408bbbf..4898a20 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java @@ -78,11 +78,10 @@ static boolean isProcessCompleted(Process process) { } public interface ObservePredicate { - @Nullable Boolean isReadyToProceed(); } - public static FFmpegObserver observeOnce(@NonNull final ObservePredicate predicate, @NonNull final Runnable run, final int timeout) { + public static FFmpegObserver observeOnce(final ObservePredicate predicate, final Runnable run, final int timeout) { final android.os.Handler observer = new android.os.Handler(); // Enable this to detect neverending observers From d34ec86bde32683ab0ed6767c3b08c49a336d803 Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Wed, 19 Jul 2017 18:46:09 +0300 Subject: [PATCH 07/15] Added resource recovery on kill --- .../main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java index 3eb6b9a..bf0dffd 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java @@ -111,7 +111,9 @@ public boolean isFFmpegCommandRunning() { @Override public boolean killRunningProcesses() { - return Util.killAsync(ffmpegLoadLibraryAsyncTask) || Util.killAsync(ffmpegExecuteAsyncTask); + boolean status = Util.killAsync(ffmpegLoadLibraryAsyncTask) || Util.killAsync(ffmpegExecuteAsyncTask); + ffmpegExecuteAsyncTask = null; + return status; } @Override From 73af55a4ea23cb17b3d9fe4e4032c8a84a1d043d Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Thu, 20 Jul 2017 12:18:08 +0300 Subject: [PATCH 08/15] Fixed backward compatibility --- .../github/hiteshsondhi88/libffmpeg/FFmpeg.java | 16 +++++++++++++++- .../github/hiteshsondhi88/libffmpeg/Util.java | 6 +++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java index bf0dffd..7bc0b5c 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java @@ -1,5 +1,6 @@ package com.github.hiteshsondhi88.libffmpeg; +import android.content.Context; import android.text.TextUtils; import java.lang.reflect.Array; @@ -32,6 +33,19 @@ public static FFmpeg getInstance(FFmpegContextProvider contextProvider) { return instance; } + @Deprecated + public static FFmpeg getInstance(final Context context) { + if (instance == null) { + instance = new FFmpeg(new FFmpegContextProvider() { + @Override + public Context provide() { + return context; + } + }); + } + return instance; + } + @Override public void loadBinary(FFmpegLoadBinaryResponseHandler ffmpegLoadBinaryResponseHandler) throws FFmpegNotSupportedException { String cpuArchNameFromAssets = null; @@ -71,7 +85,7 @@ public void execute(Map environvenmentVars, String[] cmd, FFmpeg } } - public T[] concatenate (T[] a, T[] b) { + private static T[] concatenate (T[] a, T[] b) { int aLen = a.length; int bLen = b.length; diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java index 4898a20..3206151 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/Util.java @@ -102,18 +102,18 @@ public void run() { try { readyToProceed = predicate.isReadyToProceed(); } catch (Exception e) { - Log.v("Observing " + e.getMessage()); +// Log.v("Observing " + e.getMessage()); observer.postDelayed(this, 40); return; } if (readyToProceed != null && readyToProceed) { - Log.v("Observed"); +// Log.v("Observed"); run.run(); } else { // Enable this to detect neverending observers // Log.v("Util", "Observing", e); - Log.v("Observing"); +// Log.v("Observing"); observer.postDelayed(this, 40); } } From 39b2f82a218d2a5dedb001c5f3ff00e50dc195c2 Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Fri, 11 Aug 2017 13:41:41 +0300 Subject: [PATCH 09/15] fixed isFFmpegCommandRunning() --- .../main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java index 7bc0b5c..31bcf18 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java @@ -120,7 +120,7 @@ public String getLibraryFFmpegVersion() { @Override public boolean isFFmpegCommandRunning() { - return ffmpegExecuteAsyncTask != null && !ffmpegExecuteAsyncTask.isProcessCompleted(); + return ffmpegExecuteAsyncTask != null || !ffmpegExecuteAsyncTask.isProcessCompleted(); } @Override From a7ef19706aa6276c82945aacfb150bcd9fbfde7d Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Fri, 11 Aug 2017 13:52:50 +0300 Subject: [PATCH 10/15] Updated README --- README.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/README.md b/README.md index f92f842..cbc68b2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,48 @@ +About the fork +=================== +### Installation +Edit your project's build.gradle (not app) like this. (important line is jitpack) + +``` +allprojects { + repositories { + jcenter() + mavenCentral() + + ... + + maven { + url 'https://jitpack.io' + } + } +} +``` + +Add below line to your app's build.gradle dependencies. + +`compile 'com.github.diegoperini:ffmpeg-android-java:v0.4.7'` + + +### Applied fixes + +* Added `whenFFmpegIsReady()` to properly wait for ffmpeg state. +* Fixed `killRunningProcesses()` to properly kill the execution. +* Added a `FFmpeg.getInstance()` overload to work with a `ContextProvider` instead of a context. It is a fix for a common memory leak caused by storing the context internally. Old factory method is still supported but marked as deprecated. +* Fixed `isFFmpegCommandRunning()` to properly return running state status. (thanks to @pawaom) + + +### Help needed + +* to update ffmpeg binary versions for all architectures +* to test the fixes +* to build and publish the fork somewhere more common + +### License + +GPLv3 + +----------------------------------- + [FFmpeg-Android-Java](http://writingminds.github.io/ffmpeg-android-java/) [![Build Status](https://travis-ci.org/hiteshsondhi88/ffmpeg-android-java.svg?branch=master)](https://travis-ci.org/hiteshsondhi88/ffmpeg-android-java) [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-FFmpeg--Android--Java-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/931) ============== From 4849c58b355342392d93e714a439781d8e98acf8 Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Mon, 28 Aug 2017 18:22:30 +0300 Subject: [PATCH 11/15] Trying to bump sdk version --- build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 939b683..692368a 100644 --- a/build.gradle +++ b/build.gradle @@ -21,10 +21,10 @@ allprojects { } ext { - compileSdkVersion = 22 - buildToolsVersion = '22.0.1' - targetSdkVersion = 22 + compileSdkVersion = 23 + buildToolsVersion = '23.0.3' + targetSdkVersion = 23 minSdkVersion = 16 versionCode = 28 - versionName = "0.3.2" + versionName = "0.4.8" } From 96d8ccf9c0a5a971b602940b40e7d6ccdb1fe8f8 Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Mon, 23 Oct 2017 13:09:16 +0300 Subject: [PATCH 12/15] Fixed a possible null pointer issue --- .../java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java index 31bcf18..4fd12a4 100644 --- a/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java +++ b/FFmpegAndroid/src/main/java/com/github/hiteshsondhi88/libffmpeg/FFmpeg.java @@ -120,7 +120,10 @@ public String getLibraryFFmpegVersion() { @Override public boolean isFFmpegCommandRunning() { - return ffmpegExecuteAsyncTask != null || !ffmpegExecuteAsyncTask.isProcessCompleted(); + if (ffmpegExecuteAsyncTask == null) + return false; + else + return !ffmpegExecuteAsyncTask.isProcessCompleted(); } @Override From f17033f97f076483bbe040e89659c76df5b57866 Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Mon, 23 Oct 2017 13:11:16 +0300 Subject: [PATCH 13/15] Updated readme for latest release --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cbc68b2..e2228e8 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ allprojects { Add below line to your app's build.gradle dependencies. -`compile 'com.github.diegoperini:ffmpeg-android-java:v0.4.7'` +`compile 'com.github.diegoperini:ffmpeg-android-java:v0.4.9'` ### Applied fixes From abe18ab33365a827b7a59e4132c3a50b098876be Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Thu, 14 Dec 2017 15:55:25 +0200 Subject: [PATCH 14/15] Added deprecation warning to readme --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index e2228e8..645812e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ +!!! Deprecated !!! +=================== + +This project is discontinued. There is a much better [alternative by bravobit](https://github.com/bravobit/FFmpeg-Android) which incorporates good parts of this fork as well as improves existing issues. I'll be keeping a close eye to its issue tracker and contribute there instead. + About the fork =================== ### Installation From 130aa3c90702e2dfa4c4298959fb6b753f8c3a1e Mon Sep 17 00:00:00 2001 From: Diego Perini Date: Thu, 25 Apr 2019 21:30:55 +0300 Subject: [PATCH 15/15] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 645812e..15b76af 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ !!! Deprecated !!! =================== -This project is discontinued. There is a much better [alternative by bravobit](https://github.com/bravobit/FFmpeg-Android) which incorporates good parts of this fork as well as improves existing issues. I'll be keeping a close eye to its issue tracker and contribute there instead. +This project is discontinued. There is a much better [alternative by bravobit](https://github.com/bravobit/FFmpeg-Android) which incorporates good parts of this fork and also attempts to solve some existing issues. I'll be keeping a close eye to its issue tracker and contribute there instead. About the fork ===================