/***************************************************************************************
 *
 *  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.
 *
****************************************************************************************/

#ifndef	__H_RTP_H__
#define	__H_RTP_H__


#define H26X_RTP_MAX_LEN    (1450 - 4 - 12 - 2 - 16)	// TCP RTP FU REPLAYHDR
#define JPEG_RTP_MAX_LEN    (1450 - 4 - 12 - 16)
#define RTP_MAX_LEN         (1450 - 4 - 12 - 16)

/*
 * Current protocol version.
 */
#define RTP_VERSION         2

#define RTP_SEQ_MOD         (1<<16)
#define RTP_MAX_SDES        255      /* maximum text length for SDES */


typedef enum {
    RTCP_FIR        = 192,
    RTCP_NACK,      // 193
    RTCP_SMPTETC,   // 194
    RTCP_IJ,        // 195
    RTCP_SR         = 200,
    RTCP_RR,        // 201
    RTCP_SDES,      // 202
    RTCP_BYE,       // 203
    RTCP_APP,       // 204
    RTCP_RTPFB,     // 205
    RTCP_PSFB,      // 206
    RTCP_XR,        // 207
    RTCP_AVB,       // 208
    RTCP_RSI,       // 209
    RTCP_TOKEN,     // 210
} rtcp_type_t;

#define RTP_PT_IS_RTCP(x) (((x) >= RTCP_FIR && (x) <= RTCP_IJ) || \
                           ((x) >= RTCP_SR  && (x) <= RTCP_TOKEN))

typedef struct
{
	uint32	magic	: 8;
	uint32	channel	: 8;
	uint32	rtp_len	: 16;
} RILF;

uint16  rtp_read_uint16(uint8 *input);
uint32  rtp_read_uint32(uint8 *input);
uint64  rtp_read_uint64(uint8 *input);
int     rtp_write_uint16(uint8 *output, uint16 nVal);
int     rtp_write_uint32(uint8 *output, uint32 nVal);


#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif

#endif // __H_RTP_H__



