Home | History | Annotate | Download | only in platform
      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 #ifndef WebMediaStreamTrack_h
     26 #define WebMediaStreamTrack_h
     27 
     28 #include "WebCommon.h"
     29 #include "WebNonCopyable.h"
     30 #include "WebPrivatePtr.h"
     31 
     32 namespace WebCore {
     33 class MediaStreamComponent;
     34 }
     35 
     36 namespace blink {
     37 class WebAudioSourceProvider;
     38 class WebMediaStream;
     39 class WebMediaStreamSource;
     40 class WebString;
     41 
     42 class WebMediaStreamTrack {
     43 public:
     44     class ExtraData {
     45     public:
     46         virtual ~ExtraData() { }
     47     };
     48 
     49     WebMediaStreamTrack() { }
     50     WebMediaStreamTrack(const WebMediaStreamTrack& other) { assign(other); }
     51     ~WebMediaStreamTrack() { reset(); }
     52 
     53     WebMediaStreamTrack& operator=(const WebMediaStreamTrack& other)
     54     {
     55         assign(other);
     56         return *this;
     57     }
     58     BLINK_EXPORT void assign(const WebMediaStreamTrack&);
     59 
     60     BLINK_EXPORT void initialize(const WebMediaStreamSource&);
     61     BLINK_EXPORT void initialize(const WebString& id, const WebMediaStreamSource&);
     62 
     63     BLINK_EXPORT void reset();
     64     bool isNull() const { return m_private.isNull(); }
     65 
     66     BLINK_EXPORT WebString id() const;
     67 
     68     BLINK_EXPORT WebMediaStream stream() const;
     69     BLINK_EXPORT WebMediaStreamSource source() const;
     70     BLINK_EXPORT bool isEnabled() const;
     71 
     72     // Extra data associated with this WebMediaStream.
     73     // If non-null, the extra data pointer will be deleted when the object is destroyed.
     74     // Setting the extra data pointer will cause any existing non-null
     75     // extra data pointer to be deleted.
     76     BLINK_EXPORT ExtraData* extraData() const;
     77     BLINK_EXPORT void setExtraData(ExtraData*);
     78 
     79     // The lifetime of the WebAudioSourceProvider should outlive the
     80     // WebMediaStreamTrack, and clients are responsible for calling
     81     // setSourceProvider(0) before the WebMediaStreamTrack is going away.
     82     BLINK_EXPORT void setSourceProvider(WebAudioSourceProvider*);
     83 
     84 #if BLINK_IMPLEMENTATION
     85     WebMediaStreamTrack(PassRefPtr<WebCore::MediaStreamComponent>);
     86     WebMediaStreamTrack(WebCore::MediaStreamComponent*);
     87     WebMediaStreamTrack& operator=(WebCore::MediaStreamComponent*);
     88     operator WTF::PassRefPtr<WebCore::MediaStreamComponent>() const;
     89     operator WebCore::MediaStreamComponent*() const;
     90 #endif
     91 
     92 private:
     93     WebPrivatePtr<WebCore::MediaStreamComponent> m_private;
     94 };
     95 
     96 } // namespace blink
     97 
     98 #endif // WebMediaStreamTrack_h
     99