[MPlayer-cvslog] r20146 - trunk/libmpdemux/demux_mkv.c
reimar
subversion at mplayerhq.hu
Tue Oct 10 17:01:12 CEST 2006
Author: reimar
Date: Tue Oct 10 17:01:11 2006
New Revision: 20146
Modified:
trunk/libmpdemux/demux_mkv.c
Log:
Simplify (by using realloc with NULL parameter) and refactor code to grow
array in 32-increments
Modified: trunk/libmpdemux/demux_mkv.c
==============================================================================
--- trunk/libmpdemux/demux_mkv.c (original)
+++ trunk/libmpdemux/demux_mkv.c Tue Oct 10 17:01:11 2006
@@ -273,6 +273,16 @@
extern char *audio_lang;
extern int dvdsub_id;
+/**
+ * \brief ensures there is space for at least one additional element
+ * \param array array to grow
+ * \param nelem current number of elements in array
+ * \param elsize size of one array element
+ */
+static void grow_array(void **array, int nelem, size_t elsize) {
+ if (!(nelem & 31))
+ *array = realloc(*array, (nelem + 32) * elsize);
+}
static mkv_track_t *
demux_mkv_find_track_by_num (mkv_demuxer_t *d, int n, int type)
@@ -316,12 +326,8 @@
if (mkv_d->cluster_positions[i] == position)
return;
- if (!mkv_d->cluster_positions)
- mkv_d->cluster_positions = malloc (32 * sizeof (uint64_t));
- else if (!(mkv_d->num_cluster_pos % 32))
- mkv_d->cluster_positions = realloc(mkv_d->cluster_positions,
- (mkv_d->num_cluster_pos+32)
- * sizeof (uint64_t));
+ grow_array(&mkv_d->cluster_positions, mkv_d->num_cluster_pos,
+ sizeof(uint64_t));
mkv_d->cluster_positions[mkv_d->num_cluster_pos++] = position;
}
@@ -1355,12 +1361,7 @@
if (time != EBML_UINT_INVALID && track != EBML_UINT_INVALID
&& pos != EBML_UINT_INVALID)
{
- if (mkv_d->indexes == NULL)
- mkv_d->indexes = malloc (32*sizeof (mkv_index_t));
- else if (mkv_d->num_indexes % 32 == 0)
- mkv_d->indexes = realloc (mkv_d->indexes,
- (mkv_d->num_indexes+32)
- *sizeof (mkv_index_t));
+ grow_array(&mkv_d->indexes, mkv_d->num_indexes, sizeof(mkv_index_t));
mkv_d->indexes[mkv_d->num_indexes].tnum = track;
mkv_d->indexes[mkv_d->num_indexes].timecode = time;
mkv_d->indexes[mkv_d->num_indexes].filepos =mkv_d->segment_start+pos;
@@ -1549,12 +1550,8 @@
mp_msg (MSGT_DEMUX, MSGL_V, "[mkv] | + an attachment...\n");
- if (mkv_d->attachments == NULL)
- mkv_d->attachments = malloc (32*sizeof(*mkv_d->attachments));
- else if (!(mkv_d->num_attachments % 32))
- mkv_d->attachments = realloc (mkv_d->attachments,
- (mkv_d->num_attachments + 32)
- * sizeof(*mkv_d->attachments));
+ grow_array(&mkv_d->attachments, mkv_d->num_attachments,
+ sizeof(*mkv_d->attachments));
while (len > 0)
{
More information about the MPlayer-cvslog
mailing list