summaryrefslogtreecommitdiffstats
path: root/libvideoeditor
diff options
context:
space:
mode:
authorChih-Chung Chang <chihchung@google.com>2011-11-15 18:35:24 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-11-15 18:35:24 -0800
commit482cedda9164b9f376dbe47644e33eb07db5b996 (patch)
tree53fcc11f8c0d0fe164fe2de1d9939f23f65d97ec /libvideoeditor
parent72425b1109ddd092048b5280889f972626a61b7e (diff)
parent2db767137112a619751b70b9947aaa064030a210 (diff)
downloadframeworks_av-482cedda9164b9f376dbe47644e33eb07db5b996.zip
frameworks_av-482cedda9164b9f376dbe47644e33eb07db5b996.tar.gz
frameworks_av-482cedda9164b9f376dbe47644e33eb07db5b996.tar.bz2
Merge "Fix 5607624: Native crash in movie studio while previewing the movie" into ics-mr1
Diffstat (limited to 'libvideoeditor')
-rwxr-xr-xlibvideoeditor/lvpp/VideoEditorSRC.cpp11
-rwxr-xr-xlibvideoeditor/lvpp/VideoEditorSRC.h1
2 files changed, 11 insertions, 1 deletions
diff --git a/libvideoeditor/lvpp/VideoEditorSRC.cpp b/libvideoeditor/lvpp/VideoEditorSRC.cpp
index 1ea32ef..364343a 100755
--- a/libvideoeditor/lvpp/VideoEditorSRC.cpp
+++ b/libvideoeditor/lvpp/VideoEditorSRC.cpp
@@ -41,6 +41,7 @@ VideoEditorSRC::VideoEditorSRC(const sp<MediaSource> &source) {
mBuffer = NULL;
mLeftover = 0;
mFormatChanged = false;
+ mStopPending = false;
mSeekMode = ReadOptions::SEEK_PREVIOUS_SYNC;
// Input Source validation
@@ -127,6 +128,11 @@ status_t VideoEditorSRC::read(
// 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 @@ status_t VideoEditorSRC::getNextBuffer(AudioBufferProvider::Buffer *pBuffer) {
// 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/libvideoeditor/lvpp/VideoEditorSRC.h b/libvideoeditor/lvpp/VideoEditorSRC.h
index a5e8e22..c61b7c1 100755
--- a/libvideoeditor/lvpp/VideoEditorSRC.h
+++ b/libvideoeditor/lvpp/VideoEditorSRC.h
@@ -78,6 +78,7 @@ class VideoEditorSRC : public MediaSource , public AudioBufferProvider {
MediaBuffer* mBuffer;
int32_t mLeftover;
bool mFormatChanged;
+ bool mStopPending;
int64_t mInitialTimeStampUs;
int64_t mAccuOutBufferSize;