OSDN Git Service

fix failure in MediaCodecTest#testException
authorChong Zhang <chz@google.com>
Wed, 10 Sep 2014 17:43:41 +0000 (10:43 -0700)
committerChong Zhang <chz@google.com>
Wed, 10 Sep 2014 18:27:09 +0000 (11:27 -0700)
reset codec after failed configure()
Bug: 17418876

Change-Id: I21ff8a0751dae6a164678015142e11d481403bed

media/libstagefright/MediaCodec.cpp

index fc2dd30..0bfc6e4 100644 (file)
@@ -270,7 +270,20 @@ status_t MediaCodec::configure(
     }
 
     sp<AMessage> response;
-    return PostAndAwaitResponse(msg, &response);
+    status_t err = PostAndAwaitResponse(msg, &response);
+
+    if (err != OK && err != INVALID_OPERATION) {
+        // MediaCodec now set state to UNINITIALIZED upon any fatal error.
+        // To maintain backward-compatibility, do a reset() to put codec
+        // back into INITIALIZED state.
+        // But don't reset if the err is INVALID_OPERATION, which means
+        // the configure failure is due to wrong state.
+
+        ALOGE("configure failed with err 0x%08x, resetting...", err);
+        reset();
+    }
+
+    return err;
 }
 
 status_t MediaCodec::createInputSurface(