rtpgstpay->flags &= 0x70;
rtpgstpay->etype = 0;
if (rtpgstpay->pending_buffers)
- g_list_free_full (rtpgstpay->pending_buffers,
- (GDestroyNotify) gst_buffer_list_unref);
+ gst_buffer_list_unref (rtpgstpay->pending_buffers);
rtpgstpay->pending_buffers = NULL;
if (full) {
if (rtpgstpay->taglist)
rtpgstpay->current_CV = 0;
rtpgstpay->next_CV = 0;
}
+ rtpgstpay->received_buffer = FALSE;
}
static void
{
guint avail, mtu;
guint frag_offset;
- GstBufferList *list;
avail = gst_adapter_available (rtpgstpay->adapter);
if (avail == 0)
mtu = GST_RTP_BASE_PAYLOAD_MTU (rtpgstpay);
- list = gst_buffer_list_new_sized ((avail / (mtu - (RTP_HEADER_LEN + 8))) + 1);
+ if (!rtpgstpay->pending_buffers)
+ rtpgstpay->pending_buffers =
+ gst_buffer_list_new_sized ((avail / (mtu - (RTP_HEADER_LEN + 8))) + 1);
frag_offset = 0;
while (avail) {
GST_BUFFER_PTS (outbuf) = timestamp;
/* and add to list */
- gst_buffer_list_insert (list, -1, outbuf);
+ gst_buffer_list_insert (rtpgstpay->pending_buffers, -1, outbuf);
}
rtpgstpay->flags &= 0x70;
rtpgstpay->etype = 0;
- rtpgstpay->pending_buffers = g_list_append (rtpgstpay->pending_buffers, list);
return TRUE;
}
gst_rtp_gst_pay_flush (GstRtpGSTPay * rtpgstpay, GstClockTime timestamp)
{
GstFlowReturn ret = GST_FLOW_OK;
- GList *iter;
gst_rtp_gst_pay_create_from_adapter (rtpgstpay, timestamp);
- iter = rtpgstpay->pending_buffers;
- while (iter) {
- GstBufferList *list = iter->data;
-
- rtpgstpay->pending_buffers = iter =
- g_list_delete_link (rtpgstpay->pending_buffers, iter);
+ if (!rtpgstpay->received_buffer) {
+ GST_DEBUG_OBJECT (rtpgstpay,
+ "Can't flush without having received a buffer yet");
+ return GST_FLOW_OK;
+ }
+ if (rtpgstpay->pending_buffers) {
/* push the whole buffer list at once */
ret = gst_rtp_base_payload_push_list (GST_RTP_BASE_PAYLOAD (rtpgstpay),
- list);
- if (ret != GST_FLOW_OK)
- break;
+ rtpgstpay->pending_buffers);
+ rtpgstpay->pending_buffers = NULL;
}
return ret;
rtpgstpay = GST_RTP_GST_PAY (basepayload);
+ rtpgstpay->received_buffer = TRUE;
+
timestamp = GST_BUFFER_PTS (buffer);
running_time =
gst_segment_to_running_time (&basepayload->segment, GST_FORMAT_TIME,