mozilla-gstreamer-803287.patch
changeset 606 9d39369e1b4c
parent 605 36ec036ad04d
child 607 dfcb6d8fcf5a
--- a/mozilla-gstreamer-803287.patch	Fri Jan 11 15:58:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,293 +0,0 @@
-# HG changeset patch
-# Parent 09328afa274e7cf6354f446ae37735218b796e7f
-# User Wolfgang Rosenauer <wr@rosenauer.org>
-Bug 803287 - Don't use GStreamer (when enabled) for Ogg/WebM if builtin backends present. (TM: 19)
-
-diff --git a/content/base/src/nsContentUtils.cpp b/content/base/src/nsContentUtils.cpp
---- a/content/base/src/nsContentUtils.cpp
-+++ b/content/base/src/nsContentUtils.cpp
-@@ -6676,71 +6676,55 @@ nsContentUtils::FindInternalContentViewe
-       else
-       *aLoaderType = TYPE_UNKNOWN;
-     }
-     return docFactory.forget();
-   }
- 
- #ifdef MOZ_MEDIA
- #ifdef MOZ_OGG
--  if (nsHTMLMediaElement::IsOggEnabled()) {
--    for (unsigned int i = 0; i < ArrayLength(nsHTMLMediaElement::gOggTypes); ++i) {
--      const char* type = nsHTMLMediaElement::gOggTypes[i];
--      if (!strcmp(aType, type)) {
--        docFactory = do_GetService("@mozilla.org/content/document-loader-factory;1");
--        if (docFactory && aLoaderType) {
--          *aLoaderType = TYPE_CONTENT;
--        }
--        return docFactory.forget();
--      }
-+  if (nsHTMLMediaElement::IsOggType(nsDependentCString(aType))) {
-+    docFactory = do_GetService("@mozilla.org/content/document-loader-factory;1");
-+    if (docFactory && aLoaderType) {
-+      *aLoaderType = TYPE_CONTENT;
-     }
-+    return docFactory.forget();
-   }
- #endif
- 
- #ifdef MOZ_WEBM
--  if (nsHTMLMediaElement::IsWebMEnabled()) {
--    for (unsigned int i = 0; i < ArrayLength(nsHTMLMediaElement::gWebMTypes); ++i) {
--      const char* type = nsHTMLMediaElement::gWebMTypes[i];
--      if (!strcmp(aType, type)) {
--        docFactory = do_GetService("@mozilla.org/content/document-loader-factory;1");
--        if (docFactory && aLoaderType) {
--          *aLoaderType = TYPE_CONTENT;
--        }
--        return docFactory.forget();
--      }
-+  if (nsHTMLMediaElement::IsWebMType(nsDependentCString(aType))) {
-+    docFactory = do_GetService("@mozilla.org/content/document-loader-factory;1");
-+    if (docFactory && aLoaderType) {
-+      *aLoaderType = TYPE_CONTENT;
-     }
-+    return docFactory.forget();
-   }
- #endif
- 
- #ifdef MOZ_GSTREAMER
--  if (nsHTMLMediaElement::IsH264Enabled()) {
--    for (unsigned int i = 0; i < ArrayLength(nsHTMLMediaElement::gH264Types); ++i) {
--      const char* type = nsHTMLMediaElement::gH264Types[i];
--      if (!strcmp(aType, type)) {
--        docFactory = do_GetService("@mozilla.org/content/document-loader-factory;1");
--        if (docFactory && aLoaderType) {
--          *aLoaderType = TYPE_CONTENT;
--        }
--        return docFactory.forget();
--      }
-+  if (nsHTMLMediaElement::IsGStreamerSupportedType(nsDependentCString(aType))) {
-+    docFactory = do_GetService("@mozilla.org/content/document-loader-factory;1");
-+    if (docFactory && aLoaderType) {
-+      *aLoaderType = TYPE_CONTENT;
-     }
-+    return docFactory.forget();
-   }
- #endif
- 
- #ifdef MOZ_MEDIA_PLUGINS
-   if (nsHTMLMediaElement::IsMediaPluginsEnabled() &&
-       nsHTMLMediaElement::IsMediaPluginsType(nsDependentCString(aType))) {
-     docFactory = do_GetService("@mozilla.org/content/document-loader-factory;1");
-     if (docFactory && aLoaderType) {
-       *aLoaderType = TYPE_CONTENT;
-     }
-     return docFactory.forget();
-   }
- #endif // MOZ_MEDIA_PLUGINS
--
- #endif // MOZ_MEDIA
- 
-   return NULL;
- }
- 
- // static
- bool
- nsContentUtils::IsPatternMatching(nsAString& aValue, nsAString& aPattern,
-diff --git a/content/html/content/public/nsHTMLMediaElement.h b/content/html/content/public/nsHTMLMediaElement.h
---- a/content/html/content/public/nsHTMLMediaElement.h
-+++ b/content/html/content/public/nsHTMLMediaElement.h
-@@ -303,17 +303,18 @@ public:
- #ifdef MOZ_WEBM
-   static bool IsWebMEnabled();
-   static bool IsWebMType(const nsACString& aType);
-   static const char gWebMTypes[2][11];
-   static char const *const gWebMCodecs[4];
- #endif
- 
- #ifdef MOZ_GSTREAMER
--  static bool IsH264Enabled();
-+  static bool IsGStreamerEnabled();
-+  static bool IsGStreamerSupportedType(const nsACString& aType);
-   static bool IsH264Type(const nsACString& aType);
-   static const char gH264Types[3][16];
-   static char const *const gH264Codecs[7];
- #endif
- 
- #ifdef MOZ_WIDGET_GONK
-   static bool IsOmxEnabled();
-   static bool IsOmxSupportedType(const nsACString& aType);
-diff --git a/content/html/content/src/nsHTMLMediaElement.cpp b/content/html/content/src/nsHTMLMediaElement.cpp
---- a/content/html/content/src/nsHTMLMediaElement.cpp
-+++ b/content/html/content/src/nsHTMLMediaElement.cpp
-@@ -2148,34 +2148,29 @@ char const *const nsHTMLMediaElement::gH
- #ifdef MOZ_GSTREAMER
- const char nsHTMLMediaElement::gH264Types[3][16] = {
-   "video/mp4",
-   "video/3gpp",
-   "video/quicktime",
- };
- 
- bool
--nsHTMLMediaElement::IsH264Enabled()
-+nsHTMLMediaElement::IsGStreamerEnabled()
- {
--  return Preferences::GetBool("media.h264.enabled");
-+  return Preferences::GetBool("media.gstreamer.enabled");
- }
- 
- bool
- nsHTMLMediaElement::IsH264Type(const nsACString& aType)
- {
--  if (!IsH264Enabled()) {
--    return false;
--  }
--
-   for (uint32_t i = 0; i < ArrayLength(gH264Types); ++i) {
-     if (aType.EqualsASCII(gH264Types[i])) {
-       return true;
-     }
-   }
--
-   return false;
- }
- #endif
- 
- #ifdef MOZ_WIDGET_GONK
- const char nsHTMLMediaElement::gOmxTypes[5][16] = {
-   "audio/mpeg",
-   "audio/mp4",
-@@ -2424,34 +2419,63 @@ nsHTMLMediaElement::CanPlayType(const ns
-   default:
-   case CANPLAY_MAYBE:
-     aResult.AssignLiteral("maybe");
-     break;
-   }
-   return NS_OK;
- }
- 
-+#ifdef MOZ_GSTREAMER
-+bool
-+nsHTMLMediaElement::IsGStreamerSupportedType(const nsACString& aMimeType)
-+{
-+  if (!IsGStreamerEnabled())
-+    return false;
-+  if (IsH264Type(aMimeType))
-+    return true;
-+  if (!Preferences::GetBool("media.prefer-gstreamer", false))
-+    return false;
-+#ifdef MOZ_WEBM
-+  if (IsWebMType(aMimeType))
-+    return true;
-+#endif
-+#ifdef MOZ_OGG
-+  if (IsOggType(aMimeType))
-+    return true;
-+#endif
-+  return false;
-+}
-+#endif
-+
- already_AddRefed<nsMediaDecoder>
- nsHTMLMediaElement::CreateDecoder(const nsACString& aType)
- {
-+#ifdef MOZ_GSTREAMER
-+  // When enabled, use GStreamer for H.264, but not for codecs handled by our
-+  // bundled decoders, unless the "media.prefer-gstreamer" pref is set.
-+  if (IsGStreamerSupportedType(aType)) {
-+    nsRefPtr<nsGStreamerDecoder> decoder = new nsGStreamerDecoder();
-+    if (decoder->Init(this)) {
-+      return decoder.forget();
-+    }
-+  }
-+#endif
-+
- #ifdef MOZ_RAW
-   if (IsRawType(aType)) {
-     nsRefPtr<nsRawDecoder> decoder = new nsRawDecoder();
-     if (decoder->Init(this)) {
-       return decoder.forget();
-     }
-   }
- #endif
- #ifdef MOZ_OGG
-   if (IsOggType(aType)) {
--#ifdef MOZ_GSTREAMER 
--    nsRefPtr<nsGStreamerDecoder> decoder = new nsGStreamerDecoder();
--#else
-     nsRefPtr<nsOggDecoder> decoder = new nsOggDecoder();
--#endif
-     if (decoder->Init(this)) {
-       return decoder.forget();
-     }
-   }
- #endif
- #ifdef MOZ_WAVE
-   if (IsWaveType(aType)) {
-     nsRefPtr<nsWaveDecoder> decoder = new nsWaveDecoder();
-@@ -2473,44 +2497,32 @@ nsHTMLMediaElement::CreateDecoder(const 
-     nsRefPtr<nsMediaPluginDecoder> decoder = new nsMediaPluginDecoder(aType);
-     if (decoder->Init(this)) {
-       return decoder.forget();
-     }
-   }
- #endif
- #ifdef MOZ_WEBM
-   if (IsWebMType(aType)) {
--#ifdef MOZ_GSTREAMER 
--    nsRefPtr<nsGStreamerDecoder> decoder = new nsGStreamerDecoder();
--#else
-     nsRefPtr<nsWebMDecoder> decoder = new nsWebMDecoder();
--#endif
-     if (decoder->Init(this)) {
-       return decoder.forget();
-     }
-   }
- #endif
- 
- #ifdef MOZ_DASH
-   if (IsDASHMPDType(aType)) {
-     nsRefPtr<nsDASHDecoder> decoder = new nsDASHDecoder();
-     if (decoder->Init(this)) {
-       return decoder.forget();
-     }
-   }
- #endif
- 
--#ifdef MOZ_GSTREAMER 
--  if (IsH264Type(aType)) {
--    nsRefPtr<nsGStreamerDecoder> decoder = new nsGStreamerDecoder();
--    if (decoder->Init(this)) {
--      return decoder.forget();
--    }
--  }
--#endif
-   return nullptr;
- }
- 
- nsresult nsHTMLMediaElement::InitializeDecoderAsClone(nsMediaDecoder* aOriginal)
- {
-   NS_ASSERTION(mLoadingSrc, "mLoadingSrc must already be set");
-   NS_ASSERTION(mDecoder == nullptr, "Shouldn't have a decoder");
- 
-diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js
---- a/modules/libpref/src/init/all.js
-+++ b/modules/libpref/src/init/all.js
-@@ -164,17 +164,17 @@ pref("media.wave.enabled", true);
- #endif
- #ifdef MOZ_WEBM
- pref("media.webm.enabled", true);
- #endif
- #ifdef MOZ_DASH
- pref("media.dash.enabled", true);
- #endif
- #ifdef MOZ_GSTREAMER
--pref("media.h264.enabled", true);
-+pref("media.gstreamer.enabled", true);
- #endif
- #ifdef MOZ_WEBRTC
- pref("media.navigator.enabled", false);
- pref("media.peerconnection.enabled", false);
- pref("media.navigator.permission.disabled", false);
- #else
- #ifdef ANDROID
- pref("media.navigator.enabled", true);