#include "rtp-member.h" #include #include #include #include struct rtp_member* rtp_member_create(uint32_t ssrc) { struct rtp_member* p; p = (struct rtp_member*)calloc(1, sizeof(struct rtp_member)); if(!p) return NULL; p->ref = 1; p->ssrc = ssrc; p->jitter = 0.0; p->rtp_probation = RTP_PROBATION; p->rtcp_sr.ssrc = ssrc; //p->rtcp_rb.ssrc = ssrc; return p; } void rtp_member_addref(struct rtp_member *member) { assert(member->ref > 0); ++member->ref; } void rtp_member_release(struct rtp_member *member) { size_t i; assert(member->ref > 0); if(0 == --member->ref) { for(i = 0; i < sizeof(member->sdes)/sizeof(member->sdes[0]); i++) { if(member->sdes[i].data) { assert(member->sdes[i].pt == i); assert(member->sdes[i].len > 0); free(member->sdes[i].data); } } free(member); } } int rtp_member_setvalue(struct rtp_member *member, int item, const uint8_t* data, int bytes) { rtcp_sdes_item_t *sdes; assert(RTCP_SDES_CNAME <= item && item <= RTCP_SDES_PRIVATE); if(item >= sizeof(member->sdes)/sizeof(member->sdes[0]) || bytes > 255) return -1; sdes = &member->sdes[item]; if(bytes > sdes->len) { void* p = realloc(sdes->data, bytes); if(!p) return -1; // no memory sdes->data = p; } assert(bytes <= 255); if (bytes > 0) memcpy(sdes->data, data, bytes); sdes->pt = (uint8_t)item; sdes->len = (uint8_t)bytes; return 0; }