diff options
author | Lajos Molnar <lajos@google.com> | 2014-10-10 14:35:16 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-10-10 14:35:16 +0000 |
commit | 367272ce53b31a1b0c97df3a6107b75eba4fd9b1 (patch) | |
tree | f074a831c650833ab7ddb1e066319bd24a072078 /media | |
parent | dc111e8c85dc3e3db4da7a81b0a6cfae2da05c35 (diff) | |
parent | a4c3d8f0f9aab53b106d95e6139e0465908909f4 (diff) | |
download | frameworks_av-367272ce53b31a1b0c97df3a6107b75eba4fd9b1.zip frameworks_av-367272ce53b31a1b0c97df3a6107b75eba4fd9b1.tar.gz frameworks_av-367272ce53b31a1b0c97df3a6107b75eba4fd9b1.tar.bz2 |
am a4c3d8f0: Merge "MediaCodec: fix onError and onInputBufferAvailable" into lmp-dev
* commit 'a4c3d8f0f9aab53b106d95e6139e0465908909f4':
MediaCodec: fix onError and onInputBufferAvailable
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/MediaCodec.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index b568063..5f55484 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -780,7 +780,9 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { // STOPPING->UNINITIALIZED, instead of the // usual STOPPING->INITIALIZED state. setState(UNINITIALIZED); - + if (mState == RELEASING) { + mComponentName.clear(); + } (new AMessage)->postReply(mReplyID); } break; @@ -1046,7 +1048,9 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { } if (mFlags & kFlagIsAsync) { - onInputBufferAvailable(); + if (!mHaveInputSurface) { + onInputBufferAvailable(); + } } else if (mFlags & kFlagDequeueInputPending) { CHECK(handleDequeueInputBuffer(mDequeueInputReplyID)); @@ -1130,6 +1134,7 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { } else { CHECK_EQ(mState, RELEASING); setState(UNINITIALIZED); + mComponentName.clear(); } (new AMessage)->postReply(mReplyID); @@ -1339,12 +1344,12 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { // after stop() returned, it would be safe to call release() // and it should be in this case, no harm to allow a release() // if we're already uninitialized. - // Similarly stopping a stopped MediaCodec should be benign. sp<AMessage> response = new AMessage; - response->setInt32( - "err", - mState == targetState ? OK : INVALID_OPERATION); - + status_t err = mState == targetState ? OK : INVALID_OPERATION; + response->setInt32("err", err); + if (err == OK && targetState == UNINITIALIZED) { + mComponentName.clear(); + } response->postReply(replyID); break; } @@ -1353,6 +1358,9 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { // It's dead, Jim. Don't expect initiateShutdown to yield // any useful results now... setState(UNINITIALIZED); + if (targetState == UNINITIALIZED) { + mComponentName.clear(); + } (new AMessage)->postReply(replyID); break; } @@ -1745,8 +1753,6 @@ void MediaCodec::setState(State newState) { // return any straggling buffers, e.g. if we got here on an error returnBuffersToCodec(); - mComponentName.clear(); - // The component is gone, mediaserver's probably back up already // but should definitely be back up should we try to instantiate // another component.. and the cycle continues. |