summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRajneesh Chowdury <rajneeshc@google.com>2011-02-27 17:56:58 -0800
committerRajneesh Chowdury <rajneeshc@google.com>2011-02-28 18:32:13 -0800
commitbdc9420c228e0c5d4da51eaca3cdbd8db5a5c413 (patch)
tree53095265a5858828a58b4ba7222ed4036ec24917
parentc3fa37a806d9687b7e3b6a1afd18a6503c43c912 (diff)
downloadframeworks_av-bdc9420c228e0c5d4da51eaca3cdbd8db5a5c413.zip
frameworks_av-bdc9420c228e0c5d4da51eaca3cdbd8db5a5c413.tar.gz
frameworks_av-bdc9420c228e0c5d4da51eaca3cdbd8db5a5c413.tar.bz2
Adapt to changes in AwesomePlayer for Honeycomb branch - DO NOT MERGE
Bug - 3497783 Change-Id: I26eee1538d1f2f86476b115c9e7df85fadd796dd
-rw-r--r--libvideoeditor/lvpp/PreviewPlayer.cpp146
-rw-r--r--libvideoeditor/lvpp/PreviewPlayer.h2
2 files changed, 107 insertions, 41 deletions
diff --git a/libvideoeditor/lvpp/PreviewPlayer.cpp b/libvideoeditor/lvpp/PreviewPlayer.cpp
index 360206e..f26a18c 100644
--- a/libvideoeditor/lvpp/PreviewPlayer.cpp
+++ b/libvideoeditor/lvpp/PreviewPlayer.cpp
@@ -192,6 +192,7 @@ PreviewPlayer::PreviewPlayer()
mProgressCbInterval = 0;
mNumberDecVideoFrames = 0;
mOverlayUpdateEventPosted = false;
+ mVeAudioPlayer = NULL;
mVideoEvent = new PreviewPlayerEvent(this, &PreviewPlayer::onVideoEvent);
mVideoEventPending = false;
@@ -472,7 +473,7 @@ status_t PreviewPlayer::play() {
}
status_t PreviewPlayer::play_l() {
-VideoEditorAudioPlayer *mVePlayer;
+
if (mFlags & PLAYING) {
return OK;
}
@@ -496,44 +497,42 @@ VideoEditorAudioPlayer *mVePlayer;
if (mAudioSink != NULL) {
mAudioPlayer = new VideoEditorAudioPlayer(mAudioSink, this);
- mVePlayer =
+ mVeAudioPlayer =
(VideoEditorAudioPlayer*)mAudioPlayer;
mAudioPlayer->setSource(mAudioSource);
- mVePlayer->setAudioMixSettings(
+ mVeAudioPlayer->setAudioMixSettings(
mPreviewPlayerAudioMixSettings);
- mVePlayer->setAudioMixPCMFileHandle(
+ mVeAudioPlayer->setAudioMixPCMFileHandle(
mAudioMixPCMFileHandle);
- mVePlayer->setAudioMixStoryBoardSkimTimeStamp(
+ mVeAudioPlayer->setAudioMixStoryBoardSkimTimeStamp(
mAudioMixStoryBoardTS, mCurrentMediaBeginCutTime,
mCurrentMediaVolumeValue);
- // We've already started the MediaSource in order to enable
- // the prefetcher to read its data.
- status_t err = mVePlayer->start(
- true /* sourceAlreadyStarted */);
-
- if (err != OK) {
- delete mAudioPlayer;
- mAudioPlayer = NULL;
-
- mFlags &= ~(PLAYING | FIRST_FRAME);
- return err;
- }
-
- mTimeSource = mVePlayer; //mAudioPlayer;
+ mTimeSource = mVeAudioPlayer;
deferredAudioSeek = true;
mWatchForAudioSeekComplete = false;
mWatchForAudioEOS = true;
}
- } else {
- mVePlayer->resume();
}
+ CHECK(!(mFlags & AUDIO_RUNNING));
+
+ if (mVideoSource == NULL) {
+ status_t err = startAudioPlayer_l();
+
+ if (err != OK) {
+ delete mAudioPlayer;
+ mAudioPlayer = NULL;
+ mVeAudioPlayer = NULL;
+ mFlags &= ~(PLAYING | FIRST_FRAME);
+ return err;
+ }
+ }
}
if (mTimeSource == NULL && mAudioPlayer == NULL) {
@@ -569,6 +568,35 @@ VideoEditorAudioPlayer *mVePlayer;
return OK;
}
+status_t PreviewPlayer::startAudioPlayer_l() {
+ CHECK(!(mFlags & AUDIO_RUNNING));
+
+ if (mAudioSource == NULL || mAudioPlayer == NULL) {
+ return OK;
+ }
+
+ if (!(mFlags & AUDIOPLAYER_STARTED)) {
+ mFlags |= AUDIOPLAYER_STARTED;
+
+ // We've already started the MediaSource in order to enable
+ // the prefetcher to read its data.
+ status_t err = mVeAudioPlayer->start(
+ true /* sourceAlreadyStarted */);
+
+ if (err != OK) {
+ notifyListener_l(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, err);
+ return err;
+ }
+ } else {
+ mVeAudioPlayer->resume();
+ }
+
+ mFlags |= AUDIO_RUNNING;
+
+ mWatchForAudioEOS = true;
+
+ return OK;
+}
status_t PreviewPlayer::initRenderer_l() {
if (mSurface != NULL || mISurface != NULL) {
@@ -746,7 +774,7 @@ void PreviewPlayer::onVideoEvent() {
}
- if(mAudioSource != NULL) {
+ if(mSeeking == SEEK && mAudioSource != NULL) {
// We're going to seek the video source first, followed by
// the audio source.
@@ -756,8 +784,9 @@ void PreviewPlayer::onVideoEvent() {
// locations, we'll "pause" the audio source, causing it to
// stop reading input data until a subsequent seek.
- if (mAudioPlayer != NULL) {
+ if (mAudioPlayer != NULL && (mFlags & AUDIO_RUNNING)) {
mAudioPlayer->pause();
+ mFlags &= ~AUDIO_RUNNING;
}
mAudioSource->pause();
}
@@ -770,7 +799,10 @@ void PreviewPlayer::onVideoEvent() {
mSeekTimeUs / 1E6);
options.setSeekTo(
- mSeekTimeUs, MediaSource::ReadOptions::SEEK_CLOSEST);
+ mSeekTimeUs,
+ mSeeking == SEEK_VIDEO_ONLY
+ ? MediaSource::ReadOptions::SEEK_NEXT_SYNC
+ : MediaSource::ReadOptions::SEEK_CLOSEST);
}
for (;;) {
status_t err = mVideoSource->read(&mVideoBuffer, &options);
@@ -861,6 +893,14 @@ void PreviewPlayer::onVideoEvent() {
SeekType wasSeeking = mSeeking;
finishSeekIfNecessary(timeUs);
+ if (mAudioPlayer != NULL && !(mFlags & AUDIO_RUNNING)) {
+ status_t err = startAudioPlayer_l();
+ if (err != OK) {
+ LOGE("Startung the audio player failed w/ err %d", err);
+ return;
+ }
+ }
+
TimeSource *ts = (mFlags & AUDIO_AT_EOS) ? &mSystemTimeSource : mTimeSource;
if(ts == NULL) {
@@ -886,31 +926,55 @@ void PreviewPlayer::onVideoEvent() {
int64_t latenessUs = nowUs - timeUs;
- if (wasSeeking != NO_SEEK) {
- // Let's display the first frame after seeking right away.
- latenessUs = 0;
- }
LOGV("Audio time stamp = %lld and video time stamp = %lld",
ts->getRealTimeUs(),timeUs);
- if (latenessUs > 40000) {
- // We're more than 40ms late.
- LOGV("LV PLAYER we're late by %lld us (%.2f secs)",
+ if (wasSeeking == SEEK_VIDEO_ONLY) {
+ if (latenessUs > 0) {
+ LOGV("after SEEK_VIDEO_ONLY we're late by %.2f secs", latenessUs / 1E6);
+ }
+ }
+ if (wasSeeking == NO_SEEK) {
+
+ if (latenessUs > 500000ll
+ && mRTSPController == NULL
+ && mAudioPlayer != NULL
+ && mAudioPlayer->getMediaTimeMapping(
+ &realTimeUs, &mediaTimeUs)) {
+ LOGV("we're much too late (%.2f secs), video skipping ahead",
+ latenessUs / 1E6);
+
+ mVideoBuffer->release();
+ mVideoBuffer = NULL;
+
+ mSeeking = SEEK_VIDEO_ONLY;
+ mSeekTimeUs = mediaTimeUs;
+
+ postVideoEvent_l();
+ return;
+ }
+
+ if (latenessUs > 40000) {
+ // We're more than 40ms late.
+
+ LOGV("LV PLAYER we're late by %lld us (%.2f secs)",
latenessUs, latenessUs / 1E6);
- mVideoBuffer->release();
- mVideoBuffer = NULL;
- postVideoEvent_l(0);
- return;
- }
+ mVideoBuffer->release();
+ mVideoBuffer = NULL;
+ postVideoEvent_l(0);
+ return;
+ }
- if (latenessUs < -25000) {
- // We're more than 25ms early.
- LOGV("We're more than 25ms early, lateness %lld", latenessUs);
+ if (latenessUs < -25000) {
+ // We're more than 25ms early.
+ LOGV("We're more than 25ms early, lateness %lld", latenessUs);
- postVideoEvent_l(25000);
- return;
+ postVideoEvent_l(25000);
+ return;
+ }
}
+
}
if (mVideoRendererIsPreview || mVideoRenderer == NULL) {
diff --git a/libvideoeditor/lvpp/PreviewPlayer.h b/libvideoeditor/lvpp/PreviewPlayer.h
index 564c014..5382698 100644
--- a/libvideoeditor/lvpp/PreviewPlayer.h
+++ b/libvideoeditor/lvpp/PreviewPlayer.h
@@ -128,6 +128,7 @@ private:
static bool ContinuePreparation(void *cookie);
void onPrepareAsyncEvent();
void finishAsyncPrepare_l();
+ status_t startAudioPlayer_l();
sp<PreviewPlayerRenderer> mVideoRenderer;
@@ -202,6 +203,7 @@ private:
M4VIFI_UInt8* mFrameRGBBuffer;
M4VIFI_UInt8* mFrameYUVBuffer;
+ VideoEditorAudioPlayer *mVeAudioPlayer;
void setVideoPostProcessingNode(
M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable);