Break out parsing of FMTP lines so that others can use it
Intended use is to convert between different representations of "codec". Bug: webrtc:42226302 Change-Id: If6d985ad17c2ff6018c77c7858e602b9eefa9297 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/350562 Reviewed-by: Florent Castelli <orphis@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42319}
This commit is contained in:
parent
b4dcac3e1a
commit
c6c6971d97
@ -3699,6 +3699,27 @@ bool ParseFmtpParam(absl::string_view line,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParseFmtpParameterSet(absl::string_view line_params,
|
||||
webrtc::CodecParameterMap& codec_params,
|
||||
SdpParseError* error) {
|
||||
// Parse out format specific parameters.
|
||||
for (absl::string_view param :
|
||||
rtc::split(line_params, kSdpDelimiterSemicolonChar)) {
|
||||
std::string name;
|
||||
std::string value;
|
||||
if (!ParseFmtpParam(absl::StripAsciiWhitespace(param), &name, &value,
|
||||
error)) {
|
||||
return false;
|
||||
}
|
||||
if (codec_params.find(name) != codec_params.end()) {
|
||||
RTC_LOG(LS_INFO) << "Overwriting duplicate fmtp parameter with key \""
|
||||
<< name << "\".";
|
||||
}
|
||||
codec_params[name] = value;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParseFmtpAttributes(absl::string_view line,
|
||||
const cricket::MediaType media_type,
|
||||
MediaContentDescription* media_desc,
|
||||
@ -3736,20 +3757,9 @@ bool ParseFmtpAttributes(absl::string_view line,
|
||||
|
||||
// Parse out format specific parameters.
|
||||
webrtc::CodecParameterMap codec_params;
|
||||
for (absl::string_view param :
|
||||
rtc::split(line_params, kSdpDelimiterSemicolonChar)) {
|
||||
std::string name;
|
||||
std::string value;
|
||||
if (!ParseFmtpParam(absl::StripAsciiWhitespace(param), &name, &value,
|
||||
error)) {
|
||||
if (!ParseFmtpParameterSet(line_params, codec_params, error)) {
|
||||
return false;
|
||||
}
|
||||
if (codec_params.find(name) != codec_params.end()) {
|
||||
RTC_LOG(LS_INFO) << "Overwriting duplicate fmtp parameter with key \""
|
||||
<< name << "\".";
|
||||
}
|
||||
codec_params[name] = value;
|
||||
}
|
||||
|
||||
if (media_type == cricket::MEDIA_TYPE_AUDIO ||
|
||||
media_type == cricket::MEDIA_TYPE_VIDEO) {
|
||||
|
||||
@ -112,6 +112,11 @@ RTC_EXPORT bool ParseCandidate(absl::string_view message,
|
||||
bool WriteFmtpParameters(const webrtc::CodecParameterMap& parameters,
|
||||
rtc::StringBuilder* os);
|
||||
|
||||
// Parses a string into an FMTP parameter set, in key-value format.
|
||||
bool ParseFmtpParameterSet(absl::string_view line_params,
|
||||
webrtc::CodecParameterMap& codec_params,
|
||||
SdpParseError* error);
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // PC_WEBRTC_SDP_H_
|
||||
|
||||
@ -5123,3 +5123,24 @@ TEST_F(WebRtcSdpTest, BackfillsDefaultFmtpValues) {
|
||||
EXPECT_TRUE(codecs[3].GetParam("tx-mode", &value));
|
||||
EXPECT_EQ(value, "SRST");
|
||||
}
|
||||
|
||||
TEST_F(WebRtcSdpTest, ParsesKeyValueFmtpParameterSet) {
|
||||
std::string params = "key1=value1;key2=value2";
|
||||
webrtc::CodecParameterMap codec_params;
|
||||
SdpParseError error;
|
||||
|
||||
ASSERT_TRUE(webrtc::ParseFmtpParameterSet(params, codec_params, &error));
|
||||
EXPECT_EQ(2U, codec_params.size());
|
||||
EXPECT_EQ(codec_params["key1"], "value1");
|
||||
EXPECT_EQ(codec_params["key2"], "value2");
|
||||
}
|
||||
|
||||
TEST_F(WebRtcSdpTest, ParsesNonKeyValueFmtpParameterSet) {
|
||||
std::string params = "not-in-key-value-format";
|
||||
webrtc::CodecParameterMap codec_params;
|
||||
SdpParseError error;
|
||||
|
||||
ASSERT_TRUE(webrtc::ParseFmtpParameterSet(params, codec_params, &error));
|
||||
EXPECT_EQ(1U, codec_params.size());
|
||||
EXPECT_EQ(codec_params[""], "not-in-key-value-format");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user