static void gst_app_src_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstAppSrc *appsrc = GST_APP_SRC_CAST (object); GstAppSrcPrivate *priv = appsrc->priv; switch (prop_id) { case PROP_CAPS: gst_app_src_set_caps (appsrc, gst_value_get_caps (value)); break; case PROP_SIZE: gst_app_src_set_size (appsrc, g_value_get_int64 (value)); break; case PROP_STREAM_TYPE: gst_app_src_set_stream_type (appsrc, g_value_get_enum (value)); break; case PROP_MAX_BYTES: gst_app_src_set_max_bytes (appsrc, g_value_get_uint64 (value)); break; case PROP_FORMAT: priv->format = g_value_get_enum (value); break; case PROP_BLOCK: priv->block = g_value_get_boolean (value); break; case PROP_IS_LIVE: gst_base_src_set_live (GST_BASE_SRC (appsrc), g_value_get_boolean (value)); break; case PROP_MIN_LATENCY: gst_app_src_set_latencies (appsrc, TRUE, g_value_get_int64 (value), FALSE, -1); break; case PROP_MAX_LATENCY: gst_app_src_set_latencies (appsrc, FALSE, -1, TRUE, g_value_get_int64 (value)); break; case PROP_EMIT_SIGNALS: gst_app_src_set_emit_signals (appsrc, g_value_get_boolean (value)); break; case PROP_MIN_PERCENT: priv->min_percent = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
MediaSourcePrivate::AddStatus PlaybackPipeline::addSourceBuffer(RefPtr<SourceBufferPrivateGStreamer> sourceBufferPrivate) { WebKitMediaSrcPrivate* priv = m_webKitMediaSrc->priv; if (priv->allTracksConfigured) { GST_ERROR_OBJECT(m_webKitMediaSrc.get(), "Adding new source buffers after first data not supported yet"); return MediaSourcePrivate::NotSupported; } GST_DEBUG_OBJECT(m_webKitMediaSrc.get(), "State %d", (int)GST_STATE(m_webKitMediaSrc.get())); GST_OBJECT_LOCK(m_webKitMediaSrc.get()); guint numberOfStreams = g_list_length(priv->streams); GST_OBJECT_UNLOCK(m_webKitMediaSrc.get()); Stream* stream = g_new0(Stream, 1); GUniquePtr<gchar> srcName(g_strdup_printf("src%u", numberOfStreams)); GUniquePtr<gchar> typefindName(g_strdup_printf("typefind%u", numberOfStreams)); stream->parent = m_webKitMediaSrc.get(); stream->appsrc = gst_element_factory_make("appsrc", srcName.get()); stream->appSrcNeedDataFlag = false; stream->sourceBuffer = sourceBufferPrivate.get(); // No track has been attached yet. stream->type = Invalid; stream->parser = nullptr; stream->caps = nullptr; #if ENABLE(VIDEO_TRACK) stream->audioTrack = nullptr; stream->videoTrack = nullptr; #endif stream->presentationSize = WebCore::FloatSize(); gst_app_src_set_callbacks(GST_APP_SRC(stream->appsrc), &appsrcCallbacks, stream->parent, 0); gst_app_src_set_emit_signals(GST_APP_SRC(stream->appsrc), FALSE); gst_app_src_set_stream_type(GST_APP_SRC(stream->appsrc), GST_APP_STREAM_TYPE_SEEKABLE); GST_OBJECT_LOCK(m_webKitMediaSrc.get()); priv->streams = g_list_prepend(priv->streams, stream); GST_OBJECT_UNLOCK(m_webKitMediaSrc.get()); gst_bin_add(GST_BIN(m_webKitMediaSrc.get()), stream->appsrc); gst_element_sync_state_with_parent(stream->appsrc); return MediaSourcePrivate::Ok; }
MediaSourcePrivate::AddStatus PlaybackPipeline::addSourceBuffer(RefPtr<SourceBufferPrivateGStreamer> sourceBufferPrivate) { WebKitMediaSrcPrivate* priv = m_webKitMediaSrc->priv; if (priv->allTracksConfigured) { GST_ERROR_OBJECT(m_webKitMediaSrc.get(), "Adding new source buffers after first data not supported yet"); return MediaSourcePrivate::NotSupported; } GST_DEBUG_OBJECT(m_webKitMediaSrc.get(), "State %d", int(GST_STATE(m_webKitMediaSrc.get()))); Stream* stream = new Stream{ }; stream->parent = m_webKitMediaSrc.get(); stream->appsrc = gst_element_factory_make("appsrc", nullptr); stream->appsrcNeedDataFlag = false; stream->sourceBuffer = sourceBufferPrivate.get(); // No track has been attached yet. stream->type = Invalid; stream->parser = nullptr; stream->caps = nullptr; stream->audioTrack = nullptr; stream->videoTrack = nullptr; stream->presentationSize = WebCore::FloatSize(); stream->lastEnqueuedTime = MediaTime::invalidTime(); gst_app_src_set_callbacks(GST_APP_SRC(stream->appsrc), &enabledAppsrcCallbacks, stream->parent, nullptr); gst_app_src_set_emit_signals(GST_APP_SRC(stream->appsrc), FALSE); gst_app_src_set_stream_type(GST_APP_SRC(stream->appsrc), GST_APP_STREAM_TYPE_SEEKABLE); gst_app_src_set_max_bytes(GST_APP_SRC(stream->appsrc), 2 * WTF::MB); g_object_set(G_OBJECT(stream->appsrc), "block", FALSE, "min-percent", 20, nullptr); GST_OBJECT_LOCK(m_webKitMediaSrc.get()); priv->streams.prepend(stream); GST_OBJECT_UNLOCK(m_webKitMediaSrc.get()); gst_bin_add(GST_BIN(m_webKitMediaSrc.get()), stream->appsrc); gst_element_sync_state_with_parent(stream->appsrc); return MediaSourcePrivate::Ok; }