-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathaudiocapdevice.cpp
37 lines (30 loc) · 914 Bytes
/
audiocapdevice.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "audiocapdevice.h"
AudioCapDevice::AudioCapDevice()
: QIODevice()
, m_position( 0 )
{
}
qint64 AudioCapDevice::readData(char * data, qint64 maxSize)
{
if ( 0 >= maxSize )
return 0;
// If read buffer is empty, swap for write buffer
if ( m_position >= m_readBuffer.size() )
{
if( 0 == m_writeBuffer.size() )
return 0;
m_position = 0;
m_readBuffer = m_writeBuffer;
m_writeBuffer.clear();
}
qint64 bytesRead = qMin( m_readBuffer.size() - m_position, maxSize );
memcpy( data, m_readBuffer.data() + m_position, bytesRead );
m_position += bytesRead;
return bytesRead + readData( data + bytesRead, maxSize - bytesRead );
}
qint64 AudioCapDevice::writeData(const char * data, qint64 maxSize)
{
// TODO start droping data if the buffer gets too big
m_writeBuffer.append( data, maxSize );
return maxSize;
}