From a2b019465cfb2064c64034ee0b093ece0ec1b883 Mon Sep 17 00:00:00 2001 From: Filip Klembara Date: Mon, 31 May 2021 15:20:18 +0200 Subject: [PATCH] Move ssrc manupulation functions to RTC_ENABLE_MEDIA --- src/capi.cpp | 124 +++++++++++++++++++++++++-------------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/src/capi.cpp b/src/capi.cpp index 4f10485..7f6d3e5 100644 --- a/src/capi.cpp +++ b/src/capi.cpp @@ -691,6 +691,68 @@ int rtcGetTrackPayloadTypesForCodec(int tr, const char * ccodec, int * buffer, i }); } +int rtcGetSsrcsForTrack(int tr, uint32_t * buffer, int bufferSize) { + return wrap([&] { + auto track = getTrack(tr); + auto ssrcs = track->description().getSSRCs(); + return copyAndReturn(ssrcs, buffer, bufferSize); + }); +} + +int rtcGetCNameForSsrc(int tr, uint32_t ssrc, char * cname, int cnameSize) { + return wrap([&] { + auto track = getTrack(tr); + auto description = track->description(); + auto optCName = description.getCNameForSsrc(ssrc); + if (optCName.has_value()) { + return copyAndReturn(optCName.value(), cname, cnameSize); + } else { + return 0; + } + }); +} + +int rtcGetSsrcsForType(const char * mediaType, const char * sdp, uint32_t * buffer, int bufferSize) { + return wrap([&] { + auto type = lowercased(string(mediaType)); + auto oldSDP = string(sdp); + auto description = Description(oldSDP, "unspec"); + auto mediaCount = description.mediaCount(); + for (unsigned int i = 0; i < mediaCount; i++) { + if (std::holds_alternative(description.media(i))) { + auto media = std::get(description.media(i)); + auto currentMediaType = lowercased(media->type()); + if (currentMediaType == type) { + auto ssrcs = media->getSSRCs(); + return copyAndReturn(ssrcs, buffer, bufferSize); + } + } + } + return 0; + }); +} + +int rtcSetSsrcForType(const char * mediaType, const char * sdp, char * buffer, const int bufferSize, + rtcSsrcForTypeInit * init) { + return wrap([&] { + auto type = lowercased(string(mediaType)); + auto prevSDP = string(sdp); + auto description = Description(prevSDP, "unspec"); + auto mediaCount = description.mediaCount(); + for (unsigned int i = 0; i < mediaCount; i++) { + if (std::holds_alternative(description.media(i))) { + auto media = std::get(description.media(i)); + auto currentMediaType = lowercased(media->type()); + if (currentMediaType == type) { + setSSRC(media, init->ssrc, init->name, init->msid, init->trackId); + break; + } + } + } + return copyAndReturn(string(description), buffer, bufferSize); + }); +} + #endif // RTC_ENABLE_MEDIA #if RTC_ENABLE_WEBSOCKET @@ -842,68 +904,6 @@ int rtcSetLocalDescription(int pc, const char *type) { }); } -int rtcGetSsrcsForTrack(int tr, uint32_t * buffer, int bufferSize) { - return wrap([&] { - auto track = getTrack(tr); - auto ssrcs = track->description().getSSRCs(); - return copyAndReturn(ssrcs, buffer, bufferSize); - }); -} - -int rtcGetCNameForSsrc(int tr, uint32_t ssrc, char * cname, int cnameSize) { - return wrap([&] { - auto track = getTrack(tr); - auto description = track->description(); - auto optCName = description.getCNameForSsrc(ssrc); - if (optCName.has_value()) { - return copyAndReturn(optCName.value(), cname, cnameSize); - } else { - return 0; - } - }); -} - -int rtcGetSsrcsForType(const char * mediaType, const char * sdp, uint32_t * buffer, int bufferSize) { - return wrap([&] { - auto type = lowercased(string(mediaType)); - auto oldSDP = string(sdp); - auto description = Description(oldSDP, "unspec"); - auto mediaCount = description.mediaCount(); - for (unsigned int i = 0; i < mediaCount; i++) { - if (std::holds_alternative(description.media(i))) { - auto media = std::get(description.media(i)); - auto currentMediaType = lowercased(media->type()); - if (currentMediaType == type) { - auto ssrcs = media->getSSRCs(); - return copyAndReturn(ssrcs, buffer, bufferSize); - } - } - } - return 0; - }); -} - -int rtcSetSsrcForType(const char * mediaType, const char * sdp, char * buffer, const int bufferSize, - rtcSsrcForTypeInit * init) { - return wrap([&] { - auto type = lowercased(string(mediaType)); - auto prevSDP = string(sdp); - auto description = Description(prevSDP, "unspec"); - auto mediaCount = description.mediaCount(); - for (unsigned int i = 0; i < mediaCount; i++) { - if (std::holds_alternative(description.media(i))) { - auto media = std::get(description.media(i)); - auto currentMediaType = lowercased(media->type()); - if (currentMediaType == type) { - setSSRC(media, init->ssrc, init->name, init->msid, init->trackId); - break; - } - } - } - return copyAndReturn(string(description), buffer, bufferSize); - }); -} - int rtcSetRemoteDescription(int pc, const char *sdp, const char *type) { return wrap([&] { auto peerConnection = getPeerConnection(pc);