Initial setup for CLion

This commit is contained in:
2026-03-28 16:54:11 +11:00
parent 239cc02591
commit 7b4134133c
1136 changed files with 811916 additions and 0 deletions

123
MediaClient/rtp/rtp_rx.cpp Normal file
View File

@@ -0,0 +1,123 @@
/***************************************************************************************
*
* IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
* Copyright (C) 2014-2024, Happytimesoft Corporation, all rights reserved.
*
* Redistribution and use in binary forms, with or without modification, are permitted.
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*
****************************************************************************************/
#include "sys_inc.h"
#include "rtp_rx.h"
#include "rtp.h"
BOOL rtp_data_rx(RTPRXI * p_rxi, uint8 * p_data, int len)
{
uint8 * p_rtp = p_data;
uint32 rtp_len = len;
// Check for the 12-byte RTP header:
if (rtp_len < 12)
{
return FALSE;
}
uint32 rtpHdr = rtp_read_uint32(p_rtp); p_rtp += 4; rtp_len -= 4;
uint8 rtpPT = ((rtpHdr & 0x007f0000) >> 16);
BOOL rtpMarkerBit = (rtpHdr & 0x00800000) != 0;
uint16 rtpSeq = rtpHdr & 0xFFFF;
uint32 rtpTimestamp = rtp_read_uint32(p_rtp); p_rtp += 4; rtp_len -= 4;
uint32 rtpSSRC = rtp_read_uint32(p_rtp); p_rtp += 4; rtp_len -= 4;
// Check the RTP version number (it should be 2)
if ((rtpHdr & 0xC0000000) != 0x80000000)
{
return FALSE;
}
// Skip over any CSRC identifiers in the header
uint32 cc = (rtpHdr >> 24) & 0x0F;
if (rtp_len < cc * 4)
{
return FALSE;
}
p_rtp += cc * 4; rtp_len -= cc * 4;
// Check for (& ignore) any RTP header extension
if (rtpHdr & 0x10000000)
{
if (rtp_len < 4)
{
return FALSE;
}
uint32 extHdr = rtp_read_uint32(p_rtp); p_rtp += 4; rtp_len -= 4;
uint32 remExtSize = 4 * (extHdr & 0xFFFF);
if (rtp_len < remExtSize)
{
return FALSE;
}
p_rtp += remExtSize; rtp_len -= remExtSize;
}
// Discard any padding bytes:
if (rtpHdr & 0x20000000)
{
if (rtp_len == 0)
{
return FALSE;
}
uint32 numPaddingBytes = (uint32)p_rtp[rtp_len-1];
if (rtp_len < numPaddingBytes)
{
return FALSE;
}
rtp_len -= numPaddingBytes;
}
if (0 == p_rxi->rtp_pt)
{
p_rxi->rtp_pt = rtpPT;
}
else if (rtpPT != p_rxi->rtp_pt)
{
return FALSE;
}
if (p_rxi->ssrc && p_rxi->ssrc != rtpSSRC)
{
log_print(HT_LOG_WARN, "%s, prev ssrc[%u], cur ssrc[%u]!!!\r\n", __FUNCTION__, p_rxi->ssrc, rtpSSRC);
}
p_rxi->ssrc = rtpSSRC;
if (p_rxi->seq && p_rxi->seq != (uint16)(rtpSeq - 1))
{
p_rxi->rxf_loss = 1;
log_print(HT_LOG_WARN, "%s, prev seq[%u], cur seq[%u]!!!\r\n", __FUNCTION__, p_rxi->seq, rtpSeq);
}
p_rxi->seq = rtpSeq;
p_rxi->rxf_marker = rtpMarkerBit;
p_rxi->ts = rtpTimestamp;
p_rxi->p_data = p_rtp;
p_rxi->len = rtp_len;
return TRUE;
}