1926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/* 2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 4926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * modification, are permitted provided that the following conditions 6926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * are met: 7926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 8926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 9926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 10926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 11926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * documentation and/or other materials provided with the distribution. 12926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 13926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 14926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 20926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 24926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 25926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include "config.h" 26926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebMediaStreamTrack.h" 28926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/mediastream/MediaStreamComponent.h" 3051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/mediastream/MediaStreamSource.h" 311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "public/platform/WebAudioSourceProvider.h" 325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebMediaStream.h" 335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebMediaStreamSource.h" 345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebString.h" 35926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 3651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)namespace { 391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class ExtraDataContainer : public MediaStreamComponent::ExtraData { 411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)public: 421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) explicit ExtraDataContainer(PassOwnPtr<WebMediaStreamTrack::ExtraData> extraData) : m_extraData(extraData) { } 431e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) WebMediaStreamTrack::ExtraData* extraData() { return m_extraData.get(); } 451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)private: 471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) OwnPtr<WebMediaStreamTrack::ExtraData> m_extraData; 481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)}; 491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} // namespace 511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebMediaStreamTrack WebMediaStreamTrack::ExtraData::owner() 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(m_owner); 5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return WebMediaStreamTrack(m_owner); 5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 58e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void WebMediaStreamTrack::ExtraData::setOwner(MediaStreamComponent* owner) 5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(!m_owner); 6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_owner = owner; 6209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 64e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebMediaStreamTrack::WebMediaStreamTrack(PassRefPtr<MediaStreamComponent> mediaStreamComponent) 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_private(mediaStreamComponent) 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 69e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebMediaStreamTrack::WebMediaStreamTrack(MediaStreamComponent* mediaStreamComponent) 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_private(mediaStreamComponent) 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 74e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebMediaStreamTrack& WebMediaStreamTrack::operator=(MediaStreamComponent* mediaStreamComponent) 75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_private = mediaStreamComponent; 77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return *this; 78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebMediaStreamTrack::initialize(const WebMediaStreamSource& source) 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_private = MediaStreamComponent::create(source); 83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebMediaStreamTrack::initialize(const WebString& id, const WebMediaStreamSource& source) 86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_private = MediaStreamComponent::create(id, source); 88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebMediaStreamTrack::reset() 91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_private.reset(); 93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebMediaStreamTrack::operator PassRefPtr<MediaStreamComponent>() const 96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_private.get(); 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebMediaStreamTrack::operator MediaStreamComponent*() const 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_private.get(); 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool WebMediaStreamTrack::isEnabled() const 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(!m_private.isNull()); 108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_private->enabled(); 109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebString WebMediaStreamTrack::id() const 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(!m_private.isNull()); 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_private->id(); 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebMediaStreamSource WebMediaStreamTrack::source() const 118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(!m_private.isNull()); 120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebMediaStreamSource(m_private->source()); 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1231e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)WebMediaStreamTrack::ExtraData* WebMediaStreamTrack::extraData() const 1241e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 12509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) MediaStreamComponent::ExtraData* data = m_private->extraData(); 1261e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (!data) 1271e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return 0; 12809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return static_cast<ExtraDataContainer*>(data)->extraData(); 1291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 1301e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void WebMediaStreamTrack::setExtraData(ExtraData* extraData) 1321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 13309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(!m_private.isNull()); 13409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 13509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (extraData) 13609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) extraData->setOwner(m_private.get()); 13709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 13809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_private->setExtraData(adoptPtr(new ExtraDataContainer(adoptPtr(extraData)))); 1391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 1401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1419bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)void WebMediaStreamTrack::setSourceProvider(WebAudioSourceProvider* provider) 1429bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles){ 1439bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)#if ENABLE(WEB_AUDIO) 1449bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) ASSERT(!m_private.isNull()); 1459bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) m_private->setSourceProvider(provider); 1469bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)#endif // ENABLE(WEB_AUDIO) 1479bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)} 1489bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebMediaStreamTrack::assign(const WebMediaStreamTrack& other) 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_private = other.m_private; 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 15451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 155