OSDN Git Service

Bug 5544082 Filter out unsupported codecs in OpenSL ES
authorJean-Michel Trivi <jmtrivi@google.com>
Mon, 31 Oct 2011 23:21:49 +0000 (16:21 -0700)
committerJean-Michel Trivi <jmtrivi@google.com>
Mon, 31 Oct 2011 23:48:50 +0000 (16:48 -0700)
When decoding compressed audio data, disregard tracks
 encoded with unsupported codecs.

Change-Id: If0535013990923c6859829106ccf9e92e5856f90

wilhelm/src/android/android_AudioSfDecoder.cpp
wilhelm/src/android/android_AudioSfDecoder.h

index b11c2a7..93d140a 100644 (file)
@@ -237,12 +237,14 @@ void AudioSfDecoder::onPrepare() {
         CHECK(meta->findCString(kKeyMIMEType, &mime));
 
         if (!strncasecmp("audio/", mime, 6)) {
-            audioTrackIndex = i;
+            if (isSupportedCodec(mime)) {
+                audioTrackIndex = i;
 
-            if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_RAW, mime)) {
-                isRawAudio = true;
+                if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_RAW, mime)) {
+                    isRawAudio = true;
+                }
+                break;
             }
-            break;
         }
     }
 
@@ -766,4 +768,17 @@ void AudioSfDecoder::hasNewDecodeParams() {
     updateAudioSink();
 }
 
+static const char* const kUnsupportedCodecs[] = { MEDIA_MIMETYPE_AUDIO_AMR_NB,
+        MEDIA_MIMETYPE_AUDIO_AMR_WB };
+#define NB_UNSUPPORTED_CODECS (sizeof(kUnsupportedCodecs)/sizeof(kUnsupportedCodecs[0]))
+
+bool AudioSfDecoder::isSupportedCodec(const char* mime) {
+    for (unsigned int i = 0 ; i < NB_UNSUPPORTED_CODECS ; i++) {
+        if (!strcasecmp(mime, kUnsupportedCodecs[i])) {
+            return false;
+        }
+    }
+    return true;
+}
+
 } // namespace android
index 336a425..ae8e7f6 100644 (file)
@@ -139,6 +139,8 @@ private:
     // called with a lock on mBufferSourceLock
     void hasNewDecodeParams();
 
+    static bool isSupportedCodec(const char* mime);
+
 private:
     DISALLOW_EVIL_CONSTRUCTORS(AudioSfDecoder);