From 2cc628e460c86087ee5de7c455a864326529695d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C3=ABl=20Carr=C3=A9?= Date: Fri, 13 May 2016 15:52:12 +0200 Subject: [PATCH] Add RTCP FeedBack --- ietf/rtcp_fb.h | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 ietf/rtcp_fb.h diff --git a/ietf/rtcp_fb.h b/ietf/rtcp_fb.h new file mode 100644 index 0000000..9ac5ebc --- /dev/null +++ b/ietf/rtcp_fb.h @@ -0,0 +1,84 @@ +#ifndef __BITSTREAM_IETF_RTCP_FB_H__ +# define __BITSTREAM_IETF_RTCP_FB_H__ + +# include + +# define RTCP_PT_RTPFB 205 +# define RTCP_PT_PSFB 206 + +# define RTCP_PT_RTPFB_GENERIC_NACK 1 + +# define RTCP_FB_HEADER_SIZE 12 +# define RTCP_FB_FCI_GENERIC_NACK_SIZE 4 + +static inline void rtcp_fb_set_fmt(uint8_t *p_rtcp, uint8_t fmt) +{ + p_rtcp[0] |= fmt & 0x1f; +} + +static inline uint8_t rtcp_fb_get_fmt(const uint8_t *p_rtcp) +{ + return p_rtcp[0] & 0x1f; +} + +static inline void rtcp_fb_set_ssrc_pkt_sender(uint8_t *p_rtcp_fb, + const uint8_t pi_ssrc[4]) +{ + p_rtcp_fb[4] = pi_ssrc[0]; + p_rtcp_fb[5] = pi_ssrc[1]; + p_rtcp_fb[6] = pi_ssrc[2]; + p_rtcp_fb[7] = pi_ssrc[3]; +} + +static inline void rtcp_fb_set_ssrc_media_src(uint8_t *p_rtcp_fb, + const uint8_t pi_ssrc[4]) +{ + p_rtcp_fb[8] = pi_ssrc[0]; + p_rtcp_fb[9] = pi_ssrc[1]; + p_rtcp_fb[10] = pi_ssrc[2]; + p_rtcp_fb[11] = pi_ssrc[3]; +} + +static inline void rtcp_fb_get_ssrc_pkt_sender(const uint8_t *p_rtcp_fb, + uint8_t pi_ssrc[4]) +{ + pi_ssrc[0] = p_rtcp_fb[4]; + pi_ssrc[1] = p_rtcp_fb[5]; + pi_ssrc[2] = p_rtcp_fb[6]; + pi_ssrc[3] = p_rtcp_fb[7]; +} + +static inline void rtcp_fb_get_ssrc_media_src(const uint8_t *p_rtcp_fb, + uint8_t pi_ssrc[4]) +{ + pi_ssrc[0] = p_rtcp_fb[8]; + pi_ssrc[1] = p_rtcp_fb[9]; + pi_ssrc[2] = p_rtcp_fb[10]; + pi_ssrc[3] = p_rtcp_fb[11]; +} + +static inline void rtcp_fb_nack_set_packet_id(uint8_t *p_rtcp_fb_nack, + uint16_t packet_id) +{ + p_rtcp_fb_nack[0] = (packet_id >> 8) & 0xff; + p_rtcp_fb_nack[1] = packet_id & 0xff; +} + +static inline uint16_t rtcp_fb_nack_get_packet_id(const uint8_t *p_rtcp_fb_nack) +{ + return (p_rtcp_fb_nack[0] << 8) | p_rtcp_fb_nack[1]; +} + +static inline uint16_t rtcp_fb_nack_get_bitmask_lost(const uint8_t *p_rtcp_fb_nack) +{ + return (p_rtcp_fb_nack[2] << 8) | p_rtcp_fb_nack[3]; +} + +static inline void rtcp_fb_nack_set_bitmask_lost(uint8_t *p_rtcp_fb_nack, + uint16_t bitmask) +{ + p_rtcp_fb_nack[2] = (bitmask >> 8) & 0xff; + p_rtcp_fb_nack[3] = bitmask & 0xff; +} + +#endif /* !__BITSTREAM_IETF_RTCP_FB_H__ */