Changeset 190115 in webkit
- Timestamp:
- Sep 22, 2015 7:31:24 AM (9 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r190114 r190115 1 2015-09-22 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream Mac] implement WebAudioSourceProvider 4 https://bugs.webkit.org/show_bug.cgi?id=149419 5 6 Reviewed by Darin Adler. 7 8 * Modules/mediastream/MediaStreamTrack.cpp: 9 (WebCore::MediaStreamTrack::audioSourceProvider): New. 10 * Modules/mediastream/MediaStreamTrack.h: 11 12 * Modules/webaudio/AudioContext.cpp: 13 (WebCore::AudioContext::createMediaStreamSource): Rewrite. 14 15 * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: 16 (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): We know the Vector 17 size, so reserve capacity. 18 19 * Modules/webaudio/MediaStreamAudioSource.cpp: 20 (WebCore::MediaStreamAudioSource::audioSourceProvider): Add. 21 * Modules/webaudio/MediaStreamAudioSource.h: 22 (WebCore::MediaStreamAudioSource::~MediaStreamAudioSource): 23 (WebCore::MediaStreamAudioSource::deviceId): 24 (WebCore::MediaStreamAudioSource::setDeviceId): 25 (WebCore::MediaStreamAudioSource::useIDForTrackID): Deleted. 26 27 * Modules/webaudio/MediaStreamAudioSourceNode.cpp: 28 (WebCore::MediaStreamAudioSourceNode::create): Context and track can't be null so take references. 29 (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode): Ditto. 30 (WebCore::MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode): Clear provider client. 31 (WebCore::MediaStreamAudioSourceNode::setFormat): Create a resampler when necessary. 32 (WebCore::MediaStreamAudioSourceNode::process): Process. 33 (WebCore::MediaStreamAudioSourceNode::reset): Deleted. 34 * Modules/webaudio/MediaStreamAudioSourceNode.h: 35 (WebCore::MediaStreamAudioSourceNode::mediaStream): 36 (WebCore::MediaStreamAudioSourceNode::audioSourceProvider): Deleted. 37 38 * WebCore.xcodeproj/project.pbxproj: Add WebAudioSourceProviderAVFObjC.cpp/h. 39 40 * platform/mediastream/MediaStreamTrackPrivate.cpp: 41 (WebCore::MediaStreamTrackPrivate::audioSourceProvider): New, passthrough to source. 42 * platform/mediastream/MediaStreamTrackPrivate.h: 43 * platform/mediastream/RealtimeMediaSource.h: 44 (WebCore::RealtimeMediaSource::audioSourceProvider): 45 46 * platform/mediastream/mac/AVAudioCaptureSource.h: 47 * platform/mediastream/mac/AVAudioCaptureSource.mm: 48 (WebCore::AVAudioCaptureSource::audioSourceProvider): New. 49 * platform/mediastream/mac/AVCaptureDeviceManager.mm: 50 * platform/mediastream/mac/AVMediaCaptureSource.h: 51 * platform/mediastream/mac/AVMediaCaptureSource.mm: 52 (WebCore::AVMediaCaptureSource::audioSourceProvider): Assert, this shouldn't be reachable. 53 54 * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: Added. 55 * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Added. 56 (WebCore::WebAudioSourceProviderAVFObjC::create): 57 (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): 58 (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): 59 (WebCore::WebAudioSourceProviderAVFObjC::startProducingData): 60 (WebCore::WebAudioSourceProviderAVFObjC::stopProducingData): 61 (WebCore::WebAudioSourceProviderAVFObjC::provideInput): 62 (WebCore::WebAudioSourceProviderAVFObjC::setClient): 63 (WebCore::operator==): 64 (WebCore::operator!=): 65 (WebCore::WebAudioSourceProviderAVFObjC::prepare): 66 (WebCore::WebAudioSourceProviderAVFObjC::unprepare): 67 (WebCore::WebAudioSourceProviderAVFObjC::process): 68 1 69 2015-09-22 sangdeug.kim <sangdeug.kim@samsung.com> 2 70 -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp
r190072 r190115 236 236 } 237 237 238 AudioSourceProvider* MediaStreamTrack::audioSourceProvider() 239 { 240 return m_private->audioSourceProvider(); 241 } 242 238 243 } // namespace WebCore 239 244 -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h
r190072 r190115 88 88 MediaStreamTrackPrivate& privateTrack() { return m_private.get(); } 89 89 90 AudioSourceProvider* audioSourceProvider(); 91 90 92 void addObserver(Observer*); 91 93 void removeObserver(Observer*); -
trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp
r187098 r190115 456 456 PassRefPtr<MediaStreamAudioSourceNode> AudioContext::createMediaStreamSource(MediaStream* mediaStream, ExceptionCode& ec) 457 457 { 458 ASSERT(isMainThread()); 459 458 460 ASSERT(mediaStream); 459 461 if (!mediaStream) { … … 462 464 } 463 465 464 ASSERT(isMainThread()); 465 lazyInitialize(); 466 467 AudioSourceProvider* provider = nullptr; 468 469 RefPtr<MediaStreamTrack> audioTrack; 470 471 // FIXME: get a provider for non-local MediaStreams (like from a remote peer). 472 for (auto& track : mediaStream->getAudioTracks()) { 473 audioTrack = track; 474 if (audioTrack->source()->isAudioStreamSource()) { 475 auto source = static_cast<MediaStreamAudioSource*>(audioTrack->source()); 476 ASSERT(!source->deviceId().isEmpty()); 477 destination()->enableInput(source->deviceId()); 478 provider = destination()->localAudioInputProvider(); 466 auto audioTracks = mediaStream->getAudioTracks(); 467 if (audioTracks.isEmpty()) { 468 ec = INVALID_STATE_ERR; 469 return nullptr; 470 } 471 472 MediaStreamTrack* providerTrack = nullptr; 473 for (auto& track : audioTracks) { 474 if (track->audioSourceProvider()) { 475 providerTrack = track.get(); 479 476 break; 480 477 } 481 478 } 482 479 483 RefPtr<MediaStreamAudioSourceNode> node = MediaStreamAudioSourceNode::create(this, mediaStream, audioTrack.get(), provider); 484 485 // FIXME: Only stereo streams are supported right now. We should be able to accept multi-channel streams. 480 if (!providerTrack) { 481 ec = INVALID_STATE_ERR; 482 return nullptr; 483 } 484 485 lazyInitialize(); 486 487 auto node = MediaStreamAudioSourceNode::create(*this, *mediaStream, *providerTrack); 486 488 node->setFormat(2, sampleRate()); 487 489 488 refNode( node.get()); // context keeps reference until node is disconnected489 return node;490 refNode(&node.get()); // context keeps reference until node is disconnected 491 return &node.get(); 490 492 } 491 493 -
trunk/Source/WebCore/Modules/webaudio/AudioDestinationNode.cpp
r183424 r190115 54 54 } 55 55 56 void AudioDestinationNode::render(AudioBus* sourceBus, AudioBus* destinationBus, size_t numberOfFrames)56 void AudioDestinationNode::render(AudioBus*, AudioBus* destinationBus, size_t numberOfFrames) 57 57 { 58 58 // We don't want denormals slowing down any of the audio processing … … 71 71 // Let the context take care of any business at the start of each render quantum. 72 72 context()->handlePreRenderTasks(); 73 74 // Prepare the local audio input provider for this render quantum.75 if (sourceBus)76 m_localAudioInputProvider.set(sourceBus);77 73 78 74 // This will cause the node(s) connected to us to process, which in turn will pull on their input(s), -
trunk/Source/WebCore/Modules/webaudio/AudioDestinationNode.h
r182141 r190115 63 63 virtual void close(std::function<void()>) { } 64 64 65 AudioSourceProvider* localAudioInputProvider() { return &m_localAudioInputProvider; }66 67 65 virtual bool isPlaying() { return false; } 68 66 virtual void isPlayingDidChange() override; … … 71 69 72 70 protected: 73 // LocalAudioInputProvider allows us to expose an AudioSourceProvider for local/live audio input.74 // If there is local/live audio input, we call set() with the audio input data every render quantum.75 class LocalAudioInputProvider : public AudioSourceProvider {76 public:77 LocalAudioInputProvider()78 : m_sourceBus(AudioBus::create(2, AudioNode::ProcessingSizeInFrames)) // FIXME: handle non-stereo local input.79 {80 }81 82 void set(AudioBus* bus)83 {84 if (bus)85 m_sourceBus->copyFrom(*bus);86 }87 88 // AudioSourceProvider.89 virtual void provideInput(AudioBus* destinationBus, size_t numberOfFrames) override90 {91 bool isGood = destinationBus && destinationBus->length() == numberOfFrames && m_sourceBus->length() == numberOfFrames;92 ASSERT(isGood);93 if (isGood)94 destinationBus->copyFrom(*m_sourceBus);95 }96 97 private:98 RefPtr<AudioBus> m_sourceBus;99 };100 101 71 virtual double tailTime() const override { return 0; } 102 72 virtual double latencyTime() const override { return 0; } … … 108 78 size_t m_currentSampleFrame; 109 79 110 LocalAudioInputProvider m_localAudioInputProvider;111 80 bool m_isSilent; 112 81 bool m_isEffectivelyPlayingAudio; -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp
r184940 r190115 50 50 51 51 m_source = MediaStreamAudioSource::create(); 52 Vector<RefPtr<RealtimeMediaSource>> audioSources; 53 audioSources.append(m_source); 54 m_stream = MediaStream::create(*context->scriptExecutionContext(), MediaStreamPrivate::create(audioSources, Vector<RefPtr<RealtimeMediaSource>>())); 52 Vector<RefPtr<RealtimeMediaSource>> audioSources(1, m_source); 53 m_stream = MediaStream::create(*context->scriptExecutionContext(), MediaStreamPrivate::create(WTF::move(audioSources), Vector<RefPtr<RealtimeMediaSource>>())); 55 54 56 55 m_source->setAudioFormat(numberOfChannels, context->sampleRate()); -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp
r188594 r190115 25 25 26 26 #include "config.h" 27 #include "MediaStreamAudioSource.h" 27 28 28 29 #if ENABLE(MEDIA_STREAM) 29 30 30 #include "MediaStreamAudioSource.h" 31 31 #include "AudioSourceProvider.h" 32 32 #include "NotImplemented.h" 33 33 #include "UUID.h" … … 59 59 notImplemented(); 60 60 return m_currentStates; 61 61 } 62 63 AudioSourceProvider* MediaStreamAudioSource::audioSourceProvider() 64 { 65 // FIXME: implement this. 66 notImplemented(); 67 return nullptr; 62 68 } 63 69 -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h
r188594 r190115 48 48 ~MediaStreamAudioSource() { } 49 49 50 virtual bool useIDForTrackID() const { return true; } 51 52 virtual RefPtr<RealtimeMediaSourceCapabilities> capabilities() const; 53 virtual const RealtimeMediaSourceStates& states(); 50 RefPtr<RealtimeMediaSourceCapabilities> capabilities() const override; 51 const RealtimeMediaSourceStates& states() override; 54 52 55 53 const String& deviceId() const { return m_deviceId; } … … 66 64 MediaStreamAudioSource(); 67 65 66 AudioSourceProvider* audioSourceProvider() override; 67 68 68 String m_deviceId; 69 69 Lock m_audioConsumersLock; -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.cpp
r188642 r190115 36 36 namespace WebCore { 37 37 38 Ref<MediaStreamAudioSourceNode> MediaStreamAudioSourceNode::create(AudioContext * context, MediaStream* mediaStream, MediaStreamTrack* audioTrack, AudioSourceProvider* audioSourceProvider)38 Ref<MediaStreamAudioSourceNode> MediaStreamAudioSourceNode::create(AudioContext& context, MediaStream& mediaStream, MediaStreamTrack& audioTrack) 39 39 { 40 return adoptRef(*new MediaStreamAudioSourceNode(context, mediaStream, audioTrack , audioSourceProvider));40 return adoptRef(*new MediaStreamAudioSourceNode(context, mediaStream, audioTrack)); 41 41 } 42 42 43 MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(AudioContext * context, MediaStream* mediaStream, MediaStreamTrack* audioTrack, AudioSourceProvider* audioSourceProvider)44 : AudioNode( context, context->sampleRate())43 MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(AudioContext& context, MediaStream& mediaStream, MediaStreamTrack& audioTrack) 44 : AudioNode(&context, context.sampleRate()) 45 45 , m_mediaStream(mediaStream) 46 46 , m_audioTrack(audioTrack) 47 , m_audioSourceProvider(audioSourceProvider)48 , m_sourceNumberOfChannels(0)49 47 { 48 AudioSourceProvider* audioSourceProvider = m_audioTrack->audioSourceProvider(); 49 ASSERT(audioSourceProvider); 50 51 audioSourceProvider->setClient(this); 52 50 53 // Default to stereo. This could change depending on the format of the MediaStream's audio track. 51 54 addOutput(std::make_unique<AudioNodeOutput>(this, 2)); … … 58 61 MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode() 59 62 { 63 AudioSourceProvider* audioSourceProvider = m_audioTrack->audioSourceProvider(); 64 ASSERT(audioSourceProvider); 65 audioSourceProvider->setClient(nullptr); 60 66 uninitialize(); 61 67 } … … 63 69 void MediaStreamAudioSourceNode::setFormat(size_t numberOfChannels, float sourceSampleRate) 64 70 { 65 if (numberOfChannels != m_sourceNumberOfChannels || sourceSampleRate != sampleRate()) { 71 float sampleRate = this->sampleRate(); 72 if (numberOfChannels != m_sourceNumberOfChannels || sourceSampleRate != sampleRate) { 66 73 // The sample-rate must be equal to the context's sample-rate. 67 if (!numberOfChannels || numberOfChannels > AudioContext::maxNumberOfChannels() || sourceSampleRate != sampleRate ()) {74 if (!numberOfChannels || numberOfChannels > AudioContext::maxNumberOfChannels() || sourceSampleRate != sampleRate) { 68 75 // process() will generate silence for these uninitialized values. 69 76 LOG(Media, "MediaStreamAudioSourceNode::setFormat(%u, %f) - unhandled format change", static_cast<unsigned>(numberOfChannels), sourceSampleRate); … … 74 81 // Synchronize with process(). 75 82 std::lock_guard<Lock> lock(m_processMutex); 83 84 m_sourceNumberOfChannels = numberOfChannels; 85 m_sourceSampleRate = sourceSampleRate; 86 87 if (sourceSampleRate == sampleRate) 88 m_multiChannelResampler = nullptr; 89 else { 90 double scaleFactor = sourceSampleRate / sampleRate; 91 m_multiChannelResampler = std::make_unique<MultiChannelResampler>(scaleFactor, numberOfChannels); 92 } 76 93 77 94 m_sourceNumberOfChannels = numberOfChannels; … … 90 107 { 91 108 AudioBus* outputBus = output(0)->bus(); 109 AudioSourceProvider* provider = m_audioTrack->audioSourceProvider(); 92 110 93 if (!audioSourceProvider()) { 94 outputBus->zero(); 95 return; 96 } 97 98 if (!mediaStream() || m_sourceNumberOfChannels != outputBus->numberOfChannels()) { 111 if (!mediaStream() || !m_sourceNumberOfChannels || !m_sourceSampleRate || !provider) { 99 112 outputBus->zero(); 100 113 return; … … 111 124 } 112 125 113 audioSourceProvider()->provideInput(outputBus, numberOfFrames); 114 } 115 116 void MediaStreamAudioSourceNode::reset() 117 { 126 if (m_multiChannelResampler.get()) { 127 ASSERT(m_sourceSampleRate != sampleRate()); 128 m_multiChannelResampler->process(provider, outputBus, numberOfFrames); 129 } else { 130 // Bypass the resampler completely if the source is at the context's sample-rate. 131 ASSERT(m_sourceSampleRate == sampleRate()); 132 provider->provideInput(outputBus, numberOfFrames); 133 } 118 134 } 119 135 -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.h
r188642 r190115 32 32 #include "AudioSourceProviderClient.h" 33 33 #include "MediaStream.h" 34 #include "MultiChannelResampler.h" 34 35 #include <wtf/Lock.h> 35 #include <wtf/ PassRefPtr.h>36 #include <wtf/RefPtr.h> 36 37 37 38 namespace WebCore { 38 39 39 40 class AudioContext; 41 class MultiChannelResampler; 40 42 41 43 class MediaStreamAudioSourceNode : public AudioNode, public AudioSourceProviderClient { 42 44 public: 43 static Ref<MediaStreamAudioSourceNode> create(AudioContext *, MediaStream*, MediaStreamTrack*, AudioSourceProvider*);45 static Ref<MediaStreamAudioSourceNode> create(AudioContext&, MediaStream&, MediaStreamTrack&); 44 46 45 47 virtual ~MediaStreamAudioSourceNode(); 46 48 47 MediaStream* mediaStream() { return m_mediaStream.get(); }49 MediaStream* mediaStream() { return &m_mediaStream.get(); } 48 50 49 51 // AudioNode 50 v irtual void process(size_t framesToProcess) override;51 v irtual void reset() override;52 void process(size_t framesToProcess) override; 53 void reset() override { } 52 54 53 55 // AudioSourceProviderClient 54 virtual void setFormat(size_t numberOfChannels, float sampleRate) override; 55 56 AudioSourceProvider* audioSourceProvider() const { return m_audioSourceProvider; } 56 void setFormat(size_t numberOfChannels, float sampleRate) override; 57 57 58 58 private: 59 MediaStreamAudioSourceNode(AudioContext *, MediaStream*, MediaStreamTrack*, AudioSourceProvider*);59 MediaStreamAudioSourceNode(AudioContext&, MediaStream&, MediaStreamTrack&); 60 60 61 virtualdouble tailTime() const override { return 0; }62 virtualdouble latencyTime() const override { return 0; }61 double tailTime() const override { return 0; } 62 double latencyTime() const override { return 0; } 63 63 64 64 // As an audio source, we will never propagate silence. 65 virtualbool propagatesSilence() const override { return false; }65 bool propagatesSilence() const override { return false; } 66 66 67 Ref Ptr<MediaStream> m_mediaStream;68 Ref Ptr<MediaStreamTrack> m_audioTrack;69 AudioSourceProvider* m_audioSourceProvider;67 Ref<MediaStream> m_mediaStream; 68 Ref<MediaStreamTrack> m_audioTrack; 69 std::unique_ptr<MultiChannelResampler> m_multiChannelResampler; 70 70 71 71 Lock m_processMutex; 72 72 73 unsigned m_sourceNumberOfChannels; 73 unsigned m_sourceNumberOfChannels { 0 }; 74 double m_sourceSampleRate { 0 }; 74 75 }; 75 76 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r190106 r190115 341 341 07CE77D516712A6A00C55A47 /* InbandTextTrackPrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 342 342 07D07B141834158800ABDD3C /* JSRTCSessionDescriptionCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07D07B131834158800ABDD3C /* JSRTCSessionDescriptionCustom.cpp */; }; 343 07D637401BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D6373E1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h */; }; 344 07D637411BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07D6373F1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm */; }; 343 345 07DC5FD417D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */; }; 344 346 07E116B11489C9A100EC5ACE /* JSTextTrackCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07E116B01489C9A100EC5ACE /* JSTextTrackCustom.cpp */; }; … … 6695 6697 FD31608712B026F700C1A359 /* AudioResamplerKernel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD31605112B026F700C1A359 /* AudioResamplerKernel.cpp */; }; 6696 6698 FD31608812B026F700C1A359 /* AudioResamplerKernel.h in Headers */ = {isa = PBXBuildFile; fileRef = FD31605212B026F700C1A359 /* AudioResamplerKernel.h */; }; 6697 FD31608912B026F700C1A359 /* AudioSourceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = FD31605312B026F700C1A359 /* AudioSourceProvider.h */; };6699 FD31608912B026F700C1A359 /* AudioSourceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = FD31605312B026F700C1A359 /* AudioSourceProvider.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6698 6700 FD31608A12B026F700C1A359 /* AudioUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD31605412B026F700C1A359 /* AudioUtilities.cpp */; }; 6699 6701 FD31608B12B026F700C1A359 /* AudioUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = FD31605512B026F700C1A359 /* AudioUtilities.h */; }; … … 7493 7495 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivateClient.h; sourceTree = "<group>"; }; 7494 7496 07D07B131834158800ABDD3C /* JSRTCSessionDescriptionCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSRTCSessionDescriptionCustom.cpp; sourceTree = "<group>"; }; 7497 07D6373E1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebAudioSourceProviderAVFObjC.h; sourceTree = "<group>"; }; 7498 07D6373F1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebAudioSourceProviderAVFObjC.mm; sourceTree = "<group>"; }; 7495 7499 07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSRTCStatsResponseCustom.cpp; sourceTree = "<group>"; }; 7496 7500 07E116B01489C9A100EC5ACE /* JSTextTrackCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackCustom.cpp; sourceTree = "<group>"; }; … … 15003 15007 4A0FFAA31AAF5EF60062803B /* RealtimeMediaSourceCenterMac.cpp */, 15004 15008 4A0FFAA41AAF5EF60062803B /* RealtimeMediaSourceCenterMac.h */, 15009 07D6373E1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h */, 15010 07D6373F1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm */, 15005 15011 ); 15006 15012 path = mac; … … 26592 26598 BCEA4880097D93020094C9E4 /* RenderObject.h in Headers */, 26593 26599 BCFA930810333193007B25D1 /* RenderOverflow.h in Headers */, 26600 07D637401BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h in Headers */, 26594 26601 A43BF59D1149292800C643CA /* RenderProgress.h in Headers */, 26595 26602 B5B65874186FDE4C009C26E8 /* RenderPtr.h in Headers */, … … 30394 30401 A78FE13B12366B1000ACE8D0 /* SpellChecker.cpp in Sources */, 30395 30402 B8DBDB4D130B0F8A00F5CDB1 /* SpellingCorrectionCommand.cpp in Sources */, 30403 07D637411BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm in Sources */, 30396 30404 5103C2B11BA22D1A00E26337 /* LegacyAny.cpp in Sources */, 30397 30405 4512502215DCE37D002F84E2 /* SpinButtonElement.cpp in Sources */, -
trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp
r190072 r190115 151 151 } 152 152 153 AudioSourceProvider* MediaStreamTrackPrivate::audioSourceProvider() 154 { 155 return m_source->audioSourceProvider(); 156 } 157 153 158 void MediaStreamTrackPrivate::sourceStopped() 154 159 { -
trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h
r190072 r190115 89 89 void applyConstraints(const MediaConstraints&); 90 90 91 AudioSourceProvider* audioSourceProvider(); 92 91 93 private: 92 94 explicit MediaStreamTrackPrivate(const MediaStreamTrackPrivate&); -
trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h
r190072 r190115 37 37 #if ENABLE(MEDIA_STREAM) 38 38 39 #include "AudioSourceProvider.h" 39 40 #include "MediaConstraints.h" 40 41 #include "RealtimeMediaSourceCapabilities.h" … … 108 109 void reset(); 109 110 111 virtual AudioSourceProvider* audioSourceProvider() { return nullptr; } 112 110 113 protected: 111 114 RealtimeMediaSource(const String& id, Type, const String& name); -
trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.h
r189913 r190115 37 37 namespace WebCore { 38 38 39 class WebAudioSourceProviderAVFObjC; 40 39 41 class AVAudioCaptureSource : public AVMediaCaptureSource { 40 42 public: … … 62 64 void setupCaptureSession() override; 63 65 void updateStates() override; 66 AudioSourceProvider* audioSourceProvider() override; 64 67 65 68 RetainPtr<AVCaptureConnection> m_audioConnection; 66 69 70 RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider; 67 71 std::unique_ptr<AudioStreamBasicDescription> m_inputDescription; 68 72 Vector<Observer*> m_observers; -
trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm
r189913 r190115 34 34 #import "RealtimeMediaSourceStates.h" 35 35 #import "SoftLinking.h" 36 #import "WebAudioSourceProviderAVFObjC.h" 36 37 #import <AVFoundation/AVFoundation.h> 37 38 #import <CoreAudio/CoreAudioTypes.h> … … 165 166 } 166 167 168 AudioSourceProvider* AVAudioCaptureSource::audioSourceProvider() 169 { 170 if (!m_audioSourceProvider) 171 m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this); 172 173 return m_audioSourceProvider.get(); 174 } 175 167 176 } // namespace WebCore 168 177 -
trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h
r189913 r190115 64 64 65 65 const RealtimeMediaSourceStates& states() override; 66 AudioSourceProvider* audioSourceProvider() override; 66 67 67 68 virtual void setupCaptureSession() = 0; -
trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm
r189913 r190115 210 210 } 211 211 212 AudioSourceProvider* AVMediaCaptureSource::audioSourceProvider() 213 { 214 ASSERT_NOT_REACHED(); 215 return nullptr; 216 } 217 212 218 } // namespace WebCore 213 219
Note: See TracChangeset
for help on using the changeset viewer.