Reconstruct voice FEC on incoming network audio.
This commit is contained in:
parent
afb4b5db35
commit
8432199f1e
|
@ -38,7 +38,9 @@ m_holdoffTimer(1000U, 0U, 500U),
|
||||||
m_rfFrames(0U),
|
m_rfFrames(0U),
|
||||||
m_netFrames(0U),
|
m_netFrames(0U),
|
||||||
m_rfErrs(0U),
|
m_rfErrs(0U),
|
||||||
m_rfBits(0U),
|
m_rfBits(1U),
|
||||||
|
m_netErrs(0U),
|
||||||
|
m_netBits(1U),
|
||||||
m_rfSource(NULL),
|
m_rfSource(NULL),
|
||||||
m_rfDest(NULL),
|
m_rfDest(NULL),
|
||||||
m_netSource(NULL),
|
m_netSource(NULL),
|
||||||
|
@ -379,6 +381,8 @@ void CYSFControl::writeNetwork()
|
||||||
m_netPayload.reset();
|
m_netPayload.reset();
|
||||||
m_netState = RS_NET_AUDIO;
|
m_netState = RS_NET_AUDIO;
|
||||||
m_netFrames = 0U;
|
m_netFrames = 0U;
|
||||||
|
m_netErrs = 0U;
|
||||||
|
m_netBits = 1U;
|
||||||
} else {
|
} else {
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|
||||||
|
@ -411,6 +415,7 @@ void CYSFControl::writeNetwork()
|
||||||
unsigned char dt = fich.getDT();
|
unsigned char dt = fich.getDT();
|
||||||
unsigned char fn = fich.getFN();
|
unsigned char fn = fich.getFN();
|
||||||
unsigned char fi = fich.getFI();
|
unsigned char fi = fich.getFI();
|
||||||
|
unsigned char ft = fich.getFT();
|
||||||
|
|
||||||
// Set the downlink callsign
|
// Set the downlink callsign
|
||||||
switch (fi) {
|
switch (fi) {
|
||||||
|
@ -423,10 +428,15 @@ void CYSFControl::writeNetwork()
|
||||||
switch (dt) {
|
switch (dt) {
|
||||||
case YSF_DT_VD_MODE1:
|
case YSF_DT_VD_MODE1:
|
||||||
m_netPayload.processVDMode1Data(data + 35U, fn);
|
m_netPayload.processVDMode1Data(data + 35U, fn);
|
||||||
|
m_netErrs += m_netPayload.processVDMode1Audio(data + 35U);
|
||||||
|
m_netBits += 235U;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case YSF_DT_VD_MODE2:
|
case YSF_DT_VD_MODE2:
|
||||||
m_netPayload.processVDMode2Data(data + 35U, fn);
|
m_netPayload.processVDMode2Data(data + 35U, fn);
|
||||||
|
// Temporarily disable the repition FEC code
|
||||||
|
// m_netErrs += m_netPayload.processVDMode2Audio(data + 35U);
|
||||||
|
// m_netBits += 135U;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case YSF_DT_DATA_FR_MODE:
|
case YSF_DT_DATA_FR_MODE:
|
||||||
|
@ -434,6 +444,11 @@ void CYSFControl::writeNetwork()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case YSF_DT_VOICE_FR_MODE:
|
case YSF_DT_VOICE_FR_MODE:
|
||||||
|
if (fn != 0U || ft != 1U) {
|
||||||
|
// The first packet after the header is odd, don't try and regenerate it
|
||||||
|
m_netErrs += m_netPayload.processVoiceFRModeAudio(data + 35U);
|
||||||
|
m_netBits += 720U;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -453,7 +468,7 @@ void CYSFControl::writeNetwork()
|
||||||
writeQueueNet(data + 33U);
|
writeQueueNet(data + 33U);
|
||||||
|
|
||||||
if (end) {
|
if (end) {
|
||||||
LogMessage("YSF, received network end of transmission, %.1f seconds", float(m_netFrames) / 10.0F);
|
LogMessage("YSF, received network end of transmission, %.1f seconds, BER: %.1f%%", float(m_netFrames) / 10.0F, float(m_netErrs * 100U) / float(m_netBits));
|
||||||
writeEndNet();
|
writeEndNet();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -474,7 +489,7 @@ void CYSFControl::clock(unsigned int ms)
|
||||||
m_networkWatchdog.clock(ms);
|
m_networkWatchdog.clock(ms);
|
||||||
|
|
||||||
if (m_networkWatchdog.hasExpired()) {
|
if (m_networkWatchdog.hasExpired()) {
|
||||||
LogMessage("YSF, network watchdog has expired, %.1f seconds", float(m_netFrames) / 10.0F);
|
LogMessage("YSF, network watchdog has expired, %.1f seconds, BER: %.1f%%", float(m_netFrames) / 10.0F, float(m_netErrs * 100U) / float(m_netBits));
|
||||||
writeEndNet();
|
writeEndNet();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,8 @@ private:
|
||||||
unsigned int m_netFrames;
|
unsigned int m_netFrames;
|
||||||
unsigned int m_rfErrs;
|
unsigned int m_rfErrs;
|
||||||
unsigned int m_rfBits;
|
unsigned int m_rfBits;
|
||||||
|
unsigned int m_netErrs;
|
||||||
|
unsigned int m_netBits;
|
||||||
unsigned char* m_rfSource;
|
unsigned char* m_rfSource;
|
||||||
unsigned char* m_rfDest;
|
unsigned char* m_rfDest;
|
||||||
unsigned char* m_netSource;
|
unsigned char* m_netSource;
|
||||||
|
|
Loading…
Reference in a new issue