mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 02:00:33 +00:00
Fix endian issues with metadata. Some Cleanups too
Original commit message from CVS: Fix endian issues with metadata. Some Cleanups too
This commit is contained in:
parent
37afd27681
commit
9314894ee3
1 changed files with 27 additions and 26 deletions
|
@ -412,7 +412,7 @@ gst_avi_demux_metadata (GstAviDemux *avi_demux, gint len)
|
||||||
{
|
{
|
||||||
guint32 got_bytes;
|
guint32 got_bytes;
|
||||||
GstByteStream *bs = avi_demux->bs;
|
GstByteStream *bs = avi_demux->bs;
|
||||||
gst_riff_chunk *chunk;
|
gst_riff_chunk *temp_chunk, chunk;
|
||||||
gchar *name, *type;
|
gchar *name, *type;
|
||||||
GstProps *props;
|
GstProps *props;
|
||||||
GstPropsEntry *entry;
|
GstPropsEntry *entry;
|
||||||
|
@ -420,24 +420,29 @@ gst_avi_demux_metadata (GstAviDemux *avi_demux, gint len)
|
||||||
props = gst_props_empty_new ();
|
props = gst_props_empty_new ();
|
||||||
|
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
got_bytes = gst_bytestream_peek_bytes(bs, (guint8**)&chunk, sizeof(gst_riff_chunk));
|
got_bytes = gst_bytestream_peek_bytes (bs, (guint8**)&temp_chunk, sizeof (gst_riff_chunk));
|
||||||
gst_bytestream_flush(bs, sizeof(gst_riff_chunk));
|
|
||||||
if (got_bytes != sizeof(gst_riff_chunk))
|
/* fixup for our big endian friends */
|
||||||
|
chunk.id = GUINT32_FROM_LE (temp_chunk->id);
|
||||||
|
chunk.size = GUINT32_FROM_LE (temp_chunk->size);
|
||||||
|
|
||||||
|
gst_bytestream_flush (bs, sizeof (gst_riff_chunk));
|
||||||
|
if (got_bytes != sizeof (gst_riff_chunk))
|
||||||
return;
|
return;
|
||||||
len -= sizeof(gst_riff_chunk);
|
len -= sizeof (gst_riff_chunk);
|
||||||
|
|
||||||
/* don't care about empty entries - move on */
|
/* don't care about empty entries - move on */
|
||||||
if (chunk->size == 0)
|
if (chunk.size == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
got_bytes = gst_bytestream_peek_bytes(bs, (guint8**)&name, chunk->size);
|
got_bytes = gst_bytestream_peek_bytes (bs, (guint8**)&name, chunk.size);
|
||||||
gst_bytestream_flush(bs, (chunk->size + 1) &~ 1);
|
gst_bytestream_flush (bs, (chunk.size + 1) & ~1);
|
||||||
if (got_bytes != chunk->size)
|
if (got_bytes != chunk.size)
|
||||||
return;
|
return;
|
||||||
len -= ((chunk->size + 1) &~ 1);
|
len -= ((chunk.size + 1) & ~1);
|
||||||
|
|
||||||
/* we now have an info string in 'name' of type 'chunk.id' - find 'type' */
|
/* we now have an info string in 'name' of type 'chunk.id' - find 'type' */
|
||||||
switch (chunk->id) {
|
switch (chunk.id) {
|
||||||
case GST_RIFF_INFO_IARL:
|
case GST_RIFF_INFO_IARL:
|
||||||
type = "Location";
|
type = "Location";
|
||||||
break;
|
break;
|
||||||
|
@ -514,16 +519,17 @@ gst_avi_demux_metadata (GstAviDemux *avi_demux, gint len)
|
||||||
|
|
||||||
if (type) {
|
if (type) {
|
||||||
/* create props entry */
|
/* create props entry */
|
||||||
entry = gst_props_entry_new(type, GST_PROPS_STRING(name));
|
entry = gst_props_entry_new (type, GST_PROPS_STRING (name));
|
||||||
gst_props_add_entry (props, entry);
|
gst_props_add_entry (props, entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_props_debug(props);
|
gst_props_debug(props);
|
||||||
|
|
||||||
avi_demux->metadata = gst_caps_new("avi_metadata",
|
gst_caps_replace_sink (&avi_demux->metadata,
|
||||||
|
gst_caps_new("avi_metadata",
|
||||||
"application/x-gst-metadata",
|
"application/x-gst-metadata",
|
||||||
props);
|
props));
|
||||||
|
|
||||||
g_object_notify(G_OBJECT(avi_demux), "metadata");
|
g_object_notify(G_OBJECT(avi_demux), "metadata");
|
||||||
}
|
}
|
||||||
|
@ -537,9 +543,10 @@ gst_avi_demux_streaminfo (GstAviDemux *avi_demux)
|
||||||
|
|
||||||
/* compression formats are added later - a bit hacky */
|
/* compression formats are added later - a bit hacky */
|
||||||
|
|
||||||
avi_demux->streaminfo = gst_caps_new("avi_streaminfo",
|
gst_caps_replace_sink (&avi_demux->streaminfo,
|
||||||
|
gst_caps_new("avi_streaminfo",
|
||||||
"application/x-gst-streaminfo",
|
"application/x-gst-streaminfo",
|
||||||
props);
|
props));
|
||||||
|
|
||||||
/*g_object_notify(G_OBJECT(avi_demux), "streaminfo");*/
|
/*g_object_notify(G_OBJECT(avi_demux), "streaminfo");*/
|
||||||
}
|
}
|
||||||
|
@ -1700,14 +1707,8 @@ gst_avi_demux_change_state (GstElement *element)
|
||||||
break;
|
break;
|
||||||
case GST_STATE_PAUSED_TO_READY:
|
case GST_STATE_PAUSED_TO_READY:
|
||||||
gst_bytestream_destroy (avi_demux->bs);
|
gst_bytestream_destroy (avi_demux->bs);
|
||||||
if (avi_demux->metadata) {
|
gst_caps_replace (&avi_demux->metadata, NULL);
|
||||||
gst_caps_unref(avi_demux->metadata);
|
gst_caps_replace (&avi_demux->streaminfo, NULL);
|
||||||
avi_demux->metadata = NULL;
|
|
||||||
}
|
|
||||||
if (avi_demux->streaminfo) {
|
|
||||||
gst_caps_unref(avi_demux->streaminfo);
|
|
||||||
avi_demux->streaminfo = NULL;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case GST_STATE_READY_TO_NULL:
|
case GST_STATE_READY_TO_NULL:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue