summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorLajos Molnar <lajos@google.com>2014-10-10 14:35:16 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-10-10 14:35:16 +0000
commit367272ce53b31a1b0c97df3a6107b75eba4fd9b1 (patch)
treef074a831c650833ab7ddb1e066319bd24a072078 /media
parentdc111e8c85dc3e3db4da7a81b0a6cfae2da05c35 (diff)
parenta4c3d8f0f9aab53b106d95e6139e0465908909f4 (diff)
downloadframeworks_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.cpp24
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.