summaryrefslogtreecommitdiffstats
path: root/dom/media/AudioStreamTrack.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/AudioStreamTrack.h')
-rw-r--r--dom/media/AudioStreamTrack.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/dom/media/AudioStreamTrack.h b/dom/media/AudioStreamTrack.h
new file mode 100644
index 0000000000..2bd8b18108
--- /dev/null
+++ b/dom/media/AudioStreamTrack.h
@@ -0,0 +1,56 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef AUDIOSTREAMTRACK_H_
+#define AUDIOSTREAMTRACK_H_
+
+#include "MediaStreamTrack.h"
+#include "DOMMediaStream.h"
+#include "CrossGraphPort.h"
+#include "nsClassHashtable.h"
+
+namespace mozilla::dom {
+
+class AudioStreamTrack : public MediaStreamTrack {
+ public:
+ AudioStreamTrack(
+ nsPIDOMWindowInner* aWindow, mozilla::MediaTrack* aInputTrack,
+ MediaStreamTrackSource* aSource,
+ MediaStreamTrackState aReadyState = MediaStreamTrackState::Live,
+ bool aMuted = false,
+ const MediaTrackConstraints& aConstraints = MediaTrackConstraints())
+ : MediaStreamTrack(aWindow, aInputTrack, aSource, aReadyState, aMuted,
+ aConstraints) {}
+
+ AudioStreamTrack* AsAudioStreamTrack() override { return this; }
+ const AudioStreamTrack* AsAudioStreamTrack() const override { return this; }
+
+ // Direct output to aSink, or the default output device if aSink is null.
+ // No more than one output may exist for a single aKey at any one time.
+ // Returns a promise that resolves immediately for the default device or
+ // when a non-default device is processing audio.
+ RefPtr<GenericPromise> AddAudioOutput(void* aKey, AudioDeviceInfo* aSink);
+ void RemoveAudioOutput(void* aKey);
+ void SetAudioOutputVolume(void* aKey, float aVolume);
+
+ // WebIDL
+ void GetKind(nsAString& aKind) override { aKind.AssignLiteral("audio"); }
+
+ void GetLabel(nsAString& aLabel, CallerType aCallerType) override;
+
+ protected:
+ already_AddRefed<MediaStreamTrack> CloneInternal() override;
+ void SetReadyState(MediaStreamTrackState aState) override;
+
+ private:
+ // Track CrossGraphPort per AudioOutput key. This is required in order to
+ // redirect all AudioOutput requests (add, remove, set volume) to the
+ // receiver track, which belongs to the remote graph. MainThread only.
+ nsClassHashtable<nsPtrHashKey<void>, CrossGraphPort> mCrossGraphs;
+};
+
+} // namespace mozilla::dom
+
+#endif /* AUDIOSTREAMTRACK_H_ */