diff options
author | keun-o.park <sahara@ti.com> | 2011-03-30 16:28:00 +0900 |
---|---|---|
committer | keun-o.park <sahara@ti.com> | 2011-03-30 16:35:26 +0900 |
commit | 96b7bc21df23f67372895b6b773c602e6d04f586 (patch) | |
tree | 9377a510bcbade22b29f536e7b0e80cd46f0f2e7 | |
parent | 4a5ac3140b3a3c5236ccd744b956119a947d7190 (diff) | |
download | base-96b7bc21df23f67372895b6b773c602e6d04f586.tar.gz |
OMAP3: SF: Fix the misuse of mLastVideoBuffer in AwesomePlayer
mLastVideoBuffer is not used with OMAP_ENHANCEMENT flag. And,
current code causes a segmentation fault when it tries to access
mLastVideoBuffer which is not initialized at constructor.
This fixes the segmentation fault in suspend function.
Because there's no code for OMAP4, 'if(0) {' routine for OMAP4
was still left unchanged.
Change-Id: Ie2a8abaf3f36a62235be4331956a74737c8aa896
Signed-off-by: keun-o.park <sahara@ti.com>
-rwxr-xr-x | media/libstagefright/AwesomePlayer.cpp | 29 | ||||
-rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 3 |
2 files changed, 25 insertions, 7 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 3d2ac90bbaed..d546872da136 100755 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -790,10 +790,12 @@ void AwesomePlayer::partial_reset_l() { mVideoRenderer.clear(); +#ifndef OMAP_ENHANCEMENT if (mLastVideoBuffer) { mLastVideoBuffer->release(); mLastVideoBuffer = NULL; } +#endif if (mVideoBuffer) { mVideoBuffer->release(); @@ -2286,8 +2288,11 @@ status_t AwesomePlayer::suspend() { #ifdef OMAP_ENHANCEMENT #ifdef TARGET_OMAP4 - if(0) { //FIXME: This caching of last frame crashes in L27x. Not used anyway, but check why. -#else + // FIXME: This caching of last frame crashes in L27x. Not used anyway, but check why. + // This should be removed after fill the code for (mBufferWithRenderer.size() > 0) + if (0) { +#else /* TARGET_OMAP3 */ + // Currently this code is used only by OMAP3. if (mBuffersWithRenderer.size()) { #endif size_t size = mBuffersWithRenderer[0]->range_length(); @@ -2297,18 +2302,30 @@ status_t AwesomePlayer::suspend() { #endif if (size) { int32_t unreadable; - if (!mLastVideoBuffer->meta_data()->findInt32( +#ifdef OMAP_ENHANCEMENT + if (!mBuffersWithRenderer[0]->meta_data()->findInt32( kKeyIsUnreadable, &unreadable) || unreadable == 0) { state->mLastVideoFrameSize = size; state->mLastVideoFrame = malloc(size); -#ifdef OMAP_ENHANCEMENT - memcpy(state->mLastVideoFrame, + +#ifdef TARGET_OMAP4 + // FIXME: here for OMAP4 + // Please fill this part for OMAP4 +#else + memcpy(state->mLastVideoFrame, (const uint8_t *)mBuffersWithRenderer[0]->data() + mBuffersWithRenderer[0]->range_offset(), size); +#endif #else - memcpy(state->mLastVideoFrame, + if (!mLastVideoBuffer->meta_data()->findInt32( + kKeyIsUnreadable, &unreadable) + || unreadable == 0) { + state->mLastVideoFrameSize = size; + state->mLastVideoFrame = malloc(size); + + memcpy(state->mLastVideoFrame, (const uint8_t *)mLastVideoBuffer->data() + mLastVideoBuffer->range_offset(), size); diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index e2bb12f6e931..2eebfaa3e1cf 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -219,8 +219,9 @@ private: bool mIsFirstVideoBuffer; status_t mFirstVideoBufferResult; MediaBuffer *mFirstVideoBuffer; -#endif +#else MediaBuffer *mLastVideoBuffer; +#endif MediaBuffer *mVideoBuffer; sp<NuHTTPDataSource> mConnectingDataSource; |