diff -urNp mozilla-aurora-7f3c5dd8e78f.old/content/html/content/public/nsHTMLMediaElement.h mozilla-aurora-7f3c5dd8e78f/content/html/content/public/nsHTMLMediaElement.h --- mozilla-aurora-7f3c5dd8e78f.old/content/html/content/public/nsHTMLMediaElement.h 2012-06-04 11:37:25.791017257 +0530 +++ mozilla-aurora-7f3c5dd8e78f/content/html/content/public/nsHTMLMediaElement.h 2012-06-04 11:38:22.259014896 +0530 @@ -305,8 +305,10 @@ public: #ifdef MOZ_GSTREAMER static bool IsH264Enabled(); static bool IsH264Type(const nsACString& aType); + static bool IsSupportedAudioType(const nsACString& aType); static const char gH264Types[3][17]; static char const *const gH264Codecs[6]; + static const char gSupportedAudioTypes[2][11]; #endif /** diff -urNp mozilla-aurora-7f3c5dd8e78f.old/content/html/content/src/nsHTMLMediaElement.cpp mozilla-aurora-7f3c5dd8e78f/content/html/content/src/nsHTMLMediaElement.cpp --- mozilla-aurora-7f3c5dd8e78f.old/content/html/content/src/nsHTMLMediaElement.cpp 2012-06-04 11:37:25.834017256 +0530 +++ mozilla-aurora-7f3c5dd8e78f/content/html/content/src/nsHTMLMediaElement.cpp 2012-06-04 11:40:04.358010627 +0530 @@ -1865,6 +1865,11 @@ char const *const nsHTMLMediaElement::gH nsnull }; +const char nsHTMLMediaElement::gSupportedAudioTypes[2][11] = { + "audio/mp4", + "audio/mpeg", +}; + bool nsHTMLMediaElement::IsH264Enabled() { @@ -1886,6 +1891,18 @@ nsHTMLMediaElement::IsH264Type(const nsA return false; } + +bool +nsHTMLMediaElement::IsSupportedAudioType(const nsACString& aType) +{ + for (PRUint32 i = 0; i < ArrayLength(gSupportedAudioTypes); ++i) { + if (aType.EqualsASCII(gSupportedAudioTypes[i])) { + return true; + } + } + + return false; +} #endif /* static */ @@ -1919,6 +1936,11 @@ nsHTMLMediaElement::CanHandleMediaType(c #endif #ifdef MOZ_GSTREAMER + if (IsSupportedAudioType(nsDependentCString(aMIMEType))) { + *aCodecList = NULL; + return CANPLAY_MAYBE; + } + if (IsH264Type(nsDependentCString(aMIMEType))) { *aCodecList = gH264Codecs; return CANPLAY_YES; @@ -1992,7 +2014,8 @@ nsHTMLMediaElement::GetCanPlay(const nsA while (tokenizer.hasMoreTokens()) { const nsSubstring& token = tokenizer.nextToken(); - if (!CodecListContains(supportedCodecs, token)) { + if (supportedCodecs == NULL || + !CodecListContains(supportedCodecs, token)) { // Totally unsupported codec return CANPLAY_NO; }