Sample MO FIFO write updates

This commit is contained in:
f4exb 2019-10-23 18:35:47 +02:00
parent e7cd9c32cc
commit 054298f3e1
2 changed files with 86 additions and 4 deletions

View File

@ -128,6 +128,40 @@ void SampleMOFifo::writeSync(const std::vector<SampleVector::const_iterator>& vb
}
}
void SampleMOFifo::writeSync(
unsigned int amount,
unsigned int& ipart1Begin, unsigned int& ipart1End, // first part offsets where to write
unsigned int& ipart2Begin, unsigned int& ipart2End // second part offsets
)
{
QMutexLocker mutexLocker(&m_mutex);
unsigned int spaceLeft = m_size - m_writeHead;
if (amount <= spaceLeft)
{
ipart1Begin = m_writeHead;
ipart1End = m_writeHead + amount;
ipart2Begin = m_size;
ipart2End = m_size;
m_writeHead += amount;
}
else
{
unsigned int remaining = amount - spaceLeft;
ipart1Begin = m_writeHead;
ipart1End = m_size;
ipart2Begin = 0;
ipart2End = remaining;
m_writeHead = remaining;
}
}
void SampleMOFifo::commitWriteSync(unsigned int amount)
{
QMutexLocker mutexLocker(&m_mutex);
m_readCount = amount < m_readCount ? m_readCount - amount : 0;
}
void SampleMOFifo::readAsync(
unsigned int amount,
unsigned int& ipart1Begin, unsigned int& ipart1End,
@ -187,3 +221,38 @@ void SampleMOFifo::writeAsync(const SampleVector::const_iterator& begin, unsigne
}
}
}
void SampleMOFifo::writeAsync(
unsigned int amount,
unsigned int& ipart1Begin, unsigned int& ipart1End,
unsigned int& ipart2Begin, unsigned int& ipart2End,
unsigned int stream
)
{
QMutexLocker mutexLocker(&m_mutex);
unsigned int spaceLeft = m_size - m_vWriteHead[stream];
if (amount <= spaceLeft)
{
ipart1Begin = m_vWriteHead[stream];
ipart1End = m_vWriteHead[stream] + amount;
ipart2Begin = m_size;
ipart2End = m_size;
m_vWriteHead[stream] += amount;
}
else
{
unsigned int remaining = amount - spaceLeft;
ipart1Begin = m_vWriteHead[stream];
ipart1End = m_size;
ipart2Begin = 0;
ipart2End = remaining;
m_vWriteHead[stream] = remaining;
}
}
void SampleMOFifo::commitWriteAsync(unsigned int amount, unsigned int stream)
{
QMutexLocker mutexLocker(&m_mutex);
m_vReadCount[stream] = amount < m_vReadCount[stream] ? m_vReadCount[stream] - amount : 0;
}

View File

@ -35,10 +35,16 @@ public:
void readSync(
unsigned int amount,
unsigned int& ipart1Begin, unsigned int& ipart1End,
unsigned int& ipart2Begin, unsigned int& ipart2End
unsigned int& ipart1Begin, unsigned int& ipart1End, // first part offsets where to read
unsigned int& ipart2Begin, unsigned int& ipart2End // second part offsets
);
void writeSync(const std::vector<SampleVector::const_iterator>& vbegin, unsigned int amount);
void writeSync(const std::vector<SampleVector::const_iterator>& vbegin, unsigned int amount); //!< copy write
void writeSync( //!< in place write
unsigned int amount,
unsigned int& ipart1Begin, unsigned int& ipart1End, // first part offsets where to write
unsigned int& ipart2Begin, unsigned int& ipart2End // second part offsets
);
void commitWriteSync(unsigned int amount); //!< For in place write tells how much samples were written once done
void readAsync(
unsigned int amount,
@ -46,7 +52,14 @@ public:
unsigned int& ipart2Begin, unsigned int& ipart2End,
unsigned int stream
);
void writeAsync(const SampleVector::const_iterator& begin, unsigned int amount, unsigned int stream);
void writeAsync(const SampleVector::const_iterator& begin, unsigned int amount, unsigned int stream); //!< copy write
void writeAsync( //!< in place write
unsigned int amount,
unsigned int& ipart1Begin, unsigned int& ipart1End,
unsigned int& ipart2Begin, unsigned int& ipart2End,
unsigned int stream
);
void commitWriteAsync(unsigned int amount, unsigned int stream); //!< For in place write tells how much samples were written once done
std::vector<SampleVector>& getData() { return m_data; }
SampleVector& getData(unsigned int stream) { return m_data[stream]; }