diff options
Diffstat (limited to 'tools/rtp.h')
-rw-r--r-- | tools/rtp.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tools/rtp.h b/tools/rtp.h new file mode 100644 index 00000000..b0f7c50b --- /dev/null +++ b/tools/rtp.h @@ -0,0 +1,95 @@ +/* + * rtp.h: RFC1889: RTP - A Transport Protocol for Real-Time Applications + * + * See the main source file 'xineliboutput.c' for copyright information and + * how to reach the author. + * + * $Id: rtp.h,v 1.1 2006-12-14 12:01:40 phintuka Exp $ + * + */ + +#ifndef XINELIBOUTPUT_RTP_H_ +#define XINELIBOUTPUT_RTP_H_ + +#include <endian.h> + +#ifndef PACKED +# define PACKED __attribute__((packed)) +#endif + +#if __BYTE_ORDER == __BIG_ENDIAN +#elif __BYTE_ORDER == __LITTLE_ENDIAN +#else +# error __BYTE_ORDER not defined +#endif + +#if defined __cplusplus +extern "C" { +#endif + + +/* Generic RTP header extension */ +typedef struct stream_rtp_header_ext { + + union { + uint8_t raw[4]; + uint32_t rawd; + + struct { + uint16_t type; + uint16_t size; /* Size of ext_data field in DWORDS */ + } PACKED; + } PACKED; + + uint8_t ext_data[0]; + +} PACKED stream_rtp_header_ext_t; + + +/* Common RTP data header */ +typedef struct stream_rtp_header { + + union { + uint8_t raw[12]; + + struct { +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned int version:2; /* protocol version */ + unsigned int padding:1; /* padding flag */ + unsigned int ext:1; /* header extension flag */ + unsigned int cc:4; /* CSRC count */ + + unsigned int marker:1; /* marker bit */ + unsigned int paytype:7; /* payload type */ +#else + unsigned int cc:4; /* CSRC count */ + unsigned int ext:1; /* header extension flag */ + unsigned int padding:1; /* padding flag */ + unsigned int version:2; /* protocol version */ + + unsigned int paytype:7; /* payload type */ + unsigned int marker:1; /* marker bit */ +#endif + uint16_t seq; /* sequence number */ + uint32_t ts; /* timestamp */ + uint32_t ssrc; /* synchronization source */ + + /*uint32_t csrc[0];*/ /* optional CSRC list */ + } PACKED; + } PACKED; + + + union { + stream_rtp_header_ext_t hdr_ext[0]; + uint8_t payload[0]; + } PACKED; + + +} PACKED stream_rtp_header_t; + +#if defined __cplusplus +}; +#endif + +#endif /* XINELIBOUTPUT_RTP_H_ */ + |