Home | History | Annotate | Download | only in support
      1 /*
      2  * Copyright (C) 2013 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1.  Redistributions of source code must retain the above copyright
      8  *     notice, this list of conditions and the following disclaimer.
      9  * 2.  Redistributions in binary form must reproduce the above copyright
     10  *     notice, this list of conditions and the following disclaimer in the
     11  *     documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     23  */
     24 
     25 #include "config.h"
     26 
     27 #include "public/platform/WebMediaStream.h"
     28 
     29 #include "core/platform/UUID.h"
     30 #include "core/platform/mediastream/MediaStreamComponent.h"
     31 #include "core/platform/mediastream/MediaStreamDescriptor.h"
     32 #include "core/platform/mediastream/MediaStreamSource.h"
     33 #include "public/platform/WebMediaStreamSource.h"
     34 #include "public/platform/WebMediaStreamTrack.h"
     35 #include "public/platform/WebString.h"
     36 #include "wtf/OwnPtr.h"
     37 #include "wtf/PassOwnPtr.h"
     38 #include "wtf/Vector.h"
     39 
     40 using namespace WebCore;
     41 
     42 namespace WebKit {
     43 
     44 namespace {
     45 
     46 class ExtraDataContainer : public MediaStreamDescriptor::ExtraData {
     47 public:
     48     ExtraDataContainer(WebMediaStream::ExtraData* extraData) : m_extraData(adoptPtr(extraData)) { }
     49 
     50     WebMediaStream::ExtraData* extraData() { return m_extraData.get(); }
     51 
     52 private:
     53     OwnPtr<WebMediaStream::ExtraData> m_extraData;
     54 };
     55 
     56 } // namespace
     57 
     58 WebMediaStream::WebMediaStream(const PassRefPtr<WebCore::MediaStreamDescriptor>& mediaStreamDescriptor)
     59     : m_private(mediaStreamDescriptor)
     60 {
     61 }
     62 
     63 WebMediaStream::WebMediaStream(WebCore::MediaStreamDescriptor* mediaStreamDescriptor)
     64     : m_private(mediaStreamDescriptor)
     65 {
     66 }
     67 
     68 void WebMediaStream::reset()
     69 {
     70     m_private.reset();
     71 }
     72 
     73 WebString WebMediaStream::id() const
     74 {
     75     return m_private->id();
     76 }
     77 
     78 WebMediaStream::ExtraData* WebMediaStream::extraData() const
     79 {
     80     RefPtr<MediaStreamDescriptor::ExtraData> data = m_private->extraData();
     81     if (!data)
     82         return 0;
     83     return static_cast<ExtraDataContainer*>(data.get())->extraData();
     84 }
     85 
     86 void WebMediaStream::setExtraData(ExtraData* extraData)
     87 {
     88     m_private->setExtraData(adoptRef(new ExtraDataContainer(extraData)));
     89 }
     90 
     91 void WebMediaStream::audioTracks(WebVector<WebMediaStreamTrack>& webTracks) const
     92 {
     93     size_t numberOfTracks = m_private->numberOfAudioComponents();
     94     WebVector<WebMediaStreamTrack> result(numberOfTracks);
     95     for (size_t i = 0; i < numberOfTracks; ++i)
     96         result[i] = m_private->audioComponent(i);
     97     webTracks.swap(result);
     98 }
     99 
    100 void WebMediaStream::videoTracks(WebVector<WebMediaStreamTrack>& webTracks) const
    101 {
    102     size_t numberOfTracks = m_private->numberOfVideoComponents();
    103     WebVector<WebMediaStreamTrack> result(numberOfTracks);
    104     for (size_t i = 0; i < numberOfTracks; ++i)
    105         result[i] = m_private->videoComponent(i);
    106     webTracks.swap(result);
    107 }
    108 
    109 void WebMediaStream::addTrack(const WebMediaStreamTrack& track)
    110 {
    111     ASSERT(!isNull());
    112     m_private->addRemoteTrack(track);
    113 }
    114 
    115 void WebMediaStream::removeTrack(const WebMediaStreamTrack& track)
    116 {
    117     ASSERT(!isNull());
    118     m_private->removeRemoteTrack(track);
    119 }
    120 
    121 WebMediaStream& WebMediaStream::operator=(const PassRefPtr<WebCore::MediaStreamDescriptor>& mediaStreamDescriptor)
    122 {
    123     m_private = mediaStreamDescriptor;
    124     return *this;
    125 }
    126 
    127 WebMediaStream::operator PassRefPtr<WebCore::MediaStreamDescriptor>() const
    128 {
    129     return m_private.get();
    130 }
    131 
    132 WebMediaStream::operator WebCore::MediaStreamDescriptor*() const
    133 {
    134     return m_private.get();
    135 }
    136 
    137 void WebMediaStream::initialize(const WebVector<WebMediaStreamTrack>& audioTracks, const WebVector<WebMediaStreamTrack>& videoTracks)
    138 {
    139     initialize(createCanonicalUUIDString(), audioTracks, videoTracks);
    140 }
    141 
    142 void WebMediaStream::initialize(const WebString& label, const WebVector<WebMediaStreamTrack>& audioTracks, const WebVector<WebMediaStreamTrack>& videoTracks)
    143 {
    144     MediaStreamComponentVector audio, video;
    145     for (size_t i = 0; i < audioTracks.size(); ++i) {
    146         MediaStreamComponent* component = audioTracks[i];
    147         audio.append(component);
    148     }
    149     for (size_t i = 0; i < videoTracks.size(); ++i) {
    150         MediaStreamComponent* component = videoTracks[i];
    151         video.append(component);
    152     }
    153     m_private = MediaStreamDescriptor::create(label, audio, video);
    154 }
    155 
    156 void WebMediaStream::assign(const WebMediaStream& other)
    157 {
    158     m_private = other.m_private;
    159 }
    160 
    161 } // namespace WebKit
    162