asfmux: allocate byte readers on the stack
authorTim-Philipp Müller <tim@centricular.com>
Wed, 10 Sep 2014 18:19:32 +0000 (19:19 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Wed, 10 Sep 2014 18:19:32 +0000 (19:19 +0100)
gst/asfmux/gstasfobjects.c
gst/asfmux/gstasfparse.c

index 0719f5cd24dc4f88557fc84448a469bc271734b9..c2b112926d7807b9a4ecc246b22519e673c3c26a 100644 (file)
@@ -564,7 +564,7 @@ gst_asf_parse_packet_from_data (guint8 * data, gsize size, GstBuffer * buffer,
   guint8 mo_number_len_type;
   guint8 mo_offset_type;
 */
-  GstByteReader *reader;
+  GstByteReader reader;
   gboolean ret = TRUE;
   guint8 first = 0;
   guint8 err_length = 0;        /* length of the error fields */
@@ -584,10 +584,10 @@ gst_asf_parse_packet_from_data (guint8 * data, gsize size, GstBuffer * buffer,
     return FALSE;
   }
 
-  reader = gst_byte_reader_new (data, size);
+  gst_byte_reader_init (&reader, data, size);
 
   GST_LOG ("Starting packet parsing, size: %" G_GSIZE_FORMAT, size);
-  if (!gst_byte_reader_get_uint8 (reader, &first))
+  if (!gst_byte_reader_get_uint8 (&reader, &first))
     goto error;
 
   if (first & 0x80) {           /* error correction present */
@@ -602,11 +602,11 @@ gst_asf_parse_packet_from_data (guint8 * data, gsize size, GstBuffer * buffer,
     err_cor_len = (first & 0x0F);
     err_length += err_cor_len;
     GST_DEBUG ("Error correction data length: %d", (gint) err_cor_len);
-    if (!gst_byte_reader_skip (reader, err_cor_len))
+    if (!gst_byte_reader_skip (&reader, err_cor_len))
       goto error;
 
     /* put payload parsing info first byte in aux var */
-    if (!gst_byte_reader_get_uint8 (reader, &aux))
+    if (!gst_byte_reader_get_uint8 (&reader, &aux))
       goto error;
   } else {
     aux = first;
@@ -626,7 +626,7 @@ gst_asf_parse_packet_from_data (guint8 * data, gsize size, GstBuffer * buffer,
     GST_DEBUG ("Packet contains multiple payloads");
   }
 
-  if (!gst_byte_reader_get_uint8 (reader, &aux))
+  if (!gst_byte_reader_get_uint8 (&reader, &aux))
     goto error;
 
 /*
@@ -637,13 +637,13 @@ gst_asf_parse_packet_from_data (guint8 * data, gsize size, GstBuffer * buffer,
 
   /* gets the fields lengths */
   GST_LOG ("Getting packet and padding length");
-  if (!gst_byte_reader_get_asf_var_size_field (reader,
+  if (!gst_byte_reader_get_asf_var_size_field (&reader,
           packet_len_type, &packet_len))
     goto error;
-  if (!gst_byte_reader_skip (reader,
+  if (!gst_byte_reader_skip (&reader,
           gst_asf_get_var_size_field_len (seq_len_type)))
     goto error;
-  if (!gst_byte_reader_get_asf_var_size_field (reader,
+  if (!gst_byte_reader_get_asf_var_size_field (&reader,
           padding_len_type, &padd_len))
     goto error;
 
@@ -674,9 +674,9 @@ gst_asf_parse_packet_from_data (guint8 * data, gsize size, GstBuffer * buffer,
   }
 
   GST_LOG ("Getting send time and duration");
-  if (!gst_byte_reader_get_uint32_le (reader, &send_time))
+  if (!gst_byte_reader_get_uint32_le (&reader, &send_time))
     goto error;
-  if (!gst_byte_reader_get_uint16_le (reader, &duration))
+  if (!gst_byte_reader_get_uint16_le (&reader, &duration))
     goto error;
 
   has_keyframe = FALSE;
@@ -685,9 +685,9 @@ gst_asf_parse_packet_from_data (guint8 * data, gsize size, GstBuffer * buffer,
     has_keyframe = GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
   } else {
     if (mult_payloads) {
-      ret = gst_asf_parse_mult_payload (reader, &has_keyframe);
+      ret = gst_asf_parse_mult_payload (&reader, &has_keyframe);
     } else {
-      ret = gst_asf_parse_single_payload (reader, &has_keyframe);
+      ret = gst_asf_parse_single_payload (&reader, &has_keyframe);
     }
   }
 
@@ -712,14 +712,12 @@ gst_asf_parse_packet_from_data (guint8 * data, gsize size, GstBuffer * buffer,
   packet->seq_field_type = seq_len_type;
   packet->err_cor_len = err_length;
 
-  gst_byte_reader_free (reader);
   return ret;
 
 error:
   ret = FALSE;
   GST_WARNING ("Error while parsing data packet");
 end:
-  gst_byte_reader_free (reader);
   return ret;
 }
 
@@ -789,7 +787,7 @@ gst_asf_parse_headers_from_data (guint8 * data, guint size,
   gboolean ret = TRUE;
   guint32 header_objects = 0;
   guint32 i;
-  GstByteReader *reader;
+  GstByteReader reader;
   guint64 object_size;
 
   object_size = gst_asf_match_and_peek_obj_size (data,
@@ -800,32 +798,33 @@ gst_asf_parse_headers_from_data (guint8 * data, guint size,
     return FALSE;
   }
 
-  reader = gst_byte_reader_new (data, size);
+  gst_byte_reader_init (&reader, data, size);
 
-  if (!gst_byte_reader_skip (reader, ASF_GUID_OBJSIZE_SIZE))
+  if (!gst_byte_reader_skip (&reader, ASF_GUID_OBJSIZE_SIZE))
     goto error;
-  if (!gst_byte_reader_get_uint32_le (reader, &header_objects))
+  if (!gst_byte_reader_get_uint32_le (&reader, &header_objects))
     goto error;
   GST_DEBUG ("ASF: Header has %" G_GUINT32_FORMAT " child"
       " objects", header_objects);
   /* skip reserved bytes */
-  if (!gst_byte_reader_skip (reader, 2))
+  if (!gst_byte_reader_skip (&reader, 2))
     goto error;
 
   /* iterate through childs of header object */
   for (i = 0; i < header_objects; i++) {
     const guint8 *guid = NULL;
     guint64 obj_size = 0;
-    if (!gst_byte_reader_get_data (reader, ASF_GUID_SIZE, &guid))
+
+    if (!gst_byte_reader_get_data (&reader, ASF_GUID_SIZE, &guid))
       goto error;
-    if (!gst_byte_reader_get_uint64_le (reader, &obj_size))
+    if (!gst_byte_reader_get_uint64_le (&reader, &obj_size))
       goto error;
 
     if (gst_asf_match_guid (guid, &guids[ASF_FILE_PROPERTIES_OBJECT_INDEX])) {
-      ret = gst_asf_parse_file_properties_obj (reader, file_info);
+      ret = gst_asf_parse_file_properties_obj (&reader, file_info);
     } else {
       /* we don't know/care about this object */
-      if (!gst_byte_reader_skip (reader, obj_size - ASF_GUID_OBJSIZE_SIZE))
+      if (!gst_byte_reader_skip (&reader, obj_size - ASF_GUID_OBJSIZE_SIZE))
         goto error;
     }
 
@@ -838,7 +837,6 @@ error:
   ret = FALSE;
   GST_WARNING ("ASF: Error while parsing headers");
 end:
-  gst_byte_reader_free (reader);
   return ret;
 }
 
index fe869e8cb5443de2a2f31177303f425b7a53992f..c2882668de7ae5d5fc2463508bba4d6f632b66c8 100644 (file)
@@ -75,17 +75,17 @@ static GstFlowReturn
 gst_asf_parse_parse_data_object (GstAsfParse * asfparse, guint8 * data,
     gsize size)
 {
-  GstByteReader *reader;
+  GstByteReader reader;
   GstFlowReturn ret = GST_FLOW_OK;
   guint64 packet_count = 0;
 
   GST_DEBUG_OBJECT (asfparse, "Parsing data object");
 
-  reader = gst_byte_reader_new (data, size);
+  gst_byte_reader_init (&reader, data, size);
   /* skip to packet count */
-  if (!gst_byte_reader_skip (reader, 40))
+  if (!gst_byte_reader_skip (&reader, 40))
     goto error;
-  if (!gst_byte_reader_get_uint64_le (reader, &packet_count))
+  if (!gst_byte_reader_get_uint64_le (&reader, &packet_count))
     goto error;
 
   if (asfparse->asfinfo->packets_count != packet_count) {
@@ -97,13 +97,11 @@ gst_asf_parse_parse_data_object (GstAsfParse * asfparse, guint8 * data,
         packet_count);
   }
 
-  gst_byte_reader_free (reader);
   return GST_FLOW_OK;
 
 error:
   ret = GST_FLOW_ERROR;
   GST_ERROR_OBJECT (asfparse, "Error while parsing data object headers");
-  gst_byte_reader_free (reader);
   return ret;
 }