1/* 2 * Copyright (C) 2011 Ericsson AB. All rights reserved. 3 * Copyright (C) 2012 Google Inc. All rights reserved. 4 * Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies). 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer 14 * in the documentation and/or other materials provided with the 15 * distribution. 16 * 3. Neither the name of Ericsson nor the names of its contributors 17 * may be used to endorse or promote products derived from this 18 * software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33#ifndef MediaStreamPrivate_h 34#define MediaStreamPrivate_h 35 36#if ENABLE(MEDIA_STREAM) 37 38#include "MediaStreamSource.h" 39#include "MediaStreamTrack.h" 40#include "MediaStreamTrackPrivate.h" 41#include <wtf/RefCounted.h> 42#include <wtf/Vector.h> 43 44namespace WebCore { 45 46class MediaStreamTrackPrivate; 47 48class MediaStreamPrivateClient : public MediaStreamTrack::Observer { 49public: 50 virtual ~MediaStreamPrivateClient() { } 51 52 virtual void setStreamIsActive(bool) = 0; 53 virtual void addRemoteSource(MediaStreamSource*) = 0; 54 virtual void removeRemoteSource(MediaStreamSource*) = 0; 55 virtual void addRemoteTrack(MediaStreamTrackPrivate*) = 0; 56 virtual void removeRemoteTrack(MediaStreamTrackPrivate*) = 0; 57}; 58 59class MediaStreamPrivate : public RefCounted<MediaStreamPrivate> { 60public: 61 static PassRefPtr<MediaStreamPrivate> create(const Vector<RefPtr<MediaStreamSource>>& audioSources, const Vector<RefPtr<MediaStreamSource>>& videoSources); 62 static PassRefPtr<MediaStreamPrivate> create(const Vector<RefPtr<MediaStreamTrackPrivate>>& audioPrivateTracks, const Vector<RefPtr<MediaStreamTrackPrivate>>& videoPrivateTracks); 63 64 virtual ~MediaStreamPrivate() { } 65 66 MediaStreamPrivateClient* client() const { return m_client; } 67 void setClient(MediaStreamPrivateClient* client) { m_client = client; } 68 69 String id() const { return m_id; } 70 71 unsigned numberOfAudioSources() const { return m_audioStreamSources.size(); } 72 MediaStreamSource* audioSources(unsigned index) const { return m_audioStreamSources[index].get(); } 73 74 unsigned numberOfVideoSources() const { return m_videoStreamSources.size(); } 75 MediaStreamSource* videoSources(unsigned index) const { return m_videoStreamSources[index].get(); } 76 77 unsigned numberOfAudioTracks() const { return m_audioPrivateTracks.size(); } 78 MediaStreamTrackPrivate* audioTracks(unsigned index) const { return m_audioPrivateTracks[index].get(); } 79 80 unsigned numberOfVideoTracks() const { return m_videoPrivateTracks.size(); } 81 MediaStreamTrackPrivate* videoTracks(unsigned index) const { return m_videoPrivateTracks[index].get(); } 82 83 void addSource(PassRefPtr<MediaStreamSource>); 84 void removeSource(PassRefPtr<MediaStreamSource>); 85 86 void addRemoteSource(MediaStreamSource*); 87 void removeRemoteSource(MediaStreamSource*); 88 89 bool active() const { return m_isActive; } 90 void setActive(bool); 91 92 void addTrack(PassRefPtr<MediaStreamTrackPrivate>); 93 void removeTrack(PassRefPtr<MediaStreamTrackPrivate>); 94 95 void addRemoteTrack(MediaStreamTrackPrivate*); 96 void removeRemoteTrack(MediaStreamTrackPrivate*); 97 98private: 99 MediaStreamPrivate(const String& id, const Vector<RefPtr<MediaStreamSource>>& audioSources, const Vector<RefPtr<MediaStreamSource>>& videoSources); 100 MediaStreamPrivate(const String& id, const Vector<RefPtr<MediaStreamTrackPrivate>>& audioPrivateTracks, const Vector<RefPtr<MediaStreamTrackPrivate>>& videoPrivateTracks); 101 102 MediaStreamPrivateClient* m_client; 103 String m_id; 104 Vector<RefPtr<MediaStreamSource>> m_audioStreamSources; 105 Vector<RefPtr<MediaStreamSource>> m_videoStreamSources; 106 107 Vector<RefPtr<MediaStreamTrackPrivate>> m_audioPrivateTracks; 108 Vector<RefPtr<MediaStreamTrackPrivate>> m_videoPrivateTracks; 109 bool m_isActive; 110}; 111 112typedef Vector<RefPtr<MediaStreamPrivate>> MediaStreamPrivateVector; 113 114} // namespace WebCore 115 116#endif // ENABLE(MEDIA_STREAM) 117 118#endif // MediaStreamPrivate_h 119