pcapparse: Produce GstBufferList

This commit is contained in:
Olivier Crête 2015-04-10 20:15:52 -04:00
parent 5a1c73a105
commit a2b093af47

View file

@ -453,6 +453,7 @@ gst_pcap_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{ {
GstPcapParse *self = GST_PCAP_PARSE (parent); GstPcapParse *self = GST_PCAP_PARSE (parent);
GstFlowReturn ret = GST_FLOW_OK; GstFlowReturn ret = GST_FLOW_OK;
GstBufferList *list = NULL;
gst_adapter_push (self->adapter, buffer); gst_adapter_push (self->adapter, buffer);
@ -498,20 +499,10 @@ gst_pcap_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
gst_buffer_unmap (out_buf, &map); gst_buffer_unmap (out_buf, &map);
GST_BUFFER_TIMESTAMP (out_buf) = self->cur_ts; GST_BUFFER_TIMESTAMP (out_buf) = self->cur_ts;
if (!self->newsegment_sent &&
GST_CLOCK_TIME_IS_VALID (self->cur_ts)) {
GstSegment segment;
if (self->caps) if (list == NULL)
gst_pad_set_caps (self->src_pad, self->caps); list = gst_buffer_list_new ();
gst_segment_init (&segment, GST_FORMAT_TIME); gst_buffer_list_add (list, out_buf);
segment.start = self->cur_ts;
gst_pad_push_event (self->src_pad,
gst_event_new_segment (&segment));
self->newsegment_sent = TRUE;
}
ret = gst_pad_push (self->src_pad, out_buf);
self->buffer_offset += payload_size; self->buffer_offset += payload_size;
} }
@ -594,7 +585,27 @@ gst_pcap_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
} }
} }
if (list) {
if (!self->newsegment_sent && GST_CLOCK_TIME_IS_VALID (self->cur_ts)) {
GstSegment segment;
if (self->caps)
gst_pad_set_caps (self->src_pad, self->caps);
gst_segment_init (&segment, GST_FORMAT_TIME);
segment.start = self->cur_ts;
gst_pad_push_event (self->src_pad, gst_event_new_segment (&segment));
self->newsegment_sent = TRUE;
}
ret = gst_pad_push_list (self->src_pad, list);
list = NULL;
}
out: out:
if (list)
gst_buffer_list_unref (list);
if (ret != GST_FLOW_OK) if (ret != GST_FLOW_OK)
gst_pcap_parse_reset (self); gst_pcap_parse_reset (self);