MediaStreamTrack.h [plain text]
#pragma once
#if ENABLE(MEDIA_STREAM)
#include "ActiveDOMObject.h"
#include "EventTarget.h"
#include "MediaStreamTrackPrivate.h"
#include "RealtimeMediaSource.h"
#include "ScriptWrappable.h"
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class AudioSourceProvider;
class Dictionary;
class MediaConstraintsImpl;
class MediaSourceSettings;
class MediaTrackConstraints;
class MediaStreamTrack final : public RefCounted<MediaStreamTrack>, public ActiveDOMObject, public EventTargetWithInlineData, private MediaStreamTrackPrivate::Observer {
public:
class Observer {
public:
virtual ~Observer() { }
virtual void trackDidEnd() = 0;
};
static Ref<MediaStreamTrack> create(ScriptExecutionContext&, MediaStreamTrackPrivate&);
virtual ~MediaStreamTrack();
const AtomicString& kind() const;
const String& id() const;
const String& label() const;
bool enabled() const;
void setEnabled(bool);
bool muted() const;
bool readonly() const;
bool remote() const;
enum class State { New, Live, Ended };
State readyState() const;
bool ended() const;
RefPtr<MediaStreamTrack> clone();
void stopProducingData();
RefPtr<MediaTrackConstraints> getConstraints() const;
RefPtr<MediaSourceSettings> getSettings() const;
RefPtr<RealtimeMediaSourceCapabilities> getCapabilities() const;
void applyConstraints(const Dictionary&);
void applyConstraints(const MediaConstraints&);
RealtimeMediaSource& source() const { return m_private->source(); }
MediaStreamTrackPrivate& privateTrack() { return m_private.get(); }
AudioSourceProvider* audioSourceProvider();
void addObserver(Observer*);
void removeObserver(Observer*);
EventTargetInterface eventTargetInterface() const final { return MediaStreamTrackEventTargetInterfaceType; }
ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
using RefCounted<MediaStreamTrack>::ref;
using RefCounted<MediaStreamTrack>::deref;
private:
MediaStreamTrack(ScriptExecutionContext&, MediaStreamTrackPrivate&);
explicit MediaStreamTrack(MediaStreamTrack&);
void configureTrackRendering();
void stop() final;
const char* activeDOMObjectName() const final;
bool canSuspendForDocumentSuspension() const final;
void refEventTarget() final { ref(); }
void derefEventTarget() final { deref(); }
void trackEnded(MediaStreamTrackPrivate&) override;
void trackMutedChanged(MediaStreamTrackPrivate&) override;
void trackSettingsChanged(MediaStreamTrackPrivate&) override;
void trackEnabledChanged(MediaStreamTrackPrivate&) override;
Vector<Observer*> m_observers;
Ref<MediaStreamTrackPrivate> m_private;
RefPtr<MediaConstraintsImpl> m_constraints;
bool m_ended { false };
};
typedef Vector<RefPtr<MediaStreamTrack>> MediaStreamTrackVector;
}
#endif // ENABLE(MEDIA_STREAM)