mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-07 08:39:54 +00:00
basedepayload: do not create segment in onvif mode
basedepayload generates its own segment in a pretty unconventional manner, relying on information in the caps such as npt-start or npt-stop, usually set by rtspsrc. In ONVIF mode, rtspsrc will generate the correct segment and this logic in rtpbasedepayload will not be needed, this commit allows rtspsrc to signal that through the caps.
This commit is contained in:
parent
1ec1123178
commit
c854c270be
1 changed files with 20 additions and 4 deletions
|
@ -42,6 +42,7 @@ struct _GstRTPBaseDepayloadPrivate
|
|||
gdouble play_speed;
|
||||
gdouble play_scale;
|
||||
guint clock_base;
|
||||
gboolean onvif_mode;
|
||||
|
||||
gboolean discont;
|
||||
GstClockTime pts;
|
||||
|
@ -265,6 +266,7 @@ gst_rtp_base_depayload_init (GstRTPBaseDepayload * filter,
|
|||
priv->play_speed = 1.0;
|
||||
priv->play_scale = 1.0;
|
||||
priv->clock_base = -1;
|
||||
priv->onvif_mode = FALSE;
|
||||
priv->dts = -1;
|
||||
priv->pts = -1;
|
||||
priv->duration = -1;
|
||||
|
@ -307,6 +309,16 @@ gst_rtp_base_depayload_setcaps (GstRTPBaseDepayload * filter, GstCaps * caps)
|
|||
|
||||
caps_struct = gst_caps_get_structure (caps, 0);
|
||||
|
||||
value = gst_structure_get_value (caps_struct, "onvif-mode");
|
||||
if (value && G_VALUE_HOLDS_BOOLEAN (value))
|
||||
priv->onvif_mode = g_value_get_boolean (value);
|
||||
else
|
||||
priv->onvif_mode = FALSE;
|
||||
GST_DEBUG_OBJECT (filter, "Onvif mode: %d", priv->onvif_mode);
|
||||
|
||||
if (priv->onvif_mode)
|
||||
filter->need_newsegment = FALSE;
|
||||
|
||||
/* get other values for newsegment */
|
||||
value = gst_structure_get_value (caps_struct, "npt-start");
|
||||
if (value && G_VALUE_HOLDS_UINT64 (value))
|
||||
|
@ -622,7 +634,7 @@ gst_rtp_base_depayload_handle_event (GstRTPBaseDepayload * filter,
|
|||
gst_segment_init (&filter->segment, GST_FORMAT_UNDEFINED);
|
||||
GST_OBJECT_UNLOCK (filter);
|
||||
|
||||
filter->need_newsegment = TRUE;
|
||||
filter->need_newsegment = !filter->priv->onvif_mode;
|
||||
filter->priv->next_seqnum = -1;
|
||||
gst_event_replace (&filter->priv->segment_event, NULL);
|
||||
break;
|
||||
|
@ -651,9 +663,12 @@ gst_rtp_base_depayload_handle_event (GstRTPBaseDepayload * filter,
|
|||
filter->segment = segment;
|
||||
GST_OBJECT_UNLOCK (filter);
|
||||
|
||||
/* don't pass the event downstream, we generate our own segment including
|
||||
* the NTP time and other things we receive in caps */
|
||||
forward = FALSE;
|
||||
/* In ONVIF mode, upstream is expected to send us the correct segment */
|
||||
if (!filter->priv->onvif_mode) {
|
||||
/* don't pass the event downstream, we generate our own segment including
|
||||
* the NTP time and other things we receive in caps */
|
||||
forward = FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GST_EVENT_CUSTOM_DOWNSTREAM:
|
||||
|
@ -995,6 +1010,7 @@ gst_rtp_base_depayload_change_state (GstElement * element,
|
|||
priv->play_speed = 1.0;
|
||||
priv->play_scale = 1.0;
|
||||
priv->clock_base = -1;
|
||||
priv->onvif_mode = FALSE;
|
||||
priv->next_seqnum = -1;
|
||||
priv->negotiated = FALSE;
|
||||
priv->discont = FALSE;
|
||||
|
|
Loading…
Reference in a new issue