Mercurial > audlegacy-plugins
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 } |