Changeset 254505 in webkit
- Timestamp:
- Jan 14, 2020 6:37:51 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 18 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r254504 r254505 1 2020-01-14 youenn fablet <youenn@apple.com> 2 3 Add support for MediaStream audio track rendering in GPUProcess 4 https://bugs.webkit.org/show_bug.cgi?id=206175 5 6 Reviewed by Eric Carlson. 7 8 * gpu-process/TestExpectations: 9 1 10 2020-01-14 Pablo Saavedra <psaavedra@igalia.com> 2 11 -
trunk/LayoutTests/gpu-process/TestExpectations
r254499 r254505 230 230 fast/css/relative-position-replaced-in-table-display-crash.html [ Skip ] 231 231 fast/mediacapturefromelement [ Skip ] 232 fast/mediastream [ Skip ]233 232 fullscreen/full-screen-iframe-legacy.html [ Skip ] 234 233 fullscreen/video-controls-timeline.html [ Skip ] … … 241 240 http/tests/navigation/page-cache-mediastream.html [ Skip ] 242 241 http/wpt/mediarecorder [ Skip ] 243 imported/w3c/web-platform-tests/mediacapture-streams [ Skip ]244 242 imported/w3c/web-platform-tests/mediacapture-fromelement/idlharness.html [ Skip ] 245 243 imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-stop.html [ Skip ] … … 258 256 259 257 webgpu [ Skip ] 260 261 webrtc [ Skip ]262 platform/mac/webrtc [ Skip ] -
trunk/Source/WebCore/ChangeLog
r254503 r254505 1 2020-01-14 youenn fablet <youenn@apple.com> 2 3 Add support for MediaStream audio track rendering in GPUProcess 4 https://bugs.webkit.org/show_bug.cgi?id=206175 5 6 Reviewed by Eric Carlson. 7 8 Simplify model to use start/stop instead of setPaused. 9 Simplify and fix issue in computation of the muted state of the renderer. 10 Covered by existing tests run with GPU process enabled and manual testing 11 12 * platform/mediastream/AudioMediaStreamTrackRenderer.h: 13 * platform/mediastream/AudioTrackPrivateMediaStream.cpp: 14 (WebCore::AudioTrackPrivateMediaStream::playInternal): 15 (WebCore::AudioTrackPrivateMediaStream::pause): 16 (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable): 17 (WebCore::AudioTrackPrivateMediaStream::updateRendererMutedState): 18 * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp: 19 (WebCore::AudioMediaStreamTrackRendererCocoa::start): 20 (WebCore::AudioMediaStreamTrackRendererCocoa::stop): 21 (WebCore::AudioMediaStreamTrackRendererCocoa::clear): 22 (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples): 23 (WebCore::AudioMediaStreamTrackRendererCocoa::render): 24 * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h: 25 1 26 2020-01-14 Xabier Rodriguez Calvar <calvaris@igalia.com> 2 27 -
trunk/Source/WebCore/platform/mediastream/AudioMediaStreamTrackRenderer.h
r254446 r254505 45 45 virtual ~AudioMediaStreamTrackRenderer() = default; 46 46 47 virtual void s etPaused(bool) = 0;47 virtual void start() = 0; 48 48 virtual void stop() = 0; 49 49 virtual void clear() = 0; -
trunk/Source/WebCore/platform/mediastream/AudioTrackPrivateMediaStream.cpp
r254446 r254505 78 78 m_autoPlay = false; 79 79 80 m_renderer->s etPaused(false);80 m_renderer->start(); 81 81 } 82 82 … … 96 96 m_autoPlay = false; 97 97 98 m_renderer->s etPaused(true);98 m_renderer->stop(); 99 99 } 100 100 … … 112 112 void AudioTrackPrivateMediaStream::audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime& sampleTime, const PlatformAudioData& audioData, const AudioStreamDescription& description, size_t sampleCount) 113 113 { 114 if (!m_isPlaying) {115 m_renderer->stop();116 return;117 }118 119 114 m_renderer->pushSamples(sampleTime, audioData, description, sampleCount); 120 115 … … 140 135 void AudioTrackPrivateMediaStream::updateRendererMutedState() 141 136 { 142 m_renderer->setMuted( m_isPlaying && !streamTrack().muted() && !streamTrack().ended() &&streamTrack().enabled());137 m_renderer->setMuted(streamTrack().muted() || streamTrack().ended() || !streamTrack().enabled()); 143 138 } 144 139 -
trunk/Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp
r254446 r254505 44 44 AudioMediaStreamTrackRendererCocoa::~AudioMediaStreamTrackRendererCocoa() = default; 45 45 46 void AudioMediaStreamTrackRendererCocoa::start() 47 { 48 if (m_dataSource) 49 m_dataSource->setPaused(false); 50 51 if (m_isAudioUnitStarted) 52 return; 53 54 if (auto error = AudioOutputUnitStart(m_remoteIOUnit)) { 55 ERROR_LOG(LOGIDENTIFIER, "AudioOutputUnitStart failed, error = ", error, " (", (const char*)&error, ")"); 56 return; 57 } 58 m_isAudioUnitStarted = true; 59 } 60 46 61 void AudioMediaStreamTrackRendererCocoa::stop() 47 62 { 63 if (m_dataSource) 64 m_dataSource->setPaused(true); 65 48 66 if (!m_isAudioUnitStarted) 49 67 return; 50 68 69 m_isAudioUnitStarted = false; 51 70 if (m_remoteIOUnit) 52 71 AudioOutputUnitStop(m_remoteIOUnit); … … 67 86 m_inputDescription = nullptr; 68 87 m_outputDescription = nullptr; 69 } 70 71 void AudioMediaStreamTrackRendererCocoa::setPaused(bool value) 72 { 73 m_paused = value; 74 if (m_dataSource) 75 m_dataSource->setPaused(value); 88 m_isAudioUnitStarted = false; 76 89 } 77 90 … … 188 201 189 202 m_dataSource->pushSamples(sampleTime, audioData, sampleCount); 190 191 if (!m_isAudioUnitStarted) {192 if (auto error = AudioOutputUnitStart(m_remoteIOUnit)) {193 ERROR_LOG(LOGIDENTIFIER, "AudioOutputUnitStart failed, error = ", error, " (", (const char*)&error, ")");194 return;195 }196 m_isAudioUnitStarted = true;197 }198 203 } 199 204 200 205 OSStatus AudioMediaStreamTrackRendererCocoa::render(UInt32 sampleCount, AudioBufferList& ioData, UInt32 /*inBusNumber*/, const AudioTimeStamp& timeStamp, AudioUnitRenderActionFlags& actionFlags) 201 206 { 202 if (isMuted() || m_paused ||!m_dataSource) {207 if (isMuted() || !m_dataSource) { 203 208 AudioSampleBufferList::zeroABL(ioData, static_cast<size_t>(sampleCount * m_outputDescription->bytesPerFrame())); 204 209 actionFlags = kAudioUnitRenderAction_OutputIsSilence; -
trunk/Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h
r254446 r254505 49 49 // AudioMediaStreamTrackRenderer 50 50 void pushSamples(const WTF::MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final; 51 void start() final; 51 52 void stop() final; 52 53 void clear() final; 53 void setPaused(bool) final;54 54 55 55 static OSStatus inputProc(void*, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32 inBusNumber, UInt32 numberOfFrames, AudioBufferList*); … … 66 66 RefPtr<AudioSampleDataSource> m_dataSource; 67 67 bool m_isAudioUnitStarted { false }; 68 bool m_paused { false };69 68 }; 70 69 -
trunk/Source/WebKit/ChangeLog
r254501 r254505 1 2020-01-14 youenn fablet <youenn@apple.com> 2 3 Add support for MediaStream audio track rendering in GPUProcess 4 https://bugs.webkit.org/show_bug.cgi?id=206175 5 6 Reviewed by Eric Carlson. 7 8 Implement an AudioMediaStreamTrackRenderer at WebKit level by creating a remote renderer in GPUProcess and sending IPC to pass 9 audio data as well as orders (start/stop/setMuted). 10 11 Implement the remote renderer using WebCore audio track renderer. 12 13 Enable WebKit remote renderer F GPU process for media is enabled. 14 15 * DerivedSources-input.xcfilelist: 16 * DerivedSources-output.xcfilelist: 17 * DerivedSources.make: 18 * GPUProcess/GPUConnectionToWebProcess.cpp: 19 (WebKit::GPUConnectionToWebProcess::audioTrackRendererManager): 20 (WebKit::GPUConnectionToWebProcess::didReceiveMessage): 21 * GPUProcess/GPUConnectionToWebProcess.h: 22 * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp: Added. 23 (WebKit::nextLogIdentifier): 24 (WebKit::nullLogger): 25 (WebKit::RemoteAudioMediaStreamTrackRenderer::RemoteAudioMediaStreamTrackRenderer): 26 (WebKit::RemoteAudioMediaStreamTrackRenderer::~RemoteAudioMediaStreamTrackRenderer): 27 (WebKit::RemoteAudioMediaStreamTrackRenderer::storage): 28 (WebKit::RemoteAudioMediaStreamTrackRenderer::start): 29 (WebKit::RemoteAudioMediaStreamTrackRenderer::stop): 30 (WebKit::RemoteAudioMediaStreamTrackRenderer::clear): 31 (WebKit::RemoteAudioMediaStreamTrackRenderer::setMuted): 32 (WebKit::RemoteAudioMediaStreamTrackRenderer::setVolume): 33 (WebKit::RemoteAudioMediaStreamTrackRenderer::audioSamplesStorageChanged): 34 (WebKit::RemoteAudioMediaStreamTrackRenderer::audioSamplesAvailable): 35 * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h: Added. 36 * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in: Added. 37 * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp: Added. 38 (WebKit::RemoteAudioMediaStreamTrackRendererManager::didReceiveRendererMessage): 39 (WebKit::RemoteAudioMediaStreamTrackRendererManager::createRenderer): 40 (WebKit::RemoteAudioMediaStreamTrackRendererManager::releaseRenderer): 41 * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h: Added. 42 (WebKit::RemoteAudioMediaStreamTrackRendererManager::didReceiveMessageFromWebProcess): 43 * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.messages.in: Added. 44 * Scripts/webkit/messages.py: 45 * Sources.txt: 46 * SourcesCocoa.txt: 47 * WebKit.xcodeproj/project.pbxproj: 48 * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp: 49 (WebKit::RemoteMediaPlayerManager::updatePreferences): 50 * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp: Added. 51 (WebKit::AudioMediaStreamTrackRenderer::create): 52 (WebKit::AudioMediaStreamTrackRenderer::AudioMediaStreamTrackRenderer): 53 (WebKit::AudioMediaStreamTrackRenderer::~AudioMediaStreamTrackRenderer): 54 (WebKit::AudioMediaStreamTrackRenderer::start): 55 (WebKit::AudioMediaStreamTrackRenderer::stop): 56 (WebKit::AudioMediaStreamTrackRenderer::clear): 57 (WebKit::AudioMediaStreamTrackRenderer::setMuted): 58 (WebKit::AudioMediaStreamTrackRenderer::setVolume): 59 (WebKit::AudioMediaStreamTrackRenderer::pushSamples): 60 (WebKit::AudioMediaStreamTrackRenderer::storageChanged): 61 * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.h: Added. 62 (WebKit::AudioMediaStreamTrackRenderer::identifier const): 63 * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererIdentifier.h: Added. 64 1 65 2020-01-14 youenn fablet <youenn@apple.com> 2 66 -
trunk/Source/WebKit/DerivedSources-input.xcfilelist
r254194 r254505 20 20 $(PROJECT_DIR)/GPUProcess/media/RemoteMediaResourceManager.messages.in 21 21 $(PROJECT_DIR)/GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in 22 $(PROJECT_DIR)/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in 23 $(PROJECT_DIR)/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.messages.in 22 24 $(PROJECT_DIR)/GPUProcess/webrtc/RemoteMediaRecorder.messages.in 23 25 $(PROJECT_DIR)/GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in -
trunk/Source/WebKit/DerivedSources-output.xcfilelist
r254194 r254505 121 121 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/PluginProxyMessages.h 122 122 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/PluginProxyMessagesReplies.h 123 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioMediaStreamTrackRendererManagerMessageReceiver.cpp 124 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioMediaStreamTrackRendererManagerMessages.h 125 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioMediaStreamTrackRendererManagerMessagesReplies.h 126 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioMediaStreamTrackRendererMessageReceiver.cpp 127 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioMediaStreamTrackRendererMessages.h 128 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteAudioMediaStreamTrackRendererMessagesReplies.h 123 129 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteLayerTreeDrawingAreaProxyMessageReceiver.cpp 124 130 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteLayerTreeDrawingAreaProxyMessages.h -
trunk/Source/WebKit/DerivedSources.make
r254194 r254505 141 141 PluginProcessProxy \ 142 142 PluginProxy \ 143 RemoteAudioMediaStreamTrackRendererManager \ 144 RemoteAudioMediaStreamTrackRenderer \ 143 145 RemoteLayerTreeDrawingAreaProxy \ 144 146 RemoteMediaPlayerManager \ -
trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp
r254194 r254505 37 37 #include "LibWebRTCCodecsProxyMessages.h" 38 38 #include "Logging.h" 39 #include "RemoteAudioMediaStreamTrackRendererManager.h" 40 #include "RemoteAudioMediaStreamTrackRendererManagerMessages.h" 41 #include "RemoteAudioMediaStreamTrackRendererMessages.h" 39 42 #include "RemoteLayerTreeDrawingAreaProxyMessages.h" 40 43 #include "RemoteMediaPlayerManagerProxy.h" … … 149 152 return *m_remoteMediaRecorderManager; 150 153 } 154 155 #if ENABLE(VIDEO_TRACK) 156 RemoteAudioMediaStreamTrackRendererManager& GPUConnectionToWebProcess::audioTrackRendererManager() 157 { 158 if (!m_audioTrackRendererManager) 159 m_audioTrackRendererManager = makeUnique<RemoteAudioMediaStreamTrackRendererManager>(); 160 161 return *m_audioTrackRendererManager; 162 } 163 #endif 151 164 #endif 152 165 … … 183 196 return; 184 197 } 198 #if PLATFORM(COCOA) && ENABLE(VIDEO_TRACK) 199 if (decoder.messageReceiverName() == Messages::RemoteAudioMediaStreamTrackRendererManager::messageReceiverName()) { 200 audioTrackRendererManager().didReceiveMessageFromWebProcess(connection, decoder); 201 return; 202 } 203 if (decoder.messageReceiverName() == Messages::RemoteAudioMediaStreamTrackRenderer::messageReceiverName()) { 204 audioTrackRendererManager().didReceiveRendererMessage(connection, decoder); 205 return; 206 } 207 #endif 185 208 #endif 186 209 #if PLATFORM(COCOA) && USE(LIBWEBRTC) -
trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h
r254194 r254505 41 41 class GPUProcess; 42 42 class LibWebRTCCodecsProxy; 43 class RemoteAudioMediaStreamTrackRendererManager; 43 44 class RemoteMediaPlayerManagerProxy; 44 45 class RemoteMediaRecorderManager; … … 74 75 UserMediaCaptureManagerProxy& userMediaCaptureManagerProxy(); 75 76 RemoteMediaRecorderManager& mediaRecorderManager(); 77 #if ENABLE(VIDEO_TRACK) 78 RemoteAudioMediaStreamTrackRendererManager& audioTrackRendererManager(); 79 #endif 76 80 #endif 77 81 … … 93 97 std::unique_ptr<UserMediaCaptureManagerProxy> m_userMediaCaptureManagerProxy; 94 98 std::unique_ptr<RemoteMediaRecorderManager> m_remoteMediaRecorderManager; 99 #if ENABLE(VIDEO_TRACK) 100 std::unique_ptr<RemoteAudioMediaStreamTrackRendererManager> m_audioTrackRendererManager; 101 #endif 95 102 #endif 96 103 #if PLATFORM(COCOA) && USE(LIBWEBRTC) -
trunk/Source/WebKit/Scripts/webkit/messages.py
r254454 r254505 219 219 'WebCore::SWServerConnectionIdentifier', 220 220 'WebKit::ActivityStateChangeID', 221 'WebKit::AudioMediaStreamTrackRendererIdentifier', 221 222 'WebKit::LayerHostingContextID', 222 223 'WebKit::MediaPlayerPrivateRemoteIdentifier', -
trunk/Source/WebKit/Sources.txt
r254499 r254505 25 25 GPUProcess/GPUConnectionToWebProcess.cpp 26 26 GPUProcess/GPUProcessCreationParameters.cpp 27 GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp 28 GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp 27 29 GPUProcess/webrtc/RemoteMediaRecorder.cpp 28 30 GPUProcess/webrtc/RemoteMediaRecorderManager.cpp … … 522 524 WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp 523 525 WebProcess/GPU/webrtc/MediaRecorderProvider.cpp 526 WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp 524 527 525 528 WebProcess/Network/NetworkProcessConnection.cpp -
trunk/Source/WebKit/SourcesCocoa.txt
r254489 r254505 640 640 LibWebRTCCodecsProxyMessageReceiver.cpp 641 641 LibWebRTCCodecsMessageReceiver.cpp 642 RemoteAudioMediaStreamTrackRendererManagerMessageReceiver.cpp 643 RemoteAudioMediaStreamTrackRendererMessageReceiver.cpp 642 644 RemoteMediaRecorderMessageReceiver.cpp 643 645 RemoteMediaRecorderManagerMessageReceiver.cpp -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r254499 r254505 3381 3381 41D5C6D8238EB20D00B9B3CB /* ServiceWorkerSoftUpdateLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerSoftUpdateLoader.h; sourceTree = "<group>"; }; 3382 3382 41D5C6D9238EB20E00B9B3CB /* ServiceWorkerSoftUpdateLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerSoftUpdateLoader.cpp; sourceTree = "<group>"; }; 3383 41D6455223CCB92100486E0E /* RemoteAudioMediaStreamTrackRenderer.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = RemoteAudioMediaStreamTrackRenderer.messages.in; path = GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in; sourceTree = SOURCE_ROOT; }; 3384 41D6455323CCB92100486E0E /* RemoteAudioMediaStreamTrackRenderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RemoteAudioMediaStreamTrackRenderer.h; path = GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h; sourceTree = SOURCE_ROOT; }; 3385 41D6455423CCB92200486E0E /* RemoteAudioMediaStreamTrackRenderer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RemoteAudioMediaStreamTrackRenderer.cpp; path = GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp; sourceTree = SOURCE_ROOT; }; 3386 41D6455523CCB96900486E0E /* RemoteAudioMediaStreamTrackRendererManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RemoteAudioMediaStreamTrackRendererManager.messages.in; sourceTree = "<group>"; }; 3387 41D6455623CCB96900486E0E /* RemoteAudioMediaStreamTrackRendererManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteAudioMediaStreamTrackRendererManager.cpp; sourceTree = "<group>"; }; 3388 41D6455723CCB96900486E0E /* RemoteAudioMediaStreamTrackRendererManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteAudioMediaStreamTrackRendererManager.h; sourceTree = "<group>"; }; 3383 3389 41DC45941E3D6E1E00B11F51 /* NetworkRTCProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkRTCProvider.h; sourceTree = "<group>"; }; 3384 3390 41DC45951E3D6E1E00B11F51 /* NetworkRTCProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkRTCProvider.cpp; sourceTree = "<group>"; }; … … 3401 3407 41FBE823206DA79C000F0741 /* NetworkContentRuleListManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NetworkContentRuleListManager.messages.in; sourceTree = "<group>"; }; 3402 3408 41FBE824206DA79C000F0741 /* NetworkContentRuleListManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkContentRuleListManager.cpp; sourceTree = "<group>"; }; 3409 41FCD6AD23CCC26000C62567 /* AudioMediaStreamTrackRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioMediaStreamTrackRenderer.h; sourceTree = "<group>"; }; 3410 41FCD6AE23CCC26100C62567 /* AudioMediaStreamTrackRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioMediaStreamTrackRenderer.cpp; sourceTree = "<group>"; }; 3411 41FCD6AF23CCC26100C62567 /* AudioMediaStreamTrackRendererIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioMediaStreamTrackRendererIdentifier.h; sourceTree = "<group>"; }; 3403 3412 4450AEBF1DC3FAE5009943F2 /* SharedMemoryCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SharedMemoryCocoa.cpp; sourceTree = "<group>"; }; 3404 3413 4459984122833E6000E61373 /* SyntheticEditingCommandType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SyntheticEditingCommandType.h; sourceTree = "<group>"; }; … … 7177 7186 isa = PBXGroup; 7178 7187 children = ( 7188 41FCD6AE23CCC26100C62567 /* AudioMediaStreamTrackRenderer.cpp */, 7189 41FCD6AD23CCC26000C62567 /* AudioMediaStreamTrackRenderer.h */, 7190 41FCD6AF23CCC26100C62567 /* AudioMediaStreamTrackRendererIdentifier.h */, 7179 7191 4172198A23B6128200AE5686 /* LibWebRTCCodecs.cpp */, 7180 7192 4172198923B6128200AE5686 /* LibWebRTCCodecs.h */, … … 7197 7209 41E0A7C723B6397900561060 /* LibWebRTCCodecsProxy.messages.in */, 7198 7210 41E0A7C823B6397900561060 /* LibWebRTCCodecsProxy.mm */, 7211 41D6455423CCB92200486E0E /* RemoteAudioMediaStreamTrackRenderer.cpp */, 7212 41D6455323CCB92100486E0E /* RemoteAudioMediaStreamTrackRenderer.h */, 7213 41D6455223CCB92100486E0E /* RemoteAudioMediaStreamTrackRenderer.messages.in */, 7214 41D6455623CCB96900486E0E /* RemoteAudioMediaStreamTrackRendererManager.cpp */, 7215 41D6455723CCB96900486E0E /* RemoteAudioMediaStreamTrackRendererManager.h */, 7216 41D6455523CCB96900486E0E /* RemoteAudioMediaStreamTrackRendererManager.messages.in */, 7199 7217 4176E89D23C376D5003E83FE /* RemoteMediaRecorder.cpp */, 7200 7218 4176E89823C36677003E83FE /* RemoteMediaRecorder.h */, -
trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp
r254499 r254505 29 29 #if ENABLE(GPU_PROCESS) 30 30 31 #include "AudioMediaStreamTrackRenderer.h" 31 32 #include "MediaPlayerPrivateRemote.h" 33 #include "RemoteAudioMediaStreamTrackRenderer.h" 32 34 #include "RemoteMediaPlayerConfiguration.h" 33 35 #include "RemoteMediaPlayerMIMETypeCache.h" … … 361 363 362 364 RemoteMediaPlayerSupport::setRegisterRemotePlayerCallback(settings.useGPUProcessForMedia() ? WTFMove(registerEngine) : RemoteMediaPlayerSupport::RegisterRemotePlayerCallback()); 365 366 if (settings.useGPUProcessForMedia()) 367 WebCore::AudioMediaStreamTrackRenderer::setCreator(WebKit::AudioMediaStreamTrackRenderer::create); 363 368 } 364 369 -
trunk/Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.h
r254504 r254505 1 1 /* 2 * Copyright (C) 20 17Apple 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 … … 26 26 #pragma once 27 27 28 #if ENABLE(GPU_PROCESS) 28 29 #if ENABLE(VIDEO_TRACK) && ENABLE(MEDIA_STREAM) 29 30 30 #include "AudioMediaStreamTrackRenderer.h" 31 #include "Logging.h" 31 #include "AudioMediaStreamTrackRendererIdentifier.h" 32 #include "SharedRingBufferStorage.h" 33 #include <WebCore/AudioMediaStreamTrackRenderer.h> 34 #include <wtf/MediaTime.h> 32 35 33 #include <AudioToolbox/AudioToolbox.h> 34 #include <CoreAudio/CoreAudioTypes.h> 36 namespace IPC { 37 class Connection; 38 } 35 39 36 namespace Web Core{40 namespace WebKit { 37 41 38 class AudioSampleDataSource; 39 class AudioSampleBufferList; 40 class CAAudioStreamDescription; 41 42 class AudioMediaStreamTrackRendererCocoa : public AudioMediaStreamTrackRenderer { 42 class AudioMediaStreamTrackRenderer final : public WebCore::AudioMediaStreamTrackRenderer, public SharedRingBufferStorage::Client { 43 43 WTF_MAKE_FAST_ALLOCATED; 44 44 public: 45 AudioMediaStreamTrackRendererCocoa(); 46 ~AudioMediaStreamTrackRendererCocoa(); 45 static std::unique_ptr<WebCore::AudioMediaStreamTrackRenderer> create(); 46 ~AudioMediaStreamTrackRenderer(); 47 48 AudioMediaStreamTrackRendererIdentifier identifier() const { return m_identifier; } 47 49 48 50 private: 49 // AudioMediaStreamTrackRenderer 50 void pushSamples(const WTF::MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final; 51 explicit AudioMediaStreamTrackRenderer(Ref<IPC::Connection>&&); 52 53 // SharedRingBufferStorage::Client 54 void storageChanged(SharedMemory*); 55 56 // WebCore::AudioMediaStreamTrackRenderer 57 void start() final; 51 58 void stop() final; 52 59 void clear() final; 53 void setPaused(bool) final; 60 void setMuted(bool) final; 61 void setVolume(float) final; 62 void pushSamples(const MediaTime&, const WebCore::PlatformAudioData&, const WebCore::AudioStreamDescription&, size_t) final; 54 63 55 static OSStatus inputProc(void*, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32 inBusNumber, UInt32 numberOfFrames, AudioBufferList*);56 OSStatus render(UInt32 sampleCount, AudioBufferList&, UInt32 inBusNumber, const AudioTimeStamp&, AudioUnitRenderActionFlags&);64 Ref<IPC::Connection> m_connection; 65 AudioMediaStreamTrackRendererIdentifier m_identifier; 57 66 58 AudioComponentInstance createAudioUnit(CAAudioStreamDescription&); 59 60 // Audio thread members 61 AudioComponentInstance m_remoteIOUnit { nullptr }; 62 std::unique_ptr<CAAudioStreamDescription> m_inputDescription; 63 std::unique_ptr<CAAudioStreamDescription> m_outputDescription; 64 65 // Cross thread members 66 RefPtr<AudioSampleDataSource> m_dataSource; 67 bool m_isAudioUnitStarted { false }; 68 bool m_paused { false }; 67 std::unique_ptr<WebCore::CARingBuffer> m_ringBuffer; 68 WebCore::CAAudioStreamDescription m_description { }; 69 int64_t m_numberOfFrames { 0 }; 70 bool m_isPlaying { false }; 69 71 }; 70 72 … … 72 74 73 75 #endif // ENABLE(VIDEO_TRACK) && ENABLE(MEDIA_STREAM) 76 #endif // ENABLE(GPU_PROCESS)
Note: See TracChangeset
for help on using the changeset viewer.