mozilla-gstreamer-760140.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Tue, 19 Mar 2013 08:20:23 +0100
changeset 634 3fbce5dd16c2
parent 612 3006d73ad2fa
child 637 73640b76d6c3
permissions -rw-r--r--
merge from firefox20
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
     1
# HG changeset patch
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
     2
# Parent 9fe99f8a584f2369a88bfb5281fd6bc95eb2593c
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
Bug 760140 - Query the GstRegistry for the required demuxers/decoders from canPlayType
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
     5
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
     6
diff --git a/content/media/DecoderTraits.cpp b/content/media/DecoderTraits.cpp
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
     7
--- a/content/media/DecoderTraits.cpp
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
     8
+++ b/content/media/DecoderTraits.cpp
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
     9
@@ -7,16 +7,18 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    10
 #include "DecoderTraits.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    11
 #include "MediaDecoder.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    12
 #include "nsCharSeparatedTokenizer.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    13
 #ifdef MOZ_MEDIA_PLUGINS
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    14
 #include "MediaPluginHost.h"
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
 #endif
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    16
 #ifdef MOZ_GSTREAMER
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
 #include "mozilla/Preferences.h"
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    18
+#include "GStreamerDecoder.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    19
+#include "nsXPCOMStrings.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    20
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    21
 #ifdef MOZ_WMF
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    22
 #include "WMFDecoder.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    23
 #endif
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
 
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    25
 namespace mozilla
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    26
 {
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
 
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    28
@@ -137,48 +139,35 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    29
     return false;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    30
   }
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
 
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    32
   return CodecListContains(gWebMTypes, aType);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    33
 }
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
 #endif
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
 
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
 #ifdef MOZ_GSTREAMER
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    37
-static const char* const gH264Types[4] = {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    38
-  "video/mp4",
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    39
-  "video/3gpp",
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    40
-  "video/quicktime",
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    41
-  nullptr
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    42
-};
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    43
-
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    44
 bool
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    45
 DecoderTraits::IsGStreamerSupportedType(const nsACString& aMimeType)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    46
 {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    47
   if (!MediaDecoder::IsGStreamerEnabled())
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    48
     return false;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    49
-  if (IsH264Type(aMimeType))
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    50
+  if (GStreamerDecoder::CanHandleMediaType(aMimeType, nullptr))
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    51
     return true;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    52
   if (!Preferences::GetBool("media.prefer-gstreamer", false))
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    53
     return false;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    54
 #ifdef MOZ_WEBM
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    55
   if (IsWebMType(aMimeType))
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    56
     return true;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    57
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    58
 #ifdef MOZ_OGG
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    59
   if (IsOggType(aMimeType))
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    60
     return true;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    61
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    62
   return false;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    63
 }
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    64
-
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    65
-bool
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    66
-DecoderTraits::IsH264Type(const nsACString& aType)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    67
-{
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    68
-  return CodecListContains(gH264Types, aType);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    69
-}
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    70
 #endif
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    71
 
