kopia lustrzana https://gitlab.com/eliggett/wfview
Small fix for audio packet handling
rodzic
3187651098
commit
03de9b0dfd
|
@ -977,8 +977,12 @@ qint64 audioHandler::readData(char* data, qint64 maxlen)
|
|||
{
|
||||
int timediff = packet->time.msecsTo(QTime::currentTime());
|
||||
if (timediff > (int)latency * 2) {
|
||||
//qDebug(logAudio()) << "Packet " << hex << packet->seq << " arrived too late (increase rx buffer size!) " << dec << packet->time.msecsTo(QTime::currentTime()) << "ms";
|
||||
packet = audioBuffer.erase(packet); // returns next packet
|
||||
qDebug(logAudio()) << "Packet " << hex << packet->seq <<
|
||||
" arrived too late (increase rx latency!) " <<
|
||||
dec << packet->time.msecsTo(QTime::currentTime()) << "ms";
|
||||
while (packet !=audioBuffer.end() && timediff > (int)latency) {
|
||||
packet = audioBuffer.erase(packet); // returns next packet
|
||||
}
|
||||
}
|
||||
else if (packet->seq == lastSeq+1 || packet->seq <= lastSeq)
|
||||
{
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#define INTERNAL_SAMPLE_RATE 48000
|
||||
|
||||
struct audioPacket {
|
||||
quint16 seq;
|
||||
quint32 seq;
|
||||
QTime time;
|
||||
quint16 sent;
|
||||
QByteArray datain;
|
||||
|
@ -85,7 +85,7 @@ private:
|
|||
int chunkSize;
|
||||
bool chunkAvailable;
|
||||
|
||||
quint16 lastSeq;
|
||||
quint32 lastSeq;
|
||||
|
||||
QAudioFormat format;
|
||||
QAudioDeviceInfo deviceInfo;
|
||||
|
|
|
@ -846,11 +846,19 @@ void udpAudio::dataReceived()
|
|||
|
||||
*/
|
||||
control_packet_t in = (control_packet_t)r.constData();
|
||||
|
||||
|
||||
if (in->type != 0x01 && in->len >= 0xAC) {
|
||||
if (in->seq == 0)
|
||||
{
|
||||
// Seq number has rolled over.
|
||||
seqPrefix++;
|
||||
}
|
||||
|
||||
// 0xac is the smallest possible audio packet.
|
||||
lastReceived = QTime::currentTime();
|
||||
audioPacket tempAudio;
|
||||
tempAudio.seq = in->seq;
|
||||
tempAudio.seq = (quint32)seqPrefix << 16 | in->seq;
|
||||
tempAudio.time = lastReceived;
|
||||
tempAudio.sent = 0;
|
||||
tempAudio.datain = r.mid(0x18);
|
||||
|
@ -1067,8 +1075,8 @@ void udpBase::dataReceived(QByteArray r)
|
|||
std::sort(rxSeqBuf.begin(), rxSeqBuf.end());
|
||||
if (in->seq < rxSeqBuf.front())
|
||||
{
|
||||
qDebug(logUdp()) << this->metaObject()->className() << ": ******* seq number may have rolled over ****** previous highest: " << hex << rxSeqBuf.back() << " current: " << hex << in->seq;
|
||||
|
||||
qDebug(logUdp()) << this->metaObject()->className() << ": ******* seq number has rolled over ****** previous highest: " << hex << rxSeqBuf.back() << " current: " << hex << in->seq;
|
||||
//seqPrefix++;
|
||||
// Looks like it has rolled over so clear buffer and start again.
|
||||
rxSeqBuf.clear();
|
||||
return;
|
||||
|
|
|
@ -129,6 +129,8 @@ public:
|
|||
quint32 packetsSent=0;
|
||||
quint32 packetsLost=0;
|
||||
|
||||
quint16 seqPrefix=0;
|
||||
|
||||
private:
|
||||
void sendRetransmitRequest();
|
||||
|
||||
|
|
|
@ -620,7 +620,7 @@ void udpServer::commonReceived(QList<CLIENT*>* l,CLIENT* current, QByteArray r)
|
|||
// Found matching entry?
|
||||
// Send "untracked" as it has already been sent once.
|
||||
QMutexLocker locker(&mutex);
|
||||
qDebug(logUdpServer()) << current->ipAddress.toString() << ":" << current->port << ": Sending retransmit of " << Qt::hex << match->seqNum;
|
||||
qDebug(logUdpServer()) << current->ipAddress.toString() << ":" << current->port << ": Sending retransmit of " << hex << match->seqNum;
|
||||
match->retransmitCount++;
|
||||
current->socket->writeDatagram(match->data, current->ipAddress, current->port);
|
||||
match++;
|
||||
|
|
Ładowanie…
Reference in New Issue