summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkeun-o.park <sahara@ti.com>2011-03-30 16:28:00 +0900
committerkeun-o.park <sahara@ti.com>2011-03-30 16:35:26 +0900
commit96b7bc21df23f67372895b6b773c602e6d04f586 (patch)
tree9377a510bcbade22b29f536e7b0e80cd46f0f2e7
parent4a5ac3140b3a3c5236ccd744b956119a947d7190 (diff)
downloadbase-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-xmedia/libstagefright/AwesomePlayer.cpp29
-rw-r--r--media/libstagefright/include/AwesomePlayer.h3
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;