Mercurial > mplayer.hg
comparison stream/stream_vcd.c @ 30977:0b45d6af9ffe
Export VCD tracks as chapters, just like for cue:// URLs.
author | reimar |
---|---|
date | Mon, 05 Apr 2010 16:40:04 +0000 |
parents | 079be31079d3 |
children | 9bab99cfdff2 |
comparison
equal
deleted
inserted
replaced
30976:6955998c187e | 30977:0b45d6af9ffe |
---|---|
89 s->pos = newpos; | 89 s->pos = newpos; |
90 vcd_set_msf(s->priv,s->pos/VCD_SECTOR_DATA); | 90 vcd_set_msf(s->priv,s->pos/VCD_SECTOR_DATA); |
91 return 1; | 91 return 1; |
92 } | 92 } |
93 | 93 |
94 static int control(stream_t *stream, int cmd, void *arg) { | |
95 struct stream_priv_s *p = stream->priv; | |
96 switch(cmd) { | |
97 case STREAM_CTRL_GET_NUM_CHAPTERS: | |
98 { | |
99 mp_vcd_priv_t *vcd = vcd_read_toc(stream->fd); | |
100 if (!vcd) | |
101 break; | |
102 *(unsigned int *)arg = vcd->tochdr.cdth_trk1; | |
103 return STREAM_OK; | |
104 } | |
105 case STREAM_CTRL_SEEK_TO_CHAPTER: | |
106 { | |
107 int r; | |
108 unsigned int track = *(unsigned int *)arg + 1; | |
109 mp_vcd_priv_t *vcd = vcd_read_toc(stream->fd); | |
110 if (!vcd) | |
111 break; | |
112 r = vcd_seek_to_track(vcd, track); | |
113 if (r >= 0) { | |
114 p->track = track; | |
115 return STREAM_OK; | |
116 } | |
117 break; | |
118 } | |
119 case STREAM_CTRL_GET_CURRENT_CHAPTER: | |
120 { | |
121 *(unsigned int *)arg = p->track - 1; | |
122 return STREAM_OK; | |
123 } | |
124 } | |
125 return STREAM_UNSUPPORTED; | |
126 } | |
127 | |
94 static void close_s(stream_t *stream) { | 128 static void close_s(stream_t *stream) { |
95 free(stream->priv); | 129 free(stream->priv); |
96 } | 130 } |
97 | 131 |
98 static int open_s(stream_t *stream,int mode, void* opts, int* file_format) { | 132 static int open_s(stream_t *stream,int mode, void* opts, int* file_format) { |
201 stream->end_pos=ret2; | 235 stream->end_pos=ret2; |
202 stream->priv = vcd; | 236 stream->priv = vcd; |
203 | 237 |
204 stream->fill_buffer = fill_buffer; | 238 stream->fill_buffer = fill_buffer; |
205 stream->seek = seek; | 239 stream->seek = seek; |
240 stream->control = control; | |
206 stream->close = close_s; | 241 stream->close = close_s; |
207 *file_format = DEMUXER_TYPE_MPEG_PS; | 242 *file_format = DEMUXER_TYPE_MPEG_PS; |
208 | 243 |
209 m_struct_free(&stream_opts,opts); | 244 m_struct_free(&stream_opts,opts); |
210 return STREAM_OK; | 245 return STREAM_OK; |