Changeset 254446 in webkit
- Timestamp:
- Jan 13, 2020 12:21:23 PM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 11 edited
- 1 copied
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r254439 r254446 1 2020-01-13 youenn fablet <youenn@apple.com> 2 3 Split AudioTrackPrivateMediaStreamCocoa to implement remote audio rendering 4 https://bugs.webkit.org/show_bug.cgi?id=206172 5 6 Reviewed by Eric Carlson. 7 8 Refactor code to allow in the future rendering of media stream audio tracks in a remote process. 9 For that purpose, split AudioTrackPrivateMediaStreamCocoa functionality in two parts. 10 The first part is moved back to AudioTrackPrivateMediaStream. 11 The second part is platform specific and is defined in terms of an interface AudioMediaStreamTrackRenderer 12 and an in process implementation named AudioMediaStreamTrackRendererCocoa. 13 14 Make TrackPrivateBase and MediaStreamTrackPrivate public LoggerHelper. 15 This allows making AudioMediaStreamTrackRenderer and AudioSampleDataSource to take a LoggerHelper instead of a derived instance. 16 17 No change of behavior. 18 19 * Sources.txt: 20 * SourcesCocoa.txt: 21 * WebCore.xcodeproj/project.pbxproj: 22 * platform/audio/mac/AudioSampleDataSource.h: 23 * platform/audio/mac/AudioSampleDataSource.mm: 24 (WebCore::AudioSampleDataSource::create): 25 (WebCore::AudioSampleDataSource::AudioSampleDataSource): 26 * platform/graphics/TrackPrivateBase.h: 27 * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: 28 * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: 29 (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): 30 * platform/mediastream/AudioMediaStreamTrackRenderer.h: Added. 31 (WebCore::AudioMediaStreamTrackRenderer::setMuted): 32 (WebCore::AudioMediaStreamTrackRenderer::setVolume): 33 (WebCore::AudioMediaStreamTrackRenderer::volume const): 34 (WebCore::AudioMediaStreamTrackRenderer::isMuted const): 35 * platform/mediastream/AudioTrackPrivateMediaStream.cpp: Added. 36 (WebCore::AudioTrackPrivateMediaStream::setLogger): 37 (WebCore::AudioTrackPrivateMediaStream::AudioTrackPrivateMediaStream): 38 (WebCore::AudioTrackPrivateMediaStream::~AudioTrackPrivateMediaStream): 39 (WebCore::AudioTrackPrivateMediaStream::clear): 40 (WebCore::AudioTrackPrivateMediaStream::playInternal): 41 (WebCore::AudioTrackPrivateMediaStream::play): 42 (WebCore::AudioTrackPrivateMediaStream::pause): 43 (WebCore::AudioTrackPrivateMediaStream::setVolume): 44 (WebCore::AudioTrackPrivateMediaStream::volume const): 45 (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable): 46 (WebCore::AudioTrackPrivateMediaStream::trackMutedChanged): 47 (WebCore::AudioTrackPrivateMediaStream::trackEnabledChanged): 48 (WebCore::AudioTrackPrivateMediaStream::updateRendererMutedState): 49 (WebCore::AudioTrackPrivateMediaStream::trackEnded): 50 * platform/mediastream/AudioTrackPrivateMediaStream.h: 51 * platform/mediastream/MediaStreamTrackPrivate.h: 52 * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp: Added. 53 (WebCore::AudioMediaStreamTrackRendererCocoa::stop): 54 (WebCore::AudioMediaStreamTrackRendererCocoa::clear): 55 (WebCore::AudioMediaStreamTrackRendererCocoa::setPaused): 56 (WebCore::AudioMediaStreamTrackRendererCocoa::createAudioUnit): 57 (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples): 58 (WebCore::AudioMediaStreamTrackRendererCocoa::render): 59 (WebCore::AudioMediaStreamTrackRendererCocoa::inputProc): 60 * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h: Added. 61 * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h: Removed. 62 1 63 2020-01-06 Jiewen Tan <jiewen_tan@apple.com> 2 64 -
trunk/Source/WebCore/Sources.txt
r254194 r254446 1971 1971 platform/mediarecorder/MediaRecorderPrivateMock.cpp 1972 1972 1973 platform/mediastream/AudioMediaStreamTrackRenderer.cpp 1974 platform/mediastream/AudioTrackPrivateMediaStream.cpp 1973 1975 platform/mediastream/CaptureDeviceManager.cpp 1974 1976 platform/mediastream/MediaConstraints.cpp -
trunk/Source/WebCore/SourcesCocoa.txt
r254064 r254446 490 490 platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm @no-unify 491 491 492 platform/mediastream/mac/Audio TrackPrivateMediaStreamCocoa.cpp492 platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp 493 493 platform/mediastream/mac/AVCaptureDeviceManager.mm @no-unify 494 494 platform/mediastream/mac/AVVideoCaptureSource.mm @no-unify -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r254373 r254446 1001 1001 372D3E54216578AE00C5E021 /* DataURLDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E4A007821B820EC8002C5A6E /* DataURLDecoder.h */; }; 1002 1002 372D3E55216578AE00C5E021 /* ScriptModuleLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = E38838951BAD145F00D62EE3 /* ScriptModuleLoader.h */; }; 1003 372D3E56216578AE00C5E021 /* AudioTrackPrivateMediaStreamCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C046C61E42512F007201E7 /* AudioTrackPrivateMediaStreamCocoa.h */; };1004 1003 372D3E57216578AE00C5E021 /* NavigatorCredentials.h in Headers */ = {isa = PBXBuildFile; fileRef = 57D846261FE895F800CA3682 /* NavigatorCredentials.h */; }; 1005 1004 375CD232119D43C800A2A859 /* Hyphenation.h in Headers */ = {isa = PBXBuildFile; fileRef = 375CD231119D43C800A2A859 /* Hyphenation.h */; }; … … 1087 1086 4162A451101145AE00DFF3ED /* DedicatedWorkerGlobalScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 4162A44E101145AE00DFF3ED /* DedicatedWorkerGlobalScope.h */; }; 1088 1087 4162A4581011464700DFF3ED /* JSDedicatedWorkerGlobalScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 4162A4561011464700DFF3ED /* JSDedicatedWorkerGlobalScope.h */; }; 1088 416A06A123CCAD0300347109 /* AudioMediaStreamTrackRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 416A069623CCAA9F00347109 /* AudioMediaStreamTrackRenderer.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1089 1089 416D75A220C651A500D02D2C /* NetworkLoadInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = 416D759F20C6441300D02D2C /* NetworkLoadInformation.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1090 1090 416E0B3A209BC3CB004A95D9 /* FetchIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 416E0B37209BC3C2004A95D9 /* FetchIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 5473 5473 076970851463AD8700F502CF /* TextTrackList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextTrackList.h; sourceTree = "<group>"; }; 5474 5474 076E11BE1F683E0D00177395 /* TrackPrivateBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrackPrivateBase.cpp; sourceTree = "<group>"; }; 5475 076EC1321E44F2CB00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioTrackPrivateMediaStreamCocoa.cpp; sourceTree = "<group>"; };5476 5475 076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaPlayerPrivateAVFoundation.cpp; sourceTree = "<group>"; }; 5477 5476 076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlayerPrivateAVFoundation.h; sourceTree = "<group>"; }; … … 5553 5552 07B93FF923B92AAA0036F8EA /* MIMETypeCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MIMETypeCache.h; sourceTree = "<group>"; }; 5554 5553 07B93FFB23B92AAB0036F8EA /* MIMETypeCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MIMETypeCache.cpp; sourceTree = "<group>"; }; 5555 07C046C61E42512F007201E7 /* AudioTrackPrivateMediaStreamCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioTrackPrivateMediaStreamCocoa.h; sourceTree = "<group>"; };5556 5554 07C1C0E01BFB600100BD2256 /* MediaTrackSupportedConstraints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaTrackSupportedConstraints.h; sourceTree = "<group>"; }; 5557 5555 07C1C0E11BFB600100BD2256 /* MediaTrackSupportedConstraints.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaTrackSupportedConstraints.idl; sourceTree = "<group>"; }; … … 7389 7387 4162A4551011464700DFF3ED /* JSDedicatedWorkerGlobalScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDedicatedWorkerGlobalScope.cpp; sourceTree = "<group>"; }; 7390 7388 4162A4561011464700DFF3ED /* JSDedicatedWorkerGlobalScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDedicatedWorkerGlobalScope.h; sourceTree = "<group>"; }; 7389 416A069223CCAA9300347109 /* AudioMediaStreamTrackRendererCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioMediaStreamTrackRendererCocoa.h; sourceTree = "<group>"; }; 7390 416A069323CCAA9400347109 /* AudioMediaStreamTrackRendererCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioMediaStreamTrackRendererCocoa.cpp; sourceTree = "<group>"; }; 7391 416A069423CCAA9E00347109 /* AudioTrackPrivateMediaStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioTrackPrivateMediaStream.cpp; sourceTree = "<group>"; }; 7392 416A069523CCAA9E00347109 /* AudioMediaStreamTrackRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioMediaStreamTrackRenderer.cpp; sourceTree = "<group>"; }; 7393 416A069623CCAA9F00347109 /* AudioMediaStreamTrackRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioMediaStreamTrackRenderer.h; sourceTree = "<group>"; }; 7391 7394 416CE4A4229DF12E00A8A686 /* RealtimeMediaSourceCenterMac.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RealtimeMediaSourceCenterMac.mm; sourceTree = "<group>"; }; 7392 7395 416D759F20C6441300D02D2C /* NetworkLoadInformation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkLoadInformation.h; sourceTree = "<group>"; }; … … 16162 16165 415747421E38698000E914D8 /* libwebrtc */, 16163 16166 0729B14D17CFCCA0004F1D60 /* mac */, 16167 416A069523CCAA9E00347109 /* AudioMediaStreamTrackRenderer.cpp */, 16168 416A069623CCAA9F00347109 /* AudioMediaStreamTrackRenderer.h */, 16169 416A069423CCAA9E00347109 /* AudioTrackPrivateMediaStream.cpp */, 16164 16170 07D6A4F61BF2307D00174146 /* AudioTrackPrivateMediaStream.h */, 16165 16171 07B7116A1D899E63009F0FFB /* CaptureDevice.h */, … … 16235 16241 isa = PBXGroup; 16236 16242 children = ( 16237 076EC1321E44F2CB00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp */,16238 07C046C61E42512F007201E7 /* AudioTrackPrivateMediaStreamCocoa.h */,16243 416A069323CCAA9400347109 /* AudioMediaStreamTrackRendererCocoa.cpp */, 16244 416A069223CCAA9300347109 /* AudioMediaStreamTrackRendererCocoa.h */, 16239 16245 070363DA181A1CDC00C074A5 /* AVCaptureDeviceManager.h */, 16240 16246 070363DB181A1CDC00C074A5 /* AVCaptureDeviceManager.mm */, … … 29085 29091 FDE2D55B159E66EB00DCCCF8 /* AudioIOCallback.h in Headers */, 29086 29092 FD31601012B0267600C1A359 /* AudioListener.h in Headers */, 29093 416A06A123CCAD0300347109 /* AudioMediaStreamTrackRenderer.h in Headers */, 29087 29094 FD31601312B0267600C1A359 /* AudioNode.h in Headers */, 29088 29095 FD31601612B0267600C1A359 /* AudioNodeInput.h in Headers */, … … 29111 29118 CD54A763180F9F7000B076C9 /* AudioTrackPrivateMediaSourceAVFObjC.h in Headers */, 29112 29119 07D6A4F81BF2307D00174146 /* AudioTrackPrivateMediaStream.h in Headers */, 29113 372D3E56216578AE00C5E021 /* AudioTrackPrivateMediaStreamCocoa.h in Headers */,29114 29120 FD31608B12B026F700C1A359 /* AudioUtilities.h in Headers */, 29115 29121 7EE6846112D26E3800E79415 /* AuthenticationChallenge.h in Headers */, -
trunk/Source/WebCore/platform/audio/mac/AudioSampleDataSource.h
r247522 r254446 43 43 class CAAudioStreamDescription; 44 44 class CARingBuffer; 45 class MediaStreamTrackPrivate;46 45 47 46 class AudioSampleDataSource : public ThreadSafeRefCounted<AudioSampleDataSource, WTF::DestructionThread::MainRunLoop> … … 51 50 { 52 51 public: 53 static Ref<AudioSampleDataSource> create(size_t, MediaStreamTrackPrivate&);52 static Ref<AudioSampleDataSource> create(size_t, WTF::LoggerHelper&); 54 53 55 54 ~AudioSampleDataSource(); … … 82 81 83 82 private: 84 AudioSampleDataSource(size_t, MediaStreamTrackPrivate&);83 AudioSampleDataSource(size_t, LoggerHelper&); 85 84 86 85 OSStatus setupConverter(); -
trunk/Source/WebCore/platform/audio/mac/AudioSampleDataSource.mm
r248846 r254446 47 47 using namespace JSC; 48 48 49 Ref<AudioSampleDataSource> AudioSampleDataSource::create(size_t maximumSampleCount, MediaStreamTrackPrivate& track)50 { 51 return adoptRef(*new AudioSampleDataSource(maximumSampleCount, track));52 } 53 54 AudioSampleDataSource::AudioSampleDataSource(size_t maximumSampleCount, MediaStreamTrackPrivate& track)49 Ref<AudioSampleDataSource> AudioSampleDataSource::create(size_t maximumSampleCount, LoggerHelper& loggerHelper) 50 { 51 return adoptRef(*new AudioSampleDataSource(maximumSampleCount, loggerHelper)); 52 } 53 54 AudioSampleDataSource::AudioSampleDataSource(size_t maximumSampleCount, LoggerHelper& loggerHelper) 55 55 : m_inputSampleOffset(MediaTime::invalidTime()) 56 56 , m_maximumSampleCount(maximumSampleCount) 57 57 #if !RELEASE_LOG_DISABLED 58 , m_logger(track.logger()) 59 , m_logIdentifier(track.logIdentifier()) 60 #endif 61 { 58 , m_logger(loggerHelper.logger()) 59 , m_logIdentifier(loggerHelper.logIdentifier()) 60 #endif 61 { 62 #if RELEASE_LOG_DISABLED 63 UNUSED_PARAM(loggerHelper); 64 #endif 62 65 } 63 66 -
trunk/Source/WebCore/platform/graphics/TrackPrivateBase.h
r246490 r254446 49 49 : public ThreadSafeRefCounted<TrackPrivateBase, WTF::DestructionThread::Main> 50 50 #if !RELEASE_LOG_DISABLED 51 , p rivateLoggerHelper51 , public LoggerHelper 52 52 #endif 53 53 { … … 74 74 75 75 #if !RELEASE_LOG_DISABLED 76 v oid setLogger(const Logger&, const void*);76 virtual void setLogger(const Logger&, const void*); 77 77 const Logger& logger() const final { ASSERT(m_logger); return *m_logger.get(); } 78 78 const void* logIdentifier() const final { return m_logIdentifier; } -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h
r253693 r254446 52 52 namespace WebCore { 53 53 54 class AudioTrackPrivateMediaStream Cocoa;54 class AudioTrackPrivateMediaStream; 55 55 class AVVideoCaptureSource; 56 56 class MediaSourcePrivateClient; … … 250 250 CurrentFramePainter m_imagePainter; 251 251 252 HashMap<String, RefPtr<AudioTrackPrivateMediaStream Cocoa>> m_audioTrackMap;252 HashMap<String, RefPtr<AudioTrackPrivateMediaStream>> m_audioTrackMap; 253 253 HashMap<String, RefPtr<VideoTrackPrivateMediaStream>> m_videoTrackMap; 254 254 PendingSampleQueue m_pendingVideoSampleQueue; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm
r253482 r254446 29 29 #if ENABLE(MEDIA_STREAM) && USE(AVFOUNDATION) 30 30 31 #import "AudioTrackPrivateMediaStream Cocoa.h"31 #import "AudioTrackPrivateMediaStream.h" 32 32 #import "GraphicsContextCG.h" 33 33 #import "Logging.h" … … 1034 1034 MediaStreamTrackPrivateVector currentTracks = m_mediaStreamPrivate->tracks(); 1035 1035 1036 auto setAudioTrackState = [this](AudioTrackPrivateMediaStream Cocoa& track, int index, TrackState state)1036 auto setAudioTrackState = [this](AudioTrackPrivateMediaStream& track, int index, TrackState state) 1037 1037 { 1038 1038 switch (state) { … … 1053 1053 } 1054 1054 }; 1055 updateTracksOfType(m_audioTrackMap, RealtimeMediaSource::Type::Audio, currentTracks, &AudioTrackPrivateMediaStream Cocoa::create, WTFMove(setAudioTrackState));1055 updateTracksOfType(m_audioTrackMap, RealtimeMediaSource::Type::Audio, currentTracks, &AudioTrackPrivateMediaStream::create, WTFMove(setAudioTrackState)); 1056 1056 1057 1057 auto setVideoTrackState = [this](VideoTrackPrivateMediaStream& track, int index, TrackState state) -
trunk/Source/WebCore/platform/mediastream/AudioMediaStreamTrackRenderer.cpp
r254441 r254446 1 1 /* 2 * Copyright (C) 20 15-2017Apple Inc. All rights reserved.2 * Copyright (C) 2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 #pragma once 26 #include "config.h" 27 #include "AudioMediaStreamTrackRenderer.h" 27 28 28 29 #if ENABLE(VIDEO_TRACK) && ENABLE(MEDIA_STREAM) 29 30 30 #include "AudioTrackPrivate.h" 31 #include "MediaStreamTrackPrivate.h" 31 #if PLATFORM(COCOA) 32 #include "AudioMediaStreamTrackRendererCocoa.h" 33 #endif 34 35 namespace WTF { 36 class MediaTime; 37 } 32 38 33 39 namespace WebCore { 34 40 35 class AudioTrackPrivateMediaStream : public AudioTrackPrivate { 36 WTF_MAKE_NONCOPYABLE(AudioTrackPrivateMediaStream) 37 public: 38 static RefPtr<AudioTrackPrivateMediaStream> create(MediaStreamTrackPrivate& streamTrack) 39 { 40 return adoptRef(*new AudioTrackPrivateMediaStream(streamTrack)); 41 } 41 AudioMediaStreamTrackRenderer::RendererCreator AudioMediaStreamTrackRenderer::m_rendererCreator = nullptr; 42 void AudioMediaStreamTrackRenderer::setCreator(RendererCreator creator) 43 { 44 m_rendererCreator = creator; 45 } 42 46 43 Kind kind() const override { return Kind::Main; } 44 AtomString id() const override { return m_id; } 45 AtomString label() const override { return m_label; } 46 AtomString language() const override { return emptyAtom(); } 47 int trackIndex() const override { return m_index; } 47 std::unique_ptr<AudioMediaStreamTrackRenderer> AudioMediaStreamTrackRenderer::create() 48 { 49 if (m_rendererCreator) 50 return m_rendererCreator(); 48 51 49 void setTrackIndex(int index) { m_index = index; } 52 #if PLATFORM(COCOA) 53 return makeUnique<AudioMediaStreamTrackRendererCocoa>(); 54 #else 55 return nullptr; 56 #endif 57 } 50 58 51 MediaStreamTrackPrivate& streamTrack() { return m_streamTrack.get(); } 59 #if !RELEASE_LOG_DISABLED 60 void AudioMediaStreamTrackRenderer::setLogger(const Logger& logger, const void* identifier) 61 { 62 m_logger = &logger; 63 m_logIdentifier = identifier; 64 } 52 65 53 MediaTime timelineOffset() const { return m_timelineOffset; } 54 void setTimelineOffset(const MediaTime& offset) { m_timelineOffset = offset; } 55 56 protected: 57 AudioTrackPrivateMediaStream(MediaStreamTrackPrivate& track) 58 : m_streamTrack(track) 59 , m_id(track.id()) 60 , m_label(track.label()) 61 , m_timelineOffset(MediaTime::invalidTime()) 62 { 63 } 64 65 Ref<MediaStreamTrackPrivate> m_streamTrack; 66 AtomString m_id; 67 AtomString m_label; 68 int m_index { 0 }; 69 MediaTime m_timelineOffset; 70 }; 66 WTFLogChannel& AudioMediaStreamTrackRenderer::logChannel() const 67 { 68 return LogMedia; 69 } 70 #endif 71 71 72 72 } -
trunk/Source/WebCore/platform/mediastream/AudioTrackPrivateMediaStream.h
r246490 r254446 33 33 namespace WebCore { 34 34 35 class AudioTrackPrivateMediaStream : public AudioTrackPrivate { 35 class AudioMediaStreamTrackRenderer; 36 37 class AudioTrackPrivateMediaStream final : public AudioTrackPrivate, private MediaStreamTrackPrivate::Observer { 36 38 WTF_MAKE_NONCOPYABLE(AudioTrackPrivateMediaStream) 37 39 public: … … 40 42 return adoptRef(*new AudioTrackPrivateMediaStream(streamTrack)); 41 43 } 42 43 Kind kind() const override { return Kind::Main; } 44 AtomString id() const override { return m_id; } 45 AtomString label() const override { return m_label; } 46 AtomString language() const override { return emptyAtom(); } 47 int trackIndex() const override { return m_index; } 44 ~AudioTrackPrivateMediaStream(); 48 45 49 46 void setTrackIndex(int index) { m_index = index; } … … 54 51 void setTimelineOffset(const MediaTime& offset) { m_timelineOffset = offset; } 55 52 53 void clear(); 54 55 void play(); 56 void pause(); 57 bool isPlaying() { return m_isPlaying; } 58 59 void setVolume(float); 60 float volume() const; 61 62 void setMuted(bool muted) { m_muted = muted; } 63 bool muted() const { return m_muted; } 64 65 #if !RELEASE_LOG_DISABLED 66 void setLogger(const Logger&, const void*) final; 67 const char* logClassName() const final { return "AudioTrackPrivateMediaStream"; } 68 #endif 69 56 70 protected: 57 AudioTrackPrivateMediaStream(MediaStreamTrackPrivate& track) 58 : m_streamTrack(track) 59 , m_id(track.id()) 60 , m_label(track.label()) 61 , m_timelineOffset(MediaTime::invalidTime()) 62 { 63 } 71 explicit AudioTrackPrivateMediaStream(MediaStreamTrackPrivate&); 72 73 // AudioTrackPrivate 74 Kind kind() const final { return Kind::Main; } 75 AtomString id() const final { return m_id; } 76 AtomString label() const final { return m_label; } 77 int trackIndex() const final { return m_index; } 78 79 // MediaStreamTrackPrivate::Observer 80 void audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final; 81 void trackEnded(MediaStreamTrackPrivate&) final; 82 void trackMutedChanged(MediaStreamTrackPrivate&) final; 83 void trackEnabledChanged(MediaStreamTrackPrivate&) final; 84 void trackSettingsChanged(MediaStreamTrackPrivate&) final { } 85 86 void playInternal(); 87 void updateRendererMutedState(); 88 89 // Main thread writable members 90 bool m_isPlaying { false }; 91 bool m_autoPlay { false }; 92 bool m_muted { false }; 93 bool m_isCleared { false }; 64 94 65 95 Ref<MediaStreamTrackPrivate> m_streamTrack; … … 68 98 int m_index { 0 }; 69 99 MediaTime m_timelineOffset; 100 101 // Audio thread members 102 std::unique_ptr<AudioMediaStreamTrackRenderer> m_renderer; 103 bool m_hasStartedAutoplay { false }; 70 104 }; 71 105 -
trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h
r254194 r254446 48 48 , public RealtimeMediaSource::Observer 49 49 #if !RELEASE_LOG_DISABLED 50 , p rivateLoggerHelper50 , public LoggerHelper 51 51 #endif 52 52 { -
trunk/Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp
r254441 r254446 1 1 /* 2 * Copyright (C) 2017 Apple Inc. All rights reserved.2 * Copyright (C) 2017-2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 25 25 26 26 #include "config.h" 27 #include "AudioTrackPrivateMediaStreamCocoa.h" 27 #include "AudioMediaStreamTrackRendererCocoa.h" 28 29 #if ENABLE(VIDEO_TRACK) && ENABLE(MEDIA_STREAM) 28 30 29 31 #include "AudioSampleBufferList.h" … … 36 38 #include <pal/spi/cocoa/AudioToolboxSPI.h> 37 39 38 #if ENABLE(VIDEO_TRACK) && ENABLE(MEDIA_STREAM)39 40 40 namespace WebCore { 41 41 42 AudioTrackPrivateMediaStreamCocoa::AudioTrackPrivateMediaStreamCocoa(MediaStreamTrackPrivate& track) 43 : AudioTrackPrivateMediaStream(track) 44 { 45 track.source().addObserver(*this); 46 } 47 48 AudioTrackPrivateMediaStreamCocoa::~AudioTrackPrivateMediaStreamCocoa() 49 { 50 clear(); 51 } 52 53 void AudioTrackPrivateMediaStreamCocoa::clear() 54 { 55 if (m_isCleared) 42 AudioMediaStreamTrackRendererCocoa::AudioMediaStreamTrackRendererCocoa() = default; 43 44 AudioMediaStreamTrackRendererCocoa::~AudioMediaStreamTrackRendererCocoa() = default; 45 46 void AudioMediaStreamTrackRendererCocoa::stop() 47 { 48 if (!m_isAudioUnitStarted) 56 49 return; 57 50 58 m_isCleared = true; 59 streamTrack().source().removeObserver(*this); 60 51 if (m_remoteIOUnit) 52 AudioOutputUnitStop(m_remoteIOUnit); 53 } 54 55 void AudioMediaStreamTrackRendererCocoa::clear() 56 { 61 57 if (m_dataSource) 62 58 m_dataSource->setPaused(true); … … 73 69 } 74 70 75 void AudioTrackPrivateMediaStreamCocoa::playInternal() 76 { 77 ASSERT(isMainThread()); 78 79 if (m_isPlaying) 80 return; 81 82 m_isPlaying = true; 83 m_autoPlay = false; 84 71 void AudioMediaStreamTrackRendererCocoa::setPaused(bool value) 72 { 73 m_paused = value; 85 74 if (m_dataSource) 86 m_dataSource->setPaused(false); 87 } 88 89 void AudioTrackPrivateMediaStreamCocoa::play() 90 { 91 playInternal(); 92 } 93 94 void AudioTrackPrivateMediaStreamCocoa::pause() 95 { 96 ASSERT(isMainThread()); 97 98 if (!m_isPlaying) 99 return; 100 101 m_isPlaying = false; 102 m_autoPlay = false; 103 104 if (m_dataSource) 105 m_dataSource->setPaused(true); 106 } 107 108 void AudioTrackPrivateMediaStreamCocoa::setVolume(float volume) 109 { 110 m_volume = volume; 111 if (m_dataSource) 112 m_dataSource->setVolume(m_volume); 113 } 114 115 AudioComponentInstance AudioTrackPrivateMediaStreamCocoa::createAudioUnit(CAAudioStreamDescription& outputDescription) 75 m_dataSource->setPaused(value); 76 } 77 78 AudioComponentInstance AudioMediaStreamTrackRendererCocoa::createAudioUnit(CAAudioStreamDescription& outputDescription) 116 79 { 117 80 AudioComponentInstance remoteIOUnit { nullptr }; … … 178 141 179 142 // May get called on a background thread. 180 void Audio TrackPrivateMediaStreamCocoa::audioSamplesAvailable(const MediaTime& sampleTime, const PlatformAudioData& audioData, const AudioStreamDescription& description, size_t sampleCount)143 void AudioMediaStreamTrackRendererCocoa::pushSamples(const MediaTime& sampleTime, const PlatformAudioData& audioData, const AudioStreamDescription& description, size_t sampleCount) 181 144 { 182 145 ASSERT(description.platformDescription().type == PlatformDescription::CAAudioStreamBasicType); 183 184 if (!m_isPlaying) {185 if (m_isAudioUnitStarted) {186 if (m_remoteIOUnit)187 AudioOutputUnitStop(m_remoteIOUnit);188 m_isAudioUnitStarted = false;189 }190 return;191 }192 146 193 147 if (!m_inputDescription || *m_inputDescription != description) { … … 213 167 m_outputDescription = makeUnique<CAAudioStreamDescription>(outputDescription); 214 168 215 m_dataSource = AudioSampleDataSource::create(description.sampleRate() * 2, streamTrack());169 m_dataSource = AudioSampleDataSource::create(description.sampleRate() * 2, *this); 216 170 217 171 if (m_dataSource->setInputFormat(inputDescription) || m_dataSource->setOutputFormat(outputDescription)) { … … 229 183 m_isAudioUnitStarted = true; 230 184 231 m_dataSource->setVolume( m_volume);185 m_dataSource->setVolume(volume()); 232 186 m_remoteIOUnit = remoteIOUnit; 233 187 } 234 188 235 189 m_dataSource->pushSamples(sampleTime, audioData, sampleCount); 236 237 if (m_autoPlay && !m_hasStartedAutoplay) {238 m_hasStartedAutoplay = true;239 callOnMainThread([this, protectedThis = makeRef(*this)] {240 if (m_autoPlay)241 playInternal();242 });243 }244 190 245 191 if (!m_isAudioUnitStarted) { … … 252 198 } 253 199 254 void AudioTrackPrivateMediaStreamCocoa::sourceStopped() 255 { 256 pause(); 257 } 258 259 OSStatus AudioTrackPrivateMediaStreamCocoa::render(UInt32 sampleCount, AudioBufferList& ioData, UInt32 /*inBusNumber*/, const AudioTimeStamp& timeStamp, AudioUnitRenderActionFlags& actionFlags) 260 { 261 // This function is called on a high-priority background thread. The following protectedThis object ensures the object is not 262 // destroyed on the main thread before this function exits. 263 Ref<AudioTrackPrivateMediaStreamCocoa> protectedThis { *this }; 264 265 if (!m_isPlaying || m_muted || !m_dataSource || streamTrack().muted() || streamTrack().ended() || !streamTrack().enabled()) { 200 OSStatus AudioMediaStreamTrackRendererCocoa::render(UInt32 sampleCount, AudioBufferList& ioData, UInt32 /*inBusNumber*/, const AudioTimeStamp& timeStamp, AudioUnitRenderActionFlags& actionFlags) 201 { 202 if (isMuted() || m_paused || !m_dataSource) { 266 203 AudioSampleBufferList::zeroABL(ioData, static_cast<size_t>(sampleCount * m_outputDescription->bytesPerFrame())); 267 204 actionFlags = kAudioUnitRenderAction_OutputIsSilence; … … 274 211 } 275 212 276 OSStatus Audio TrackPrivateMediaStreamCocoa::inputProc(void* userData, AudioUnitRenderActionFlags* actionFlags, const AudioTimeStamp* timeStamp, UInt32 inBusNumber, UInt32 sampleCount, AudioBufferList* ioData)277 { 278 return static_cast<Audio TrackPrivateMediaStreamCocoa*>(userData)->render(sampleCount, *ioData, inBusNumber, *timeStamp, *actionFlags);213 OSStatus AudioMediaStreamTrackRendererCocoa::inputProc(void* userData, AudioUnitRenderActionFlags* actionFlags, const AudioTimeStamp* timeStamp, UInt32 inBusNumber, UInt32 sampleCount, AudioBufferList* ioData) 214 { 215 return static_cast<AudioMediaStreamTrackRendererCocoa*>(userData)->render(sampleCount, *ioData, inBusNumber, *timeStamp, *actionFlags); 279 216 } 280 217 -
trunk/Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h
r254441 r254446 28 28 #if ENABLE(VIDEO_TRACK) && ENABLE(MEDIA_STREAM) 29 29 30 #include "AudioTrackPrivateMediaStream.h" 30 #include "AudioMediaStreamTrackRenderer.h" 31 #include "Logging.h" 32 31 33 #include <AudioToolbox/AudioToolbox.h> 32 34 #include <CoreAudio/CoreAudioTypes.h> … … 38 40 class CAAudioStreamDescription; 39 41 40 class Audio TrackPrivateMediaStreamCocoa final : public AudioTrackPrivateMediaStream, private RealtimeMediaSource::Observer {41 WTF_MAKE_ NONCOPYABLE(AudioTrackPrivateMediaStreamCocoa)42 class AudioMediaStreamTrackRendererCocoa : public AudioMediaStreamTrackRenderer { 43 WTF_MAKE_FAST_ALLOCATED; 42 44 public: 43 static RefPtr<AudioTrackPrivateMediaStreamCocoa> create(MediaStreamTrackPrivate& streamTrack) 44 { 45 return adoptRef(*new AudioTrackPrivateMediaStreamCocoa(streamTrack)); 46 } 47 48 void clear(); 49 50 void play(); 51 void pause(); 52 bool isPlaying() { return m_isPlaying; } 53 54 void setVolume(float); 55 float volume() const { return m_volume; } 56 57 void setMuted(bool muted) { m_muted = muted; } 58 bool muted() const { return m_muted; } 45 AudioMediaStreamTrackRendererCocoa(); 46 ~AudioMediaStreamTrackRendererCocoa(); 59 47 60 48 private: 61 AudioTrackPrivateMediaStreamCocoa(MediaStreamTrackPrivate&); 62 ~AudioTrackPrivateMediaStreamCocoa(); 63 64 // RealtimeMediaSource::Observer 65 void sourceStopped() final; 66 void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final; 49 // AudioMediaStreamTrackRenderer 50 void pushSamples(const WTF::MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final; 51 void stop() final; 52 void clear() final; 53 void setPaused(bool) final; 67 54 68 55 static OSStatus inputProc(void*, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32 inBusNumber, UInt32 numberOfFrames, AudioBufferList*); … … 70 57 71 58 AudioComponentInstance createAudioUnit(CAAudioStreamDescription&); 72 void cleanup();73 void zeroBufferList(AudioBufferList&, size_t);74 void playInternal();75 76 #if !RELEASE_LOG_DISABLED77 const char* logClassName() const final { return "AudioTrackPrivateMediaStreamCocoa"; }78 #endif79 59 80 60 // Audio thread members … … 82 62 std::unique_ptr<CAAudioStreamDescription> m_inputDescription; 83 63 std::unique_ptr<CAAudioStreamDescription> m_outputDescription; 84 bool m_isAudioUnitStarted { false };85 bool m_hasStartedAutoplay { false };86 64 87 65 // Cross thread members 88 66 RefPtr<AudioSampleDataSource> m_dataSource; 89 90 // Main thread writable members 91 float m_volume { 1 }; 92 bool m_isPlaying { false }; 93 bool m_autoPlay { false }; 94 bool m_muted { false }; 95 bool m_isCleared { false }; 67 bool m_isAudioUnitStarted { false }; 68 bool m_paused { false }; 96 69 }; 97 70
Note: See TracChangeset
for help on using the changeset viewer.