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 #ifndef AUDIOSTREAMTRACK_H_
7 #define AUDIOSTREAMTRACK_H_
9 #include "MediaStreamTrack.h"
10 #include "DOMMediaStream.h"
11 #include "CrossGraphPort.h"
12 #include "nsClassHashtable.h"
17 class AudioStreamTrack
: public MediaStreamTrack
{
20 nsPIDOMWindowInner
* aWindow
, mozilla::MediaTrack
* aInputTrack
,
21 MediaStreamTrackSource
* aSource
,
22 MediaStreamTrackState aReadyState
= MediaStreamTrackState::Live
,
24 const MediaTrackConstraints
& aConstraints
= MediaTrackConstraints())
25 : MediaStreamTrack(aWindow
, aInputTrack
, aSource
, aReadyState
, aMuted
,
28 AudioStreamTrack
* AsAudioStreamTrack() override
{ return this; }
29 const AudioStreamTrack
* AsAudioStreamTrack() const override
{ return this; }
31 void AddAudioOutput(void* aKey
);
32 void RemoveAudioOutput(void* aKey
);
33 void SetAudioOutputVolume(void* aKey
, float aVolume
);
34 RefPtr
<GenericPromise
> SetAudioOutputDevice(void* key
,
35 AudioDeviceInfo
* aSink
);
38 void GetKind(nsAString
& aKind
) override
{ aKind
.AssignLiteral("audio"); }
40 void GetLabel(nsAString
& aLabel
, CallerType aCallerType
) override
;
43 already_AddRefed
<MediaStreamTrack
> CloneInternal() override
;
44 void SetReadyState(MediaStreamTrackState aState
) override
;
47 // Track CrossGraphPort per AudioOutput key. This is required in order to
48 // redirect all AudioOutput requests (add, remove, set volume) to the
49 // receiver track which, belonging to the remote graph. MainThread only.
50 nsClassHashtable
<nsPtrHashKey
<void>, UniquePtr
<CrossGraphPort
>> mCrossGraphs
;
54 } // namespace mozilla
56 #endif /* AUDIOSTREAMTRACK_H_ */