MediaStreamTrack.h [plain text]
#ifndef MediaStreamTrack_h
#define MediaStreamTrack_h
#if ENABLE(MEDIA_STREAM)
#include "ActiveDOMObject.h"
#include "EventTarget.h"
#include "MediaStreamSource.h"
#include "MediaStreamTrackPrivate.h"
#include "ScriptWrappable.h"
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class Dictionary;
class MediaConstraintsImpl;
class MediaSourceStates;
class MediaStreamTrackSourcesCallback;
class MediaStreamCapabilities;
class MediaTrackConstraints;
class MediaStreamTrack : public RefCounted<MediaStreamTrack>, public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData, public MediaStreamTrackPrivateClient {
public:
class Observer {
public:
virtual ~Observer() { }
virtual void trackDidEnd() = 0;
};
virtual ~MediaStreamTrack();
virtual const AtomicString& kind() const = 0;
const String& id() const;
const String& label() const;
bool enabled() const;
void setEnabled(bool);
bool muted() const;
bool readonly() const;
bool remote() const;
bool stopped() const;
const AtomicString& readyState() const;
static void getSources(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackSourcesCallback>, ExceptionCode&);
RefPtr<MediaTrackConstraints> getConstraints() const;
RefPtr<MediaSourceStates> states() const;
RefPtr<MediaStreamCapabilities> getCapabilities() const;
void applyConstraints(const Dictionary&);
void applyConstraints(PassRefPtr<MediaConstraints>);
RefPtr<MediaStreamTrack> clone();
void stopProducingData();
DEFINE_ATTRIBUTE_EVENT_LISTENER(mute);
DEFINE_ATTRIBUTE_EVENT_LISTENER(unmute);
DEFINE_ATTRIBUTE_EVENT_LISTENER(started);
DEFINE_ATTRIBUTE_EVENT_LISTENER(ended);
DEFINE_ATTRIBUTE_EVENT_LISTENER(overconstrained);
MediaStreamSource* source() const { return m_privateTrack->source(); }
MediaStreamTrackPrivate& privateTrack() { return m_privateTrack.get(); }
bool ended() const;
void addObserver(Observer*);
void removeObserver(Observer*);
virtual EventTargetInterface eventTargetInterface() const override final { return MediaStreamTrackEventTargetInterfaceType; }
virtual ScriptExecutionContext* scriptExecutionContext() const override final { return ActiveDOMObject::scriptExecutionContext(); }
using RefCounted<MediaStreamTrack>::ref;
using RefCounted<MediaStreamTrack>::deref;
protected:
explicit MediaStreamTrack(MediaStreamTrack&);
MediaStreamTrack(ScriptExecutionContext&, MediaStreamTrackPrivate&, const Dictionary*);
void setSource(PassRefPtr<MediaStreamSource>);
private:
void configureTrackRendering();
void trackDidEnd();
void scheduleEventDispatch(PassRefPtr<Event>);
void dispatchQueuedEvents();
virtual void stop() override final;
virtual void refEventTarget() override final { ref(); }
virtual void derefEventTarget() override final { deref(); }
void trackReadyStateChanged();
void trackMutedChanged();
void trackEnabledChanged();
Vector<RefPtr<Event>> m_scheduledEvents;
RefPtr<MediaConstraintsImpl> m_constraints;
Mutex m_mutex;
Vector<Observer*> m_observers;
Ref<MediaStreamTrackPrivate> m_privateTrack;
bool m_eventDispatchScheduled;
bool m_stoppingTrack;
};
}
#endif // ENABLE(MEDIA_STREAM)
#endif // MediaStreamTrack_h