comparison src/wma/wma.c @ 3056:03f247c0d31d

Fix stutter when resuming WMA audio playback.
author John Lindgren <john.lindgren@tds.net>
date Sun, 19 Apr 2009 22:22:27 -0400
parents a3734dd60d7a
children
comparison
equal deleted inserted replaced
3055:eb7348ab56d2 3056:03f247c0d31d
101 } 101 }
102 102
103 return str; 103 return str;
104 } 104 }
105 105
106 static void wma_about(void) 106 static void wma_about(void)
107 { 107 {
108 char *title; 108 char *title;
109 char *message; 109 char *message;
110 110
111 if (dialog1) return; 111 if (dialog1) return;
201 static void wma_do_pause(InputPlayback *playback, short p) 201 static void wma_do_pause(InputPlayback *playback, short p)
202 { 202 {
203 wma_pause = p; 203 wma_pause = p;
204 } 204 }
205 205
206 static void wma_seek(InputPlayback *playback, int time) 206 static void wma_seek(InputPlayback *playback, int time)
207 { 207 {
208 wma_seekpos = time; 208 wma_seekpos = time;
209 while(wma_decode && wma_seekpos!=-1) g_usleep(10000); 209 while(wma_decode && wma_seekpos!=-1) g_usleep(10000);
210 } 210 }
211 211
379 fifo_write(&f, wma_outbuf, out_size, &f.wptr); 379 fifo_write(&f, wma_outbuf, out_size, &f.wptr);
380 380
381 while(!fifo_read(&f, wma_s_outbuf, wma_st_buff, &f.rptr) && wma_decode) 381 while(!fifo_read(&f, wma_s_outbuf, wma_st_buff, &f.rptr) && wma_decode)
382 { 382 {
383 sst_buff = wma_st_buff; 383 sst_buff = wma_st_buff;
384 if (wma_pause)
385 memset(wma_s_outbuf, 0, sst_buff);
386 playback->pass_audio(playback, FMT_S16_NE, 384 playback->pass_audio(playback, FMT_S16_NE,
387 c->channels, sst_buff, (short *)wma_s_outbuf, NULL); 385 c->channels, sst_buff, (short *)wma_s_outbuf, NULL);
388 memset(wma_s_outbuf, 0, sst_buff); 386 memset(wma_s_outbuf, 0, sst_buff);
389 } 387 }
390 388
402 if(pkt.data) av_free_packet(&pkt); 400 if(pkt.data) av_free_packet(&pkt);
403 if(c) avcodec_close(c); 401 if(c) avcodec_close(c);
404 if(ic) av_close_input_file(ic); 402 if(ic) av_close_input_file(ic);
405 } 403 }
406 404
407 static void wma_stop(InputPlayback *playback) 405 static void wma_stop(InputPlayback *playback)
408 { 406 {
409 wma_decode = 0; 407 wma_decode = 0;
410 playback->playing = 0; 408 playback->playing = 0;
411 if(wma_pause) wma_do_pause(playback, 0); 409 if(wma_pause) wma_do_pause(playback, 0);
412 g_thread_join(wma_decode_thread); 410 g_thread_join(wma_decode_thread);
413 playback->output->close_audio(); 411 playback->output->close_audio();
414 } 412 }