summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/mediastream/MediaStreamPrivate.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/mediastream/MediaStreamPrivate.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/platform/mediastream/MediaStreamPrivate.h')
-rw-r--r--Source/WebCore/platform/mediastream/MediaStreamPrivate.h120
1 files changed, 75 insertions, 45 deletions
diff --git a/Source/WebCore/platform/mediastream/MediaStreamPrivate.h b/Source/WebCore/platform/mediastream/MediaStreamPrivate.h
index f1617aa4c..a4596ff59 100644
--- a/Source/WebCore/platform/mediastream/MediaStreamPrivate.h
+++ b/Source/WebCore/platform/mediastream/MediaStreamPrivate.h
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 2011 Ericsson AB. All rights reserved.
+ * Copyright (C) 2011, 2015 Ericsson AB. All rights reserved.
* Copyright (C) 2012 Google Inc. All rights reserved.
* Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -35,78 +36,107 @@
#if ENABLE(MEDIA_STREAM)
-#include "MediaStreamSource.h"
+#include "FloatSize.h"
#include "MediaStreamTrack.h"
#include "MediaStreamTrackPrivate.h"
+#include <wtf/Function.h>
+#include <wtf/HashMap.h>
+#include <wtf/MediaTime.h>
#include <wtf/RefCounted.h>
+#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
+#include <wtf/WeakPtr.h>
+
+#if USE(GSTREAMER)
+#include "GRefPtrGStreamer.h"
+#include <owr/owr_gst_video_renderer.h>
+#endif
namespace WebCore {
-class MediaStreamTrackPrivate;
+class MediaStream;
-class MediaStreamPrivateClient : public MediaStreamTrack::Observer {
+class MediaStreamPrivate : public MediaStreamTrackPrivate::Observer, public RefCounted<MediaStreamPrivate> {
public:
- virtual ~MediaStreamPrivateClient() { }
+ class Observer {
+ public:
+ virtual ~Observer() { }
- virtual void streamDidEnd() = 0;
- virtual void addRemoteSource(MediaStreamSource*) = 0;
- virtual void removeRemoteSource(MediaStreamSource*) = 0;
- virtual void addRemoteTrack(MediaStreamTrackPrivate*) = 0;
- virtual void removeRemoteTrack(MediaStreamTrackPrivate*) = 0;
-};
+ virtual void characteristicsChanged() { }
+ virtual void activeStatusChanged() { }
+ virtual void didAddTrack(MediaStreamTrackPrivate&) { }
+ virtual void didRemoveTrack(MediaStreamTrackPrivate&) { }
+ };
-class MediaStreamPrivate : public RefCounted<MediaStreamPrivate> {
-public:
- static PassRefPtr<MediaStreamPrivate> create(const Vector<RefPtr<MediaStreamSource>>& audioSources, const Vector<RefPtr<MediaStreamSource>>& videoSources);
- static PassRefPtr<MediaStreamPrivate> create(const Vector<RefPtr<MediaStreamTrackPrivate>>& audioPrivateTracks, const Vector<RefPtr<MediaStreamTrackPrivate>>& videoPrivateTracks);
+ static Ref<MediaStreamPrivate> create(const Vector<Ref<RealtimeMediaSource>>& audioSources, const Vector<Ref<RealtimeMediaSource>>& videoSources);
+ static Ref<MediaStreamPrivate> create(const MediaStreamTrackPrivateVector&);
- virtual ~MediaStreamPrivate() { }
+ virtual ~MediaStreamPrivate();
- MediaStreamPrivateClient* client() const { return m_client; }
- void setClient(MediaStreamPrivateClient* client) { m_client = client; }
+ enum class NotifyClientOption { Notify, DontNotify };
+
+ void addObserver(Observer&);
+ void removeObserver(Observer&);
String id() const { return m_id; }
- unsigned numberOfAudioSources() const { return m_audioStreamSources.size(); }
- MediaStreamSource* audioSources(unsigned index) const { return m_audioStreamSources[index].get(); }
+ MediaStreamTrackPrivateVector tracks() const;
+ MediaStreamTrackPrivate* activeVideoTrack() { return m_activeVideoTrack; }
+
+ bool active() const { return m_isActive; }
+ void updateActiveState(NotifyClientOption);
- unsigned numberOfVideoSources() const { return m_videoStreamSources.size(); }
- MediaStreamSource* videoSources(unsigned index) const { return m_videoStreamSources[index].get(); }
+ void addTrack(RefPtr<MediaStreamTrackPrivate>&&, NotifyClientOption = NotifyClientOption::Notify);
+ void removeTrack(MediaStreamTrackPrivate&, NotifyClientOption = NotifyClientOption::Notify);
- unsigned numberOfAudioTracks() const { return m_audioPrivateTracks.size(); }
- MediaStreamTrackPrivate* audioTracks(unsigned index) const { return m_audioPrivateTracks[index].get(); }
+ void startProducingData();
+ void stopProducingData();
+ bool isProducingData() const;
- unsigned numberOfVideoTracks() const { return m_videoPrivateTracks.size(); }
- MediaStreamTrackPrivate* videoTracks(unsigned index) const { return m_videoPrivateTracks[index].get(); }
+ RefPtr<Image> currentFrameImage();
+ void paintCurrentFrameInContext(GraphicsContext&, const FloatRect&);
- void addSource(PassRefPtr<MediaStreamSource>);
- void removeSource(PassRefPtr<MediaStreamSource>);
+ bool hasVideo() const;
+ bool hasAudio() const;
+ bool muted() const;
- void addRemoteSource(MediaStreamSource*);
- void removeRemoteSource(MediaStreamSource*);
+ bool hasLocalVideoSource() const;
+ bool hasLocalAudioSource() const;
- bool ended() const { return m_ended; }
- void setEnded();
+ FloatSize intrinsicSize() const;
- void addTrack(PassRefPtr<MediaStreamTrackPrivate>);
- void removeTrack(PassRefPtr<MediaStreamTrackPrivate>);
+ WeakPtr<MediaStreamPrivate> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
- void addRemoteTrack(MediaStreamTrackPrivate*);
- void removeRemoteTrack(MediaStreamTrackPrivate*);
+#if USE(GSTREAMER)
+ void setVideoRenderer(OwrGstVideoRenderer* renderer, GstElement* sink) { m_gstVideoRenderer = renderer; m_gstVideoSinkElement = sink; }
+ GRefPtr<GstElement> getVideoSinkElement() const { return m_gstVideoSinkElement; }
+ GRefPtr<OwrGstVideoRenderer> getVideoRenderer() const { return m_gstVideoRenderer; }
private:
- MediaStreamPrivate(const String& id, const Vector<RefPtr<MediaStreamSource>>& audioSources, const Vector<RefPtr<MediaStreamSource>>& videoSources);
- MediaStreamPrivate(const String& id, const Vector<RefPtr<MediaStreamTrackPrivate>>& audioPrivateTracks, const Vector<RefPtr<MediaStreamTrackPrivate>>& videoPrivateTracks);
+ GRefPtr<GstElement> m_gstVideoSinkElement;
+ GRefPtr<OwrGstVideoRenderer> m_gstVideoRenderer;
+#endif
- MediaStreamPrivateClient* m_client;
- String m_id;
- Vector<RefPtr<MediaStreamSource>> m_audioStreamSources;
- Vector<RefPtr<MediaStreamSource>> m_videoStreamSources;
+private:
+ MediaStreamPrivate(const String&, const MediaStreamTrackPrivateVector&);
+
+ // MediaStreamTrackPrivate::Observer
+ void trackEnded(MediaStreamTrackPrivate&) override;
+ void trackMutedChanged(MediaStreamTrackPrivate&) override;
+ void trackSettingsChanged(MediaStreamTrackPrivate&) override;
+ void trackEnabledChanged(MediaStreamTrackPrivate&) override;
+
+ void characteristicsChanged();
+ void updateActiveVideoTrack();
- Vector<RefPtr<MediaStreamTrackPrivate>> m_audioPrivateTracks;
- Vector<RefPtr<MediaStreamTrackPrivate>> m_videoPrivateTracks;
- bool m_ended;
+ void scheduleDeferredTask(Function<void ()>&&);
+
+ WeakPtrFactory<MediaStreamPrivate> m_weakPtrFactory;
+ Vector<Observer*> m_observers;
+ String m_id;
+ MediaStreamTrackPrivate* m_activeVideoTrack { nullptr };
+ HashMap<String, RefPtr<MediaStreamTrackPrivate>> m_trackSet;
+ bool m_isActive { false };
};
typedef Vector<RefPtr<MediaStreamPrivate>> MediaStreamPrivateVector;