MediaStreamPrivate.h [plain text]
#ifndef MediaStreamPrivate_h
#define MediaStreamPrivate_h
#if ENABLE(MEDIA_STREAM)
#include "MediaStreamTrack.h"
#include "MediaStreamTrackPrivate.h"
#include <wtf/HashMap.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
namespace WebCore {
class MediaStreamTrackPrivate;
class MediaStreamPrivateClient : public RefCounted<MediaStreamPrivateClient> {
public:
virtual ~MediaStreamPrivateClient() { }
virtual void activeStatusChanged() = 0;
virtual void didAddTrackToPrivate(MediaStreamTrackPrivate&) = 0;
virtual void didRemoveTrackFromPrivate(MediaStreamTrackPrivate&) = 0;
virtual Vector<RefPtr<MediaStreamTrack>> getVideoTracks() = 0;
virtual Vector<RefPtr<MediaStreamTrack>> getAudioTracks() = 0;
};
class MediaStreamPrivate : public RefCounted<MediaStreamPrivate> {
public:
static RefPtr<MediaStreamPrivate> create(const Vector<RefPtr<RealtimeMediaSource>>& audioSources, const Vector<RefPtr<RealtimeMediaSource>>& videoSources);
static RefPtr<MediaStreamPrivate> create(const Vector<RefPtr<MediaStreamTrackPrivate>>&);
static RefPtr<MediaStreamPrivate> create();
virtual ~MediaStreamPrivate() { }
enum class NotifyClientOption { Notify, DontNotify };
MediaStreamPrivateClient* client() const { return m_client; }
void setClient(MediaStreamPrivateClient* client) { m_client = client; }
String id() const { return m_id; }
Vector<RefPtr<MediaStreamTrackPrivate>> tracks() const;
bool active() const { return m_isActive; }
void updateActiveState(NotifyClientOption);
void addTrack(RefPtr<MediaStreamTrackPrivate>&&, NotifyClientOption);
void removeTrack(MediaStreamTrackPrivate&, NotifyClientOption);
private:
MediaStreamPrivate(const String& id, const Vector<RefPtr<MediaStreamTrackPrivate>>&);
MediaStreamPrivateClient* m_client;
String m_id;
bool m_isActive;
HashMap<String, RefPtr<MediaStreamTrackPrivate>> m_trackSet;
};
typedef Vector<RefPtr<MediaStreamPrivate>> MediaStreamPrivateVector;
}
#endif // ENABLE(MEDIA_STREAM)
#endif // MediaStreamPrivate_h