void InbandTextTrackPrivateGStreamer::notifyTrackOfSample() { Vector<GRefPtr<GstSample> > samples; { MutexLocker lock(m_sampleMutex); m_pendingSamples.swap(samples); } for (size_t i = 0; i < samples.size(); ++i) { 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); 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); continue; } INFO_MEDIA_MESSAGE("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); gst_buffer_unmap(buffer, &info); } }
void PlaybackPipeline::enqueueSample(PassRefPtr<MediaSample> prsample) { RefPtr<MediaSample> rsample = prsample; AtomicString trackId = rsample->trackID(); TRACE_MEDIA_MESSAGE("enqueing sample trackId=%s PTS=%f presentationSize=%.0fx%.0f at %" GST_TIME_FORMAT, trackId.string().utf8().data(), rsample->presentationTime().toFloat(), rsample->presentationSize().width(), rsample->presentationSize().height(), GST_TIME_ARGS(floatToGstClockTime(rsample->presentationTime().toDouble()))); ASSERT(WTF::isMainThread()); GST_OBJECT_LOCK(m_webKitMediaSrc.get()); Stream* stream = getStreamByTrackId(m_webKitMediaSrc.get(), trackId); if (!stream) { WARN_MEDIA_MESSAGE("No stream!"); GST_OBJECT_UNLOCK(m_webKitMediaSrc.get()); return; } GstElement* appsrc = stream->appsrc; GST_OBJECT_UNLOCK(m_webKitMediaSrc.get()); GStreamerMediaSample* sample = static_cast<GStreamerMediaSample*>(rsample.get()); if (sample->sample() && gst_sample_get_buffer(sample->sample())) { GstSample* gstsample = gst_sample_ref(sample->sample()); GST_BUFFER_FLAG_UNSET(gst_sample_get_buffer(gstsample), GST_BUFFER_FLAG_DECODE_ONLY); push_sample(GST_APP_SRC(appsrc), gstsample); // gst_app_src_push_sample() uses transfer-none for gstsample gst_sample_unref(gstsample); } }