1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "MediaStreamWindowCapturer.h"
8 #include "AudioStreamTrack.h"
9 #include "DOMMediaStream.h"
10 #include "MediaTrackGraph.h"
13 using dom::AudioStreamTrack
;
14 using dom::MediaStreamTrack
;
16 NS_IMPL_CYCLE_COLLECTION_INHERITED(MediaStreamWindowCapturer
,
17 DOMMediaStream::TrackListener
)
18 NS_IMPL_ADDREF_INHERITED(MediaStreamWindowCapturer
,
19 DOMMediaStream::TrackListener
)
20 NS_IMPL_RELEASE_INHERITED(MediaStreamWindowCapturer
,
21 DOMMediaStream::TrackListener
)
22 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(MediaStreamWindowCapturer
)
23 NS_INTERFACE_MAP_END_INHERITING(DOMMediaStream::TrackListener
)
25 MediaStreamWindowCapturer::CapturedTrack::CapturedTrack(
26 MediaStreamTrack
* aTrack
, uint64_t aWindowID
)
28 mPort(aTrack
->Graph()->ConnectToCaptureTrack(aWindowID
,
29 aTrack
->GetTrack())) {}
31 MediaStreamWindowCapturer::CapturedTrack::~CapturedTrack() {
37 MediaStreamWindowCapturer::MediaStreamWindowCapturer(DOMMediaStream
* aStream
,
39 : mStream(aStream
), mWindowId(aWindowId
) {
40 nsTArray
<RefPtr
<AudioStreamTrack
>> tracks
;
41 mStream
->GetAudioTracks(tracks
);
42 for (const auto& t
: tracks
) {
50 MediaStreamWindowCapturer::~MediaStreamWindowCapturer() = default;
52 void MediaStreamWindowCapturer::NotifyTrackAdded(
53 const RefPtr
<MediaStreamTrack
>& aTrack
) {
54 if (AudioStreamTrack
* at
= aTrack
->AsAudioStreamTrack()) {
59 void MediaStreamWindowCapturer::NotifyTrackRemoved(
60 const RefPtr
<MediaStreamTrack
>& aTrack
) {
61 if (AudioStreamTrack
* at
= aTrack
->AsAudioStreamTrack()) {
66 void MediaStreamWindowCapturer::AddTrack(AudioStreamTrack
* aTrack
) {
67 if (aTrack
->Ended()) {
70 mTracks
.AppendElement(MakeUnique
<CapturedTrack
>(aTrack
, mWindowId
));
73 void MediaStreamWindowCapturer::RemoveTrack(AudioStreamTrack
* aTrack
) {
74 for (size_t i
= mTracks
.Length(); i
> 0; --i
) {
75 if (mTracks
[i
- 1]->mTrack
== aTrack
) {
76 mTracks
.RemoveElementAt(i
- 1);
81 } // namespace mozilla