diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | ext/wavpack/gstwavpackparse.c | 40 | ||||
-rw-r--r-- | ext/wavpack/gstwavpackparse.h | 4 |
3 files changed, 30 insertions, 24 deletions
@@ -1,3 +1,13 @@ +2007-06-28 Sebastian Dröge <slomo@circular-chaos.org> + + * ext/wavpack/gstwavpackparse.c: + (gst_wavpack_parse_index_get_last_entry), + (gst_wavpack_parse_index_get_entry_from_sample), + (gst_wavpack_parse_index_append_entry), (gst_wavpack_parse_reset), + (gst_wavpack_parse_scan_to_find_sample): + * ext/wavpack/gstwavpackparse.h: + Use a GSList for the GArray that is used like a list anyway. + 2007-06-28 Tim-Philipp Müller <tim at centricular dot net> * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_setcaps), diff --git a/ext/wavpack/gstwavpackparse.c b/ext/wavpack/gstwavpackparse.c index 0c77d555..3ab84b4c 100644 --- a/ext/wavpack/gstwavpackparse.c +++ b/ext/wavpack/gstwavpackparse.c @@ -141,13 +141,9 @@ gst_wavpack_parse_class_init (GstWavpackParseClass * klass) static GstWavpackParseIndexEntry * gst_wavpack_parse_index_get_last_entry (GstWavpackParse * wvparse) { - gint last; - g_assert (wvparse->entries != NULL); - g_assert (wvparse->entries->len > 0); - last = wvparse->entries->len - 1; - return &g_array_index (wvparse->entries, GstWavpackParseIndexEntry, last); + return wvparse->entries->data; } static GstWavpackParseIndexEntry * @@ -155,14 +151,15 @@ gst_wavpack_parse_index_get_entry_from_sample (GstWavpackParse * wvparse, gint64 sample_offset) { gint i; + GSList *node; - if (wvparse->entries == NULL || wvparse->entries->len == 0) + if (wvparse->entries == NULL) return NULL; - for (i = wvparse->entries->len - 1; i >= 0; --i) { + for (node = wvparse->entries, i = 0; node; node = node->next, i++) { GstWavpackParseIndexEntry *entry; - entry = &g_array_index (wvparse->entries, GstWavpackParseIndexEntry, i); + entry = node->data; GST_LOG_OBJECT (wvparse, "Index entry %03u: sample %" G_GINT64_FORMAT " @" " byte %" G_GINT64_FORMAT, i, entry->sample_offset, entry->byte_offset); @@ -187,15 +184,12 @@ static void gst_wavpack_parse_index_append_entry (GstWavpackParse * wvparse, gint64 byte_offset, gint64 sample_offset, gint64 num_samples) { - GstWavpackParseIndexEntry entry; + GstWavpackParseIndexEntry *entry; - if (wvparse->entries == NULL) { - wvparse->entries = g_array_new (FALSE, TRUE, - sizeof (GstWavpackParseIndexEntry)); - } else { - /* do we have this one already? */ - entry = *gst_wavpack_parse_index_get_last_entry (wvparse); - if (entry.byte_offset >= byte_offset) + /* do we have this one already? */ + if (wvparse->entries) { + entry = gst_wavpack_parse_index_get_last_entry (wvparse); + if (entry->byte_offset >= byte_offset) return; } @@ -204,10 +198,11 @@ gst_wavpack_parse_index_append_entry (GstWavpackParse * wvparse, GST_TIME_ARGS (gst_util_uint64_scale_int (sample_offset, GST_SECOND, wvparse->samplerate)), byte_offset); - entry.byte_offset = byte_offset; - entry.sample_offset = sample_offset; - entry.sample_offset_end = sample_offset + num_samples; - g_array_append_val (wvparse->entries, entry); + entry = g_new0 (GstWavpackParseIndexEntry, 1); + entry->byte_offset = byte_offset; + entry->sample_offset = sample_offset; + entry->sample_offset_end = sample_offset + num_samples; + wvparse->entries = g_slist_prepend (wvparse->entries, entry); } static void @@ -226,7 +221,8 @@ gst_wavpack_parse_reset (GstWavpackParse * parse) parse->upstream_length = -1; if (parse->entries) { - g_array_free (parse->entries, TRUE); + g_slist_foreach (parse->entries, (GFunc) g_free, NULL); + g_slist_free (parse->entries); parse->entries = NULL; } @@ -405,7 +401,7 @@ gst_wavpack_parse_scan_to_find_sample (GstWavpackParse * parse, /* if we have an index, we can start scanning from the last known offset * in there, after all we know our wanted sample is not in the index */ - if (parse->entries && parse->entries->len > 0) { + if (parse->entries) { GstWavpackParseIndexEntry *entry; entry = gst_wavpack_parse_index_get_last_entry (parse); diff --git a/ext/wavpack/gstwavpackparse.h b/ext/wavpack/gstwavpackparse.h index 0b089d9f..d1c76365 100644 --- a/ext/wavpack/gstwavpackparse.h +++ b/ext/wavpack/gstwavpackparse.h @@ -71,11 +71,11 @@ struct _GstWavpackParse GstAdapter *adapter; /* when operating chain-based, otherwise NULL */ - /* Array of GstWavpackParseIndexEntry structs, mapping known + /* List of GstWavpackParseIndexEntry structs, mapping known * sample offsets to byte offsets. Is kept increasing without * gaps (ie. append only and consecutive entries must always * map to consecutive chunks in the file). */ - GArray *entries; + GSList *entries; /* Queued events (e.g. tag events we receive before we create the src pad) */ GList *queued_events; /* STREAM_LOCK */ |