vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sat Nov 24 17:20:19 2012 +0200| [1f96d5f125578419d0b9ce388d772bb7242d4b93] | committer: Rémi Denis-Courmont
wasapi: fake delay (approximately) if the stream has not started > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1f96d5f125578419d0b9ce388d772bb7242d4b93 --- modules/audio_output/wasapi.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/modules/audio_output/wasapi.c b/modules/audio_output/wasapi.c index 92a28d7..d7e6f9a 100644 --- a/modules/audio_output/wasapi.c +++ b/modules/audio_output/wasapi.c @@ -127,6 +127,7 @@ struct aout_sys_t uint8_t bits; /**< Bits per sample */ unsigned rate; /**< Sample rate */ unsigned bytes_per_frame; + UINT32 written; /**< Frames written to the buffer */ UINT32 frames; /**< Total buffer size (frames) */ HANDLE ready; /**< Semaphore from MTA thread */ @@ -155,8 +156,9 @@ static int TimeGet(audio_output_t *aout, mtime_t *restrict delay) if (pos == 0) { - msg_Dbg(aout, "cannot compute position: still propagating buffers"); - return -1; + *delay = sys->written * CLOCK_FREQ / sys->rate; + msg_Dbg(aout, "extrapolating position: still propagating buffers"); + return 0; } *delay = ((GetQPC() - qpcpos) / (10000000 / CLOCK_FREQ)); @@ -211,6 +213,7 @@ static void Play(audio_output_t *aout, block_t *block) block->p_buffer += copy; block->i_buffer -= copy; block->i_nb_samples -= frames; + sys->written += frames; if (block->i_nb_samples == 0) break; /* done */ @@ -241,6 +244,7 @@ static void Pause(audio_output_t *aout, bool paused, mtime_t date) msg_Warn(aout, "cannot %s stream (error 0x%lx)", paused ? "stop" : "start", hr); Leave(); + (void) date; } @@ -255,9 +259,12 @@ static void Flush(audio_output_t *aout, bool wait) Enter(); IAudioClient_Stop(sys->client); hr = IAudioClient_Reset(sys->client); + Leave(); + if (FAILED(hr)) msg_Warn(aout, "cannot reset stream (error 0x%lx)", hr); - Leave(); + else + sys->written = 0; } static int SimpleVolumeSet(audio_output_t *aout, float vol) @@ -812,6 +819,7 @@ retry: sys->rate = fmt->i_rate; sys->bytes_per_frame = fmt->i_bytes_per_frame; + sys->written = 0; aout->time_get = TimeGet; aout->play = Play; aout->pause = Pause; _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
