onvif: Make requires_backchannel() public

...in order to let subclasses building the onvif part of the pipeline
check whether backchannel shall be included or not.
This commit is contained in:
Ognyan Tonchev 2017-10-21 14:06:30 +02:00 committed by Sebastian Dröge
parent 3d275b1345
commit 62aae8c7dc
2 changed files with 22 additions and 6 deletions

View file

@ -55,13 +55,27 @@ struct GstRTSPOnvifMediaFactoryPrivate
G_DEFINE_TYPE_WITH_PRIVATE (GstRTSPOnvifMediaFactory, G_DEFINE_TYPE_WITH_PRIVATE (GstRTSPOnvifMediaFactory,
gst_rtsp_onvif_media_factory, GST_TYPE_RTSP_MEDIA_FACTORY); gst_rtsp_onvif_media_factory, GST_TYPE_RTSP_MEDIA_FACTORY);
static gboolean /**
requires_backchannel (GstRTSPMessage * msg) * gst_rtsp_onvif_media_factory_requires_backchannel:
* @factory: a #GstRTSPMediaFactory
*
* Checks whether the client request requires backchannel.
*
* Returns: %TRUE if the client request requires backchannel.
*
* Since: 1.14
*/
gboolean
gst_rtsp_onvif_media_factory_requires_backchannel (GstRTSPMediaFactory *
factory, GstRTSPContext * ctx)
{ {
GstRTSPMessage *msg = ctx->request;
GstRTSPResult res; GstRTSPResult res;
gint i; gint i;
gchar *reqs = NULL; gchar *reqs = NULL;
g_return_val_if_fail (GST_IS_RTSP_ONVIF_MEDIA_FACTORY (factory), FALSE);
i = 0; i = 0;
do { do {
res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_REQUIRE, &reqs, i++); res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_REQUIRE, &reqs, i++);
@ -81,10 +95,9 @@ gst_rtsp_onvif_media_factory_gen_key (GstRTSPMediaFactory * factory,
const GstRTSPUrl * url) const GstRTSPUrl * url)
{ {
GstRTSPContext *ctx = gst_rtsp_context_get_current (); GstRTSPContext *ctx = gst_rtsp_context_get_current ();
GstRTSPMessage *msg = ctx->request;
/* Only medias where no backchannel was requested can be shared */ /* Only medias where no backchannel was requested can be shared */
if (requires_backchannel (msg)) if (gst_rtsp_onvif_media_factory_requires_backchannel (factory, ctx))
return NULL; return NULL;
return return
@ -139,7 +152,8 @@ gst_rtsp_onvif_media_factory_construct (GstRTSPMediaFactory * factory,
got_backchannel_stream = got_backchannel_stream =
gst_rtsp_onvif_media_collect_backchannel (GST_RTSP_ONVIF_MEDIA (media)); gst_rtsp_onvif_media_collect_backchannel (GST_RTSP_ONVIF_MEDIA (media));
/* FIXME: This should not happen! We checked for that before */ /* FIXME: This should not happen! We checked for that before */
if (requires_backchannel (ctx->request) && !got_backchannel_stream) { if (gst_rtsp_onvif_media_factory_requires_backchannel (factory, ctx) &&
!got_backchannel_stream) {
g_object_unref (media); g_object_unref (media);
return NULL; return NULL;
} }
@ -206,7 +220,7 @@ gst_rtsp_onvif_media_factory_create_element (GstRTSPMediaFactory * factory,
} }
/* add backchannel pipeline part, if requested */ /* add backchannel pipeline part, if requested */
if (requires_backchannel (ctx->request)) { if (gst_rtsp_onvif_media_factory_requires_backchannel (factory, ctx)) {
GstRTSPOnvifMediaFactory *onvif_factory = GstRTSPOnvifMediaFactory *onvif_factory =
GST_RTSP_ONVIF_MEDIA_FACTORY (factory); GST_RTSP_ONVIF_MEDIA_FACTORY (factory);
GstElement *backchannel_bin; GstElement *backchannel_bin;

View file

@ -74,4 +74,6 @@ void gst_rtsp_onvif_media_factory_set_backchannel_bandwidth (GstRTSPOnvifMediaFa
GST_EXPORT GST_EXPORT
guint gst_rtsp_onvif_media_factory_get_backchannel_bandwidth (GstRTSPOnvifMediaFactory * factory); guint gst_rtsp_onvif_media_factory_get_backchannel_bandwidth (GstRTSPOnvifMediaFactory * factory);
gboolean gst_rtsp_onvif_media_factory_requires_backchannel (GstRTSPMediaFactory * factory, GstRTSPContext * ctx);
#endif /* __GST_RTSP_ONVIF_MEDIA_FACTORY_H__ */ #endif /* __GST_RTSP_ONVIF_MEDIA_FACTORY_H__ */