From 716df37178bd38eff0b17e141f2f3bb75682ceb4 Mon Sep 17 00:00:00 2001 From: Nathan Caldwell Date: Thu, 17 Apr 2008 22:39:24 -0600 Subject: [PATCH] Only realloc every 4 tracks. Keep down memory fragmentation a little. --- src/matroska.h | 1 + src/tracks.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/matroska.h b/src/matroska.h index f77fa5e..1fc8fb5 100644 --- a/src/matroska.h +++ b/src/matroska.h @@ -237,6 +237,7 @@ struct mk_Writer_s { uint8_t wrote_header; uint8_t num_tracks; + uint8_t alloc_tracks; mk_Track **tracks_arr; struct { diff --git a/src/tracks.c b/src/tracks.c index 7b8faaf..ab61225 100644 --- a/src/tracks.c +++ b/src/tracks.c @@ -27,6 +27,8 @@ /* TODO: Figure out what can actually fail without damaging the track. */ +#define TRACK_STEP 4 + mk_Track *mk_createTrack(mk_Writer *w, mk_TrackConfig *tc) { mk_Context *ti, *v; @@ -35,8 +37,12 @@ mk_Track *mk_createTrack(mk_Writer *w, mk_TrackConfig *tc) if (track == NULL) return NULL; - if ((w->tracks_arr = realloc(w->tracks_arr, (w->num_tracks + 1) * sizeof(mk_Track *))) == NULL) - return NULL; // FIXME + if (w->num_tracks + 1 > w->alloc_tracks) + { + if ((w->tracks_arr = realloc(w->tracks_arr, (w->alloc_tracks + TRACK_STEP) * sizeof(mk_Track *))) == NULL) + return NULL; // FIXME + w->alloc_tracks += TRACK_STEP; + } w->tracks_arr[w->num_tracks] = track; track->track_id = ++w->num_tracks; -- 2.11.4.GIT