diff options
| author | Andreas Huber <andih@google.com> | 2010-01-29 10:25:01 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-01-29 10:25:01 -0800 |
| commit | 85fb658b4bcca319f022f34a1de78a9463c9df11 (patch) | |
| tree | 9175f37336cac3fcec5da3d8c9e8762ea6835de0 | |
| parent | 752b4a3785ef9caffd0cde6f15b9f53aaba26432 (diff) | |
| parent | 98b48dee325bd22ae73029cd6a42047036ed5ab1 (diff) | |
| download | frameworks_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.cpp | 9 | ||||
| -rw-r--r-- | media/libstagefright/codecs/avc/dec/AVCDecoder.cpp | 2 |
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; } |
