m17 framenumber improvements

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

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

@ -46,7 +46,7 @@ CPacket::CPacket(uint16_t sid, uint8_t dstarpid)
m_uiYsfPacketId = 0xFF; m_uiYsfPacketId = 0xFF;
m_uiYsfPacketSubId = 0xFF; m_uiYsfPacketSubId = 0xFF;
m_uiYsfPacketFrameId = 0xFF; m_uiYsfPacketFrameId = 0xFF;
m_uiM17FrameNumber = 0x8000U; m_uiM17FrameNumber = 0xFFFFFFFFU;
m_cModule = ' '; m_cModule = ' ';
m_eOrigin = EOrigin::local; m_eOrigin = EOrigin::local;
m_eCodecIn = ECodecType::dstar; 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_uiYsfPacketId = 0xFF;
m_uiYsfPacketSubId = 0xFF; m_uiYsfPacketSubId = 0xFF;
m_uiYsfPacketFrameId = 0xFF; m_uiYsfPacketFrameId = 0xFF;
m_uiM17FrameNumber = 0x8000U; m_uiM17FrameNumber = 0xFFFFFFFFU;
m_cModule = ' '; m_cModule = ' ';
m_eOrigin = EOrigin::local; m_eOrigin = EOrigin::local;
m_eCodecIn = ECodecType::dmr; 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_uiDstarPacketId = 0xFF;
m_uiDmrPacketId = 0xFF; m_uiDmrPacketId = 0xFF;
m_uiDmrPacketSubid = 0xFF; m_uiDmrPacketSubid = 0xFF;
m_uiM17FrameNumber = 0x8000U; m_uiM17FrameNumber = 0xFFFFFFFFU;
m_cModule = ' '; m_cModule = ' ';
m_eOrigin = EOrigin::local; m_eOrigin = EOrigin::local;
m_eCodecIn = ECodecType::dmr; 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_uiYsfPacketId = ysfpid;
m_uiYsfPacketSubId = ysfsubpid; m_uiYsfPacketSubId = ysfsubpid;
m_uiYsfPacketFrameId = ysffrid; m_uiYsfPacketFrameId = ysffrid;
m_uiM17FrameNumber = 0x8000U; m_uiM17FrameNumber = 0xFFFFFFFFU;
m_cModule = ' '; m_cModule = ' ';
m_eOrigin = EOrigin::local; m_eOrigin = EOrigin::local;
m_eCodecIn = codecIn; m_eCodecIn = codecIn;
@ -115,7 +115,7 @@ CPacket::CPacket(const CM17Packet &m17) : CPacket()
m_uiYsfPacketSubId = 0xFF; m_uiYsfPacketSubId = 0xFF;
m_uiYsfPacketFrameId = 0xFF; m_uiYsfPacketFrameId = 0xFF;
m_eCodecIn = (0x6U == (0x6U & m17.GetFrameType())) ? ECodecType::c2_1600 : ECodecType::c2_3200; 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(); m_bLastPacket = m17.IsLastPacket();
} }
@ -148,10 +148,10 @@ void CPacket::UpdatePids(const uint32_t pid)
m_uiYsfPacketFrameId = ((pid / 5) & 0x7FU) << 1; m_uiYsfPacketFrameId = ((pid / 5) & 0x7FU) << 1;
} }
// m17 needs update? // 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 // 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 // set the Is Second member used for M17 clients

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

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

Loading…
Cancel
Save

Powered by TurnKey Linux.