mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 15:08:53 +00:00
directsoundsink: Fix sleep for buffer-time lower than 200000
https://bugzilla.gnome.org/show_bug.cgi?id=748680
This commit is contained in:
parent
2da5c85068
commit
51f94288ce
1 changed files with 13 additions and 2 deletions
|
@ -615,7 +615,8 @@ gst_directsound_sink_write (GstAudioSink * asink, gpointer data, guint length)
|
||||||
&dwCurrentPlayCursor, NULL);
|
&dwCurrentPlayCursor, NULL);
|
||||||
|
|
||||||
if (SUCCEEDED (hRes) && SUCCEEDED (hRes2) && (dwStatus & DSBSTATUS_PLAYING)) {
|
if (SUCCEEDED (hRes) && SUCCEEDED (hRes2) && (dwStatus & DSBSTATUS_PLAYING)) {
|
||||||
DWORD dwFreeBufferSize;
|
DWORD dwFreeBufferSize = 0;
|
||||||
|
DWORD sleepTime = 0;
|
||||||
|
|
||||||
calculate_freesize:
|
calculate_freesize:
|
||||||
/* calculate the free size of the circular buffer */
|
/* 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;
|
dwCurrentPlayCursor - dsoundsink->current_circular_offset;
|
||||||
|
|
||||||
if (length >= dwFreeBufferSize) {
|
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,
|
hRes = IDirectSoundBuffer_GetCurrentPosition (dsoundsink->pDSBSecondary,
|
||||||
&dwCurrentPlayCursor, NULL);
|
&dwCurrentPlayCursor, NULL);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue