mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
Sample MO FIFO write updates
This commit is contained in:
parent
e7cd9c32cc
commit
054298f3e1
@ -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;
|
||||
}
|
@ -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]; }
|
||||
|
Loading…
Reference in New Issue
Block a user