diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp | 78 |
1 files changed, 27 insertions, 51 deletions
diff --git a/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp index bed10faa7..24e58f160 100644 --- a/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp @@ -39,38 +39,20 @@ GST_DEBUG_CATEGORY_EXTERN(webkit_media_player_debug); namespace WebCore { -static GstPadProbeReturn textTrackPrivateEventCallback(GstPad*, GstPadProbeInfo* info, InbandTextTrackPrivateGStreamer* track) -{ - GstEvent* event = gst_pad_probe_info_get_event(info); - switch (GST_EVENT_TYPE(event)) { - case GST_EVENT_STREAM_START: - track->streamChanged(); - break; - default: - break; - } - return GST_PAD_PROBE_OK; -} - -static gboolean textTrackPrivateSampleTimeoutCallback(InbandTextTrackPrivateGStreamer* track) -{ - track->notifyTrackOfSample(); - return FALSE; -} - -static gboolean textTrackPrivateStreamTimeoutCallback(InbandTextTrackPrivateGStreamer* track) -{ - track->notifyTrackOfStreamChanged(); - return FALSE; -} - InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer(gint index, GRefPtr<GstPad> pad) : InbandTextTrackPrivate(WebVTT), TrackPrivateBaseGStreamer(this, index, pad) - , m_sampleTimerHandler(0) - , m_streamTimerHandler(0) { - m_eventProbe = gst_pad_add_probe(m_pad.get(), GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, - reinterpret_cast<GstPadProbeCallback>(textTrackPrivateEventCallback), this, 0); + m_eventProbe = gst_pad_add_probe(m_pad.get(), GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, [] (GstPad*, GstPadProbeInfo* info, gpointer userData) -> GstPadProbeReturn { + auto* track = static_cast<InbandTextTrackPrivateGStreamer*>(userData); + switch (GST_EVENT_TYPE(gst_pad_probe_info_get_event(info))) { + case GST_EVENT_STREAM_START: + track->streamChanged(); + break; + default: + break; + } + return GST_PAD_PROBE_OK; + }, this, nullptr); notifyTrackOfStreamChanged(); } @@ -82,39 +64,35 @@ void InbandTextTrackPrivateGStreamer::disconnect() gst_pad_remove_probe(m_pad.get(), m_eventProbe); - if (m_streamTimerHandler) - g_source_remove(m_streamTimerHandler); - TrackPrivateBaseGStreamer::disconnect(); } void InbandTextTrackPrivateGStreamer::handleSample(GRefPtr<GstSample> sample) { - if (m_sampleTimerHandler) - g_source_remove(m_sampleTimerHandler); { - MutexLocker lock(m_sampleMutex); + LockHolder lock(m_sampleMutex); m_pendingSamples.append(sample); } - m_sampleTimerHandler = g_timeout_add(0, - reinterpret_cast<GSourceFunc>(textTrackPrivateSampleTimeoutCallback), this); + + RefPtr<InbandTextTrackPrivateGStreamer> protectedThis(this); + m_notifier->notify(MainThreadNotification::NewSample, [protectedThis] { + protectedThis->notifyTrackOfSample(); + }); } void InbandTextTrackPrivateGStreamer::streamChanged() { - if (m_streamTimerHandler) - g_source_remove(m_streamTimerHandler); - m_streamTimerHandler = g_timeout_add(0, - reinterpret_cast<GSourceFunc>(textTrackPrivateStreamTimeoutCallback), this); + RefPtr<InbandTextTrackPrivateGStreamer> protectedThis(this); + m_notifier->notify(MainThreadNotification::StreamChanged, [protectedThis] { + protectedThis->notifyTrackOfStreamChanged(); + }); } void InbandTextTrackPrivateGStreamer::notifyTrackOfSample() { - m_sampleTimerHandler = 0; - Vector<GRefPtr<GstSample> > samples; { - MutexLocker lock(m_sampleMutex); + LockHolder lock(m_sampleMutex); m_pendingSamples.swap(samples); } @@ -122,28 +100,26 @@ void InbandTextTrackPrivateGStreamer::notifyTrackOfSample() GRefPtr<GstSample> sample = samples[i]; GstBuffer* buffer = gst_sample_get_buffer(sample.get()); if (!buffer) { - WARN_MEDIA_MESSAGE("Track %d got sample with no buffer.", m_index); + GST_WARNING("Track %d got sample with no buffer.", m_index); continue; } GstMapInfo info; gboolean ret = gst_buffer_map(buffer, &info, GST_MAP_READ); ASSERT(ret); if (!ret) { - WARN_MEDIA_MESSAGE("Track %d unable to map buffer.", m_index); + GST_WARNING("Track %d unable to map buffer.", m_index); continue; } - INFO_MEDIA_MESSAGE("Track %d parsing sample: %.*s", m_index, static_cast<int>(info.size), + GST_INFO("Track %d parsing sample: %.*s", m_index, static_cast<int>(info.size), reinterpret_cast<char*>(info.data)); - client()->parseWebVTTCueData(this, reinterpret_cast<char*>(info.data), info.size); + client()->parseWebVTTCueData(reinterpret_cast<char*>(info.data), info.size); gst_buffer_unmap(buffer, &info); } } void InbandTextTrackPrivateGStreamer::notifyTrackOfStreamChanged() { - m_streamTimerHandler = 0; - GRefPtr<GstEvent> event = adoptGRef(gst_pad_get_sticky_event(m_pad.get(), GST_EVENT_STREAM_START, 0)); if (!event) @@ -151,7 +127,7 @@ void InbandTextTrackPrivateGStreamer::notifyTrackOfStreamChanged() const gchar* streamId; gst_event_parse_stream_start(event.get(), &streamId); - INFO_MEDIA_MESSAGE("Track %d got stream start for stream %s.", m_index, streamId); + GST_INFO("Track %d got stream start for stream %s.", m_index, streamId); m_streamId = streamId; } |