mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-16 15:20:42 +01:00

Change-Id: I04ae6a694599a535347c29706e5ad40cba58155b Bug: webrtc:13672 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/251721 Reviewed-by: Stefan Holmer <stefan@webrtc.org> Commit-Queue: Evan Shrubsole <eshr@webrtc.org> Cr-Commit-Position: refs/heads/main@{#36104}
101 lines
3.1 KiB
C++
101 lines
3.1 KiB
C++
/*
|
|
* Copyright 2012 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 "pc/test/integration_test_helpers.h"
|
|
|
|
namespace webrtc {
|
|
|
|
PeerConnectionInterface::RTCOfferAnswerOptions IceRestartOfferAnswerOptions() {
|
|
PeerConnectionInterface::RTCOfferAnswerOptions options;
|
|
options.ice_restart = true;
|
|
return options;
|
|
}
|
|
|
|
void RemoveSsrcsAndMsids(cricket::SessionDescription* desc) {
|
|
for (ContentInfo& content : desc->contents()) {
|
|
content.media_description()->mutable_streams().clear();
|
|
}
|
|
desc->set_msid_supported(false);
|
|
desc->set_msid_signaling(0);
|
|
}
|
|
|
|
void RemoveSsrcsAndKeepMsids(cricket::SessionDescription* desc) {
|
|
for (ContentInfo& content : desc->contents()) {
|
|
std::string track_id;
|
|
std::vector<std::string> stream_ids;
|
|
if (!content.media_description()->streams().empty()) {
|
|
const StreamParams& first_stream =
|
|
content.media_description()->streams()[0];
|
|
track_id = first_stream.id;
|
|
stream_ids = first_stream.stream_ids();
|
|
}
|
|
content.media_description()->mutable_streams().clear();
|
|
StreamParams new_stream;
|
|
new_stream.id = track_id;
|
|
new_stream.set_stream_ids(stream_ids);
|
|
content.media_description()->AddStream(new_stream);
|
|
}
|
|
}
|
|
|
|
int FindFirstMediaStatsIndexByKind(
|
|
const std::string& kind,
|
|
const std::vector<const webrtc::RTCMediaStreamTrackStats*>&
|
|
media_stats_vec) {
|
|
for (size_t i = 0; i < media_stats_vec.size(); i++) {
|
|
if (media_stats_vec[i]->kind.ValueToString() == kind) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
TaskQueueMetronome::TaskQueueMetronome(TaskQueueFactory* factory,
|
|
TimeDelta tick_period)
|
|
: tick_period_(tick_period),
|
|
queue_(factory->CreateTaskQueue("MetronomeQueue",
|
|
TaskQueueFactory::Priority::HIGH)) {
|
|
tick_task_ = RepeatingTaskHandle::Start(queue_.Get(), [this] {
|
|
MutexLock lock(&mutex_);
|
|
for (auto* listener : listeners_) {
|
|
listener->OnTickTaskQueue()->PostTask(
|
|
ToQueuedTask([listener] { listener->OnTick(); }));
|
|
}
|
|
return tick_period_;
|
|
});
|
|
}
|
|
|
|
TaskQueueMetronome::~TaskQueueMetronome() {
|
|
RTC_DCHECK(listeners_.empty());
|
|
rtc::Event stop_event;
|
|
queue_.PostTask([this, &stop_event] {
|
|
tick_task_.Stop();
|
|
stop_event.Set();
|
|
});
|
|
stop_event.Wait(1000);
|
|
}
|
|
|
|
void TaskQueueMetronome::AddListener(TickListener* listener) {
|
|
MutexLock lock(&mutex_);
|
|
auto [it, inserted] = listeners_.insert(listener);
|
|
RTC_DCHECK(inserted);
|
|
}
|
|
|
|
void TaskQueueMetronome::RemoveListener(TickListener* listener) {
|
|
MutexLock lock(&mutex_);
|
|
auto it = listeners_.find(listener);
|
|
RTC_DCHECK(it != listeners_.end());
|
|
listeners_.erase(it);
|
|
}
|
|
|
|
TimeDelta TaskQueueMetronome::TickPeriod() const {
|
|
return tick_period_;
|
|
}
|
|
|
|
} // namespace webrtc
|