summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaghavender Palla <rpalla@google.com>2011-03-22 11:43:14 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-03-22 11:43:14 -0700
commitd2abe6d4b4b5eee7aef725e4fa3a39807ba6dd57 (patch)
tree1eccf25d81e1f6831bd37be4e3a66391f19e1bae
parent61a422a5278107d2ca0027c371aac6110e1e0e65 (diff)
parentfa31daff175709d2c58d61d1354daa9495696631 (diff)
downloadframeworks_av-d2abe6d4b4b5eee7aef725e4fa3a39807ba6dd57.zip
frameworks_av-d2abe6d4b4b5eee7aef725e4fa3a39807ba6dd57.tar.gz
frameworks_av-d2abe6d4b4b5eee7aef725e4fa3a39807ba6dd57.tar.bz2
am 2d449791: Fix for the issue: TestPreviewWithTransition fails (4133108)
* commit '2d44979102ca85d5c4ee68d0388ee2fe37c4ec1a': Fix for the issue: TestPreviewWithTransition fails (4133108)
-rwxr-xr-xlibvideoeditor/lvpp/PreviewPlayer.cpp16
-rwxr-xr-x[-rw-r--r--]libvideoeditor/lvpp/PreviewPlayer.h3
-rwxr-xr-xlibvideoeditor/lvpp/VideoEditorPlayer.cpp10
-rwxr-xr-xlibvideoeditor/lvpp/VideoEditorPlayer.h6
-rwxr-xr-xlibvideoeditor/lvpp/VideoEditorPreviewController.cpp16
5 files changed, 44 insertions, 7 deletions
diff --git a/libvideoeditor/lvpp/PreviewPlayer.cpp b/libvideoeditor/lvpp/PreviewPlayer.cpp
index babe957..8618221 100755
--- a/libvideoeditor/lvpp/PreviewPlayer.cpp
+++ b/libvideoeditor/lvpp/PreviewPlayer.cpp
@@ -594,9 +594,15 @@ void PreviewPlayer::onStreamDone() {
LOGV("MEDIA_PLAYBACK_COMPLETE");
//pause before sending event
pause_l(true /* at eos */);
+
+ //This lock is used to syncronize onStreamDone() in PreviewPlayer and
+ //stopPreview() in PreviewController
+ Mutex::Autolock autoLock(mLockControl);
notifyListener_l(MEDIA_PLAYBACK_COMPLETE);
mFlags |= AT_EOS;
+ LOGV("onStreamDone end");
+ return;
}
}
@@ -1490,6 +1496,16 @@ status_t PreviewPlayer::suspend() {
return OK;
}
+void PreviewPlayer::acquireLock() {
+ LOGV("acquireLock");
+ mLockControl.lock();
+}
+
+void PreviewPlayer::releaseLock() {
+ LOGV("releaseLock");
+ mLockControl.unlock();
+}
+
status_t PreviewPlayer::resume() {
LOGV("resume");
Mutex::Autolock autoLock(mLock);
diff --git a/libvideoeditor/lvpp/PreviewPlayer.h b/libvideoeditor/lvpp/PreviewPlayer.h
index 0800115..b3a32bc 100644..100755
--- a/libvideoeditor/lvpp/PreviewPlayer.h
+++ b/libvideoeditor/lvpp/PreviewPlayer.h
@@ -68,6 +68,8 @@ struct PreviewPlayer : public AwesomePlayer {
status_t suspend();
status_t resume();
+ void acquireLock();
+ void releaseLock();
status_t prepare();
status_t setDataSource(
@@ -202,6 +204,7 @@ private:
bool mIsFiftiesEffectStarted;
int64_t mImageFrameTimeUs;
bool mStartNextPlayer;
+ mutable Mutex mLockControl;
M4VIFI_UInt8* mFrameRGBBuffer;
M4VIFI_UInt8* mFrameYUVBuffer;
diff --git a/libvideoeditor/lvpp/VideoEditorPlayer.cpp b/libvideoeditor/lvpp/VideoEditorPlayer.cpp
index fe99472..fbf005f 100755
--- a/libvideoeditor/lvpp/VideoEditorPlayer.cpp
+++ b/libvideoeditor/lvpp/VideoEditorPlayer.cpp
@@ -178,6 +178,16 @@ status_t VideoEditorPlayer::suspend() {
status_t VideoEditorPlayer::resume() {
LOGV("resume");
return mPlayer->resume();
+}
+
+void VideoEditorPlayer::acquireLock() {
+ LOGV("acquireLock");
+ mPlayer->acquireLock();
+}
+
+void VideoEditorPlayer::releaseLock() {
+ LOGV("releaseLock");
+ mPlayer->releaseLock();
}
status_t VideoEditorPlayer::invoke(const Parcel &request, Parcel *reply) {
diff --git a/libvideoeditor/lvpp/VideoEditorPlayer.h b/libvideoeditor/lvpp/VideoEditorPlayer.h
index 1febef4..6c5ca24 100755
--- a/libvideoeditor/lvpp/VideoEditorPlayer.h
+++ b/libvideoeditor/lvpp/VideoEditorPlayer.h
@@ -116,8 +116,10 @@ public:
virtual status_t invoke(const Parcel &request, Parcel *reply);
virtual void setAudioSink(const sp<AudioSink> &audioSink);
virtual status_t suspend();
- virtual status_t resume();
-
+ virtual status_t resume();
+ virtual void acquireLock();
+ virtual void releaseLock();
+
virtual status_t getMetadata(
const media::Metadata::Filter& ids, Parcel *records);
diff --git a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
index 3e3d161..2e2ae22 100755
--- a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
+++ b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
@@ -681,10 +681,15 @@ M4OSA_UInt32 VideoEditorPreviewController::stopPreview() {
// Return the last rendered frame time stamp
mVePlayer[mActivePlayerIndex]->getLastRenderedTimeMs(&lastRenderedFrameTimeMs);
}
-
- LOGV("stopPreview: clearing mVePlayer");
- mVePlayer[playerInst].clear();
+
+ //This is used to syncronize onStreamDone() in PreviewPlayer and
+ //stopPreview() in PreviewController
+ sp<VideoEditorPlayer> temp = mVePlayer[playerInst];
+ temp->acquireLock();
+ LOGV("stopPreview: clearing mVePlayer");
+ mVePlayer[playerInst].clear();
mVePlayer[playerInst] = NULL;
+ temp->releaseLock();
}
}
LOGV("stopPreview: clear audioSink and audioPlayer");
@@ -1124,7 +1129,7 @@ M4OSA_ERR VideoEditorPreviewController::threadProc(M4OSA_Void* param) {
}
}
LOGV("threadProc: sem wait returned err = 0x%x", err);
- }
+ }
//Always return M4NO_ERROR to ensure the thread keeps running
return M4NO_ERROR;
@@ -1186,7 +1191,8 @@ void VideoEditorPreviewController::notify(
{
Mutex::Autolock autoLock(pController->mLockSem);
if (pController->mSemThreadWait != NULL) {
- M4OSA_semaphorePost(pController->mSemThreadWait);
+ M4OSA_semaphorePost(pController->mSemThreadWait);
+ return;
}
}