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-- |
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(), |