am 2723e092: Merge "Better handling of codec initialization failure in the player and thumbnail extractor. Return a runtime error instead of asserting if the software MPEG4/H.263 decoder fails to initialize." into froyo

Merge commit '2723e09229ce916724861ab90b6b8fc7c9ea9f2e' into froyo-plus-aosp

* commit '2723e09229ce916724861ab90b6b8fc7c9ea9f2e':
  Better handling of codec initialization failure in the player and thumbnail extractor. Return a runtime error instead of asserting if the software MPEG4/H.263 decoder fails to initialize.
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp
index 4405da6..b838f32 100644
--- a/cmds/stagefright/stagefright.cpp
+++ b/cmds/stagefright/stagefright.cpp
@@ -75,7 +75,12 @@
         }
     }
 
-    rawSource->start();
+    status_t err = rawSource->start();
+
+    if (err != OK) {
+        fprintf(stderr, "rawSource returned error %d (0x%08x)\n", err, err);
+        return;
+    }
 
     if (gPlaybackAudio) {
         AudioPlayer *player = new AudioPlayer(NULL);
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index f668caa..274dad9 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -822,7 +822,12 @@
         CHECK(mVideoTrack->getFormat()->findInt32(kKeyWidth, &mVideoWidth));
         CHECK(mVideoTrack->getFormat()->findInt32(kKeyHeight, &mVideoHeight));
 
-        mVideoSource->start();
+        status_t err = mVideoSource->start();
+
+        if (err != OK) {
+            mVideoSource.clear();
+            return err;
+        }
     }
 
     return mVideoSource != NULL ? OK : UNKNOWN_ERROR;
diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp
index 2968917..258be74 100644
--- a/media/libstagefright/StagefrightMetadataRetriever.cpp
+++ b/media/libstagefright/StagefrightMetadataRetriever.cpp
@@ -120,7 +120,11 @@
         return NULL;
     }
 
-    decoder->start();
+    status_t err = decoder->start();
+    if (err != OK) {
+        LOGW("OMXCodec::start returned error %d (0x%08x)\n", err, err);
+        return NULL;
+    }
 
     // Read one output buffer, ignore format change notifications
     // and spurious empty buffers.
@@ -134,7 +138,6 @@
     }
 
     MediaBuffer *buffer = NULL;
-    status_t err;
     do {
         if (buffer != NULL) {
             buffer->release();
diff --git a/media/libstagefright/codecs/m4v_h263/dec/M4vH263Decoder.cpp b/media/libstagefright/codecs/m4v_h263/dec/M4vH263Decoder.cpp
index 40009f8..8350f7a 100644
--- a/media/libstagefright/codecs/m4v_h263/dec/M4vH263Decoder.cpp
+++ b/media/libstagefright/codecs/m4v_h263/dec/M4vH263Decoder.cpp
@@ -120,9 +120,16 @@
         vol_size = 0;
 
     }
-    CHECK_EQ(PV_TRUE, PVInitVideoDecoder(
-            mHandle, vol_data, &vol_size, 1, mWidth, mHeight, mode));
+
+    Bool success = PVInitVideoDecoder(
+            mHandle, vol_data, &vol_size, 1, mWidth, mHeight, mode);
     if (vol_data[0]) free(vol_data[0]);
+
+    if (success != PV_TRUE) {
+        LOGW("PVInitVideoDecoder failed. Unsupported content?");
+        return ERROR_UNSUPPORTED;
+    }
+
     MP4DecodingMode actualMode = PVGetDecBitstreamMode(mHandle);
     CHECK_EQ(mode, actualMode);