mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-04 05:22:30 +00:00
asfmux: allocate byte readers on the stack
This commit is contained in:
parent
ff444dbf6d
commit
c08c99b894
2 changed files with 27 additions and 31 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue