summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-06 18:55:34 +0000
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-06 18:55:34 +0000
commit1de0c3327d10a43ff3532be7e92c3160c52d55c8 (patch)
tree3530f1fc5b4e87782fbf839dc863b616c779a052 /libmpdemux/demuxer.c
parentd6f16f68897cf2fe11f9ac02fe5ba1dc58c4842e (diff)
downloadmpv-1de0c3327d10a43ff3532be7e92c3160c52d55c8.tar.bz2
mpv-1de0c3327d10a43ff3532be7e92c3160c52d55c8.tar.xz
Add matroska chapter seeking capability.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19348 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r--libmpdemux/demuxer.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 1432dac7aa..5a97f35ffb 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -287,6 +287,12 @@ skip_streamfree:
}
if(demuxer->filename)
free(demuxer->filename);
+ if (demuxer->chapters) {
+ for (i=0; i<demuxer->num_chapters; i++)
+ if (demuxer->chapters[i].name)
+ free(demuxer->chapters[i].name);
+ free(demuxer->chapters);
+ }
free(demuxer);
}
@@ -1024,3 +1030,17 @@ int demuxer_switch_audio(demuxer_t *demuxer, int index){
index = demuxer->audio->id;
return index;
}
+
+int demuxer_add_chapter(demuxer_t* demuxer, const char* name, uint64_t start, uint64_t end){
+ if (demuxer->chapters == NULL)
+ demuxer->chapters = malloc (32*sizeof(*demuxer->chapters));
+ else if (!(demuxer->num_chapters % 32))
+ demuxer->chapters = realloc (demuxer->chapters, (demuxer->num_chapters + 32) * sizeof(*demuxer->chapters));
+
+ demuxer->chapters[demuxer->num_chapters].start = start;
+ demuxer->chapters[demuxer->num_chapters].end = end;
+ demuxer->chapters[demuxer->num_chapters].name = strdup(name);
+
+ return demuxer->num_chapters ++;
+}
+