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;
|
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,
|
bool ParseFmtpAttributes(absl::string_view line,
|
||||||
const cricket::MediaType media_type,
|
const cricket::MediaType media_type,
|
||||||
MediaContentDescription* media_desc,
|
MediaContentDescription* media_desc,
|
||||||
@ -3736,19 +3757,8 @@ bool ParseFmtpAttributes(absl::string_view line,
|
|||||||
|
|
||||||
// Parse out format specific parameters.
|
// Parse out format specific parameters.
|
||||||
webrtc::CodecParameterMap codec_params;
|
webrtc::CodecParameterMap codec_params;
|
||||||
for (absl::string_view param :
|
if (!ParseFmtpParameterSet(line_params, codec_params, error)) {
|
||||||
rtc::split(line_params, kSdpDelimiterSemicolonChar)) {
|
return false;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (media_type == cricket::MEDIA_TYPE_AUDIO ||
|
if (media_type == cricket::MEDIA_TYPE_AUDIO ||
|
||||||
|
|||||||
@ -112,6 +112,11 @@ RTC_EXPORT bool ParseCandidate(absl::string_view message,
|
|||||||
bool WriteFmtpParameters(const webrtc::CodecParameterMap& parameters,
|
bool WriteFmtpParameters(const webrtc::CodecParameterMap& parameters,
|
||||||
rtc::StringBuilder* os);
|
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
|
} // namespace webrtc
|
||||||
|
|
||||||
#endif // PC_WEBRTC_SDP_H_
|
#endif // PC_WEBRTC_SDP_H_
|
||||||
|
|||||||
@ -5123,3 +5123,24 @@ TEST_F(WebRtcSdpTest, BackfillsDefaultFmtpValues) {
|
|||||||
EXPECT_TRUE(codecs[3].GetParam("tx-mode", &value));
|
EXPECT_TRUE(codecs[3].GetParam("tx-mode", &value));
|
||||||
EXPECT_EQ(value, "SRST");
|
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