Mercurial > mplayer.hg
comparison libmpdemux/demux_xmms.c @ 8536:ff192e1b018f
xmp hangign I noticed too, and is fixed with this patch, seeking works now
witch xmp too.
patch by Balatoni Denes <pnis@coder.hu>
author | arpi |
---|---|
date | Mon, 23 Dec 2002 12:09:31 +0000 |
parents | 9d143176d95f |
children | 222c0a39c977 |
comparison
equal
deleted
inserted
replaced
8535:bc7bd163fff9 | 8536:ff192e1b018f |
---|---|
36 static uint32_t xmms_samplerate; | 36 static uint32_t xmms_samplerate; |
37 static uint32_t xmms_afmt; | 37 static uint32_t xmms_afmt; |
38 static int xmms_length; | 38 static int xmms_length; |
39 static char *xmms_title=NULL; | 39 static char *xmms_title=NULL; |
40 static uint32_t xmms_audiopos=0; | 40 static uint32_t xmms_audiopos=0; |
41 static int xmms_playing=0; | |
41 | 42 |
42 static uint64_t written = 0; | 43 static uint64_t written = 0; |
43 | 44 |
44 static void disk_close(void) {} | 45 static void disk_close(void) {} |
45 static void disk_flush(int time) {} | 46 static void disk_flush(int time) {} |
138 //static void input_add_vis(int time, unsigned char *s, InputVisType type){} | 139 //static void input_add_vis(int time, unsigned char *s, InputVisType type){} |
139 static void input_add_vis_pcm(int time, AFormat fmt, int nch, int length, void *ptr){} | 140 static void input_add_vis_pcm(int time, AFormat fmt, int nch, int length, void *ptr){} |
140 //static void input_update_vis(gint time){} | 141 //static void input_update_vis(gint time){} |
141 //static gchar *input_get_info_text(void){return NULL;} | 142 //static gchar *input_get_info_text(void){return NULL;} |
142 static void input_set_info_text(char * text){} | 143 static void input_set_info_text(char * text){} |
143 static void input_set_info(char* ha,int a, int b, int c, int d){}; | 144 |
144 /* Dummy functions END*/ | 145 /* Dummy functions END*/ |
146 | |
147 static void input_set_info(char* title,int length, int rate, int freq, int nch){ | |
148 xmms_length=length; | |
149 } | |
145 | 150 |
146 static void init_plugins(){ | 151 static void init_plugins(){ |
147 DIR *dir; | 152 DIR *dir; |
148 struct dirent *ent; | 153 struct dirent *ent; |
149 | 154 |
224 demuxer->audio->sh = sh_audio; | 229 demuxer->audio->sh = sh_audio; |
225 demuxer->priv=priv; | 230 demuxer->priv=priv; |
226 sh_audio->ds = demuxer->audio; | 231 sh_audio->ds = demuxer->audio; |
227 | 232 |
228 xmms_output_plugin.init(); | 233 xmms_output_plugin.init(); |
234 ip->output = &xmms_output_plugin; | |
235 ip->play_file(demuxer->stream->url); | |
236 xmms_playing=1; | |
229 ip->get_song_info(demuxer->stream->url,&xmms_title,&xmms_length); | 237 ip->get_song_info(demuxer->stream->url,&xmms_title,&xmms_length); |
230 if (xmms_length<=0) demuxer->seekable=0; | 238 if (xmms_length<=0) demuxer->seekable=0; |
231 // printf("XMMS song title='%s' length=%d\n",xmms_title,xmms_length); | |
232 // input_play(demuxer->stream->url); | |
233 ip->output = &xmms_output_plugin; | |
234 ip->play_file(demuxer->stream->url); | |
235 | 239 |
236 mp_msg(MSGT_DEMUX,MSGL_INFO,"Waiting for the XMMS plugin to start playback of '%s'...\n",demuxer->stream->url); | 240 mp_msg(MSGT_DEMUX,MSGL_INFO,"Waiting for the XMMS plugin to start playback of '%s'...\n",demuxer->stream->url); |
237 while (xmms_channels==0) { | 241 while (xmms_channels==0) { |
238 usleep(10000); | 242 usleep(10000); |
239 if(ip->get_time()<0) return 0; | 243 if(ip->get_time()<0) return 0; |
261 | 265 |
262 int demux_xmms_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds) { | 266 int demux_xmms_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds) { |
263 sh_audio_t *sh_audio = demuxer->audio->sh; | 267 sh_audio_t *sh_audio = demuxer->audio->sh; |
264 xmms_priv_t *priv=demuxer->priv; | 268 xmms_priv_t *priv=demuxer->priv; |
265 demux_packet_t* dp; | 269 demux_packet_t* dp; |
270 | |
271 if (xmms_length<=0) demuxer->seekable=0; | |
272 else demuxer->seekable=1; | |
266 | 273 |
267 while (xmms_audiopos<XMMS_PACKETSIZE/2) { | 274 while (xmms_audiopos<XMMS_PACKETSIZE/2) { |
268 if(priv->ip->get_time()<0) return 0; | 275 if((priv->ip->get_time()<0) || !xmms_playing) { |
276 xmms_audiopos=0; // xmp on exit waits until buffer is freed somewhat | |
277 return 0; | |
278 } | |
269 usleep(1000); | 279 usleep(1000); |
270 } | 280 } |
271 | 281 |
272 pthread_mutex_lock(&xmms_mutex); | 282 pthread_mutex_lock(&xmms_mutex); |
273 dp = new_demux_packet(XMMS_PACKETSIZE/2); | 283 dp = new_demux_packet(XMMS_PACKETSIZE/2); |
305 priv->spos=pos * (float)(sh_audio->wf->nAvgBytesPerSec);; | 315 priv->spos=pos * (float)(sh_audio->wf->nAvgBytesPerSec);; |
306 } | 316 } |
307 | 317 |
308 int demux_close_xmms(demuxer_t* demuxer) { | 318 int demux_close_xmms(demuxer_t* demuxer) { |
309 xmms_priv_t *priv=demuxer->priv; | 319 xmms_priv_t *priv=demuxer->priv; |
320 xmms_playing=0; | |
310 priv->ip->stop(); | 321 priv->ip->stop(); |
311 free(priv); demuxer->priv=NULL; | 322 free(priv); demuxer->priv=NULL; |
312 cleanup_plugins(); | 323 cleanup_plugins(); |
313 return 1; | 324 return 1; |
314 } | 325 } |