From 36af26a3304afa86d4acd3a2c035fad4789508ea Mon Sep 17 00:00:00 2001 From: Tom Early Date: Wed, 8 Dec 2021 13:06:40 -0700 Subject: [PATCH] clean up some M17 last-packet errors --- reflector/CodecStream.cpp | 3 --- reflector/M17Protocol.cpp | 8 ++++++++ reflector/Packet.h | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/reflector/CodecStream.cpp b/reflector/CodecStream.cpp index ced0f97..0cb0011 100644 --- a/reflector/CodecStream.cpp +++ b/reflector/CodecStream.cpp @@ -178,9 +178,6 @@ void CCodecStream::Task(void) m_StatsTimer.start(); m_uiTotalPackets++; m_TCWriter.Send(Frame->GetCodecPacket()); -#ifdef DEBUG - std::cout << "Sent a packet to the transcoder from module '" << Frame->GetCodecPacket()->module << "'" << std::endl; -#endif // and push to our local queue m_LocalQueue.push(Packet); diff --git a/reflector/M17Protocol.cpp b/reflector/M17Protocol.cpp index 4ba21d0..7c31bee 100644 --- a/reflector/M17Protocol.cpp +++ b/reflector/M17Protocol.cpp @@ -73,8 +73,16 @@ void CM17Protocol::Task(void) { OnDvHeaderPacketIn(Header, Ip); + // xrf needs a voice frame every 20 ms and an M17 frame is 40 ms, so we need a duplicate auto secondFrame = std::unique_ptr(new CDvFramePacket(*Frame.get())); + + // This is a "first" packet, so clear the last packet status, since the real last packet it the secondFrame + if (Frame->IsLastPacket()) + Frame->SetLastPacket(false); + + // push the "first" packet OnDvFramePacketIn(Frame, &Ip); + // push the "second" packet OnDvFramePacketIn(secondFrame, &Ip); // push two packet because we need a packet every 20 ms } } diff --git a/reflector/Packet.h b/reflector/Packet.h index 0e80bae..1fdc801 100644 --- a/reflector/Packet.h +++ b/reflector/Packet.h @@ -67,6 +67,7 @@ public: // set void UpdatePids(const uint32_t); void SetPacketModule(char cMod) { m_cModule = cMod; } + void SetLastPacket(bool value) { m_bLastPacket = value; } void SetLocalOrigin(void) { m_eOrigin = EOrigin::local; } void SetRemotePeerOrigin(void) { m_eOrigin = EOrigin::peer; }