diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /third_party/libwebrtc/pc/media_stream.cc | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/pc/media_stream.cc')
-rw-r--r-- | third_party/libwebrtc/pc/media_stream.cc | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/third_party/libwebrtc/pc/media_stream.cc b/third_party/libwebrtc/pc/media_stream.cc new file mode 100644 index 0000000000..57be76c6c8 --- /dev/null +++ b/third_party/libwebrtc/pc/media_stream.cc @@ -0,0 +1,96 @@ +/* + * Copyright 2011 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/media_stream.h" + +#include <stddef.h> + +#include <utility> + +#include "rtc_base/checks.h" + +namespace webrtc { + +template <class V> +static typename V::iterator FindTrack(V* vector, const std::string& track_id) { + typename V::iterator it = vector->begin(); + for (; it != vector->end(); ++it) { + if ((*it)->id() == track_id) { + break; + } + } + return it; +} + +rtc::scoped_refptr<MediaStream> MediaStream::Create(const std::string& id) { + return rtc::make_ref_counted<MediaStream>(id); +} + +MediaStream::MediaStream(const std::string& id) : id_(id) {} + +bool MediaStream::AddTrack(rtc::scoped_refptr<AudioTrackInterface> track) { + return AddTrack<AudioTrackVector, AudioTrackInterface>(&audio_tracks_, track); +} + +bool MediaStream::AddTrack(rtc::scoped_refptr<VideoTrackInterface> track) { + return AddTrack<VideoTrackVector, VideoTrackInterface>(&video_tracks_, track); +} + +bool MediaStream::RemoveTrack(rtc::scoped_refptr<AudioTrackInterface> track) { + return RemoveTrack<AudioTrackVector>(&audio_tracks_, track); +} + +bool MediaStream::RemoveTrack(rtc::scoped_refptr<VideoTrackInterface> track) { + return RemoveTrack<VideoTrackVector>(&video_tracks_, track); +} + +rtc::scoped_refptr<AudioTrackInterface> MediaStream::FindAudioTrack( + const std::string& track_id) { + AudioTrackVector::iterator it = FindTrack(&audio_tracks_, track_id); + if (it == audio_tracks_.end()) + return nullptr; + return *it; +} + +rtc::scoped_refptr<VideoTrackInterface> MediaStream::FindVideoTrack( + const std::string& track_id) { + VideoTrackVector::iterator it = FindTrack(&video_tracks_, track_id); + if (it == video_tracks_.end()) + return nullptr; + return *it; +} + +template <typename TrackVector, typename Track> +bool MediaStream::AddTrack(TrackVector* tracks, + rtc::scoped_refptr<Track> track) { + typename TrackVector::iterator it = FindTrack(tracks, track->id()); + if (it != tracks->end()) + return false; + tracks->emplace_back(std::move((track))); + FireOnChanged(); + return true; +} + +template <typename TrackVector> +bool MediaStream::RemoveTrack( + TrackVector* tracks, + rtc::scoped_refptr<MediaStreamTrackInterface> track) { + RTC_DCHECK(tracks != NULL); + if (!track) + return false; + typename TrackVector::iterator it = FindTrack(tracks, track->id()); + if (it == tracks->end()) + return false; + tracks->erase(it); + FireOnChanged(); + return true; +} + +} // namespace webrtc |