193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)/* 293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * modification, are permitted provided that the following conditions 693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * are met: 793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 1093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 1193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 1293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 1393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 1493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 1793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 1893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 1993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 2093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 2293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 2493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 2593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#ifndef WebMediaStream_h 2693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#define WebMediaStream_h 2793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 2893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "WebCommon.h" 2993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "WebNonCopyable.h" 3093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "WebPrivatePtr.h" 3193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "WebVector.h" 3293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)namespace WebCore { 3493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class MediaStreamDescriptor; 3593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 3693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 3893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class WebMediaStreamSource; 4093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class WebMediaStreamTrack; 4193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class WebString; 4293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 4393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class WebMediaStream { 4493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)public: 4593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) class ExtraData { 4693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) public: 4793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) virtual ~ExtraData() { } 4893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }; 4993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 5093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebMediaStream() { } 5193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebMediaStream(const WebMediaStream& other) { assign(other); } 5293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) ~WebMediaStream() { reset(); } 5393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 5493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebMediaStream& operator=(const WebMediaStream& other) 5593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 5693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assign(other); 5793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return *this; 5893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 5993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 6006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void assign(const WebMediaStream&); 6193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 6206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void initialize(const WebVector<WebMediaStreamTrack>& audioTracks, const WebVector<WebMediaStreamTrack>& videoTracks); 6306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void initialize(const WebString& label, const WebVector<WebMediaStreamTrack>& audioTracks, const WebVector<WebMediaStreamTrack>& videoTracks); 6493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 6506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void reset(); 6693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) bool isNull() const { return m_private.isNull(); } 6793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 6806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT WebString id() const; 6993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 7006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void audioTracks(WebVector<WebMediaStreamTrack>&) const; 7106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void videoTracks(WebVector<WebMediaStreamTrack>&) const; 7293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 7306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void addTrack(const WebMediaStreamTrack&); 7406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void removeTrack(const WebMediaStreamTrack&); 7593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 7693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // Extra data associated with this WebMediaStream. 7793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // If non-null, the extra data pointer will be deleted when the object is destroyed. 7893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // Setting the extra data pointer will cause any existing non-null 7993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // extra data pointer to be deleted. 8006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT ExtraData* extraData() const; 8106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void setExtraData(ExtraData*); 8293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 8306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#if BLINK_IMPLEMENTATION 8493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebMediaStream(WebCore::MediaStreamDescriptor*); 8593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebMediaStream(const WTF::PassRefPtr<WebCore::MediaStreamDescriptor>&); 8693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) operator WTF::PassRefPtr<WebCore::MediaStreamDescriptor>() const; 8793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) operator WebCore::MediaStreamDescriptor*() const; 8893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebMediaStream& operator=(const WTF::PassRefPtr<WebCore::MediaStreamDescriptor>&); 8993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#endif 9093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 9193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)private: 9293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebPrivatePtr<WebCore::MediaStreamDescriptor> m_private; 9393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}; 9493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 9551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 9693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 9793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#endif // WebMediaStream_h 98