diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-04-29 19:11:16 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-04-29 19:11:16 +0000 |
| commit | 8bd2f891c7007dc974e8298f84f5fbb354aebb26 (patch) | |
| tree | 70130e89581fd1fd8756c2e26e5845467e20600f /src/plugins/Output/directsound | |
| parent | dc97c6f8ef5ec508b0e938be080412156f894f04 (diff) | |
| download | qmmp-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/directsound')
| -rw-r--r-- | src/plugins/Output/directsound/outputdirectsound.cpp | 15 | ||||
| -rw-r--r-- | src/plugins/Output/directsound/outputdirectsound.h | 1 |
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;
};
/**
|
