static void default_configure (GstRTSPMediaFactory * factory, GstRTSPMedia * media) { gboolean shared, eos_shutdown; guint size; GstRTSPAuth *auth; GstRTSPLowerTrans protocols; gchar *mc; /* configure the sharedness */ GST_RTSP_MEDIA_FACTORY_LOCK (factory); shared = factory->shared; eos_shutdown = factory->eos_shutdown; size = factory->buffer_size; protocols = factory->protocols; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); gst_rtsp_media_set_shared (media, shared); gst_rtsp_media_set_eos_shutdown (media, eos_shutdown); gst_rtsp_media_set_buffer_size (media, size); gst_rtsp_media_set_protocols (media, protocols); if ((auth = gst_rtsp_media_factory_get_auth (factory))) { gst_rtsp_media_set_auth (media, auth); g_object_unref (auth); } if ((mc = gst_rtsp_media_factory_get_multicast_group (factory))) { gst_rtsp_media_set_multicast_group (media, mc); g_free (mc); } }
static void default_configure (GstRTSPMediaFactory * factory, GstRTSPMedia * media) { GstRTSPMediaFactoryPrivate *priv = factory->priv; gboolean shared, eos_shutdown, stop_on_disconnect; guint size; GstRTSPSuspendMode suspend_mode; GstRTSPProfile profiles; GstRTSPLowerTrans protocols; GstRTSPAddressPool *pool; GstRTSPPermissions *perms; GstClockTime rtx_time; guint latency; GstRTSPTransportMode transport_mode; GstClock *clock; /* configure the sharedness */ GST_RTSP_MEDIA_FACTORY_LOCK (factory); suspend_mode = priv->suspend_mode; shared = priv->shared; eos_shutdown = priv->eos_shutdown; size = priv->buffer_size; profiles = priv->profiles; protocols = priv->protocols; rtx_time = priv->rtx_time; latency = priv->latency; transport_mode = priv->transport_mode; stop_on_disconnect = priv->stop_on_disconnect; clock = priv->clock ? gst_object_ref (priv->clock) : NULL; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); gst_rtsp_media_set_suspend_mode (media, suspend_mode); gst_rtsp_media_set_shared (media, shared); gst_rtsp_media_set_eos_shutdown (media, eos_shutdown); gst_rtsp_media_set_buffer_size (media, size); gst_rtsp_media_set_profiles (media, profiles); gst_rtsp_media_set_protocols (media, protocols); gst_rtsp_media_set_retransmission_time (media, rtx_time); gst_rtsp_media_set_latency (media, latency); gst_rtsp_media_set_transport_mode (media, transport_mode); gst_rtsp_media_set_stop_on_disconnect (media, stop_on_disconnect); if (clock) { gst_rtsp_media_set_clock (media, clock); gst_object_unref (clock); } if ((pool = gst_rtsp_media_factory_get_address_pool (factory))) { gst_rtsp_media_set_address_pool (media, pool); g_object_unref (pool); } if ((perms = gst_rtsp_media_factory_get_permissions (factory))) { gst_rtsp_media_set_permissions (media, perms); gst_rtsp_permissions_unref (perms); } }
/** * gst_rtsp_media_factory_set_buffer_size: * @factory: a #GstRTSPMedia * @size: the new value * * Set the kernel UDP buffer size. */ void gst_rtsp_media_factory_set_buffer_size (GstRTSPMediaFactory * factory, guint size) { g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); GST_RTSP_MEDIA_FACTORY_LOCK (factory); factory->buffer_size = size; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_set_shared: * @factory: a #GstRTSPMediaFactory * @shared: the new value * * Configure if media created from this factory can be shared between clients. */ void gst_rtsp_media_factory_set_shared (GstRTSPMediaFactory * factory, gboolean shared) { g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); GST_RTSP_MEDIA_FACTORY_LOCK (factory); factory->shared = shared; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_set_eos_shutdown: * @factory: a #GstRTSPMediaFactory * @eos_shutdown: the new value * * Configure if media created from this factory will have an EOS sent to the * pipeline before shutdown. */ void gst_rtsp_media_factory_set_eos_shutdown (GstRTSPMediaFactory * factory, gboolean eos_shutdown) { g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); GST_RTSP_MEDIA_FACTORY_LOCK (factory); factory->eos_shutdown = eos_shutdown; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_set_multicast_group: * @factory: a #GstRTSPMedia * @mc: the new multicast group * * Set the multicast group that media from @factory will be streamed to. */ void gst_rtsp_media_factory_set_multicast_group (GstRTSPMediaFactory * factory, const gchar * mc) { g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); GST_RTSP_MEDIA_FACTORY_LOCK (factory); g_free (factory->multicast_group); factory->multicast_group = g_strdup (mc); GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_set_launch: * @factory: a #GstRTSPMediaFactory * @launch: the launch description * * * The gst_parse_launch() line to use for constructing the pipeline in the * default prepare vmethod. * * The pipeline description should return a GstBin as the toplevel element * which can be accomplished by enclosing the dscription with brackets '(' * ')'. * * The description should return a pipeline with payloaders named pay0, pay1, * etc.. Each of the payloaders will result in a stream. */ void gst_rtsp_media_factory_set_launch (GstRTSPMediaFactory * factory, const gchar * launch) { g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); g_return_if_fail (launch != NULL); GST_RTSP_MEDIA_FACTORY_LOCK (factory); g_free (factory->launch); factory->launch = g_strdup (launch); GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_get_clock: * @factory: a #GstRTSPMediaFactory * * Returns the clock that is going to be used by the pipelines * of all medias created from this factory. * * Returns: (transfer full): The GstClock * * Since: 1.8 */ GstClock * gst_rtsp_media_factory_get_clock (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; GstClock *ret; GST_RTSP_MEDIA_FACTORY_LOCK (factory); priv = factory->priv; ret = priv->clock ? gst_object_ref (priv->clock) : NULL; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return ret; }
/** * gst_rtsp_media_factory_get_multicast_group: * @factory: a #GstRTSPMedia * * Get the multicast group that media from @factory will be streamed to. * * Returns: the multicast group */ gchar * gst_rtsp_media_factory_get_multicast_group (GstRTSPMediaFactory * factory) { gchar *result; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), NULL); GST_RTSP_MEDIA_FACTORY_LOCK (factory); result = g_strdup (factory->multicast_group); GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return result; }
/** * gst_rtsp_media_factory_get_buffer_size: * @factory: a #GstRTSPMedia * * Get the kernel UDP buffer size. * * Returns: the kernel UDP buffer size. */ guint gst_rtsp_media_factory_get_buffer_size (GstRTSPMediaFactory * factory) { guint result; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), 0); GST_RTSP_MEDIA_FACTORY_LOCK (factory); result = factory->buffer_size; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return result; }
/** * gst_rtsp_media_factory_get_media_gtype: * @factory: a #GstRTSPMediaFactory * * Return the GType of the GstRTSPMedia subclass this * factory will create. * * Since: 1.6 */ GType gst_rtsp_media_factory_get_media_gtype (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; GType ret; GST_RTSP_MEDIA_FACTORY_LOCK (factory); priv = factory->priv; ret = priv->media_gtype; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return ret; }
/** * gst_rtsp_media_factory_set_clock: * @factory: a #GstRTSPMediaFactory * @clockd: the clock to be used by the media factory * * Configures a specific clock to be used by the pipelines * of all medias created from this factory. * * Since: 1.8 */ void gst_rtsp_media_factory_set_clock (GstRTSPMediaFactory * factory, GstClock * clock) { GstRTSPMediaFactoryPrivate *priv; g_return_if_fail (GST_IS_CLOCK (clock) || clock == NULL); GST_RTSP_MEDIA_FACTORY_LOCK (factory); priv = factory->priv; priv->clock = clock ? gst_object_ref (clock) : NULL; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_set_media_gtype: * @factory: a #GstRTSPMediaFactory * @media_gtype: the GType of the class to create * * Configure the GType of the GstRTSPMedia subclass to * create (by default, overridden construct vmethods * may of course do something different) * * Since: 1.6 */ void gst_rtsp_media_factory_set_media_gtype (GstRTSPMediaFactory * factory, GType media_gtype) { GstRTSPMediaFactoryPrivate *priv; g_return_if_fail (g_type_is_a (media_gtype, GST_TYPE_RTSP_MEDIA)); GST_RTSP_MEDIA_FACTORY_LOCK (factory); priv = factory->priv; priv->media_gtype = media_gtype; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_is_eos_shutdown: * @factory: a #GstRTSPMediaFactory * * Get if media created from this factory will have an EOS event sent to the * pipeline before shutdown. * * Returns: %TRUE if the media will receive EOS before shutdown. */ gboolean gst_rtsp_media_factory_is_eos_shutdown (GstRTSPMediaFactory * factory) { gboolean result; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), FALSE); GST_RTSP_MEDIA_FACTORY_LOCK (factory); result = factory->eos_shutdown; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return result; }
static GstRTSPMedia * default_construct (GstRTSPMediaFactory * factory, const GstRTSPUrl * url) { GstRTSPMedia *media; GstElement *element, *pipeline; GstRTSPMediaFactoryClass *klass; GType media_gtype; klass = GST_RTSP_MEDIA_FACTORY_GET_CLASS (factory); if (!klass->create_pipeline) goto no_create; element = gst_rtsp_media_factory_create_element (factory, url); if (element == NULL) goto no_element; GST_RTSP_MEDIA_FACTORY_LOCK (factory); media_gtype = factory->priv->media_gtype; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); /* create a new empty media */ media = g_object_new (media_gtype, "element", element, NULL); gst_rtsp_media_collect_streams (media); pipeline = klass->create_pipeline (factory, media); if (pipeline == NULL) goto no_pipeline; return media; /* ERRORS */ no_create: { g_critical ("no create_pipeline function"); return NULL; } no_element: { g_critical ("could not create element"); return NULL; } no_pipeline: { g_critical ("can't create pipeline"); g_object_unref (media); return NULL; } }
/** * gst_rtsp_media_factory_set_stop_on_disconnect: * @factory: a #GstRTSPMediaFactory * @stop_on_disconnect: the new value * * Configure if media created from this factory should be stopped * when a client disconnects without sending TEARDOWN. */ void gst_rtsp_media_factory_set_stop_on_disconnect (GstRTSPMediaFactory * factory, gboolean stop_on_disconnect) { GstRTSPMediaFactoryPrivate *priv; g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); priv->stop_on_disconnect = stop_on_disconnect; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_set_suspend_mode: * @factory: a #GstRTSPMediaFactory * @mode: the new #GstRTSPSuspendMode * * Configure how media created from this factory will be suspended. */ void gst_rtsp_media_factory_set_suspend_mode (GstRTSPMediaFactory * factory, GstRTSPSuspendMode mode) { GstRTSPMediaFactoryPrivate *priv; g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); priv->suspend_mode = mode; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_get_latency: * @factory: a #GstRTSPMediaFactory * * Get the latency that is used for receiving media * * Returns: latency in milliseconds */ guint gst_rtsp_media_factory_get_latency (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; guint res; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), 0); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); res = priv->latency; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return res; }
/** * gst_rtsp_media_factory_is_stop_on_disconnect: * @factory: a #GstRTSPMediaFactory * * Get if media created from this factory should be stopped when a client * disconnects without sending TEARDOWN. * * Returns: %TRUE if the media will be stopped when a client disconnects * without sending TEARDOWN. */ gboolean gst_rtsp_media_factory_is_stop_on_disonnect (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; gboolean result; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), TRUE); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); result = priv->stop_on_disconnect; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return result; }
/** * gst_rtsp_media_factory_set_protocols: * @factory: a #GstRTSPMediaFactory * @protocols: the new flags * * Configure the allowed lower transport for @factory. */ void gst_rtsp_media_factory_set_protocols (GstRTSPMediaFactory * factory, GstRTSPLowerTrans protocols) { GstRTSPMediaFactoryPrivate *priv; g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); priv = factory->priv; GST_DEBUG_OBJECT (factory, "protocols %d", protocols); GST_RTSP_MEDIA_FACTORY_LOCK (factory); priv->protocols = protocols; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_set_latency: * @factory: a #GstRTSPMediaFactory * @latency: latency in milliseconds * * Configure the latency used for receiving media */ void gst_rtsp_media_factory_set_latency (GstRTSPMediaFactory * factory, guint latency) { GstRTSPMediaFactoryPrivate *priv; g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); priv = factory->priv; GST_DEBUG_OBJECT (factory, "latency %ums", latency); GST_RTSP_MEDIA_FACTORY_LOCK (factory); priv->latency = latency; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_is_shared: * @factory: a #GstRTSPMediaFactory * * Get if media created from this factory can be shared between clients. * * Returns: %TRUE if the media will be shared between clients. */ gboolean gst_rtsp_media_factory_is_shared (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; gboolean result; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), FALSE); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); result = priv->shared; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return result; }
/** * gst_rtsp_media_factory_get_launch: * @factory: a #GstRTSPMediaFactory * * Get the gst_parse_launch() pipeline description that will be used in the * default prepare vmethod. * * Returns: (transfer full): the configured launch description. g_free() after * usage. */ gchar * gst_rtsp_media_factory_get_launch (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; gchar *result; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), NULL); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); result = g_strdup (priv->launch); GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return result; }
/** * gst_rtsp_media_factory_get_transport_mode: * @factory: a #GstRTSPMediaFactory * * Get if media created from this factory can be used for PLAY or RECORD * methods. * * Returns: The supported transport modes. */ GstRTSPTransportMode gst_rtsp_media_factory_get_transport_mode (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; GstRTSPTransportMode result; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), FALSE); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); result = priv->transport_mode; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return result; }
/** * gst_rtsp_media_factory_set_retransmission_time: * @factory: a #GstRTSPMediaFactory * @time: a #GstClockTime * * Configure the time to store for possible retransmission */ void gst_rtsp_media_factory_set_retransmission_time (GstRTSPMediaFactory * factory, GstClockTime time) { GstRTSPMediaFactoryPrivate *priv; g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); priv = factory->priv; GST_DEBUG_OBJECT (factory, "retransmission time %" G_GUINT64_FORMAT, time); GST_RTSP_MEDIA_FACTORY_LOCK (factory); priv->rtx_time = time; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); }
/** * gst_rtsp_media_factory_get_retransmission_time: * @factory: a #GstRTSPMediaFactory * * Get the time that is stored for retransmission purposes * * Returns: a #GstClockTime */ GstClockTime gst_rtsp_media_factory_get_retransmission_time (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; GstClockTime res; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), 0); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); res = priv->rtx_time; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return res; }
/** * gst_rtsp_media_factory_get_suspend_mode: * @factory: a #GstRTSPMediaFactory * * Get how media created from this factory will be suspended. * * Returns: a #GstRTSPSuspendMode. */ GstRTSPSuspendMode gst_rtsp_media_factory_get_suspend_mode (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; GstRTSPSuspendMode result; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), GST_RTSP_SUSPEND_MODE_NONE); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); result = priv->suspend_mode; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return result; }
/** * gst_rtsp_media_factory_get_protocols: * @factory: a #GstRTSPMediaFactory * * Get the allowed protocols of @factory. * * Returns: a #GstRTSPLowerTrans */ GstRTSPLowerTrans gst_rtsp_media_factory_get_protocols (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; GstRTSPLowerTrans res; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), GST_RTSP_LOWER_TRANS_UNKNOWN); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); res = priv->protocols; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return res; }
/** * gst_rtsp_media_factory_get_address_pool: * @factory: a #GstRTSPMediaFactory * * Get the #GstRTSPAddressPool used as the address pool of @factory. * * Returns: (transfer full): the #GstRTSPAddressPool of @factory. g_object_unref() after * usage. */ GstRTSPAddressPool * gst_rtsp_media_factory_get_address_pool (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; GstRTSPAddressPool *result; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), NULL); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); if ((result = priv->pool)) g_object_ref (result); GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return result; }
/** * gst_rtsp_media_factory_get_profiles: * @factory: a #GstRTSPMediaFactory * * Get the allowed profiles of @factory. * * Returns: a #GstRTSPProfile */ GstRTSPProfile gst_rtsp_media_factory_get_profiles (GstRTSPMediaFactory * factory) { GstRTSPMediaFactoryPrivate *priv; GstRTSPProfile res; g_return_val_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory), GST_RTSP_PROFILE_UNKNOWN); priv = factory->priv; GST_RTSP_MEDIA_FACTORY_LOCK (factory); res = priv->profiles; GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); return res; }