Commit 51f94288 authored by Thomas Roos's avatar Thomas Roos Committed by Sebastian Dröge

directsoundsink: Fix sleep for buffer-time lower than 200000

https://bugzilla.gnome.org/show_bug.cgi?id=748680
parent 2da5c850
......@@ -615,7 +615,8 @@ gst_directsound_sink_write (GstAudioSink * asink, gpointer data, guint length)
&dwCurrentPlayCursor, NULL);
if (SUCCEEDED (hRes) && SUCCEEDED (hRes2) && (dwStatus & DSBSTATUS_PLAYING)) {
DWORD dwFreeBufferSize;
DWORD dwFreeBufferSize = 0;
DWORD sleepTime = 0;
calculate_freesize:
/* calculate the free size of the circular buffer */
......@@ -628,7 +629,17 @@ gst_directsound_sink_write (GstAudioSink * asink, gpointer data, guint length)
dwCurrentPlayCursor - dsoundsink->current_circular_offset;
if (length >= dwFreeBufferSize) {
Sleep (100);
sleepTime =
((length -
dwFreeBufferSize) * 1000) / (dsoundsink->bytes_per_sample *
GST_AUDIO_BASE_SINK (asink)->ringbuffer->spec.info.rate);
if (sleepTime > 0) {
GST_DEBUG_OBJECT (dsoundsink,
"gst_directsound_sink_write: length:%i, FreeBufSiz: %ld, sleepTime: %ld, bps: %i, rate: %i",
length, dwFreeBufferSize, sleepTime, dsoundsink->bytes_per_sample,
GST_AUDIO_BASE_SINK (asink)->ringbuffer->spec.info.rate);
Sleep (sleepTime);
}
hRes = IDirectSoundBuffer_GetCurrentPosition (dsoundsink->pDSBSecondary,
&dwCurrentPlayCursor, NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment