diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/mediastream/MediaStreamPrivate.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/platform/mediastream/MediaStreamPrivate.h')
-rw-r--r-- | Source/WebCore/platform/mediastream/MediaStreamPrivate.h | 120 |
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; |