mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-09-29 16:26:47 -04: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(
|
void SampleMOFifo::readAsync(
|
||||||
unsigned int amount,
|
unsigned int amount,
|
||||||
unsigned int& ipart1Begin, unsigned int& ipart1End,
|
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(
|
void readSync(
|
||||||
unsigned int amount,
|
unsigned int amount,
|
||||||
unsigned int& ipart1Begin, unsigned int& ipart1End,
|
unsigned int& ipart1Begin, unsigned int& ipart1End, // first part offsets where to read
|
||||||
unsigned int& ipart2Begin, unsigned int& ipart2End
|
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(
|
void readAsync(
|
||||||
unsigned int amount,
|
unsigned int amount,
|
||||||
@ -46,7 +52,14 @@ public:
|
|||||||
unsigned int& ipart2Begin, unsigned int& ipart2End,
|
unsigned int& ipart2Begin, unsigned int& ipart2End,
|
||||||
unsigned int stream
|
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; }
|
std::vector<SampleVector>& getData() { return m_data; }
|
||||||
SampleVector& getData(unsigned int stream) { return m_data[stream]; }
|
SampleVector& getData(unsigned int stream) { return m_data[stream]; }
|
||||||
|
Loading…
Reference in New Issue
Block a user