mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 11:41:09 +00:00
rtpmp4gdepay: Enabled header extension aggregation
Because this depayloader may build several output buffers within one process run we push them all into a GstBufferList and push them out at once to make sure that each buffer gets notified about each header extension. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
This commit is contained in:
parent
75849c63c8
commit
5d1d0cf9a5
2 changed files with 14 additions and 1 deletions
|
@ -182,6 +182,8 @@ gst_rtp_mp4g_depay_class_init (GstRtpMP4GDepayClass * klass)
|
|||
static void
|
||||
gst_rtp_mp4g_depay_init (GstRtpMP4GDepay * rtpmp4gdepay)
|
||||
{
|
||||
gst_rtp_base_depayload_set_aggregate_hdrext_enabled (GST_RTP_BASE_DEPAYLOAD
|
||||
(rtpmp4gdepay), TRUE);
|
||||
rtpmp4gdepay->adapter = gst_adapter_new ();
|
||||
rtpmp4gdepay->packets = g_queue_new ();
|
||||
}
|
||||
|
@ -348,7 +350,11 @@ gst_rtp_mp4g_depay_push_outbuf (GstRtpMP4GDepay * rtpmp4gdepay,
|
|||
discont ? "" : "expected ", AU_index);
|
||||
|
||||
gst_rtp_drop_meta (GST_ELEMENT_CAST (rtpmp4gdepay), outbuf, 0);
|
||||
gst_rtp_base_depayload_push (GST_RTP_BASE_DEPAYLOAD (rtpmp4gdepay), outbuf);
|
||||
if (!rtpmp4gdepay->outbufs) {
|
||||
rtpmp4gdepay->outbufs =
|
||||
gst_buffer_list_new_sized (g_queue_get_length (rtpmp4gdepay->packets));
|
||||
}
|
||||
gst_buffer_list_add (rtpmp4gdepay->outbufs, outbuf);
|
||||
rtpmp4gdepay->next_AU_index = AU_index + 1;
|
||||
}
|
||||
|
||||
|
@ -727,6 +733,11 @@ gst_rtp_mp4g_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp)
|
|||
payload_AU += AU_size;
|
||||
payload_AU_size -= AU_size;
|
||||
}
|
||||
|
||||
if (rtpmp4gdepay->outbufs) {
|
||||
gst_rtp_base_depayload_push_list (depayload,
|
||||
g_steal_pointer (&rtpmp4gdepay->outbufs));
|
||||
}
|
||||
} else {
|
||||
/* push complete buffer in adapter */
|
||||
outbuf = gst_rtp_buffer_get_payload_subbuffer (rtp, 0, payload_len);
|
||||
|
@ -755,6 +766,7 @@ short_payload:
|
|||
{
|
||||
GST_ELEMENT_WARNING (rtpmp4gdepay, STREAM, DECODE,
|
||||
("Packet payload was too short."), (NULL));
|
||||
gst_rtp_base_depayload_dropped (depayload);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ struct _GstRtpMP4GDepay
|
|||
GQueue *packets;
|
||||
|
||||
GstAdapter *adapter;
|
||||
GstBufferList *outbufs;
|
||||
};
|
||||
|
||||
struct _GstRtpMP4GDepayClass
|
||||
|
|
Loading…
Reference in a new issue