diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2015-12-04 18:05:58 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-12-04 18:06:30 +0200 |
commit | 2ab188bf29aeb20499e192d338ed43e096e87b6f (patch) | |
tree | b7fd575b3a48a74ead2c961725dbce2538703657 /gst/mxf | |
parent | 821320fbc4f978388a13d5862cf8872004dd26fd (diff) | |
download | gstreamer-plugins-bad-2ab188bf29aeb20499e192d338ed43e096e87b6f.tar.gz |
mxfmux: Don't copy input buffers, just append them to the header
Diffstat (limited to 'gst/mxf')
-rw-r--r-- | gst/mxf/mxfmux.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/gst/mxf/mxfmux.c b/gst/mxf/mxfmux.c index c613ca7ad..d3f5ae51a 100644 --- a/gst/mxf/mxfmux.c +++ b/gst/mxf/mxfmux.c @@ -1118,9 +1118,8 @@ gst_mxf_mux_handle_buffer (GstMXFMux * mux, GstMXFMuxPad * pad) { GstBuffer *buf = gst_aggregator_pad_get_buffer (GST_AGGREGATOR_PAD (pad)); GstBuffer *outbuf = NULL; - GstBuffer *packet; GstMapInfo map; - GstMapInfo readmap; + gsize buf_size; GstFlowReturn ret = GST_FLOW_OK; guint8 slen, ber[9]; gboolean flush = gst_aggregator_pad_is_eos (GST_AGGREGATOR_PAD (pad)) @@ -1170,24 +1169,21 @@ gst_mxf_mux_handle_buffer (GstMXFMux * mux, GstMXFMuxPad * pad) if (buf == NULL) return ret; - gst_buffer_map (buf, &readmap, GST_MAP_READ); - slen = mxf_ber_encode_size (readmap.size, ber); - packet = gst_buffer_new_and_alloc (16 + slen + readmap.size); - gst_buffer_map (packet, &map, GST_MAP_WRITE); + buf_size = gst_buffer_get_size (buf); + slen = mxf_ber_encode_size (buf_size, ber); + outbuf = gst_buffer_new_and_alloc (16 + slen); + gst_buffer_map (outbuf, &map, GST_MAP_WRITE); memcpy (map.data, _gc_essence_element_ul, 16); GST_WRITE_UINT32_BE (map.data + 12, pad->source_track->parent.track_number); memcpy (map.data + 16, ber, slen); - memcpy (map.data + 16 + slen, readmap.data, readmap.size); - gst_buffer_unmap (buf, &readmap); - - gst_buffer_unref (buf); + gst_buffer_unmap (outbuf, &map); + outbuf = gst_buffer_append (outbuf, buf); GST_DEBUG_OBJECT (pad, - "Pushing buffer of size %" G_GSIZE_FORMAT " for track %u", map.size, - pad->source_track->parent.track_id); - gst_buffer_unmap (packet, &map); + "Pushing buffer of size %" G_GSIZE_FORMAT " for track %u", + gst_buffer_get_size (outbuf), pad->source_track->parent.track_id); - if ((ret = gst_mxf_mux_push (mux, packet)) != GST_FLOW_OK) { + if ((ret = gst_mxf_mux_push (mux, outbuf)) != GST_FLOW_OK) { GST_ERROR_OBJECT (pad, "Failed pushing buffer for track %u, reason %s", pad->source_track->parent.track_id, gst_flow_get_name (ret)); |