From 8bd2f891c7007dc974e8298f84f5fbb354aebb26 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sat, 29 Apr 2017 19:11:16 +0000 Subject: direct sound: faster seeking git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7137 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Output/directsound/outputdirectsound.cpp | 15 +++++++++++---- src/plugins/Output/directsound/outputdirectsound.h | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/plugins/Output/directsound/outputdirectsound.cpp b/src/plugins/Output/directsound/outputdirectsound.cpp index 2d84ad5ba..300b70e57 100644 --- a/src/plugins/Output/directsound/outputdirectsound.cpp +++ b/src/plugins/Output/directsound/outputdirectsound.cpp @@ -52,6 +52,7 @@ OutputDirectSound::OutputDirectSound() : Output() m_dsBufferAt = 0; m_latency = 0; m_bytesPerSecond = 0; + m_reset = false; instance = this; } @@ -186,19 +187,25 @@ bool OutputDirectSound::initialize(quint32 freq, ChannelMap map, Qmmp::AudioForm return true; } - qint64 OutputDirectSound::latency() { return m_latency; } qint64 OutputDirectSound::writeAudio(unsigned char *data, qint64 len) -{ +{ unsigned char *ptr = 0, *ptr2 = 0; DWORD size = 0, size2 = 0; - DWORD available = bytesToWrite(); //available bytes m_latency = (DS_BUFSIZE - available) * 1000 / m_bytesPerSecond; + + if(m_reset) + { + available = DS_BUFSIZE; + m_dsBuffer->SetCurrentPosition(m_dsBufferAt); + m_reset = false; + } + if(available < 128) { usleep(5000); @@ -276,7 +283,7 @@ void OutputDirectSound::resume() void OutputDirectSound::reset() { - m_dsBuffer->SetCurrentPosition(m_dsBufferAt-128); + m_reset = true; } IDirectSoundBuffer8 *OutputDirectSound::secondaryBuffer() diff --git a/src/plugins/Output/directsound/outputdirectsound.h b/src/plugins/Output/directsound/outputdirectsound.h index 295073a18..af70646c6 100644 --- a/src/plugins/Output/directsound/outputdirectsound.h +++ b/src/plugins/Output/directsound/outputdirectsound.h @@ -76,6 +76,7 @@ private: static DSoundChannels m_dsound_pos[10]; qint64 m_latency; qint32 m_bytesPerSecond; + bool m_reset; }; /** -- cgit v1.2.3-13-gbd6f