Fix M17 audio speed: Assign Even/Odd sequence numbers to split packets

pull/23/head
Dave Behnke 1 month ago
parent 6f2b7d6421
commit 5a146e3aa4

@ -100,22 +100,26 @@ void CM17Protocol::Task(void)
memcpy(part1, valData, halfSize);
memcpy(part2, valData + halfSize, halfSize);
// Create first frame with first half
// We need a way to set payload. CDvFramePacket doesn't have SetCodecData for arbitrary arrays easily,
// but it has memcpy in constructor.
// Let's modify the Frame processing.
// Update Sequence Numbers for TCD aggregation (Even/Odd pair)
// We interpret the incoming M17 frame number as the base sequence.
const STCPacket* tcC = Frame->GetCodecPacket();
STCPacket* tc = const_cast<STCPacket*>(tcC);
uint32_t originalSeq = tc->sequence;
// We act on the "Frame" object for the first part
// First packet gets even sequence
tc->sequence = originalSeq * 2;
// Create first frame with first half
// We need to overwrite its payload.
// Accessing m_TCPack.m17 directly via cast or memcpy to GetCodecData pointer?
uint8_t* framePayload = const_cast<uint8_t*>(valData);
memcpy(framePayload, part1, 16); // Write 8 bytes then zeros? Or just 8 bytes. TCPack.m17 is 16 bytes.
// Wait, if we send to TCD, TCD expects 8 bytes for 20ms? Or 16 bytes padded?
// Let's assume 8 bytes at start.
memcpy(framePayload, part1, 16);
memset(framePayload + halfSize, 0, 16 - halfSize);
// Create second frame with second half
auto secondFrame = std::unique_ptr<CDvFramePacket>(new CDvFramePacket(*Frame.get()));
// Set sequence to Odd
const_cast<STCPacket*>(secondFrame->GetCodecPacket())->sequence = originalSeq * 2 + 1;
// Overwrite payload of second frame
uint8_t* secondPayload = const_cast<uint8_t*>(secondFrame->GetCodecData(cType));

Loading…
Cancel
Save

Powered by TurnKey Linux.