mozilla-gstreamer.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Mon, 23 Jul 2012 06:33:07 +0200
changeset 512 bab27818f3a5
parent 470 983544dc8af4
child 515 0f6539389500
permissions -rw-r--r--
use gstreamer only for MP4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
470
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     1
# HG changeset patch
512
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
     2
# Parent a9a49c20c491011f981b6c110aadfa6a01a1431e
470
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
# User Wolfgang Rosenauer <wr@rosenauer.org>
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
Bug 761030 - Crash with HTML 5 video with gstreamer enabled (TM: 16)
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
512
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
     6
No Bug - use GStreamer _only_ for MP4 (not WebM/OGG)
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
     7
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
     8
diff --git a/content/html/content/src/nsHTMLMediaElement.cpp b/content/html/content/src/nsHTMLMediaElement.cpp
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
     9
--- a/content/html/content/src/nsHTMLMediaElement.cpp
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    10
+++ b/content/html/content/src/nsHTMLMediaElement.cpp
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    11
@@ -2278,21 +2278,17 @@ nsHTMLMediaElement::CreateDecoder(const 
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    12
     nsRefPtr<nsRawDecoder> decoder = new nsRawDecoder();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    13
     if (decoder->Init(this)) {
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    14
       return decoder.forget();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    15
     }
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    16
   }
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    17
 #endif
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    18
 #ifdef MOZ_OGG
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    19
   if (IsOggType(aType)) {
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    20
-#ifdef MOZ_GSTREAMER 
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    21
-    nsRefPtr<nsGStreamerDecoder> decoder = new nsGStreamerDecoder();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    22
-#else
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    23
     nsRefPtr<nsOggDecoder> decoder = new nsOggDecoder();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    24
-#endif
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    25
     if (decoder->Init(this)) {
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    26
       return decoder.forget();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    27
     }
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    28
   }
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    29
 #endif
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    30
 #ifdef MOZ_WAVE
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    31
   if (IsWaveType(aType)) {
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    32
     nsRefPtr<nsWaveDecoder> decoder = new nsWaveDecoder();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    33
@@ -2306,21 +2302,17 @@ nsHTMLMediaElement::CreateDecoder(const 
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    34
     nsRefPtr<nsMediaPluginDecoder> decoder = new nsMediaPluginDecoder(aType);
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    35
     if (decoder->Init(this)) {
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    36
       return decoder.forget();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    37
     }
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    38
   }
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    39
 #endif
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    40
 #ifdef MOZ_WEBM
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    41
   if (IsWebMType(aType)) {
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    42
-#ifdef MOZ_GSTREAMER 
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    43
-    nsRefPtr<nsGStreamerDecoder> decoder = new nsGStreamerDecoder();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    44
-#else
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    45
     nsRefPtr<nsWebMDecoder> decoder = new nsWebMDecoder();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    46
-#endif
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    47
     if (decoder->Init(this)) {
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    48
       return decoder.forget();
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    49
     }
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    50
   }
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    51
 #endif
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    52
 
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    53
 #ifdef MOZ_GSTREAMER 
bab27818f3a5 use gstreamer only for MP4
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 470
diff changeset
    54
   if (IsH264Type(aType)) {
470
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    55
diff --git a/content/media/gstreamer/nsGStreamerReader.cpp b/content/media/gstreamer/nsGStreamerReader.cpp
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    56
--- a/content/media/gstreamer/nsGStreamerReader.cpp
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    57
+++ b/content/media/gstreamer/nsGStreamerReader.cpp
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    58
@@ -447,16 +447,18 @@ bool nsGStreamerReader::DecodeVideoFrame
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    59
   for(int i = 0; i < 3; i++) {
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    60
     b.mPlanes[i].mData = data + gst_video_format_get_component_offset(format, i,
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    61
         width, height);
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    62
     b.mPlanes[i].mStride = gst_video_format_get_row_stride(format, i, width);
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    63
     b.mPlanes[i].mHeight = gst_video_format_get_component_height(format,
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    64
         i, height);
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    65
     b.mPlanes[i].mWidth = gst_video_format_get_component_width(format,
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    66
         i, width);
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    67
+    b.mPlanes[i].mOffset = 0;
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    68
+    b.mPlanes[i].mSkip = 0;
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    69
   }
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    70
 
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    71
   bool isKeyframe = !GST_BUFFER_FLAG_IS_SET(buffer,
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    72
       GST_BUFFER_FLAG_DELTA_UNIT);
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    73
   /* XXX ? */
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    74
   PRInt64 offset = 0;
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    75
   VideoData *video = VideoData::Create(mInfo,
983544dc8af4 Crash with HTML 5 video with gstreamer enabled (bmo#761030)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    76
                                        mDecoder->GetImageContainer(),