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;