568
2c74c5927ea2 first working Aurora 18 build
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 541
diff changeset
    72
 #ifdef MOZ_WIDGET_GONK
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    73
 static const char* const gOmxTypes[6] = {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    74
   "audio/mpeg",
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    75
   "audio/mp4",
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    76
   "video/mp4",
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    77
   "video/3gpp",
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    78
@@ -190,19 +179,17 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    79
 DecoderTraits::IsOmxSupportedType(const nsACString& aType)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    80
 {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    81
   if (!MediaDecoder::IsOmxEnabled()) {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    82
     return false;
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    83
   }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    84
 
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    85
   return CodecListContains(gOmxTypes, aType);
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    86
 }
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    87
-#endif
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    88
 
568
2c74c5927ea2 first working Aurora 18 build
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 541
diff changeset
    89
-#if defined(MOZ_GSTREAMER) || defined(MOZ_WIDGET_GONK)
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    90
 static char const *const gH264Codecs[9] = {
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
    91
   "avc1.42E01E",  // H.264 Constrained Baseline Profile Level 3.0
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
    92
   "avc1.42001E",  // H.264 Baseline Profile Level 3.0
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
    93
   "avc1.58A01E",  // H.264 Extended Profile Level 3.0
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
    94
   "avc1.4D401E",  // H.264 Main Profile Level 3.0
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
    95
   "avc1.64001E",  // H.264 High Profile Level 3.0
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
    96
   "avc1.64001F",  // H.264 High Profile Level 3.1
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
    97
   "mp4v.20.3",    // 3GPP
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    98
@@ -303,19 +290,19 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
    99
 #ifdef MOZ_DASH
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   100
   if (IsDASHMPDType(nsDependentCString(aMIMEType))) {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   101
     // DASH manifest uses WebM codecs only.
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   102
     codecList = gWebMCodecs;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   103
     result = CANPLAY_YES;
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   104
   }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   105
 #endif
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   106
 #ifdef MOZ_GSTREAMER
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   107
-  if (IsH264Type(nsDependentCString(aMIMEType))) {
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   108
-    codecList = gH264Codecs;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   109
-    result = CANPLAY_MAYBE;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   110
+  if (GStreamerDecoder::CanHandleMediaType(nsDependentCString(aMIMEType),
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   111
+                                           aHaveRequestedCodecs ? &aRequestedCodecs : nullptr)) {
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   112
+    return CANPLAY_YES;
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   113
   }
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   114
 #endif
568
2c74c5927ea2 first working Aurora 18 build
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 541
diff changeset
   115
 #ifdef MOZ_WIDGET_GONK
2c74c5927ea2 first working Aurora 18 build
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 541
diff changeset
   116
   if (IsOmxSupportedType(nsDependentCString(aMIMEType))) {
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   117
     codecList = gH264Codecs;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   118
     result = CANPLAY_MAYBE;
568
2c74c5927ea2 first working Aurora 18 build
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 541
diff changeset
   119
   }
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   120
 #endif
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   121
@@ -324,17 +311,17 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   122
     result = CANPLAY_MAYBE;
568
2c74c5927ea2 first working Aurora 18 build
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 541
diff changeset
   123
   }
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   124
 #endif
568
2c74c5927ea2 first working Aurora 18 build
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 541
diff changeset
   125
 #ifdef MOZ_MEDIA_PLUGINS
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   126
   if (MediaDecoder::IsMediaPluginsEnabled() &&
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   127
       GetMediaPluginHost()->FindDecoder(nsDependentCString(aMIMEType), &codecList))
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   128
     result = CANPLAY_MAYBE;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   129
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   130
-  if (result == CANPLAY_NO || !aHaveRequestedCodecs) {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   131
+  if (result == CANPLAY_NO || !aHaveRequestedCodecs || !codecList) {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   132
     return result;
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   133
   }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   134
 
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   135
   // See http://www.rfc-editor.org/rfc/rfc4281.txt for the description
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   136
   // of the 'codecs' parameter
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   137
   nsCharSeparatedTokenizer tokenizer(aRequestedCodecs, ',');
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   138
   bool expectMoreTokens = false;
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   139
   while (tokenizer.hasMoreTokens()) {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   140
diff --git a/content/media/DecoderTraits.h b/content/media/DecoderTraits.h
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   141
--- a/content/media/DecoderTraits.h
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   142
+++ b/content/media/DecoderTraits.h
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   143
@@ -49,17 +49,16 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   144
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   145
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   146
 #ifdef MOZ_WEBM
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   147
   static bool IsWebMType(const nsACString& aType);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   148
 #endif
573
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   149
 
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   150
 #ifdef MOZ_GSTREAMER
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   151
   static bool IsGStreamerSupportedType(const nsACString& aType);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   152
-  static bool IsH264Type(const nsACString& aType);
573
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   153
 #endif
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   154
 
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   155
 #ifdef MOZ_WIDGET_GONK
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   156
   static bool IsOmxSupportedType(const nsACString& aType);
573
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   157
 #endif
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   158
 
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   159
 #ifdef MOZ_MEDIA_PLUGINS
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   160
   static bool IsMediaPluginsType(const nsACString& aType);
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   161
diff --git a/content/media/gstreamer/GStreamerDecoder.cpp b/content/media/gstreamer/GStreamerDecoder.cpp
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   162
--- a/content/media/gstreamer/GStreamerDecoder.cpp
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   163
+++ b/content/media/gstreamer/GStreamerDecoder.cpp
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   164
@@ -2,18 +2,26 @@
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   165
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   166
 /* This Source Code Form is subject to the terms of the Mozilla Public
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   167
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   168
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   169
 
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   170
 #include "MediaDecoderStateMachine.h"
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   171
 #include "GStreamerReader.h"
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   172
 #include "GStreamerDecoder.h"
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   173
+#include "GStreamerFormatHelper.h"
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   174
 
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   175
 namespace mozilla {
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   176
 
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   177
 MediaDecoderStateMachine* GStreamerDecoder::CreateStateMachine()
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   178
 {
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   179
   return new MediaDecoderStateMachine(this, new GStreamerReader(this));
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   180
 }
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   181
 
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   182
+bool
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   183
+GStreamerDecoder::CanHandleMediaType(const nsACString& aMIMEType,
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   184
+                                     const nsAString* aCodecs)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   185
+{
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   186
+  return GStreamerFormatHelper::Instance()->CanHandleMediaType(aMIMEType, aCodecs);
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   187
+}
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   188
+
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   189
 } // namespace mozilla
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   190
 
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   191
diff --git a/content/media/gstreamer/GStreamerDecoder.h b/content/media/gstreamer/GStreamerDecoder.h
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   192
--- a/content/media/gstreamer/GStreamerDecoder.h
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   193
+++ b/content/media/gstreamer/GStreamerDecoder.h
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   194
@@ -3,21 +3,23 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   195
 /* This Source Code Form is subject to the terms of the Mozilla Public
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   196
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   197
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   198
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   199
 #if !defined(GStreamerDecoder_h_)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   200
 #define GStreamerDecoder_h_
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   201
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   202
 #include "MediaDecoder.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   203
+#include "nsXPCOMStrings.h"
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   204
 
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   205
 namespace mozilla {
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   206
 
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   207
 class GStreamerDecoder : public MediaDecoder
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   208
 {
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   209
 public:
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   210
   virtual MediaDecoder* Clone() { return new GStreamerDecoder(); }
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   211
   virtual MediaDecoderStateMachine* CreateStateMachine();
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   212
+  static bool CanHandleMediaType(const nsACString& aMIMEType, const nsAString* aCodecs);
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   213
 };
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   214
 
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   215
 } // namespace mozilla
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   216
 
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   217
 #endif
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   218
diff --git a/content/media/gstreamer/GStreamerFormatHelper.cpp b/content/media/gstreamer/GStreamerFormatHelper.cpp
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   219
new file mode 100644
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   220
--- /dev/null
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   221
+++ b/content/media/gstreamer/GStreamerFormatHelper.cpp
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   222
@@ -0,0 +1,159 @@
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   223
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   224
+/* vim:set ts=2 sw=2 sts=2 et cindent: */
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   225
+/* This Source Code Form is subject to the terms of the Mozilla Public
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   226
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   227
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   228
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   229
+#include "GStreamerFormatHelper.h"
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   230
+#include "nsCharSeparatedTokenizer.h"
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   231
+#include "nsXPCOMStrings.h"
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   232
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   233
+#define ENTRY_FORMAT(entry) entry[0]
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   234
+#define ENTRY_CAPS(entry) entry[1]
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   235
+
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   236
+GStreamerFormatHelper* GStreamerFormatHelper::gInstance = nullptr;
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   237
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   238
+GStreamerFormatHelper* GStreamerFormatHelper::Instance() {
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   239
+  if (!gInstance) {
573
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   240
+    gst_init(nullptr, nullptr);
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   241
+    gInstance = new GStreamerFormatHelper();
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   242
+  }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   243
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   244
+  return gInstance;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   245
+}
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   246
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   247
+void GStreamerFormatHelper::Shutdown() {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   248
+  if (gInstance) {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   249
+    delete gInstance;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   250
+    gInstance = nullptr;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   251
+  }
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   252
+}
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   253
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   254
+char const *const GStreamerFormatHelper::mContainers[4][2] = {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   255
+  {"video/mp4", "video/quicktime"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   256
+  {"video/quicktime", "video/quicktime"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   257
+  {"audio/mp4", "audio/mpeg, mpegversion=(int)4"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   258
+  {"audio/mpeg", "audio/mpeg, mpegversion=(int)1"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   259
+};
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   260
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   261
+char const *const GStreamerFormatHelper::mCodecs[8][2] = {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   262
+  {"avc1.42E01E", "video/x-h264"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   263
+  {"avc1.42001E", "video/x-h264"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   264
+  {"avc1.58A01E", "video/x-h264"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   265
+  {"avc1.4D401E", "video/x-h264"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   266
+  {"avc1.64001E", "video/x-h264"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   267
+  {"avc1.64001F", "video/x-h264"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   268
+  {"mp4v.20.3", "video/3gpp"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   269
+  {"mp4a.40.2", "audio/mpeg, mpegversion=(int)4"},
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   270
+};
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   271
+
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   272
+GStreamerFormatHelper::GStreamerFormatHelper()
573
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   273
+  : mFactories(nullptr),
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   274
+    mCookie(static_cast<uint32_t>(-1))
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   275
+{
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   276
+}
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   277
+
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   278
+GStreamerFormatHelper::~GStreamerFormatHelper() {
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   279
+  if (mFactories)
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   280
+    g_list_free(mFactories);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   281
+}
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   282
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   283
+bool GStreamerFormatHelper::CanHandleMediaType(const nsACString& aMIMEType,
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   284
+                                               const nsAString* aCodecs) {
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   285
+  const char *type;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   286
+  NS_CStringGetData(aMIMEType, &type, NULL);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   287
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   288
+  GstCaps* caps = ConvertFormatsToCaps(type, aCodecs);
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   289
+  if (!caps) {
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   290
+    return false;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   291
+  }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   292
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   293
+  bool ret = HaveElementsToProcessCaps(caps);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   294
+  gst_caps_unref(caps);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   295
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   296
+  return ret;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   297
+}
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   298
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   299
+GstCaps* GStreamerFormatHelper::ConvertFormatsToCaps(const char* aMIMEType,
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   300
+                                                     const nsAString* aCodecs) {
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   301
+  unsigned int i;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   302
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   303
+  /* convert aMIMEType to gst container caps */
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   304
+  const char* capsString = nullptr;
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   305
+  for (i = 0; i < G_N_ELEMENTS(mContainers); i++) {
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   306
+    if (!strcmp(ENTRY_FORMAT(mContainers[i]), aMIMEType)) {
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   307
+      capsString = ENTRY_CAPS(mContainers[i]);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   308
+      break;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   309
+    }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   310
+  }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   311
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   312
+  if (!capsString) {
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   313
+    /* we couldn't find any matching caps */
573
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   314
+    return nullptr;
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   315
+  }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   316
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   317
+  GstCaps* caps = gst_caps_from_string(capsString);
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   318
+  /* container only */
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   319
+  if (!aCodecs) {
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   320
+    return caps;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   321
+  }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   322
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   323
+  nsCharSeparatedTokenizer tokenizer(*aCodecs, ',');
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   324
+  while (tokenizer.hasMoreTokens()) {
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   325
+    const nsSubstring& codec = tokenizer.nextToken();
573
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   326
+    capsString = nullptr;
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   327
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   328
+    for (i = 0; i < G_N_ELEMENTS(mCodecs); i++) {
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   329
+      if (codec.EqualsASCII(ENTRY_FORMAT(mCodecs[i]))) {
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   330
+        capsString = ENTRY_CAPS(mCodecs[i]);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   331
+        break;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   332
+      }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   333
+    }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   334
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   335
+    if (!capsString) {
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   336
+      gst_caps_unref(caps);
573
71cf05d3ee57 added mozilla-gstreamer-803287.patch (TM: mozilla19) as replacement for mozilla-gstreamer.patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 568
diff changeset
   337
+      return nullptr;
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   338
+    }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   339
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   340
+    GstCaps* tmp = gst_caps_from_string(capsString);
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   341
+    /* appends and frees tmp */
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   342
+    gst_caps_append(caps, tmp);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   343
+  }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   344
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   345
+  return caps;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   346
+}
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   347
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   348
+bool GStreamerFormatHelper::HaveElementsToProcessCaps(GstCaps* aCaps) {
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   349
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   350
+  GList* factories = GetFactories();
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   351
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   352
+  GList* list;
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   353
+  /* here aCaps contains [containerCaps, [codecCaps1, [codecCaps2, ...]]] so process
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   354
+   * caps structures individually as we want one element for _each_
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   355
+   * structure */
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   356
+  for (unsigned int i = 0; i < gst_caps_get_size(aCaps); i++) {
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   357
+    GstStructure* s = gst_caps_get_structure(aCaps, i);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   358
+    GstCaps* caps = gst_caps_new_full(gst_structure_copy(s), nullptr);
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   359
+    list = gst_element_factory_list_filter (factories, caps, GST_PAD_SINK, FALSE);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   360
+    gst_caps_unref(caps);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   361
+    if (!list) {
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   362
+      return false;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   363
+    }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   364
+    g_list_free(list);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   365
+  }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   366
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   367
+  return true;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   368
+}
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   369
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   370
+GList* GStreamerFormatHelper::GetFactories() {
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   371
+  uint32_t cookie = gst_default_registry_get_feature_list_cookie ();
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   372
+  if (cookie != mCookie) {
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   373
+    g_list_free(mFactories);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   374
+    mFactories = gst_element_factory_list_get_elements
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   375
+        (GST_ELEMENT_FACTORY_TYPE_DEMUXER | GST_ELEMENT_FACTORY_TYPE_DECODER,
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   376
+         GST_RANK_MARGINAL);
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   377
+    mCookie = cookie;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   378
+  }
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   379
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   380
+  return mFactories;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   381
+}
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   382
diff --git a/content/media/gstreamer/GStreamerFormatHelper.h b/content/media/gstreamer/GStreamerFormatHelper.h
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   383
new file mode 100644
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   384
--- /dev/null
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   385
+++ b/content/media/gstreamer/GStreamerFormatHelper.h
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   386
@@ -0,0 +1,60 @@
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   387
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   388
+/* vim:set ts=2 sw=2 sts=2 et cindent: */
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   389
+/* This Source Code Form is subject to the terms of the Mozilla Public
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   390
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   391
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   392
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   393
+#if !defined(GStreamerFormatHelper_h_)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   394
+#define GStreamerFormatHelper_h_
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   395
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   396
+#include <gst/gst.h>
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   397
+#include <mozilla/Types.h>
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   398
+#include "nsXPCOMStrings.h"
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   399
+
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   400
+class GStreamerFormatHelper {
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   401
+  /* This class can be used to query the GStreamer registry for the required
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   402
+   * demuxers/decoders from nsHTMLMediaElement::CanPlayType.
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   403
+   * It implements looking at the GstRegistry to check if elements to
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   404
+   * demux/decode the formats passed to CanPlayType() are actually installed.
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   405
+   */
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   406
+  public:
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   407
+    static GStreamerFormatHelper* Instance();
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   408
+    ~GStreamerFormatHelper();
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   409
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   410
+    bool CanHandleMediaType(const nsACString& aMIMEType,
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   411
+                            const nsAString* aCodecs);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   412
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   413
+   static void Shutdown();
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   414
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   415
+  private:
606
9d39369e1b4c FF19beta cycle preparation (does not build yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 573
diff changeset
   416
+    GStreamerFormatHelper();
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   417
+    GstCaps* ConvertFormatsToCaps(const char* aMIMEType,
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   418
+                                  const nsAString* aCodecs);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   419
+    char* const *CodecListFromCaps(GstCaps* aCaps);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   420
+    bool HaveElementsToProcessCaps(GstCaps* aCaps);
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   421
+    GList* GetFactories();
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   422
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   423
+    static GStreamerFormatHelper* gInstance;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   424
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   425
+    /* table to convert from container MIME types to GStreamer elements */
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   426
+    static char const *const mContainers[4][2];
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   427
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   428
+    /* table to convert from codec MIME types to GStreamer elements */
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   429
+    static char const *const mCodecs[8][2];
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   430
+
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   431
+    /* list of GStreamer element factories
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   432
+     * Element factories are the basic types retrieved from the GStreamer
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   433
+     * registry, they describe all plugins and elements that GStreamer can
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   434
+     * create.
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   435
+     * This means that element factories are useful for automated element
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   436
+     * instancing, such as what autopluggers do,
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   437
+     * and for creating lists of available elements. */
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   438
+    GList* mFactories;
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   439
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   440
+    /* Storage for the default registrys feature list cookie.
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   441
+     * It changes every time a feature is added to or removed from the
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   442
+     * GStreamer registry. */
529
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   443
+    uint32_t mCookie;
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   444
+};
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   445
+
4812378b5646 import GStreamer improvement from bmo#760140 (support mpeg audio)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   446
+#endif
612
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   447
diff --git a/content/media/gstreamer/Makefile.in b/content/media/gstreamer/Makefile.in
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   448
--- a/content/media/gstreamer/Makefile.in
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   449
+++ b/content/media/gstreamer/Makefile.in
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   450
@@ -13,21 +13,23 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   451
 MODULE		= content
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   452
 LIBRARY_NAME	= gkcongstreamer_s
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   453
 LIBXUL_LIBRARY 	= 1
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   454
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   455
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   456
 EXPORTS		+= \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   457
 		GStreamerDecoder.h \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   458
 		GStreamerReader.h \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   459
+		GStreamerFormatHelper.h \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   460
 		$(NULL)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   461
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   462
 CPPSRCS		= \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   463
 		GStreamerReader.cpp \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   464
 		GStreamerDecoder.cpp \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   465
+		GStreamerFormatHelper.cpp \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   466
 		$(NULL)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   467
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   468
 FORCE_STATIC_LIB = 1
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   469
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   470
 include $(topsrcdir)/config/rules.mk
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   471
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   472
 CFLAGS		+= $(GSTREAMER_CFLAGS)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   473
 CXXFLAGS	+= $(GSTREAMER_CFLAGS)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   474
diff --git a/layout/build/Makefile.in b/layout/build/Makefile.in
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   475
--- a/layout/build/Makefile.in
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   476
+++ b/layout/build/Makefile.in
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   477
@@ -316,16 +316,20 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   478
 		   -I$(topsrcdir)/js/xpconnect/loader \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   479
 		   -I$(topsrcdir)/caps/include \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   480
 		   -I$(topsrcdir)/netwerk/base/src \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   481
 		   -I$(topsrcdir)/content/svg/content/src \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   482
 		   -I$(topsrcdir)/extensions/cookie \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   483
 		   -I$(topsrcdir)/netwerk/cookie \
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   484
 		   $(NULL)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   485
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   486
+ifdef MOZ_GSTREAMER
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   487
+LOCAL_INCLUDES	+= $(GSTREAMER_CFLAGS)
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   488
+endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   489
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   490
 ifdef MOZ_B2G_RIL #{
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   491
 LOCAL_INCLUDES	+= -I$(topsrcdir)/dom/system/gonk
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   492
 endif #}
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   493
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   494
 ifdef MOZ_B2G_FM #{
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   495
 LOCAL_INCLUDES	+= -I$(topsrcdir)/dom/fm
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   496
 endif #}
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   497
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   498
diff --git a/layout/build/nsLayoutStatics.cpp b/layout/build/nsLayoutStatics.cpp
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   499
--- a/layout/build/nsLayoutStatics.cpp
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   500
+++ b/layout/build/nsLayoutStatics.cpp
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   501
@@ -78,16 +78,20 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   502
 #ifdef MOZ_MEDIA_PLUGINS
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   503
 #include "MediaPluginHost.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   504
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   505
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   506
 #ifdef MOZ_WMF
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   507
 #include "WMFDecoder.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   508
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   509
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   510
+#ifdef MOZ_GSTREAMER
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   511
+#include "GStreamerFormatHelper.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   512
+#endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   513
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   514
 #ifdef MOZ_SYDNEYAUDIO
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   515
 #include "AudioStream.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   516
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   517
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   518
 #include "nsError.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   519
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   520
 #include "nsCycleCollector.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   521
 #include "nsJSEnvironment.h"
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   522
@@ -336,16 +340,20 @@
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   523
   nsXBLService::Shutdown();
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   524
   nsAutoCopyListener::Shutdown();
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   525
   FrameLayerBuilder::Shutdown();
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   526
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   527
 #ifdef MOZ_MEDIA_PLUGINS
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   528
   MediaPluginHost::Shutdown();
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   529
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   530
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   531
+#ifdef MOZ_GSTREAMER
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   532
+  GStreamerFormatHelper::Shutdown();
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   533
+#endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   534
+
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   535
 #ifdef MOZ_SYDNEYAUDIO
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   536
   AudioStream::ShutdownLibrary();
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   537
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   538
 
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   539
 #ifdef MOZ_WMF
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   540
   WMFDecoder::UnloadDLLs();
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   541
 #endif
3006d73ad2fa move on to Aurora 20
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 606
diff changeset
   542