From 2de9e9012847c3d533112675838e73d2d6e59876 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Fri, 23 Jan 2004 17:45:54 +0000 Subject: [PATCH] gst/avi/gstavidemux.c: don't write to buffer. Extract data without the need of __attribute__ ((packed)) Original commit message from CVS: 2004-01-23 Benjamin Otte * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih), (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index): don't write to buffer. Extract data without the need of __attribute__ ((packed)) --- ChangeLog | 7 +++ gst/avi/gstavidemux.c | 107 ++++++++++++++++++++---------------------- 2 files changed, 58 insertions(+), 56 deletions(-) diff --git a/ChangeLog b/ChangeLog index 210572e79..b0e496569 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2004-01-23 Benjamin Otte + + * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih), + (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index): + don't write to buffer. Extract data without the need of + __attribute__ ((packed)) + 2004-01-23 Ronald Bultje * gst/typefind/gsttypefindfunctions.c: (mpeg1_parse_header), diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index 8b52fe766..431e8cbd2 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -705,7 +705,8 @@ gst_avi_demux_stream_avih (GstAviDemux *avi, GstRiffRead *riff = GST_RIFF_READ (avi); guint32 tag; GstBuffer *buf; - gst_riff_avih *avih; + gst_riff_avih avih; + guint32 *data; if (!gst_riff_read_data (riff, &tag, &buf)) return FALSE; @@ -722,46 +723,43 @@ gst_avi_demux_stream_avih (GstAviDemux *avi, return FALSE; } - avih = (gst_riff_avih *) GST_BUFFER_DATA (buf); - -#if (G_BYTE_ORDER == G_BIG_ENDIAN) - avih->us_frame = GUINT32_FROM_LE (avih->us_frame); - avih->max_bps = GUINT32_FROM_LE (avih->max_bps); - avih->pad_gran = GUINT32_FROM_LE (avih->pad_gran); - avih->flags = GUINT32_FROM_LE (avih->flags); - avih->tot_frames = GUINT32_FROM_LE (avih->tot_frames); - avih->init_frames = GUINT32_FROM_LE (avih->init_frames); - avih->streams = GUINT32_FROM_LE (avih->streams); - avih->bufsize = GUINT32_FROM_LE (avih->bufsize); - avih->width = GUINT32_FROM_LE (avih->width); - avih->height = GUINT32_FROM_LE (avih->height); - avih->scale = GUINT32_FROM_LE (avih->scale); - avih->rate = GUINT32_FROM_LE (avih->rate); - avih->start = GUINT32_FROM_LE (avih->start); - avih->length = GUINT32_FROM_LE (avih->length); -#endif + data = (guint32 *) GST_BUFFER_DATA (buf); + avih.us_frame = GUINT32_FROM_LE (*data); data++; + avih.max_bps = GUINT32_FROM_LE (*data); data++; + avih.pad_gran = GUINT32_FROM_LE (*data); data++; + avih.flags = GUINT32_FROM_LE (*data); data++; + avih.tot_frames = GUINT32_FROM_LE (*data); data++; + avih.init_frames = GUINT32_FROM_LE (*data); data++; + avih.streams = GUINT32_FROM_LE (*data); data++; + avih.bufsize = GUINT32_FROM_LE (*data); data++; + avih.width = GUINT32_FROM_LE (*data); data++; + avih.height = GUINT32_FROM_LE (*data); data++; + avih.scale = GUINT32_FROM_LE (*data); data++; + avih.rate = GUINT32_FROM_LE (*data); data++; + avih.start = GUINT32_FROM_LE (*data); data++; + avih.length = GUINT32_FROM_LE (*data); data++; /* debug stuff */ GST_INFO ("avih tag found:"); - GST_INFO (" us_frame %u", avih->us_frame); - GST_INFO (" max_bps %u", avih->max_bps); - GST_INFO (" pad_gran %u", avih->pad_gran); - GST_INFO (" flags 0x%08x", avih->flags); - GST_INFO (" tot_frames %u", avih->tot_frames); - GST_INFO (" init_frames %u", avih->init_frames); - GST_INFO (" streams %u", avih->streams); - GST_INFO (" bufsize %u", avih->bufsize); - GST_INFO (" width %u", avih->width); - GST_INFO (" height %u", avih->height); - GST_INFO (" scale %u", avih->scale); - GST_INFO (" rate %u", avih->rate); - GST_INFO (" start %u", avih->start); - GST_INFO (" length %u", avih->length); - - avi->num_frames = avih->tot_frames; - avi->us_per_frame = avih->us_frame; - *streams = avih->streams; - *flags = avih->flags; + GST_INFO (" us_frame %u", avih.us_frame); + GST_INFO (" max_bps %u", avih.max_bps); + GST_INFO (" pad_gran %u", avih.pad_gran); + GST_INFO (" flags 0x%08x", avih.flags); + GST_INFO (" tot_frames %u", avih.tot_frames); + GST_INFO (" init_frames %u", avih.init_frames); + GST_INFO (" streams %u", avih.streams); + GST_INFO (" bufsize %u", avih.bufsize); + GST_INFO (" width %u", avih.width); + GST_INFO (" height %u", avih.height); + GST_INFO (" scale %u", avih.scale); + GST_INFO (" rate %u", avih.rate); + GST_INFO (" start %u", avih.start); + GST_INFO (" length %u", avih.length); + + avi->num_frames = avih.tot_frames; + avi->us_per_frame = avih.us_frame; + *streams = avih.streams; + *flags = avih.flags; gst_buffer_unref (buf); @@ -960,7 +958,7 @@ gst_avi_demux_stream_odml (GstAviDemux *avi) switch (tag) { case GST_RIFF_TAG_dmlh: { - gst_riff_dmlh *dmlh; + gst_riff_dmlh dmlh; GstBuffer *buf; if (!gst_riff_read_data (riff, &tag, &buf)) @@ -971,16 +969,12 @@ gst_avi_demux_stream_odml (GstAviDemux *avi) gst_buffer_unref (buf); break; } - dmlh = (gst_riff_dmlh *) GST_BUFFER_DATA (buf); - -#if (G_BYTE_ORDER == G_BIG_ENDIAN) - dmlh->totalframes = GUINT32_FROM_LE (dmlh->totalframes); -#endif + dmlh.totalframes = GUINT32_FROM_LE (*((guint32 *) GST_BUFFER_DATA (buf))); GST_INFO ("dmlh tag found:"); - GST_INFO (" totalframes: %u", dmlh->totalframes); + GST_INFO (" totalframes: %u", dmlh.totalframes); - avi->num_frames = dmlh->totalframes; + avi->num_frames = dmlh.totalframes; gst_buffer_unref (buf); break; } @@ -1054,20 +1048,21 @@ gst_avi_demux_stream_index (GstAviDemux *avi) GST_INFO ("%u index entries", avi->index_size); for (i = 0; i < avi->index_size; i++) { - gst_riff_index_entry *entry; + gst_riff_index_entry entry; avi_stream_context *stream; gint stream_nr; gst_avi_index_entry *target; GstFormat format; + guint32 *data; - entry = &((gst_riff_index_entry *) GST_BUFFER_DATA (buf))[i]; - entry->id = GUINT32_FROM_LE (entry->id); - entry->offset = GUINT32_FROM_LE (entry->offset); - entry->flags = GUINT32_FROM_LE (entry->flags); - entry->size = GUINT32_FROM_LE (entry->size); + data = &((guint32 *) GST_BUFFER_DATA (buf))[i * 4]; + entry.id = GUINT32_FROM_LE (data); + entry.offset = GUINT32_FROM_LE (data + 1); + entry.flags = GUINT32_FROM_LE (data + 2); + entry.size = GUINT32_FROM_LE (data + 3); target = &avi->index_entries[i]; - stream_nr = CHUNKID_TO_STREAMNR (entry->id); + stream_nr = CHUNKID_TO_STREAMNR (entry.id); if (stream_nr >= avi->num_streams || stream_nr < 0) { g_warning ("Index entry %d has invalid stream nr %d", i, stream_nr); @@ -1078,9 +1073,9 @@ gst_avi_demux_stream_index (GstAviDemux *avi) stream = &avi->stream[stream_nr]; target->index_nr = i; - target->flags = entry->flags; - target->size = entry->size; - target->offset = entry->offset; + target->flags = entry.flags; + target->size = entry.size; + target->offset = entry.offset; /* figure out if the index is 0 based or relative to the MOVI start */ if (i == 0) { -- 2.34.1