mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
Send a stream-start whenever we send tags
This is to make sure tags are cleared on the client if the stream-start was previously lost, otherwise, the client may end up with a merged taglist of multiple songs
This commit is contained in:
parent
05bcfee5a3
commit
62a6f58697
2 changed files with 24 additions and 2 deletions
|
@ -167,6 +167,9 @@ gst_rtp_gst_pay_finalize (GObject * obj)
|
||||||
if (rtpgstpay->taglist)
|
if (rtpgstpay->taglist)
|
||||||
gst_tag_list_unref (rtpgstpay->taglist);
|
gst_tag_list_unref (rtpgstpay->taglist);
|
||||||
rtpgstpay->taglist = NULL;
|
rtpgstpay->taglist = NULL;
|
||||||
|
if (rtpgstpay->stream_id)
|
||||||
|
g_free (rtpgstpay->stream_id);
|
||||||
|
rtpgstpay->stream_id = NULL;
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (obj);
|
G_OBJECT_CLASS (parent_class)->finalize (obj);
|
||||||
}
|
}
|
||||||
|
@ -474,12 +477,22 @@ gst_rtp_gst_pay_sink_event (GstRTPBasePayload * payload, GstEvent * event)
|
||||||
case GST_EVENT_CUSTOM_BOTH:
|
case GST_EVENT_CUSTOM_BOTH:
|
||||||
etype = 3;
|
etype = 3;
|
||||||
break;
|
break;
|
||||||
case GST_EVENT_STREAM_START:
|
case GST_EVENT_STREAM_START:{
|
||||||
etype = 4;
|
const gchar *stream_id = NULL;
|
||||||
|
|
||||||
if (rtpgstpay->taglist)
|
if (rtpgstpay->taglist)
|
||||||
gst_tag_list_unref (rtpgstpay->taglist);
|
gst_tag_list_unref (rtpgstpay->taglist);
|
||||||
rtpgstpay->taglist = NULL;
|
rtpgstpay->taglist = NULL;
|
||||||
|
|
||||||
|
gst_event_parse_stream_start (event, &stream_id);
|
||||||
|
if (stream_id) {
|
||||||
|
if (rtpgstpay->stream_id)
|
||||||
|
g_free (rtpgstpay->stream_id);
|
||||||
|
rtpgstpay->stream_id = g_strdup (stream_id);
|
||||||
|
}
|
||||||
|
etype = 4;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
etype = 0;
|
etype = 0;
|
||||||
GST_LOG_OBJECT (rtpgstpay, "no event for %s",
|
GST_LOG_OBJECT (rtpgstpay, "no event for %s",
|
||||||
|
@ -509,12 +522,20 @@ gst_rtp_gst_pay_send_config (GstRtpGSTPay * rtpgstpay, GstClockTime timestamp)
|
||||||
GstPad *pad = GST_RTP_BASE_PAYLOAD_SINKPAD (rtpgstpay);
|
GstPad *pad = GST_RTP_BASE_PAYLOAD_SINKPAD (rtpgstpay);
|
||||||
GstCaps *caps = NULL;
|
GstCaps *caps = NULL;
|
||||||
GstEvent *tag = NULL;
|
GstEvent *tag = NULL;
|
||||||
|
GstEvent *stream_start = NULL;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (rtpgstpay, "time to send config");
|
GST_DEBUG_OBJECT (rtpgstpay, "time to send config");
|
||||||
/* Send tags */
|
/* Send tags */
|
||||||
if (rtpgstpay->taglist && !gst_tag_list_is_empty (rtpgstpay->taglist))
|
if (rtpgstpay->taglist && !gst_tag_list_is_empty (rtpgstpay->taglist))
|
||||||
tag = gst_event_new_tag (gst_tag_list_ref (rtpgstpay->taglist));
|
tag = gst_event_new_tag (gst_tag_list_ref (rtpgstpay->taglist));
|
||||||
if (tag) {
|
if (tag) {
|
||||||
|
/* Send start-stream to clear tags */
|
||||||
|
if (rtpgstpay->stream_id)
|
||||||
|
stream_start = gst_event_new_stream_start (rtpgstpay->stream_id);
|
||||||
|
if (stream_start) {
|
||||||
|
gst_rtp_gst_pay_send_event (rtpgstpay, 4, stream_start);
|
||||||
|
gst_event_unref (stream_start);
|
||||||
|
}
|
||||||
gst_rtp_gst_pay_send_event (rtpgstpay, 1, tag);
|
gst_rtp_gst_pay_send_event (rtpgstpay, 1, tag);
|
||||||
gst_event_unref (tag);
|
gst_event_unref (tag);
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ struct _GstRtpGSTPay
|
||||||
guint8 current_CV; /* CV field of incoming caps*/
|
guint8 current_CV; /* CV field of incoming caps*/
|
||||||
guint8 next_CV;
|
guint8 next_CV;
|
||||||
|
|
||||||
|
gchar *stream_id;
|
||||||
GstTagList *taglist;
|
GstTagList *taglist;
|
||||||
guint config_interval;
|
guint config_interval;
|
||||||
GstClockTime last_config;
|
GstClockTime last_config;
|
||||||
|
|
Loading…
Reference in a new issue