From: Tim-Philipp Müller Date: Sun, 1 Dec 2013 22:32:09 +0000 (+0000) Subject: asfmux: microoptimisation: avoid unnecessary gst_buffer_get_size() calls X-Git-Tag: 1.19.3~507^2~12925 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c58dd9df73037b9f7424381da4552bd137bd5c4e;p=platform%2Fupstream%2Fgstreamer.git asfmux: microoptimisation: avoid unnecessary gst_buffer_get_size() calls --- diff --git a/gst/asfmux/gstasfmux.c b/gst/asfmux/gstasfmux.c index 1ed0e07..ee0435c 100644 --- a/gst/asfmux/gstasfmux.c +++ b/gst/asfmux/gstasfmux.c @@ -373,10 +373,9 @@ gst_asf_mux_sink_event (GstCollectPads * pads, GstCollectData * cdata, * Returns: the result of #gst_pad_push on the buffer */ static GstFlowReturn -gst_asf_mux_push_buffer (GstAsfMux * asfmux, GstBuffer * buf) +gst_asf_mux_push_buffer (GstAsfMux * asfmux, GstBuffer * buf, gsize bufsize) { GstFlowReturn ret; - gsize bufsize = gst_buffer_get_size (buf); ret = gst_pad_push (asfmux->srcpad, buf); @@ -1264,6 +1263,7 @@ gst_asf_mux_start_file (GstAsfMux * asfmux) guint64 padding = asfmux->prop_padding; GstSegment segment; GstMapInfo map; + gsize bufsize; gchar s_id[32]; if (padding < ASF_PADDING_OBJECT_SIZE) @@ -1309,6 +1309,7 @@ gst_asf_mux_start_file (GstAsfMux * asfmux) gst_buffer_map (buf, &map, GST_MAP_WRITE); bufdata = map.data; + bufsize = map.size; gst_asf_mux_write_header_object (asfmux, &bufdata, map.size - ASF_DATA_OBJECT_SIZE, 2 + stream_num); @@ -1371,7 +1372,7 @@ gst_asf_mux_start_file (GstAsfMux * asfmux) g_assert (bufdata - map.data == map.size); gst_buffer_unmap (buf, &map); - return gst_asf_mux_push_buffer (asfmux, buf); + return gst_asf_mux_push_buffer (asfmux, buf, bufsize); } /** @@ -1412,16 +1413,16 @@ gst_asf_mux_add_simple_index_entry (GstAsfMux * asfmux, * Returns: the result of pushing the buffer downstream */ static GstFlowReturn -gst_asf_mux_send_packet (GstAsfMux * asfmux, GstBuffer * buf) +gst_asf_mux_send_packet (GstAsfMux * asfmux, GstBuffer * buf, gsize bufsize) { - g_assert (gst_buffer_get_size (buf) == asfmux->packet_size); + g_assert (bufsize == asfmux->packet_size); asfmux->total_data_packets++; GST_LOG_OBJECT (asfmux, "Pushing a packet of size %" G_GSIZE_FORMAT " and timestamp %" - G_GUINT64_FORMAT, gst_buffer_get_size (buf), GST_BUFFER_TIMESTAMP (buf)); + G_GUINT64_FORMAT, bufsize, GST_BUFFER_TIMESTAMP (buf)); GST_LOG_OBJECT (asfmux, "Total data packets: %" G_GUINT64_FORMAT, asfmux->total_data_packets); - return gst_asf_mux_push_buffer (asfmux, buf); + return gst_asf_mux_push_buffer (asfmux, buf, bufsize); } /** @@ -1442,6 +1443,7 @@ gst_asf_mux_flush_payloads (GstAsfMux * asfmux) GstClockTime send_ts = GST_CLOCK_TIME_NONE; guint64 size_left; guint8 *data; + gsize size; GSList *walk; GstAsfPad *pad; gboolean has_keyframe; @@ -1581,6 +1583,8 @@ gst_asf_mux_flush_payloads (GstAsfMux * asfmux) /* fill payload parsing info */ data = map.data; + size = map.size; + /* flags */ GST_WRITE_UINT8 (data, (0x0 << 7) | /* no error correction */ (ASF_FIELD_TYPE_DWORD << 5) | /* packet length type */ @@ -1597,7 +1601,7 @@ gst_asf_mux_flush_payloads (GstAsfMux * asfmux) offset++; /* Due to a limitation in WMP while streaming through WMSP we reduce the - * packet & padding size to 16bit if theay are <= 65535 bytes + * packet & padding size to 16bit if they are <= 65535 bytes */ if (asfmux->packet_size > 65535) { GST_WRITE_UINT32_LE (data + offset, asfmux->packet_size - size_left); @@ -1636,10 +1640,12 @@ gst_asf_mux_flush_payloads (GstAsfMux * asfmux) if (payloads_count == 0) { GST_WARNING_OBJECT (asfmux, "Sending packet without any payload"); } - asfmux->data_object_size += gst_buffer_get_size (buf); + asfmux->data_object_size += size; + if (!has_keyframe) GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT); - return gst_asf_mux_send_packet (asfmux, buf); + + return gst_asf_mux_send_packet (asfmux, buf, size); } /** @@ -1664,11 +1670,15 @@ gst_asf_mux_push_simple_index (GstAsfMux * asfmux, GstAsfVideoPad * pad) { guint64 object_size = ASF_SIMPLE_INDEX_OBJECT_SIZE + g_slist_length (pad->simple_index) * ASF_SIMPLE_INDEX_ENTRY_SIZE; - GstBuffer *buf = gst_buffer_new_and_alloc (object_size); + GstBuffer *buf; GSList *walk; guint8 *data; guint32 entries_count = g_slist_length (pad->simple_index); GstMapInfo map; + gsize bufsize; + + buf = gst_buffer_new_and_alloc (object_size); + bufsize = object_size; gst_buffer_map (buf, &map, GST_MAP_WRITE); data = map.data; @@ -1700,7 +1710,7 @@ gst_asf_mux_push_simple_index (GstAsfMux * asfmux, GstAsfVideoPad * pad) GST_DEBUG_OBJECT (asfmux, "Pushing the simple index"); g_assert (data - map.data == object_size); gst_buffer_unmap (buf, &map); - return gst_asf_mux_push_buffer (asfmux, buf); + return gst_asf_mux_push_buffer (asfmux, buf, bufsize); } static GstFlowReturn