Merge "Fix 5607624: Native crash in movie studio while previewing the movie" into ics-mr1
diff --git a/lvpp/VideoEditorSRC.cpp b/lvpp/VideoEditorSRC.cpp
index 1ea32ef..364343a 100755
--- a/lvpp/VideoEditorSRC.cpp
+++ b/lvpp/VideoEditorSRC.cpp
@@ -41,6 +41,7 @@
     mBuffer = NULL;
     mLeftover = 0;
     mFormatChanged = false;
+    mStopPending = false;
     mSeekMode = ReadOptions::SEEK_PREVIOUS_SYNC;
 
     // Input Source validation
@@ -127,6 +128,11 @@
         // Resample to target quality
         mResampler->resample(pTmpBuffer, outFrameCnt, this);
 
+        if (mStopPending) {
+            stop();
+            mStopPending = false;
+        }
+
         // Change resampler and retry if format change happened
         if (mFormatChanged) {
             mFormatChanged = false;
@@ -220,7 +226,10 @@
             // EOS or some other error
             if (err != OK) {
                 LOGV("EOS or some err: %d", err);
-                stop();
+                // We cannot call stop() here because stop() will release the
+                // AudioResampler, and we are in a callback of the AudioResampler.
+                // So just remember the fact and let read() call stop().
+                mStopPending = true;
                 return err;
             }
 
diff --git a/lvpp/VideoEditorSRC.h b/lvpp/VideoEditorSRC.h
index a5e8e22..c61b7c1 100755
--- a/lvpp/VideoEditorSRC.h
+++ b/lvpp/VideoEditorSRC.h
@@ -78,6 +78,7 @@
         MediaBuffer* mBuffer;
         int32_t mLeftover;
         bool mFormatChanged;
+        bool mStopPending;
 
         int64_t mInitialTimeStampUs;
         int64_t mAccuOutBufferSize;