Macros defined in rtc_base/flags.h are intended to be used to define
flags in WebRTC's binaries (e.g. tests).
They are currently not prefixed and this could cause problems with
downstream clients since these names are quite common.
This CL adds the 'WEBRTC_' prefix to them.
Generated with:
for x in DECLARE DEFINE; do
for y in bool int float string FLAG; do
git grep -l "\b$x\_$y\b" | \
xargs sed -i "s/\b$x\_$y\b/WEBRTC_$x\_$y/g"
done
done
git cl format
Bug: webrtc:9884
Change-Id: I7b524762b6a3e5aa5b2fc2395edd3e1a0fe72591
Reviewed-on: https://webrtc-review.googlesource.com/c/106682
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25270}
145 lines
4.6 KiB
C++
145 lines
4.6 KiB
C++
/*
|
|
* Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "modules/remote_bitrate_estimator/tools/bwe_rtp.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <set>
|
|
#include <sstream>
|
|
#include <string>
|
|
|
|
#include "modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h"
|
|
#include "modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h"
|
|
#include "modules/rtp_rtcp/include/rtp_header_parser.h"
|
|
#include "rtc_base/flags.h"
|
|
#include "test/rtp_file_reader.h"
|
|
|
|
namespace flags {
|
|
|
|
WEBRTC_DEFINE_string(
|
|
extension_type,
|
|
"abs",
|
|
"Extension type, either abs for absolute send time or tsoffset "
|
|
"for timestamp offset.");
|
|
std::string ExtensionType() {
|
|
return static_cast<std::string>(FLAG_extension_type);
|
|
}
|
|
|
|
WEBRTC_DEFINE_int(extension_id, 3, "Extension id.");
|
|
int ExtensionId() {
|
|
return static_cast<int>(FLAG_extension_id);
|
|
}
|
|
|
|
WEBRTC_DEFINE_string(input_file, "", "Input file.");
|
|
std::string InputFile() {
|
|
return static_cast<std::string>(FLAG_input_file);
|
|
}
|
|
|
|
WEBRTC_DEFINE_string(
|
|
ssrc_filter,
|
|
"",
|
|
"Comma-separated list of SSRCs in hexadecimal which are to be "
|
|
"used as input to the BWE (only applicable to pcap files).");
|
|
std::set<uint32_t> SsrcFilter() {
|
|
std::string ssrc_filter_string = static_cast<std::string>(FLAG_ssrc_filter);
|
|
if (ssrc_filter_string.empty())
|
|
return std::set<uint32_t>();
|
|
std::stringstream ss;
|
|
std::string ssrc_filter = ssrc_filter_string;
|
|
std::set<uint32_t> ssrcs;
|
|
|
|
// Parse the ssrcs in hexadecimal format.
|
|
ss << std::hex << ssrc_filter;
|
|
uint32_t ssrc;
|
|
while (ss >> ssrc) {
|
|
ssrcs.insert(ssrc);
|
|
ss.ignore(1, ',');
|
|
}
|
|
return ssrcs;
|
|
}
|
|
|
|
WEBRTC_DEFINE_bool(help, false, "Print this message.");
|
|
} // namespace flags
|
|
|
|
bool ParseArgsAndSetupEstimator(int argc,
|
|
char** argv,
|
|
webrtc::Clock* clock,
|
|
webrtc::RemoteBitrateObserver* observer,
|
|
webrtc::test::RtpFileReader** rtp_reader,
|
|
webrtc::RtpHeaderParser** parser,
|
|
webrtc::RemoteBitrateEstimator** estimator,
|
|
std::string* estimator_used) {
|
|
if (rtc::FlagList::SetFlagsFromCommandLine(&argc, argv, true)) {
|
|
return 1;
|
|
}
|
|
if (flags::FLAG_help) {
|
|
rtc::FlagList::Print(nullptr, false);
|
|
return 0;
|
|
}
|
|
std::string filename = flags::InputFile();
|
|
|
|
std::set<uint32_t> ssrc_filter = flags::SsrcFilter();
|
|
fprintf(stderr, "Filter on SSRC: ");
|
|
for (auto& s : ssrc_filter) {
|
|
fprintf(stderr, "0x%08x, ", s);
|
|
}
|
|
fprintf(stderr, "\n");
|
|
if (filename.substr(filename.find_last_of(".")) == ".pcap") {
|
|
fprintf(stderr, "Opening as pcap\n");
|
|
*rtp_reader = webrtc::test::RtpFileReader::Create(
|
|
webrtc::test::RtpFileReader::kPcap, filename.c_str(),
|
|
flags::SsrcFilter());
|
|
} else {
|
|
fprintf(stderr, "Opening as rtp\n");
|
|
*rtp_reader = webrtc::test::RtpFileReader::Create(
|
|
webrtc::test::RtpFileReader::kRtpDump, filename.c_str());
|
|
}
|
|
if (!*rtp_reader) {
|
|
fprintf(stderr, "Cannot open input file %s\n", filename.c_str());
|
|
return false;
|
|
}
|
|
fprintf(stderr, "Input file: %s\n\n", filename.c_str());
|
|
|
|
webrtc::RTPExtensionType extension = webrtc::kRtpExtensionAbsoluteSendTime;
|
|
if (flags::ExtensionType() == "tsoffset") {
|
|
extension = webrtc::kRtpExtensionTransmissionTimeOffset;
|
|
fprintf(stderr, "Extension: toffset\n");
|
|
} else if (flags::ExtensionType() == "abs") {
|
|
fprintf(stderr, "Extension: abs\n");
|
|
} else {
|
|
fprintf(stderr, "Unknown extension type\n");
|
|
return false;
|
|
}
|
|
|
|
// Setup the RTP header parser and the bitrate estimator.
|
|
*parser = webrtc::RtpHeaderParser::Create();
|
|
(*parser)->RegisterRtpHeaderExtension(extension, flags::ExtensionId());
|
|
if (estimator) {
|
|
switch (extension) {
|
|
case webrtc::kRtpExtensionAbsoluteSendTime: {
|
|
*estimator =
|
|
new webrtc::RemoteBitrateEstimatorAbsSendTime(observer, clock);
|
|
*estimator_used = "AbsoluteSendTimeRemoteBitrateEstimator";
|
|
break;
|
|
}
|
|
case webrtc::kRtpExtensionTransmissionTimeOffset: {
|
|
*estimator =
|
|
new webrtc::RemoteBitrateEstimatorSingleStream(observer, clock);
|
|
*estimator_used = "RemoteBitrateEstimator";
|
|
break;
|
|
}
|
|
default:
|
|
assert(false);
|
|
}
|
|
}
|
|
return true;
|
|
}
|