summaryrefslogtreecommitdiffstats
path: root/gst/mxf/mxfdemux.c
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-11-22 14:42:08 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-11-22 14:42:08 +0000
commitf336a478badf143e19063a0dda0cfc90f3cca00e (patch)
tree456e94b80f8cede922d227a6be258830183db021 /gst/mxf/mxfdemux.c
parentffa8f53c26f308ab9ec4b60c58f7e3084b9cdd3d (diff)
downloadgst-plugins-bad-f336a478badf143e19063a0dda0cfc90f3cca00e.tar.gz
gst-plugins-bad-f336a478badf143e19063a0dda0cfc90f3cca00e.tar.bz2
gst-plugins-bad-f336a478badf143e19063a0dda0cfc90f3cca00e.zip
gst/mxf/: Use guint instead of guint64 or gsize for all buffer sizes and use correct format strings for them. Only lo...
Original commit message from CVS: * gst/mxf/mxfaes-bwf.c: (mxf_metadata_wave_audio_essence_descriptor_parse): * gst/mxf/mxfaes-bwf.h: * gst/mxf/mxfdemux.c: (gst_mxf_demux_pull_range), (gst_mxf_demux_pull_klv_packet), (gst_mxf_demux_parse_footer_metadata), (gst_mxf_demux_handle_klv_packet), (gst_mxf_demux_pull_and_handle_klv_packet), (gst_mxf_demux_chain): * gst/mxf/mxfmpeg.c: (mxf_metadata_mpeg_video_descriptor_parse): * gst/mxf/mxfmpeg.h: * gst/mxf/mxfparse.c: (mxf_timestamp_parse), (mxf_fraction_parse), (mxf_utf16_to_utf8), (mxf_product_version_parse), (mxf_partition_pack_parse), (mxf_primer_pack_parse), (mxf_local_tag_parse), (mxf_metadata_preface_parse), (mxf_metadata_identification_parse), (mxf_metadata_content_storage_parse), (mxf_metadata_essence_container_data_parse), (mxf_metadata_generic_package_parse), (mxf_metadata_track_parse), (mxf_metadata_sequence_parse), (mxf_metadata_structural_component_parse), (mxf_metadata_generic_descriptor_parse), (mxf_metadata_file_descriptor_parse), (mxf_metadata_generic_sound_essence_descriptor_parse), (mxf_metadata_generic_picture_essence_descriptor_parse), (mxf_metadata_cdci_picture_essence_descriptor_parse), (mxf_metadata_multiple_descriptor_parse), (mxf_metadata_locator_parse): * gst/mxf/mxfparse.h: Use guint instead of guint64 or gsize for all buffer sizes and use correct format strings for them. Only local tag set sizes are still guint16 as they can't be larger. Only allow KLV packets of sizes below 1<<32 as GStreamer only uses guint for buffer sizes. The MXF standard allows packet sizes up to 1<<64.
Diffstat (limited to 'gst/mxf/mxfdemux.c')
-rw-r--r--gst/mxf/mxfdemux.c49
1 files changed, 28 insertions, 21 deletions
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
index ce3c5abe..36520737 100644
--- a/gst/mxf/mxfdemux.c
+++ b/gst/mxf/mxfdemux.c
@@ -376,7 +376,7 @@ gst_mxf_demux_pull_range (GstMXFDemux * demux, guint64 offset,
ret = gst_pad_pull_range (demux->sinkpad, offset, size, buffer);
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
GST_WARNING_OBJECT (demux,
- "failed when pulling %d bytes from offset %" G_GUINT64_FORMAT ": %s",
+ "failed when pulling %u bytes from offset %" G_GUINT64_FORMAT ": %s",
size, offset, gst_flow_get_name (ret));
*buffer = NULL;
return ret;
@@ -384,7 +384,7 @@ gst_mxf_demux_pull_range (GstMXFDemux * demux, guint64 offset,
if (G_UNLIKELY (*buffer && GST_BUFFER_SIZE (*buffer) != size)) {
GST_WARNING_OBJECT (demux,
- "partial pull got %d when expecting %d from offset %" G_GUINT64_FORMAT,
+ "partial pull got %u when expecting %u from offset %" G_GUINT64_FORMAT,
GST_BUFFER_SIZE (*buffer), size, offset);
gst_buffer_unref (*buffer);
ret = GST_FLOW_UNEXPECTED;
@@ -1127,9 +1127,8 @@ gst_mxf_demux_handle_header_metadata_resolve_references (GstMXFDemux * demux)
MXFMetadataEssenceContainerData, i);
for (j = 0; j < demux->content_storage.n_essence_container_data; j++) {
- if (mxf_ul_is_equal (&demux->
- content_storage.essence_container_data_uids[j],
- &data->instance_uid)) {
+ if (mxf_ul_is_equal (&demux->content_storage.
+ essence_container_data_uids[j], &data->instance_uid)) {
demux->content_storage.essence_container_data[j] = data;
break;
}
@@ -1414,8 +1413,8 @@ gst_mxf_demux_handle_header_metadata_resolve_references (GstMXFDemux * demux)
continue;
type =
- mxf_metadata_track_identifier_parse (&component->
- data_definition);
+ mxf_metadata_track_identifier_parse
+ (&component->data_definition);
break;
}
} else {
@@ -1977,12 +1976,12 @@ gst_mxf_demux_handle_index_table_segment (GstMXFDemux * demux,
static GstFlowReturn
gst_mxf_demux_pull_klv_packet (GstMXFDemux * demux, guint64 offset, MXFUL * key,
- GstBuffer ** outbuf, guint64 * read)
+ GstBuffer ** outbuf, guint * read)
{
GstBuffer *buffer = NULL;
const guint8 *data;
guint64 data_offset = 0;
- guint64 length;
+ guint length;
gchar key_str[48];
GstFlowReturn ret = GST_FLOW_OK;
@@ -2015,10 +2014,14 @@ gst_mxf_demux_pull_klv_packet (GstMXFDemux * demux, guint64 offset, MXFUL * key,
gst_buffer_unref (buffer);
- /* Must be at most 8 according to SMPTE-379M 5.3.4 */
+ /* Must be at most 8 according to SMPTE-379M 5.3.4 and
+ * GStreamer buffers can only have a 4 bytes length */
if (slen > 8) {
- GST_ERROR_OBJECT (demux, "Invalid KLV packet length: %" G_GUINT64_FORMAT,
- slen);
+ GST_ERROR_OBJECT (demux, "Invalid KLV packet length: %u", slen);
+ ret = GST_FLOW_ERROR;
+ goto beach;
+ } else if (slen > 4) {
+ GST_ERROR_OBJECT (demux, "Unsupported KLV packet length: %u", slen);
ret = GST_FLOW_ERROR;
goto beach;
}
@@ -2064,7 +2067,7 @@ gst_mxf_demux_parse_footer_metadata (GstMXFDemux * demux)
guint64 offset, old_offset = demux->offset;
MXFUL key;
GstBuffer *buffer = NULL;
- guint64 read = 0;
+ guint read = 0;
GstFlowReturn ret = GST_FLOW_OK;
memcpy (&partition, &demux->partition, sizeof (MXFPartitionPack));
@@ -2253,11 +2256,11 @@ gst_mxf_demux_handle_klv_packet (GstMXFDemux * demux, const MXFUL * key,
ret = gst_mxf_demux_handle_index_table_segment (demux, key, buffer);
} else if (mxf_is_fill (key)) {
GST_DEBUG_OBJECT (demux,
- "Skipping filler packet of size %" G_GUINT64_FORMAT " at offset %"
+ "Skipping filler packet of size %u at offset %"
G_GUINT64_FORMAT, GST_BUFFER_SIZE (buffer), demux->offset);
} else {
GST_DEBUG_OBJECT (demux,
- "Skipping unknown packet of size %" G_GUINT64_FORMAT " at offset %"
+ "Skipping unknown packet of size %u at offset %"
G_GUINT64_FORMAT ", key: %s", GST_BUFFER_SIZE (buffer), demux->offset,
mxf_ul_to_string (key, key_str));
}
@@ -2272,7 +2275,7 @@ gst_mxf_demux_pull_and_handle_klv_packet (GstMXFDemux * demux)
GstBuffer *buffer = NULL;
MXFUL key;
GstFlowReturn ret = GST_FLOW_OK;
- guint64 read = 0;
+ guint read = 0;
ret =
gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buffer,
@@ -2402,14 +2405,14 @@ gst_mxf_demux_chain (GstPad * pad, GstBuffer * inbuf)
GstMXFDemux *demux = NULL;
MXFUL key;
const guint8 *data = NULL;
- guint64 length = 0;
+ guint length = 0;
guint64 offset = 0;
GstBuffer *buffer = NULL;
gchar key_str[48];
demux = GST_MXF_DEMUX (gst_pad_get_parent (pad));
- GST_LOG_OBJECT (demux, "received buffer of %d bytes at offset %"
+ GST_LOG_OBJECT (demux, "received buffer of %u bytes at offset %"
G_GUINT64_FORMAT, GST_BUFFER_SIZE (inbuf), GST_BUFFER_OFFSET (inbuf));
if (G_UNLIKELY (GST_BUFFER_OFFSET (inbuf) == 0)) {
@@ -2497,10 +2500,14 @@ gst_mxf_demux_chain (GstPad * pad, GstBuffer * inbuf)
offset = 16 + 1 + slen;
- /* Must be at most 8 according to SMPTE-379M 5.3.4 */
+ /* Must be at most 8 according to SMPTE-379M 5.3.4 and
+ * GStreamer buffers can only have a 4 bytes length */
if (slen > 8) {
- GST_ERROR_OBJECT (demux,
- "Invalid KLV packet length: %" G_GUINT64_FORMAT, slen);
+ GST_ERROR_OBJECT (demux, "Invalid KLV packet length: %u", slen);
+ ret = GST_FLOW_ERROR;
+ break;
+ } else if (slen > 4) {
+ GST_ERROR_OBJECT (demux, "Unsupported KLV packet length: %u", slen);
ret = GST_FLOW_ERROR;
break;
}