summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-01-29 10:25:01 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-01-29 10:25:01 -0800
commit85fb658b4bcca319f022f34a1de78a9463c9df11 (patch)
tree9175f37336cac3fcec5da3d8c9e8762ea6835de0
parent752b4a3785ef9caffd0cde6f15b9f53aaba26432 (diff)
parent98b48dee325bd22ae73029cd6a42047036ed5ab1 (diff)
downloadframeworks_base-85fb658b4bcca319f022f34a1de78a9463c9df11.zip
frameworks_base-85fb658b4bcca319f022f34a1de78a9463c9df11.tar.gz
frameworks_base-85fb658b4bcca319f022f34a1de78a9463c9df11.tar.bz2
Merge "Make sure the OMX component is synchronously shutdown before we try to instantiate another one. Also properly cleanup the software AVC decoder to avoid leaking memory."
-rw-r--r--media/libstagefright/AwesomePlayer.cpp9
-rw-r--r--media/libstagefright/codecs/avc/dec/AVCDecoder.cpp2
2 files changed, 11 insertions, 0 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index d6db59f..85019aa 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -249,7 +249,16 @@ void AwesomePlayer::reset_l() {
if (mVideoSource != NULL) {
mVideoSource->stop();
+
+ // The following hack is necessary to ensure that the OMX
+ // component is completely released by the time we may try
+ // to instantiate it again.
+ wp<MediaSource> tmp = mVideoSource;
mVideoSource.clear();
+ while (tmp.promote() != NULL) {
+ usleep(1000);
+ }
+ IPCThreadState::self()->flushCommands();
}
mAudioSource.clear();
diff --git a/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp b/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp
index d874224..36272ea 100644
--- a/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp
+++ b/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp
@@ -80,6 +80,8 @@ AVCDecoder::~AVCDecoder() {
stop();
}
+ PVAVCCleanUpDecoder(mHandle);
+
delete mHandle;
mHandle = NULL;
}