Merge "Fix for issue 3366265 : Native crash exporting movie" into honeycomb
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
index c19725c..672ce19 100755
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ b/media/java/android/media/videoeditor/VideoEditorImpl.java
@@ -60,6 +60,11 @@
     final Semaphore mPreviewSemaphore = new Semaphore(1, true);
 
     /*
+     *  Semaphore to control export calls
+     */
+    final Semaphore mExportSemaphore = new Semaphore(1, true);
+
+    /*
      *  XML tags
      */
     private static final String TAG_PROJECT = "project";
@@ -401,8 +406,15 @@
                 throw new IllegalArgumentException("Argument Bitrate incorrect");
         }
 
-        mMANativeHelper.export(filename, mProjectPath, height,bitrate,audioCodec,
+        try {
+            mExportSemaphore.acquire();
+            mMANativeHelper.export(filename, mProjectPath, height,bitrate,audioCodec,
                 videoCodec,mMediaItems, mTransitions, mAudioTracks,listener);
+        } catch (InterruptedException  ex) {
+            Log.e("VideoEditorImpl", "Sem acquire NOT successful in export");
+        } finally {
+            mExportSemaphore.release();
+        }
     }
 
     /*
@@ -466,9 +478,16 @@
                 throw new IllegalArgumentException("Argument Bitrate incorrect");
         }
 
-        mMANativeHelper.export(filename, mProjectPath, height,bitrate,
+        try {
+            mExportSemaphore.acquire();
+            mMANativeHelper.export(filename, mProjectPath, height,bitrate,
                                mMediaItems, mTransitions, mAudioTracks,
                                listener);
+        } catch (InterruptedException  ex) {
+            Log.e("VideoEditorImpl", "Sem acquire NOT successful in export");
+        } finally {
+            mExportSemaphore.release();
+        }
     }
 
     /*
@@ -476,7 +495,7 @@
      */
     public void generatePreview(MediaProcessingProgressListener listener) {
         boolean semAcquireDone = false;
-        try{
+        try {
             mPreviewSemaphore.acquire();
             semAcquireDone = true;
             mMANativeHelper.setGeneratePreview(true);