Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

73 Zeilen
1.4KB

  1. #include "rtp-member.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <assert.h>
  6. struct rtp_member* rtp_member_create(uint32_t ssrc)
  7. {
  8. struct rtp_member* p;
  9. p = (struct rtp_member*)calloc(1, sizeof(struct rtp_member));
  10. if(!p)
  11. return NULL;
  12. p->ref = 1;
  13. p->ssrc = ssrc;
  14. p->jitter = 0.0;
  15. p->rtp_probation = RTP_PROBATION;
  16. p->rtcp_sr.ssrc = ssrc;
  17. //p->rtcp_rb.ssrc = ssrc;
  18. return p;
  19. }
  20. void rtp_member_addref(struct rtp_member *member)
  21. {
  22. assert(member->ref > 0);
  23. ++member->ref;
  24. }
  25. void rtp_member_release(struct rtp_member *member)
  26. {
  27. size_t i;
  28. assert(member->ref > 0);
  29. if(0 == --member->ref)
  30. {
  31. for(i = 0; i < sizeof(member->sdes)/sizeof(member->sdes[0]); i++)
  32. {
  33. if(member->sdes[i].data)
  34. {
  35. assert(member->sdes[i].pt == i);
  36. assert(member->sdes[i].len > 0);
  37. free(member->sdes[i].data);
  38. }
  39. }
  40. free(member);
  41. }
  42. }
  43. int rtp_member_setvalue(struct rtp_member *member, int item, const uint8_t* data, int bytes)
  44. {
  45. rtcp_sdes_item_t *sdes;
  46. assert(RTCP_SDES_CNAME <= item && item <= RTCP_SDES_PRIVATE);
  47. if(item >= sizeof(member->sdes)/sizeof(member->sdes[0]) || bytes > 255)
  48. return -1;
  49. sdes = &member->sdes[item];
  50. if(bytes > sdes->len)
  51. {
  52. void* p = realloc(sdes->data, bytes);
  53. if(!p)
  54. return -1; // no memory
  55. sdes->data = p;
  56. }
  57. assert(bytes <= 255);
  58. if (bytes > 0)
  59. memcpy(sdes->data, data, bytes);
  60. sdes->pt = (uint8_t)item;
  61. sdes->len = (uint8_t)bytes;
  62. return 0;
  63. }