author smolnar <>
Thu, 29 Oct 2020 11:49:46 +0200
changeset 554999 3d5f376d44e0af99365a1372893c79ce5002711e
parent 495897 9ea7aabf10fbf326e43daaa88b30f477b4ee3c32
permissions -rw-r--r--
Merge autoland to mozilla-central. a=merge

/* -*- 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 */

#ifndef MediaStreamWindowCapturer_h
#define MediaStreamWindowCapturer_h

#include "DOMMediaStream.h"

namespace mozilla {
namespace dom {
class AudioStreamTrack;
class MediaStreamTrack;
}  // namespace dom

class MediaInputPort;

 * Given a DOMMediaStream and a window id, this class will pipe the audio from
 * all live audio tracks in the stream to the MediaTrackGraph's window capture
 * mechanism.
class MediaStreamWindowCapturer : public DOMMediaStream::TrackListener {
  MediaStreamWindowCapturer(DOMMediaStream* aStream, uint64_t aWindowId);

  void NotifyTrackAdded(const RefPtr<dom::MediaStreamTrack>& aTrack) override;
  void NotifyTrackRemoved(const RefPtr<dom::MediaStreamTrack>& aTrack) override;

  struct CapturedTrack {
    CapturedTrack(dom::MediaStreamTrack* aTrack, uint64_t aWindowID);

    const WeakPtr<dom::MediaStreamTrack> mTrack;
    const RefPtr<MediaInputPort> mPort;

  const WeakPtr<DOMMediaStream> mStream;
  const uint64_t mWindowId;

  void AddTrack(dom::AudioStreamTrack* aTrack);
  void RemoveTrack(dom::AudioStreamTrack* aTrack);

  nsTArray<UniquePtr<CapturedTrack>> mTracks;
}  // namespace mozilla

#endif /* MediaStreamWindowCapturer_h */