summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp')
-rw-r--r--Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp78
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;
}