diff options
author | Raghavender Palla <rpalla@google.com> | 2011-03-22 11:43:14 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-03-22 11:43:14 -0700 |
commit | d2abe6d4b4b5eee7aef725e4fa3a39807ba6dd57 (patch) | |
tree | 1eccf25d81e1f6831bd37be4e3a66391f19e1bae | |
parent | 61a422a5278107d2ca0027c371aac6110e1e0e65 (diff) | |
parent | fa31daff175709d2c58d61d1354daa9495696631 (diff) | |
download | frameworks_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-x | libvideoeditor/lvpp/PreviewPlayer.cpp | 16 | ||||
-rwxr-xr-x[-rw-r--r--] | libvideoeditor/lvpp/PreviewPlayer.h | 3 | ||||
-rwxr-xr-x | libvideoeditor/lvpp/VideoEditorPlayer.cpp | 10 | ||||
-rwxr-xr-x | libvideoeditor/lvpp/VideoEditorPlayer.h | 6 | ||||
-rwxr-xr-x | libvideoeditor/lvpp/VideoEditorPreviewController.cpp | 16 |
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; }
}
|