summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-03-01 19:59:54 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-03-01 19:59:54 +0000
commit686565165f7d50b3ef0ef7707171a9ef2baf861d (patch)
treecbd396384f9d6a26e680668cc6dd9eef40deac2b /stream
parent592af7cd2c9c3ff1f0469924c0141dbfc912e6f9 (diff)
downloadmpv-686565165f7d50b3ef0ef7707171a9ef2baf861d.tar.bz2
mpv-686565165f7d50b3ef0ef7707171a9ef2baf861d.tar.xz
Implement cue:// track switching via chapter forward/backward like for audio CDs.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30807 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'stream')
-rw-r--r--stream/stream_cue.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/stream/stream_cue.c b/stream/stream_cue.c
index 81fa038648..35936117d1 100644
--- a/stream/stream_cue.c
+++ b/stream/stream_cue.c
@@ -545,6 +545,33 @@ static int seek(stream_t *s,off_t newpos) {
return 1;
}
+static int control(stream_t *stream, int cmd, void *arg) {
+ switch(cmd) {
+ case STREAM_CTRL_GET_NUM_CHAPTERS:
+ {
+ *(unsigned int *)arg = nTracks;
+ return STREAM_OK;
+ }
+ case STREAM_CTRL_SEEK_TO_CHAPTER:
+ {
+ int r;
+ unsigned int track = *(unsigned int *)arg;
+ r = cue_vcd_seek_to_track(track);
+ if (r >= 0) {
+ stream->start_pos = r;
+ stream->end_pos = cue_vcd_get_track_end(track);
+ return STREAM_OK;
+ }
+ break;
+ }
+ case STREAM_CTRL_GET_CURRENT_CHAPTER:
+ {
+ *(unsigned int *)arg = cue_current_pos.track;
+ return STREAM_OK;
+ }
+ }
+ return STREAM_UNSUPPORTED;
+}
static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
struct stream_priv_s* p = (struct stream_priv_s*)opts;
@@ -591,6 +618,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
stream->end_pos = ret2;
stream->fill_buffer = cue_vcd_read;
stream->seek = seek;
+ stream->control = control;
free(filename);
m_struct_free(&stream_opts,opts);