Title: [234457] trunk/Source/WebCore
- Revision
- 234457
- Author
- [email protected]
- Date
- 2018-08-01 06:35:38 -0700 (Wed, 01 Aug 2018)
Log Message
[GStreamer] Make sure that first buffer running time is 0 in GStreamerMediaStreamSource
https://bugs.webkit.org/show_bug.cgi?id=188210
This is a live source and the first frame is the beginning of the stream,
but that doesn't mean that the incoming stream from the camera didn't start
before. We need to set a pad offset on each srcpad of the source to compensate
for that. This is the exact same logic as in webrtc GStreamerVideo/Enc/Dec/oder.
Patch by Thibault Saunier <[email protected]> on 2018-08-01
Reviewed by Alejandro G. Castro.
* platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
(WebCore::webkit_media_stream_src_init):
(WebCore::webkitMediaStreamSrcPushVideoSample):
(WebCore::webkitMediaStreamSrcPushAudioSample):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (234456 => 234457)
--- trunk/Source/WebCore/ChangeLog 2018-08-01 12:10:13 UTC (rev 234456)
+++ trunk/Source/WebCore/ChangeLog 2018-08-01 13:35:38 UTC (rev 234457)
@@ -1,3 +1,20 @@
+2018-08-01 Thibault Saunier <[email protected]>
+
+ [GStreamer] Make sure that first buffer running time is 0 in GStreamerMediaStreamSource
+ https://bugs.webkit.org/show_bug.cgi?id=188210
+
+ This is a live source and the first frame is the beginning of the stream,
+ but that doesn't mean that the incoming stream from the camera didn't start
+ before. We need to set a pad offset on each srcpad of the source to compensate
+ for that. This is the exact same logic as in webrtc GStreamerVideo/Enc/Dec/oder.
+
+ Reviewed by Alejandro G. Castro.
+
+ * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
+ (WebCore::webkit_media_stream_src_init):
+ (WebCore::webkitMediaStreamSrcPushVideoSample):
+ (WebCore::webkitMediaStreamSrcPushAudioSample):
+
2018-08-01 Zan Dobersek <[email protected]>
[CoordGraphics] Move CoordinatedBackingStore to WebCore
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp (234456 => 234457)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp 2018-08-01 12:10:13 UTC (rev 234456)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp 2018-08-01 13:35:38 UTC (rev 234457)
@@ -149,7 +149,9 @@
gchar* uri;
GstElement* audioSrc;
+ GstClockTime firstAudioBufferPts;
GstElement* videoSrc;
+ GstClockTime firstFramePts;
std::unique_ptr<WebKitMediaStreamTrackObserver> observer;
String videoTrackID;
@@ -320,6 +322,8 @@
{
self->observer = std::make_unique<WebKitMediaStreamTrackObserver>(self);
self->flowCombiner = gst_flow_combiner_new();
+ self->firstAudioBufferPts = GST_CLOCK_TIME_NONE;
+ self->firstFramePts = GST_CLOCK_TIME_NONE;
}
typedef struct {
@@ -485,14 +489,31 @@
static void webkitMediaStreamSrcPushVideoSample(WebKitMediaStreamSrc* self, GstSample* gstsample)
{
- if (self->videoSrc)
+ if (self->videoSrc) {
+ if (!GST_CLOCK_TIME_IS_VALID(self->firstFramePts)) {
+ auto buffer = gst_sample_get_buffer(gstsample);
+
+ self->firstFramePts = GST_BUFFER_PTS(buffer);
+ auto pad = adoptGRef(gst_element_get_static_pad(self->videoSrc, "src"));
+ gst_pad_set_offset(pad.get(), -self->firstFramePts);
+ }
+
gst_app_src_push_sample(GST_APP_SRC(self->videoSrc), gstsample);
+ }
}
static void webkitMediaStreamSrcPushAudioSample(WebKitMediaStreamSrc* self, GstSample* gstsample)
{
- if (self->audioSrc)
+ if (self->audioSrc) {
+ if (!GST_CLOCK_TIME_IS_VALID(self->firstAudioBufferPts)) {
+ auto buffer = gst_sample_get_buffer(gstsample);
+
+ self->firstAudioBufferPts = GST_BUFFER_PTS(buffer);
+ auto pad = adoptGRef(gst_element_get_static_pad(self->audioSrc, "src"));
+ gst_pad_set_offset(pad.get(), -self->firstAudioBufferPts);
+ }
gst_app_src_push_sample(GST_APP_SRC(self->audioSrc), gstsample);
+ }
}
static void webkitMediaStreamSrcTrackEnded(WebKitMediaStreamSrc* self,
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes