/* 
 | 
 * BlueALSA - a2dp-rtp.h 
 | 
 * Copyright (c) 2016-2018 Arkadiusz Bokowy 
 | 
 * 
 | 
 * This file is a part of bluez-alsa. 
 | 
 * 
 | 
 * This project is licensed under the terms of the MIT license. 
 | 
 * 
 | 
 */ 
 | 
  
 | 
#ifndef BLUEALSA_A2DPRTP_H_ 
 | 
#define BLUEALSA_A2DPRTP_H_ 
 | 
  
 | 
#include <stdint.h> 
 | 
  
 | 
typedef struct rtp_header { 
 | 
#if __BYTE_ORDER == __LITTLE_ENDIAN 
 | 
    uint16_t cc:4; 
 | 
    uint16_t extbit:1; 
 | 
    uint16_t padbit:1; 
 | 
    uint16_t version:2; 
 | 
    uint16_t paytype:7; 
 | 
    uint16_t markbit:1; 
 | 
#else 
 | 
    uint16_t version:2; 
 | 
    uint16_t padbit:1; 
 | 
    uint16_t extbit:1; 
 | 
    uint16_t cc:4; 
 | 
    uint16_t markbit:1; 
 | 
    uint16_t paytype:7; 
 | 
#endif 
 | 
    uint16_t seq_number; 
 | 
    uint32_t timestamp; 
 | 
    uint32_t ssrc; 
 | 
    uint32_t csrc[16]; 
 | 
} __attribute__ ((packed)) rtp_header_t; 
 | 
  
 | 
/** 
 | 
 * The length of the RTP header assuming that the `cc` field is set to zero. */ 
 | 
#define RTP_HEADER_LEN (sizeof(rtp_header_t) - sizeof(((rtp_header_t *)0)->csrc)) 
 | 
  
 | 
/** 
 | 
 * Media payload header. */ 
 | 
typedef struct rtp_media_header { 
 | 
#if __BYTE_ORDER == __LITTLE_ENDIAN 
 | 
    uint8_t frame_count:4; 
 | 
    uint8_t rfa:1; 
 | 
    uint8_t last_fragment:1; 
 | 
    uint8_t first_fragment:1; 
 | 
    uint8_t fragmented:1; 
 | 
#else 
 | 
    uint8_t fragmented:1; 
 | 
    uint8_t first_fragment:1; 
 | 
    uint8_t last_fragment:1; 
 | 
    uint8_t rfa:1; 
 | 
    uint8_t frame_count:4; 
 | 
#endif 
 | 
} __attribute__ ((packed)) rtp_media_header_t; 
 | 
  
 | 
#endif 
 |