void PlaybackPipeline::markEndOfStream(MediaSourcePrivate::EndOfStreamStatus) { WebKitMediaSrcPrivate* priv = m_webKitMediaSrc->priv; GST_DEBUG_OBJECT(m_webKitMediaSrc.get(), "Have EOS"); GST_OBJECT_LOCK(m_webKitMediaSrc.get()); bool allTracksConfigured = priv->allTracksConfigured; if (!allTracksConfigured) priv->allTracksConfigured = true; GST_OBJECT_UNLOCK(m_webKitMediaSrc.get()); if (!allTracksConfigured) { gst_element_no_more_pads(GST_ELEMENT(m_webKitMediaSrc.get())); webKitMediaSrcDoAsyncDone(m_webKitMediaSrc.get()); } Vector<GstAppSrc*> appsrcs; GST_OBJECT_LOCK(m_webKitMediaSrc.get()); for (Stream* stream : priv->streams) { if (stream->appsrc) appsrcs.append(GST_APP_SRC(stream->appsrc)); } GST_OBJECT_UNLOCK(m_webKitMediaSrc.get()); for (GstAppSrc* appsrc : appsrcs) gst_app_src_end_of_stream(appsrc); }
void PlaybackPipeline::markEndOfStream(MediaSourcePrivate::EndOfStreamStatus) { WebKitMediaSrcPrivate* priv = m_webKitMediaSrc->priv; GList *l; GST_DEBUG_OBJECT(m_webKitMediaSrc.get(), "Have EOS"); GST_OBJECT_LOCK(m_webKitMediaSrc.get()); bool allTracksConfigured = priv->allTracksConfigured; if (!allTracksConfigured) { priv->allTracksConfigured = true; } GST_OBJECT_UNLOCK(m_webKitMediaSrc.get()); if (!allTracksConfigured) { gst_element_no_more_pads(GST_ELEMENT(m_webKitMediaSrc.get())); webKitMediaSrcDoAsyncDone(m_webKitMediaSrc.get()); } Vector<GstAppSrc*> appSrcs; GST_OBJECT_LOCK(m_webKitMediaSrc.get()); for (l = priv->streams; l; l = l->next) { Stream *stream = static_cast<Stream*>(l->data); if (stream->appsrc) appSrcs.append(GST_APP_SRC(stream->appsrc)); } GST_OBJECT_UNLOCK(m_webKitMediaSrc.get()); for (Vector<GstAppSrc*>::iterator it = appSrcs.begin(); it != appSrcs.end(); ++it) gst_app_src_end_of_stream(*it); }