1/* 2 * Copyright (C) 2013 Apple 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. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#include "config.h" 27 28#if ENABLE(MEDIA_STREAM) 29 30#include "MediaStreamCapabilities.h" 31 32#include "AllAudioCapabilities.h" 33#include "AllVideoCapabilities.h" 34#include "CapabilityRange.h" 35#include "MediaSourceStates.h" 36#include "MediaStreamSourceCapabilities.h" 37 38namespace WebCore { 39 40RefPtr<MediaStreamCapabilities> MediaStreamCapabilities::create(PassRefPtr<MediaStreamSourceCapabilities> capabilities) 41{ 42 if (capabilities->hasVideoSource()) 43 return AllVideoCapabilities::create(capabilities); 44 45 return AllAudioCapabilities::create(capabilities); 46} 47 48MediaStreamCapabilities::MediaStreamCapabilities(PassRefPtr<MediaStreamSourceCapabilities> capabilities) 49 : m_SourceCapabilities(capabilities) 50{ 51} 52 53Vector<String> MediaStreamCapabilities::sourceType() const 54{ 55 ASSERT(m_SourceCapabilities->hasVideoSource()); 56 57 size_t count = m_SourceCapabilities->sourceTypes().size(); 58 if (!count) 59 return Vector<String>(); 60 61 const Vector<MediaStreamSourceStates::SourceType>& sourceTypes = m_SourceCapabilities->sourceTypes(); 62 Vector<String> capabilities; 63 capabilities.reserveCapacity(count); 64 65 for (size_t i = 0; i < count; ++i) 66 capabilities.append(MediaStreamSourceStates::sourceType(sourceTypes[i])); 67 68 return capabilities; 69} 70 71Vector<String> MediaStreamCapabilities::sourceId() const 72{ 73 size_t count = m_SourceCapabilities->sourceId().size(); 74 if (!count) 75 return Vector<String>(); 76 77 const Vector<AtomicString>& sourceIds = m_SourceCapabilities->sourceId(); 78 Vector<String> capabilities; 79 capabilities.reserveCapacity(count); 80 81 for (size_t i = 0; i < count; ++i) 82 capabilities.append(sourceIds[i]); 83 84 return capabilities; 85} 86 87Vector<String> MediaStreamCapabilities::facingMode() const 88{ 89 ASSERT(m_SourceCapabilities->hasVideoSource()); 90 91 size_t count = m_SourceCapabilities->facingModes().size(); 92 if (!count) 93 return Vector<String>(); 94 95 const Vector<MediaStreamSourceStates::VideoFacingMode>& facingModes = m_SourceCapabilities->facingModes(); 96 Vector<String> capabilities; 97 capabilities.reserveCapacity(count); 98 99 for (size_t i = 0; i < count; ++i) 100 capabilities.append(MediaStreamSourceStates::facingMode(facingModes[i])); 101 102 return capabilities; 103} 104 105RefPtr<CapabilityRange> MediaStreamCapabilities::width() const 106{ 107 ASSERT(m_SourceCapabilities->hasVideoSource()); 108 109 return CapabilityRange::create(m_SourceCapabilities->width()); 110} 111 112RefPtr<CapabilityRange> MediaStreamCapabilities::height() const 113{ 114 ASSERT(m_SourceCapabilities->hasVideoSource()); 115 116 return CapabilityRange::create(m_SourceCapabilities->height()); 117} 118 119RefPtr<CapabilityRange> MediaStreamCapabilities::frameRate() const 120{ 121 ASSERT(m_SourceCapabilities->hasVideoSource()); 122 123 return CapabilityRange::create(m_SourceCapabilities->frameRate()); 124} 125 126RefPtr<CapabilityRange> MediaStreamCapabilities::aspectRatio() const 127{ 128 ASSERT(m_SourceCapabilities->hasVideoSource()); 129 130 return CapabilityRange::create(m_SourceCapabilities->aspectRatio()); 131} 132 133RefPtr<CapabilityRange> MediaStreamCapabilities::volume() const 134{ 135 ASSERT(!m_SourceCapabilities->hasVideoSource()); 136 137 return CapabilityRange::create(m_SourceCapabilities->volume()); 138} 139 140} // namespace WebCore 141 142#endif 143