m17 framenumber improvements

unstable
Tom Early 4 years ago
parent 8440adab12
commit 2a1e2b7404

@ -56,7 +56,6 @@ public:
// identity
bool IsDvFrame(void) const { return true; }
bool HasTranscodableData(void) const { return true; }
// get
const STCPacket *GetCodecPacket() const { return &m_TCPack; }

@ -46,7 +46,7 @@ CPacket::CPacket(uint16_t sid, uint8_t dstarpid)
m_uiYsfPacketId = 0xFF;
m_uiYsfPacketSubId = 0xFF;
m_uiYsfPacketFrameId = 0xFF;
m_uiM17FrameNumber = 0x8000U;
m_uiM17FrameNumber = 0xFFFFFFFFU;
m_cModule = ' ';
m_eOrigin = EOrigin::local;
m_eCodecIn = ECodecType::dstar;
@ -63,7 +63,7 @@ CPacket::CPacket(uint16_t sid, uint8_t dmrpid, uint8_t dmrspid, bool lastpacket)
m_uiYsfPacketId = 0xFF;
m_uiYsfPacketSubId = 0xFF;
m_uiYsfPacketFrameId = 0xFF;
m_uiM17FrameNumber = 0x8000U;
m_uiM17FrameNumber = 0xFFFFFFFFU;
m_cModule = ' ';
m_eOrigin = EOrigin::local;
m_eCodecIn = ECodecType::dmr;
@ -80,7 +80,7 @@ CPacket::CPacket(uint16_t sid, uint8_t ysfpid, uint8_t ysfsubpid, uint8_t ysffri
m_uiDstarPacketId = 0xFF;
m_uiDmrPacketId = 0xFF;
m_uiDmrPacketSubid = 0xFF;
m_uiM17FrameNumber = 0x8000U;
m_uiM17FrameNumber = 0xFFFFFFFFU;
m_cModule = ' ';
m_eOrigin = EOrigin::local;
m_eCodecIn = ECodecType::dmr;
@ -97,7 +97,7 @@ CPacket::CPacket(uint16_t sid, uint8_t dstarpid, uint8_t dmrpid, uint8_t dmrsubp
m_uiYsfPacketId = ysfpid;
m_uiYsfPacketSubId = ysfsubpid;
m_uiYsfPacketFrameId = ysffrid;
m_uiM17FrameNumber = 0x8000U;
m_uiM17FrameNumber = 0xFFFFFFFFU;
m_cModule = ' ';
m_eOrigin = EOrigin::local;
m_eCodecIn = codecIn;
@ -115,7 +115,7 @@ CPacket::CPacket(const CM17Packet &m17) : CPacket()
m_uiYsfPacketSubId = 0xFF;
m_uiYsfPacketFrameId = 0xFF;
m_eCodecIn = (0x6U == (0x6U & m17.GetFrameType())) ? ECodecType::c2_1600 : ECodecType::c2_3200;
m_uiM17FrameNumber = 0x7FFFU & m17.GetFrameNumber();
m_uiM17FrameNumber = 0xFFFFU & m17.GetFrameNumber();
m_bLastPacket = m17.IsLastPacket();
}
@ -148,10 +148,10 @@ void CPacket::UpdatePids(const uint32_t pid)
m_uiYsfPacketFrameId = ((pid / 5) & 0x7FU) << 1;
}
// m17 needs update?
if (m_uiM17FrameNumber == 0x8000U)
if (m_uiM17FrameNumber == 0xFFFFFFFFU)
{
// frames are every 20 milliseconds, so the m17 data will come every 40 milliseconds
m_uiM17FrameNumber = (pid % 2) % 0x7FFFU;
m_uiM17FrameNumber = (pid / 2) % 0x8000U;
}
// set the Is Second member used for M17 clients

@ -45,7 +45,6 @@ public:
// identity
virtual bool IsDvHeader(void) const { return false; }
virtual bool IsDvFrame(void) const { return false; }
virtual bool HasTranscodableData(void) const { return false; }
bool IsLastPacket(void) const { return m_bLastPacket; }
// get
@ -79,7 +78,7 @@ protected:
bool m_bIsSecond;
char m_cModule;
uint16_t m_uiStreamId;
uint16_t m_uiM17FrameNumber;
uint32_t m_uiM17FrameNumber;
uint8_t m_uiDstarPacketId;
uint8_t m_uiDmrPacketId;
uint8_t m_uiDmrPacketSubid;

@ -87,9 +87,10 @@ void CPacketStream::Push(std::unique_ptr<CPacket> Packet)
{
// update stream dependent packet data
m_LastPacketTime.start();
Packet->UpdatePids(m_uiPacketCntr);
if (Packet->IsDvFrame())
m_uiPacketCntr++;
{
Packet->UpdatePids(m_uiPacketCntr++);
}
// transcoder avaliable ?
#ifdef TRANSCODED_MODULES
if ( m_CodecStream != nullptr )
@ -98,7 +99,7 @@ void CPacketStream::Push(std::unique_ptr<CPacket> Packet)
m_CodecStream->Lock();
{
// transcoder ready & frame need transcoding ?
if (Packet->HasTranscodableData())
if (Packet->IsDvFrame())
{
// yes, push packet to trancoder queue
// trancoder will push it after transcoding
@ -107,7 +108,7 @@ void CPacketStream::Push(std::unique_ptr<CPacket> Packet)
}
else
{
// no, just bypass tarnscoder
// no, just bypass transcoder
push(Packet);
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.