summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-04-05 16:40:04 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-04-05 16:40:04 +0000
commit9521c190c3773e3b8e731bbe37e2a0920eb355a1 (patch)
tree0e57dd292f8114bb13bab4b2fe9d5e4a224d8d31 /stream
parentd55c67d157fa0b29abfeb31eeaba949732d36c84 (diff)
downloadmpv-9521c190c3773e3b8e731bbe37e2a0920eb355a1.tar.bz2
mpv-9521c190c3773e3b8e731bbe37e2a0920eb355a1.tar.xz
Export VCD tracks as chapters, just like for cue:// URLs.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31019 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'stream')
-rw-r--r--stream/stream_vcd.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/stream/stream_vcd.c b/stream/stream_vcd.c
index 819c3e52ea..08ae9b4de3 100644
--- a/stream/stream_vcd.c
+++ b/stream/stream_vcd.c
@@ -91,6 +91,40 @@ static int seek(stream_t *s,off_t newpos) {
return 1;
}
+static int control(stream_t *stream, int cmd, void *arg) {
+ struct stream_priv_s *p = stream->priv;
+ switch(cmd) {
+ case STREAM_CTRL_GET_NUM_CHAPTERS:
+ {
+ mp_vcd_priv_t *vcd = vcd_read_toc(stream->fd);
+ if (!vcd)
+ break;
+ *(unsigned int *)arg = vcd->tochdr.cdth_trk1;
+ return STREAM_OK;
+ }
+ case STREAM_CTRL_SEEK_TO_CHAPTER:
+ {
+ int r;
+ unsigned int track = *(unsigned int *)arg + 1;
+ mp_vcd_priv_t *vcd = vcd_read_toc(stream->fd);
+ if (!vcd)
+ break;
+ r = vcd_seek_to_track(vcd, track);
+ if (r >= 0) {
+ p->track = track;
+ return STREAM_OK;
+ }
+ break;
+ }
+ case STREAM_CTRL_GET_CURRENT_CHAPTER:
+ {
+ *(unsigned int *)arg = p->track - 1;
+ return STREAM_OK;
+ }
+ }
+ return STREAM_UNSUPPORTED;
+}
+
static void close_s(stream_t *stream) {
free(stream->priv);
}
@@ -203,6 +237,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
stream->fill_buffer = fill_buffer;
stream->seek = seek;
+ stream->control = control;
stream->close = close_s;
*file_format = DEMUXER_TYPE_MPEG_PS;