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  <in7y118@public.uni-hamburg.de>

* 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))
This commit is contained in:
Benjamin Otte 2004-01-23 17:45:54 +00:00
parent eefc01aee0
commit 2de9e90128
2 changed files with 57 additions and 55 deletions

View file

@ -1,3 +1,10 @@
2004-01-23 Benjamin Otte <in7y118@public.uni-hamburg.de>
* 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 <rbultje@ronald.bitfreak.net> 2004-01-23 Ronald Bultje <rbultje@ronald.bitfreak.net>
* gst/typefind/gsttypefindfunctions.c: (mpeg1_parse_header), * gst/typefind/gsttypefindfunctions.c: (mpeg1_parse_header),

View file

@ -705,7 +705,8 @@ gst_avi_demux_stream_avih (GstAviDemux *avi,
GstRiffRead *riff = GST_RIFF_READ (avi); GstRiffRead *riff = GST_RIFF_READ (avi);
guint32 tag; guint32 tag;
GstBuffer *buf; GstBuffer *buf;
gst_riff_avih *avih; gst_riff_avih avih;
guint32 *data;
if (!gst_riff_read_data (riff, &tag, &buf)) if (!gst_riff_read_data (riff, &tag, &buf))
return FALSE; return FALSE;
@ -722,46 +723,43 @@ gst_avi_demux_stream_avih (GstAviDemux *avi,
return FALSE; return FALSE;
} }
avih = (gst_riff_avih *) GST_BUFFER_DATA (buf); data = (guint32 *) GST_BUFFER_DATA (buf);
avih.us_frame = GUINT32_FROM_LE (*data); data++;
#if (G_BYTE_ORDER == G_BIG_ENDIAN) avih.max_bps = GUINT32_FROM_LE (*data); data++;
avih->us_frame = GUINT32_FROM_LE (avih->us_frame); avih.pad_gran = GUINT32_FROM_LE (*data); data++;
avih->max_bps = GUINT32_FROM_LE (avih->max_bps); avih.flags = GUINT32_FROM_LE (*data); data++;
avih->pad_gran = GUINT32_FROM_LE (avih->pad_gran); avih.tot_frames = GUINT32_FROM_LE (*data); data++;
avih->flags = GUINT32_FROM_LE (avih->flags); avih.init_frames = GUINT32_FROM_LE (*data); data++;
avih->tot_frames = GUINT32_FROM_LE (avih->tot_frames); avih.streams = GUINT32_FROM_LE (*data); data++;
avih->init_frames = GUINT32_FROM_LE (avih->init_frames); avih.bufsize = GUINT32_FROM_LE (*data); data++;
avih->streams = GUINT32_FROM_LE (avih->streams); avih.width = GUINT32_FROM_LE (*data); data++;
avih->bufsize = GUINT32_FROM_LE (avih->bufsize); avih.height = GUINT32_FROM_LE (*data); data++;
avih->width = GUINT32_FROM_LE (avih->width); avih.scale = GUINT32_FROM_LE (*data); data++;
avih->height = GUINT32_FROM_LE (avih->height); avih.rate = GUINT32_FROM_LE (*data); data++;
avih->scale = GUINT32_FROM_LE (avih->scale); avih.start = GUINT32_FROM_LE (*data); data++;
avih->rate = GUINT32_FROM_LE (avih->rate); avih.length = GUINT32_FROM_LE (*data); data++;
avih->start = GUINT32_FROM_LE (avih->start);
avih->length = GUINT32_FROM_LE (avih->length);
#endif
/* debug stuff */ /* debug stuff */
GST_INFO ("avih tag found:"); GST_INFO ("avih tag found:");
GST_INFO (" us_frame %u", avih->us_frame); GST_INFO (" us_frame %u", avih.us_frame);
GST_INFO (" max_bps %u", avih->max_bps); GST_INFO (" max_bps %u", avih.max_bps);
GST_INFO (" pad_gran %u", avih->pad_gran); GST_INFO (" pad_gran %u", avih.pad_gran);
GST_INFO (" flags 0x%08x", avih->flags); GST_INFO (" flags 0x%08x", avih.flags);
GST_INFO (" tot_frames %u", avih->tot_frames); GST_INFO (" tot_frames %u", avih.tot_frames);
GST_INFO (" init_frames %u", avih->init_frames); GST_INFO (" init_frames %u", avih.init_frames);
GST_INFO (" streams %u", avih->streams); GST_INFO (" streams %u", avih.streams);
GST_INFO (" bufsize %u", avih->bufsize); GST_INFO (" bufsize %u", avih.bufsize);
GST_INFO (" width %u", avih->width); GST_INFO (" width %u", avih.width);
GST_INFO (" height %u", avih->height); GST_INFO (" height %u", avih.height);
GST_INFO (" scale %u", avih->scale); GST_INFO (" scale %u", avih.scale);
GST_INFO (" rate %u", avih->rate); GST_INFO (" rate %u", avih.rate);
GST_INFO (" start %u", avih->start); GST_INFO (" start %u", avih.start);
GST_INFO (" length %u", avih->length); GST_INFO (" length %u", avih.length);
avi->num_frames = avih->tot_frames; avi->num_frames = avih.tot_frames;
avi->us_per_frame = avih->us_frame; avi->us_per_frame = avih.us_frame;
*streams = avih->streams; *streams = avih.streams;
*flags = avih->flags; *flags = avih.flags;
gst_buffer_unref (buf); gst_buffer_unref (buf);
@ -960,7 +958,7 @@ gst_avi_demux_stream_odml (GstAviDemux *avi)
switch (tag) { switch (tag) {
case GST_RIFF_TAG_dmlh: { case GST_RIFF_TAG_dmlh: {
gst_riff_dmlh *dmlh; gst_riff_dmlh dmlh;
GstBuffer *buf; GstBuffer *buf;
if (!gst_riff_read_data (riff, &tag, &buf)) if (!gst_riff_read_data (riff, &tag, &buf))
@ -971,16 +969,12 @@ gst_avi_demux_stream_odml (GstAviDemux *avi)
gst_buffer_unref (buf); gst_buffer_unref (buf);
break; break;
} }
dmlh = (gst_riff_dmlh *) GST_BUFFER_DATA (buf); dmlh.totalframes = GUINT32_FROM_LE (*((guint32 *) GST_BUFFER_DATA (buf)));
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
dmlh->totalframes = GUINT32_FROM_LE (dmlh->totalframes);
#endif
GST_INFO ("dmlh tag found:"); 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); gst_buffer_unref (buf);
break; break;
} }
@ -1054,20 +1048,21 @@ gst_avi_demux_stream_index (GstAviDemux *avi)
GST_INFO ("%u index entries", avi->index_size); GST_INFO ("%u index entries", avi->index_size);
for (i = 0; i < avi->index_size; i++) { for (i = 0; i < avi->index_size; i++) {
gst_riff_index_entry *entry; gst_riff_index_entry entry;
avi_stream_context *stream; avi_stream_context *stream;
gint stream_nr; gint stream_nr;
gst_avi_index_entry *target; gst_avi_index_entry *target;
GstFormat format; GstFormat format;
guint32 *data;
entry = &((gst_riff_index_entry *) GST_BUFFER_DATA (buf))[i]; data = &((guint32 *) GST_BUFFER_DATA (buf))[i * 4];
entry->id = GUINT32_FROM_LE (entry->id); entry.id = GUINT32_FROM_LE (data);
entry->offset = GUINT32_FROM_LE (entry->offset); entry.offset = GUINT32_FROM_LE (data + 1);
entry->flags = GUINT32_FROM_LE (entry->flags); entry.flags = GUINT32_FROM_LE (data + 2);
entry->size = GUINT32_FROM_LE (entry->size); entry.size = GUINT32_FROM_LE (data + 3);
target = &avi->index_entries[i]; 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) { if (stream_nr >= avi->num_streams || stream_nr < 0) {
g_warning ("Index entry %d has invalid stream nr %d", g_warning ("Index entry %d has invalid stream nr %d",
i, stream_nr); i, stream_nr);
@ -1078,9 +1073,9 @@ gst_avi_demux_stream_index (GstAviDemux *avi)
stream = &avi->stream[stream_nr]; stream = &avi->stream[stream_nr];
target->index_nr = i; target->index_nr = i;
target->flags = entry->flags; target->flags = entry.flags;
target->size = entry->size; target->size = entry.size;
target->offset = entry->offset; target->offset = entry.offset;
/* figure out if the index is 0 based or relative to the MOVI start */ /* figure out if the index is 0 based or relative to the MOVI start */
if (i == 0) { if (i == 0) {