Changeset 223412 in webkit
- Timestamp:
- Oct 16, 2017 9:40:48 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 3 edited
- 2 copied
- 4 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r223406 r223412 2540 2540 platform/mediastream/RTCIceCandidateDescriptor.cpp 2541 2541 platform/mediastream/RTCSessionDescriptionDescriptor.cpp 2542 platform/mediastream/RealtimeIncomingAudioSource.cpp 2542 2543 platform/mediastream/RealtimeIncomingVideoSource.cpp 2543 2544 platform/mediastream/RealtimeMediaSource.cpp 2544 2545 platform/mediastream/RealtimeMediaSourceCenter.cpp 2545 2546 platform/mediastream/RealtimeMediaSourceSettings.cpp 2547 platform/mediastream/RealtimeOutgoingAudioSource.cpp 2546 2548 platform/mediastream/RealtimeOutgoingVideoSource.cpp 2547 2549 -
trunk/Source/WebCore/ChangeLog
r223410 r223412 1 2017-10-16 Alejandro G. Castro <alex@igalia.com> 2 3 Make RealtimeIncomingAudioSources and RealtimeOutgoingAudioSources port agnostic 4 https://bugs.webkit.org/show_bug.cgi?id=177928 5 6 Reviewed by Youenn Fablet. 7 8 Refactor the RealtimeIncomingAudioSource and RealtimeOutgoingAudioSource classes, 9 move the mac specific code to a different class. This way we can use them from 10 other ports. 11 12 No new tests, we are not adding new functionality just refactoring. 13 14 * CMakeLists.txt: 15 * WebCore.xcodeproj/project.pbxproj: 16 * platform/mediastream/RealtimeIncomingAudioSource.cpp: Copied from Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h. Just the port agnostic parts. 17 * platform/mediastream/RealtimeIncomingAudioSource.h: Copied from Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h. Ditto. 18 * platform/mediastream/RealtimeOutgoingAudioSource.cpp: Copied from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp. Ditto. 19 * platform/mediastream/RealtimeOutgoingAudioSource.h: Copied from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h. Ditto. 20 * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: Added, it adds Cocoa code parts from original Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp. 21 (WebCore::RealtimeIncomingAudioSource::create): Moved this function from the RealtimeOutgoingAudioSource.cpp file to avoid including the Cocoa file there. 22 * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h: Added Cocoa code from original Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h. 23 * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: Added Cocoa code from original Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp. 24 (WebCore::RealtimeOutgoingAudioSource::create): Moved this function from the RealtimeOutgoingAudioSource.cpp file to avoid including the Cocoa file there. 25 * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.h: Added Cocoa code from the original Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h. 26 1 27 2017-10-16 Wenson Hsieh <wenson_hsieh@apple.com> 2 28 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r223408 r223412 1676 1676 41103AAB1E39791000769F03 /* RealtimeOutgoingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41103AA71E39790A00769F03 /* RealtimeOutgoingAudioSource.cpp */; }; 1677 1677 41103AAC1E39791000769F03 /* RealtimeOutgoingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 41103AA81E39790A00769F03 /* RealtimeOutgoingAudioSource.h */; }; 1678 41103AAB1E39791000769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41103AA71E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp */; }; 1679 41103AAC1E39791000769F14 /* RealtimeOutgoingAudioSourceCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 41103AA81E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.h */; }; 1678 1680 41103AAD1E39791000769F03 /* RealtimeIncomingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 41103AA91E39790A00769F03 /* RealtimeIncomingAudioSource.h */; }; 1679 1681 41103AAE1E39791000769F03 /* RealtimeIncomingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41103AAA1E39790A00769F03 /* RealtimeIncomingAudioSource.cpp */; }; 1682 41103AAD1E39791000769F14 /* RealtimeIncomingAudioSourceCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 41103AA91E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.h */; }; 1683 41103AAE1E39791000769F14 /* RealtimeIncomingAudioSourceCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41103AAA1E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.cpp */; }; 1680 1684 4123081B138C429700BCCFCA /* WebCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F19B1A08245E5A001E9ABC /* WebCore.framework */; }; 1681 1685 41230913138C42FF00BCCFCA /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8216299029F4FB501000131 /* JavaScriptCore.framework */; }; … … 9474 9478 41103AA71E39790A00769F03 /* RealtimeOutgoingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeOutgoingAudioSource.cpp; sourceTree = "<group>"; }; 9475 9479 41103AA81E39790A00769F03 /* RealtimeOutgoingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeOutgoingAudioSource.h; sourceTree = "<group>"; }; 9480 41103AA71E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeOutgoingAudioSourceCocoa.cpp; sourceTree = "<group>"; }; 9481 41103AA81E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeOutgoingAudioSourceCocoa.h; sourceTree = "<group>"; }; 9476 9482 41103AA91E39790A00769F03 /* RealtimeIncomingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeIncomingAudioSource.h; sourceTree = "<group>"; }; 9477 9483 41103AAA1E39790A00769F03 /* RealtimeIncomingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeIncomingAudioSource.cpp; sourceTree = "<group>"; }; 9484 41103AA91E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeIncomingAudioSourceCocoa.h; sourceTree = "<group>"; }; 9485 41103AAA1E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeIncomingAudioSourceCocoa.cpp; sourceTree = "<group>"; }; 9478 9486 41189EF71AD8232800B90A0D /* ReadableStreamDefaultController.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadableStreamDefaultController.idl; sourceTree = "<group>"; }; 9479 9487 41189EF71AD8232800B93F64 /* ReadableByteStreamController.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadableByteStreamController.idl; sourceTree = "<group>"; }; … … 16565 16573 07FFDE67181AED420072D409 /* MediaStreamTrackPrivate.h */, 16566 16574 5EBB89381C77BDA400C65D41 /* PeerMediaDescription.h */, 16575 41103AAA1E39790A00769F03 /* RealtimeIncomingAudioSource.cpp */, 16576 41103AA91E39790A00769F03 /* RealtimeIncomingAudioSource.h */, 16567 16577 5CDD83391E4324BB00621E92 /* RealtimeIncomingVideoSource.cpp */, 16568 16578 5CDD833A1E4324BB00621E92 /* RealtimeIncomingVideoSource.h */, … … 16576 16586 2EC41DE21C0410A300D294FE /* RealtimeMediaSourceSupportedConstraints.cpp */, 16577 16587 07C1C0E41BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h */, 16588 41103AA71E39790A00769F03 /* RealtimeOutgoingAudioSource.cpp */, 16589 41103AA81E39790A00769F03 /* RealtimeOutgoingAudioSource.h */, 16578 16590 5CDD833B1E4324BB00621E92 /* RealtimeOutgoingVideoSource.cpp */, 16579 16591 5CDD833C1E4324BB00621E92 /* RealtimeOutgoingVideoSource.h */, … … 16628 16640 41103AAA1E39790A00769F03 /* RealtimeIncomingAudioSource.cpp */, 16629 16641 41103AA91E39790A00769F03 /* RealtimeIncomingAudioSource.h */, 16642 41103AAA1E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.cpp */, 16643 41103AA91E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.h */, 16630 16644 5CDD83391E4324BB00621E83 /* RealtimeIncomingVideoSourceCocoa.cpp */, 16631 16645 5CDD833A1E4324BB00621E83 /* RealtimeIncomingVideoSourceCocoa.h */, … … 16634 16648 41103AA71E39790A00769F03 /* RealtimeOutgoingAudioSource.cpp */, 16635 16649 41103AA81E39790A00769F03 /* RealtimeOutgoingAudioSource.h */, 16650 41103AA71E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp */, 16651 41103AA81E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.h */, 16636 16652 5CDD833B1E4324BB00621B83 /* RealtimeOutgoingVideoSourceCocoa.cpp */, 16637 16653 5CDD833C1E4324BB00621B83 /* RealtimeOutgoingVideoSourceCocoa.h */, … … 29773 29789 FD31603C12B0267600C1A359 /* RealtimeAnalyser.h in Headers */, 29774 29790 41103AAD1E39791000769F03 /* RealtimeIncomingAudioSource.h in Headers */, 29791 41103AAD1E39791000769F14 /* RealtimeIncomingAudioSourceCocoa.h in Headers */, 29775 29792 4A4F65711AA997F100E38CDD /* RealtimeMediaSource.h in Headers */, 29776 29793 4A4F65721AA997F100E38CDD /* RealtimeMediaSourceCapabilities.h in Headers */, … … 29780 29797 07C1C0E51BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h in Headers */, 29781 29798 41103AAC1E39791000769F03 /* RealtimeOutgoingAudioSource.h in Headers */, 29799 41103AAC1E39791000769F14 /* RealtimeOutgoingAudioSourceCocoa.h in Headers */, 29782 29800 91B952241F58A58F00931DC2 /* RecordingSwizzleTypes.h in Headers */, 29783 29801 BC4368E80C226E32005EFB5F /* Rect.h in Headers */, … … 33753 33771 FD31603B12B0267600C1A359 /* RealtimeAnalyser.cpp in Sources */, 33754 33772 41103AAE1E39791000769F03 /* RealtimeIncomingAudioSource.cpp in Sources */, 33773 41103AAE1E39791000769F14 /* RealtimeIncomingAudioSourceCocoa.cpp in Sources */, 33755 33774 5CDD833E1E4324DC00621E92 /* RealtimeIncomingVideoSource.cpp in Sources */, 33756 33775 5CDD833E1E4324DC00621E83 /* RealtimeIncomingVideoSourceCocoa.cpp in Sources */, … … 33761 33780 2EC41DE41C0410A300D294FE /* RealtimeMediaSourceSupportedConstraints.cpp in Sources */, 33762 33781 41103AAB1E39791000769F03 /* RealtimeOutgoingAudioSource.cpp in Sources */, 33782 41103AAB1E39791000769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp in Sources */, 33763 33783 5CDD833D1E4324D900621E92 /* RealtimeOutgoingVideoSource.cpp in Sources */, 33764 33784 5CDD833D1E4324D900621B83 /* RealtimeOutgoingVideoSourceCocoa.cpp in Sources */, -
trunk/Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.cpp
r223411 r223412 12 12 * in the documentation and/or other materials provided with the 13 13 * distribution. 14 * 3. Neither the name of Ericssonnor the names of its contributors14 * 3. Neither the name of Google Inc. nor the names of its contributors 15 15 * may be used to endorse or promote products derived from this 16 16 * software without specific prior written permission. … … 29 29 */ 30 30 31 #pragma once 31 #include "config.h" 32 #include "RealtimeIncomingAudioSource.h" 32 33 33 34 #if USE(LIBWEBRTC) 34 35 35 #include "LibWebRTCMacros.h" 36 #include "RealtimeMediaSource.h" 37 #include <CoreAudio/CoreAudioTypes.h> 38 #include <webrtc/api/mediastreaminterface.h> 39 #include <wtf/RetainPtr.h> 40 41 typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef; 36 #include "LibWebRTCAudioFormat.h" 42 37 43 38 namespace WebCore { 44 39 45 class WebAudioSourceProviderAVFObjC; 40 RealtimeIncomingAudioSource::RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId) 41 : RealtimeMediaSource(WTFMove(audioTrackId), RealtimeMediaSource::Type::Audio, String()) 42 , m_audioTrack(WTFMove(audioTrack)) 43 { 44 notifyMutedChange(!m_audioTrack); 45 } 46 46 47 class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface { 48 public: 49 static Ref<RealtimeIncomingAudioSource> create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&); 47 RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource() 48 { 49 stop(); 50 } 50 51 51 void setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&); 52 void RealtimeIncomingAudioSource::startProducingData() 53 { 54 if (m_audioTrack) 55 m_audioTrack->AddSink(this); 56 } 52 57 53 private: 54 RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&); 55 ~RealtimeIncomingAudioSource(); 58 void RealtimeIncomingAudioSource::stopProducingData() 59 { 60 if (m_audioTrack) 61 m_audioTrack->RemoveSink(this); 62 } 56 63 57 // webrtc::AudioTrackSinkInterface API 58 void OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames) final; 64 void RealtimeIncomingAudioSource::setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& track) 65 { 66 ASSERT(!m_audioTrack); 67 ASSERT(track); 59 68 60 // RealtimeMediaSource API 61 void startProducingData() final; 62 void stopProducingData() final; 69 m_audioTrack = WTFMove(track); 70 notifyMutedChange(!m_audioTrack); 71 if (isProducingData()) 72 m_audioTrack->AddSink(this); 73 } 63 74 64 const RealtimeMediaSourceCapabilities& capabilities() const final; 65 const RealtimeMediaSourceSettings& settings() const final; 75 const RealtimeMediaSourceCapabilities& RealtimeIncomingAudioSource::capabilities() const 76 { 77 return RealtimeMediaSourceCapabilities::emptyCapabilities(); 78 } 66 79 67 RealtimeMediaSourceSettings m_currentSettings; 68 rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack; 80 const RealtimeMediaSourceSettings& RealtimeIncomingAudioSource::settings() const 81 { 82 return m_currentSettings; 83 } 69 84 70 uint64_t m_numberOfFrames { 0 }; 71 }; 72 73 } // namespace WebCore 85 } 74 86 75 87 #endif // USE(LIBWEBRTC) -
trunk/Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.h
r223411 r223412 35 35 #include "LibWebRTCMacros.h" 36 36 #include "RealtimeMediaSource.h" 37 #include <CoreAudio/CoreAudioTypes.h>38 37 #include <webrtc/api/mediastreaminterface.h> 39 38 #include <wtf/RetainPtr.h> 40 39 41 typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef;42 43 40 namespace WebCore { 44 41 45 class WebAudioSourceProviderAVFObjC; 46 47 class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface { 42 class RealtimeIncomingAudioSource : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface { 48 43 public: 49 44 static Ref<RealtimeIncomingAudioSource> create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&); … … 51 46 void setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&); 52 47 53 pr ivate:48 protected: 54 49 RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&); 55 50 ~RealtimeIncomingAudioSource(); 56 51 52 private: 57 53 // webrtc::AudioTrackSinkInterface API 58 v oid OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames) final;54 virtual void OnData(const void* /* audioData */, int /* bitsPerSample */, int /* sampleRate */, size_t /* numberOfChannels */, size_t /* numberOfFrames */) { }; 59 55 60 56 // RealtimeMediaSource API … … 67 63 RealtimeMediaSourceSettings m_currentSettings; 68 64 rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack; 69 70 uint64_t m_numberOfFrames { 0 };71 65 }; 72 66 -
trunk/Source/WebCore/platform/mediastream/RealtimeOutgoingAudioSource.h
r223411 r223412 29 29 #pragma once 30 30 31 31 32 #if USE(LIBWEBRTC) 32 33 33 #include "AudioSampleDataSource.h"34 34 #include "LibWebRTCMacros.h" 35 35 #include "MediaStreamTrackPrivate.h" … … 45 45 namespace WebCore { 46 46 47 class RealtimeOutgoingAudioSource final: public ThreadSafeRefCounted<RealtimeOutgoingAudioSource>, public webrtc::AudioSourceInterface, private MediaStreamTrackPrivate::Observer {47 class RealtimeOutgoingAudioSource : public ThreadSafeRefCounted<RealtimeOutgoingAudioSource>, public webrtc::AudioSourceInterface, private MediaStreamTrackPrivate::Observer { 48 48 public: 49 static Ref<RealtimeOutgoingAudioSource> create(Ref<MediaStreamTrackPrivate>&& audioSource) { return adoptRef(*new RealtimeOutgoingAudioSource(WTFMove(audioSource))); } 49 static Ref<RealtimeOutgoingAudioSource> create(Ref<MediaStreamTrackPrivate>&& audioSource); 50 50 51 ~RealtimeOutgoingAudioSource() { stop(); } 51 52 … … 55 56 MediaStreamTrackPrivate& source() const { return m_audioSource.get(); } 56 57 57 pr ivate:58 protected: 58 59 explicit RealtimeOutgoingAudioSource(Ref<MediaStreamTrackPrivate>&&); 59 60 61 virtual void handleMutedIfNeeded(); 62 virtual void sendSilence() { }; 63 virtual void pullAudioData() { }; 64 65 Vector<webrtc::AudioTrackSinkInterface*> m_sinks; 66 bool m_muted { false }; 67 bool m_enabled { true }; 68 69 private: 60 70 virtual void AddSink(webrtc::AudioTrackSinkInterface* sink) { m_sinks.append(sink); } 61 71 virtual void RemoveSink(webrtc::AudioTrackSinkInterface* sink) { m_sinks.removeFirst(sink); } … … 70 80 void sourceMutedChanged(); 71 81 void sourceEnabledChanged(); 72 v oid audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t);82 virtual void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) { }; 73 83 74 bool isReachingBufferedAudioDataHighLimit();75 bool isReachingBufferedAudioDataLowLimit();76 bool hasBufferedEngouhData();84 virtual bool isReachingBufferedAudioDataHighLimit() { return false; }; 85 virtual bool isReachingBufferedAudioDataLowLimit() { return false; }; 86 virtual bool hasBufferedEnoughData() { return false; }; 77 87 78 88 // MediaStreamTrackPrivate::Observer API 79 89 void trackMutedChanged(MediaStreamTrackPrivate&) final { sourceMutedChanged(); } 80 90 void trackEnabledChanged(MediaStreamTrackPrivate&) final { sourceEnabledChanged(); } 81 void audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime& mediaTime, const PlatformAudioData& data, const AudioStreamDescription& description, size_t sampleCount) final{ audioSamplesAvailable(mediaTime, data, description, sampleCount); }91 void audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime& mediaTime, const PlatformAudioData& data, const AudioStreamDescription& description, size_t sampleCount) { audioSamplesAvailable(mediaTime, data, description, sampleCount); } 82 92 void trackEnded(MediaStreamTrackPrivate&) final { } 83 93 void trackSettingsChanged(MediaStreamTrackPrivate&) final { } 84 94 85 void pullAudioData();95 void initializeConverter(); 86 96 87 void initializeConverter(); 88 void handleMutedIfNeeded(); 89 void sendSilence(); 97 Ref<MediaStreamTrackPrivate> m_audioSource; 90 98 91 Vector<webrtc::AudioTrackSinkInterface*> m_sinks;92 Ref<MediaStreamTrackPrivate> m_audioSource;93 Ref<AudioSampleDataSource> m_sampleConverter;94 CAAudioStreamDescription m_inputStreamDescription;95 CAAudioStreamDescription m_outputStreamDescription;96 97 Vector<uint8_t> m_audioBuffer;98 uint64_t m_readCount { 0 };99 uint64_t m_writeCount { 0 };100 bool m_muted { false };101 bool m_enabled { true };102 bool m_skippingAudioData { false };103 99 Timer m_silenceAudioTimer; 104 100 }; -
trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp
r223411 r223412 12 12 * in the documentation and/or other materials provided with the 13 13 * distribution. 14 * 3. Neither the name of Google Inc. nor the names of its contributors15 * may be used to endorse or promote products derived from this16 * software without specific prior written permission.17 14 * 18 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS … … 30 27 31 28 #include "config.h" 32 #include "RealtimeIncomingAudioSource .h"29 #include "RealtimeIncomingAudioSourceCocoa.h" 33 30 34 31 #if USE(LIBWEBRTC) … … 47 44 Ref<RealtimeIncomingAudioSource> RealtimeIncomingAudioSource::create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId) 48 45 { 49 auto source = adoptRef(*new RealtimeIncomingAudioSource(WTFMove(audioTrack), WTFMove(audioTrackId)));46 auto source = RealtimeIncomingAudioSourceCocoa::create(WTFMove(audioTrack), WTFMove(audioTrackId)); 50 47 source->start(); 51 return source;48 return WTFMove(source); 52 49 } 53 50 54 RealtimeIncomingAudioSource::RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId) 55 : RealtimeMediaSource(WTFMove(audioTrackId), RealtimeMediaSource::Type::Audio, String()) 56 , m_audioTrack(WTFMove(audioTrack)) 51 Ref<RealtimeIncomingAudioSourceCocoa> RealtimeIncomingAudioSourceCocoa::create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId) 57 52 { 58 notifyMutedChange(!m_audioTrack);53 return adoptRef(*new RealtimeIncomingAudioSourceCocoa(WTFMove(audioTrack), WTFMove(audioTrackId))); 59 54 } 60 55 61 RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource() 56 RealtimeIncomingAudioSourceCocoa::RealtimeIncomingAudioSourceCocoa(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId) 57 : RealtimeIncomingAudioSource(WTFMove(audioTrack), WTFMove(audioTrackId)) 62 58 { 63 stop();64 59 } 65 66 60 67 61 static inline AudioStreamBasicDescription streamDescription(size_t sampleRate, size_t channelCount) … … 72 66 } 73 67 74 void RealtimeIncomingAudioSource ::OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames)68 void RealtimeIncomingAudioSourceCocoa::OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames) 75 69 { 76 70 // We may receive OnData calls with empty sound data (mono, samples equal to zero and sampleRate equal to 16000) when starting the call. … … 103 97 } 104 98 105 void RealtimeIncomingAudioSource::startProducingData()106 {107 if (m_audioTrack)108 m_audioTrack->AddSink(this);109 }110 111 void RealtimeIncomingAudioSource::stopProducingData()112 {113 if (m_audioTrack)114 m_audioTrack->RemoveSink(this);115 }116 117 void RealtimeIncomingAudioSource::setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& track)118 {119 ASSERT(!m_audioTrack);120 ASSERT(track);121 122 m_audioTrack = WTFMove(track);123 notifyMutedChange(!m_audioTrack);124 if (isProducingData())125 m_audioTrack->AddSink(this);126 }127 128 const RealtimeMediaSourceCapabilities& RealtimeIncomingAudioSource::capabilities() const129 {130 return RealtimeMediaSourceCapabilities::emptyCapabilities();131 }132 133 const RealtimeMediaSourceSettings& RealtimeIncomingAudioSource::settings() const134 {135 return m_currentSettings;136 }137 138 99 } 139 100 -
trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h
r223411 r223412 12 12 * in the documentation and/or other materials provided with the 13 13 * distribution. 14 * 3. Neither the name of Ericsson nor the names of its contributors15 * may be used to endorse or promote products derived from this16 * software without specific prior written permission.17 14 * 18 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS … … 33 30 #if USE(LIBWEBRTC) 34 31 35 #include " LibWebRTCMacros.h"36 #include "RealtimeMediaSource.h" 32 #include "RealtimeIncomingAudioSource.h" 33 37 34 #include <CoreAudio/CoreAudioTypes.h> 38 #include <webrtc/api/mediastreaminterface.h>39 #include <wtf/RetainPtr.h>40 35 41 36 typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef; … … 45 40 class WebAudioSourceProviderAVFObjC; 46 41 47 class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface {42 class RealtimeIncomingAudioSourceCocoa final : public RealtimeIncomingAudioSource { 48 43 public: 49 static Ref<RealtimeIncomingAudioSource> create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&); 50 51 void setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&); 44 static Ref<RealtimeIncomingAudioSourceCocoa> create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&); 52 45 53 46 private: 54 RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&); 55 ~RealtimeIncomingAudioSource(); 47 RealtimeIncomingAudioSourceCocoa(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&); 56 48 57 49 // webrtc::AudioTrackSinkInterface API 58 50 void OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames) final; 59 60 // RealtimeMediaSource API61 void startProducingData() final;62 void stopProducingData() final;63 64 const RealtimeMediaSourceCapabilities& capabilities() const final;65 const RealtimeMediaSourceSettings& settings() const final;66 67 RealtimeMediaSourceSettings m_currentSettings;68 rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack;69 51 70 52 uint64_t m_numberOfFrames { 0 }; -
trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp
r223411 r223412 11 11 * notice, this list of conditions and the following disclaimer in the 12 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of Apple Inc. nor the names of14 * its contributors may be used to endorse or promote products derived15 * from this software without specific prior written permission.16 13 * 17 14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY … … 28 25 29 26 #include "config.h" 30 #include "RealtimeOutgoingAudioSource .h"27 #include "RealtimeOutgoingAudioSourceCocoa.h" 31 28 32 29 #if USE(LIBWEBRTC) … … 47 44 } 48 45 49 RealtimeOutgoingAudioSource ::RealtimeOutgoingAudioSource(Ref<MediaStreamTrackPrivate>&& audioSource)50 : m_audioSource(WTFMove(audioSource))46 RealtimeOutgoingAudioSourceCocoa::RealtimeOutgoingAudioSourceCocoa(Ref<MediaStreamTrackPrivate>&& audioSource) 47 : RealtimeOutgoingAudioSource(WTFMove(audioSource)) 51 48 , m_sampleConverter(AudioSampleDataSource::create(LibWebRTCAudioFormat::sampleRate * 2)) 52 , m_silenceAudioTimer(*this, &RealtimeOutgoingAudioSource::sendSilence)53 49 { 54 m_audioSource->addObserver(*this);55 initializeConverter();56 50 } 57 51 58 bool RealtimeOutgoingAudioSource::setSource(Ref<MediaStreamTrackPrivate>&& newSource)52 Ref<RealtimeOutgoingAudioSource> RealtimeOutgoingAudioSource::create(Ref<MediaStreamTrackPrivate>&& audioSource) 59 53 { 60 m_audioSource->removeObserver(*this); 61 m_audioSource = WTFMove(newSource); 62 m_audioSource->addObserver(*this); 63 64 initializeConverter(); 65 return true; 54 return RealtimeOutgoingAudioSourceCocoa::create(WTFMove(audioSource)); 66 55 } 67 56 68 void RealtimeOutgoingAudioSource::initializeConverter() 69 { 70 m_muted = m_audioSource->muted(); 71 m_enabled = m_audioSource->enabled(); 72 handleMutedIfNeeded(); 73 } 74 75 void RealtimeOutgoingAudioSource::stop() 76 { 77 m_silenceAudioTimer.stop(); 78 m_audioSource->removeObserver(*this); 79 } 80 81 void RealtimeOutgoingAudioSource::sourceMutedChanged() 82 { 83 m_muted = m_audioSource->muted(); 84 handleMutedIfNeeded(); 85 } 86 87 void RealtimeOutgoingAudioSource::sourceEnabledChanged() 88 { 89 m_enabled = m_audioSource->enabled(); 90 handleMutedIfNeeded(); 91 } 92 93 void RealtimeOutgoingAudioSource::handleMutedIfNeeded() 57 void RealtimeOutgoingAudioSourceCocoa::handleMutedIfNeeded() 94 58 { 95 59 bool isSilenced = m_muted || !m_enabled; 96 60 m_sampleConverter->setMuted(isSilenced); 97 if (isSilenced && !m_silenceAudioTimer.isActive()) 98 m_silenceAudioTimer.startRepeating(1_s); 99 if (!isSilenced && m_silenceAudioTimer.isActive()) 100 m_silenceAudioTimer.stop(); 61 62 RealtimeOutgoingAudioSource::handleMutedIfNeeded(); 101 63 } 102 64 103 void RealtimeOutgoingAudioSource ::sendSilence()65 void RealtimeOutgoingAudioSourceCocoa::sendSilence() 104 66 { 105 67 LibWebRTCProvider::callOnWebRTCSignalingThread([this, protectedThis = makeRef(*this)] { … … 117 79 } 118 80 119 bool RealtimeOutgoingAudioSource ::isReachingBufferedAudioDataHighLimit()81 bool RealtimeOutgoingAudioSourceCocoa::isReachingBufferedAudioDataHighLimit() 120 82 { 121 83 auto writtenAudioDuration = m_writeCount / m_inputStreamDescription.sampleRate(); … … 126 88 } 127 89 128 bool RealtimeOutgoingAudioSource ::isReachingBufferedAudioDataLowLimit()90 bool RealtimeOutgoingAudioSourceCocoa::isReachingBufferedAudioDataLowLimit() 129 91 { 130 92 auto writtenAudioDuration = m_writeCount / m_inputStreamDescription.sampleRate(); … … 135 97 } 136 98 137 bool RealtimeOutgoingAudioSource ::hasBufferedEngouhData()99 bool RealtimeOutgoingAudioSourceCocoa::hasBufferedEnoughData() 138 100 { 139 101 auto writtenAudioDuration = m_writeCount / m_inputStreamDescription.sampleRate(); … … 144 106 } 145 107 146 void RealtimeOutgoingAudioSource ::audioSamplesAvailable(const MediaTime&, const PlatformAudioData& audioData, const AudioStreamDescription& streamDescription, size_t sampleCount)108 void RealtimeOutgoingAudioSourceCocoa::audioSamplesAvailable(const MediaTime&, const PlatformAudioData& audioData, const AudioStreamDescription& streamDescription, size_t sampleCount) 147 109 { 148 110 if (m_inputStreamDescription != streamDescription) { … … 171 133 m_writeCount += sampleCount; 172 134 173 if (!hasBufferedEn gouhData())135 if (!hasBufferedEnoughData()) 174 136 return; 175 137 … … 179 141 } 180 142 181 void RealtimeOutgoingAudioSource ::pullAudioData()143 void RealtimeOutgoingAudioSourceCocoa::pullAudioData() 182 144 { 183 145 // libwebrtc expects 10 ms chunks.
Note: See TracChangeset
for help on using the changeset viewer.