aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2017-04-29 19:11:16 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2017-04-29 19:11:16 +0000
commit8bd2f891c7007dc974e8298f84f5fbb354aebb26 (patch)
tree70130e89581fd1fd8756c2e26e5845467e20600f /src/plugins/Output
parentdc97c6f8ef5ec508b0e938be080412156f894f04 (diff)
downloadqmmp-8bd2f891c7007dc974e8298f84f5fbb354aebb26.tar.gz
qmmp-8bd2f891c7007dc974e8298f84f5fbb354aebb26.tar.bz2
qmmp-8bd2f891c7007dc974e8298f84f5fbb354aebb26.zip
direct sound: faster seeking
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7137 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Output')
-rw-r--r--src/plugins/Output/directsound/outputdirectsound.cpp15
-rw-r--r--src/plugins/Output/directsound/outputdirectsound.h1
2 files changed, 12 insertions, 4 deletions
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;
};
/**