From c897b7bee0d3eaab03f4f5fc518d5dded8ca5c32 Mon Sep 17 00:00:00 2001 From: Sebastian Dröge Date: Thu, 28 Jun 2007 19:00:43 +0000 Subject: ext/wavpack/gstwavpackparse.*: Use a GSList for the GArray that is used like a list anyway. Original commit message from CVS: * 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. --- ext/wavpack/gstwavpackparse.c | 40 ++++++++++++++++++---------------------- ext/wavpack/gstwavpackparse.h | 4 ++-- 2 files changed, 20 insertions(+), 24 deletions(-) (limited to 'ext/wavpack') 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 */ -- cgit