Skip to content

Commit

Permalink
[Cocoa] MediaCapabilities spatial rendering checks fail on capable HW…
Browse files Browse the repository at this point in the history
… with built-in sound output

https://bugs.webkit.org/show_bug.cgi?id=265614
rdar://114214068

Reviewed by Jer Noble.

On macOS, use SPI got get spatial audio preferences to see if spatial audio playback is
supported. On iOS, switch from using the shared audio presentation output context to
AVAudioSession, which makes it possible to see if the currently audio route has a port
that supports spatial playback.

* Source/WebCore/PAL/pal/cf/AudioToolboxSoftLink.cpp:
* Source/WebCore/PAL/pal/cf/AudioToolboxSoftLink.h:
* Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h:
* Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.h:
* Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.mm:
* Source/WebCore/PAL/pal/spi/cocoa/AudioToolboxSPI.h:
* Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp:
(WebCore::PlatformMediaSessionManager::setSupportsSpatialAudioPlayback):
(WebCore::PlatformMediaSessionManager::supportsSpatialAudioPlaybackForConfiguration):
* Source/WebCore/platform/audio/PlatformMediaSessionManager.h:
(WebCore::PlatformMediaSessionManager::supportsSpatialAudioPlayback):
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.h:
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm:
(WebCore::MediaSessionManagerCocoa::MediaSessionManagerCocoa):
(WebCore::MediaSessionManagerCocoa::updateSessionState):
(WebCore::MediaSessionManagerCocoa::supportsSpatialAudioPlaybackForConfiguration):
* Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.h:
* Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm:
(MediaSessionHelper::activeAudioRouteSupportsSpatialPlaybackDidChange):
(MediaSessionHelper::updateActiveAudioRouteSupportsSpatialPlayback):
(MediaSessionHelper::setActiveAudioRouteSupportsSpatialPlayback):
(-[WebMediaSessionHelper initWithCallback:]):
(-[WebMediaSessionHelper spatialPlaybackCapabilitiesChanged:]):
* Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.h:
* Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm:
(WebCore::MediaSessionManageriOS::activeAudioRouteSupportsSpatialPlaybackDidChange):
(WebCore::MediaSessionManagerCocoa::supportsSpatialAudioPlaybackForConfiguration):
* Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
(WebCore::computeMediaCapabilitiesInfo):
* Source/WebKit/GPUProcess/media/ios/RemoteMediaSessionHelperProxy.cpp:
(WebKit::RemoteMediaSessionHelperProxy::activeAudioRouteSupportsSpatialPlaybackDidChange):
* Source/WebKit/GPUProcess/media/ios/RemoteMediaSessionHelperProxy.h:
* Source/WebKit/Shared/mac/MediaFormatReader/CoreMediaWrapped.cpp:
(WebKit::wrapperVTable):
* Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp:
(WebKit::RemoteMediaSessionHelper::activeAudioRouteSupportsSpatialPlaybackDidChange):
* Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.h:
* Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.messages.in:

Canonical link: https://commits.webkit.org/271504@main
  • Loading branch information
eric-carlson committed Dec 4, 2023
1 parent fb8f991 commit f8df164
Show file tree
Hide file tree
Showing 21 changed files with 228 additions and 42 deletions.
7 changes: 6 additions & 1 deletion Source/WebCore/PAL/pal/cf/AudioToolboxSoftLink.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020 Apple Inc. All rights reserved.
* Copyright (C) 2020-2023 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
Expand Down Expand Up @@ -34,6 +34,9 @@
#include <AudioToolbox/ExtendedAudioFile.h>
#include <wtf/SoftLinking.h>

enum SpatialContentTypeID : UInt32;
struct SpatialAudioPreferences;

SOFT_LINK_FRAMEWORK_FOR_SOURCE(PAL, AudioToolbox)
SOFT_LINK_PRIVATE_FRAMEWORK_FOR_SOURCE_WITH_EXPORT(PAL, AudioToolboxCore, PAL_EXPORT)

Expand All @@ -54,6 +57,8 @@ SOFT_LINK_FUNCTION_FOR_SOURCE(PAL, AudioToolbox, AudioComponentCopyName, OSStatu
SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AudioToolboxCore, AudioComponentFetchServerRegistrations, OSStatus, (CFDataRef* outBundleRegistrations), (outBundleRegistrations), PAL_EXPORT)
SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AudioToolboxCore, AudioComponentApplyServerRegistrations, OSStatus, (CFDataRef inBundleRegistrations), (inBundleRegistrations), PAL_EXPORT)

SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AudioToolbox, AudioGetDeviceSpatialPreferencesForContentType, OSStatus, (CFStringRef inDeviceUID, SpatialContentTypeID contentType, SpatialAudioPreferences *outPreferences), (inDeviceUID, contentType, outPreferences), PAL_EXPORT)

SOFT_LINK_FUNCTION_FOR_SOURCE(PAL, AudioToolbox, AudioFileClose, OSStatus, (AudioFileID inAudioFile), (inAudioFile))
SOFT_LINK_FUNCTION_FOR_SOURCE(PAL, AudioToolbox, AudioFileOpenWithCallbacks, OSStatus, (void *inClientData, AudioFile_ReadProc inReadFunc, AudioFile_WriteProc inWriteFunc, AudioFile_GetSizeProc inGetSizeFunc, AudioFile_SetSizeProc inSetSizeFunc, AudioFileTypeID inFileTypeHint, AudioFileID *outAudioFile), (inClientData, inReadFunc, inWriteFunc, inGetSizeFunc, inSetSizeFunc, inFileTypeHint, outAudioFile))
SOFT_LINK_FUNCTION_FOR_SOURCE(PAL, AudioToolbox, ExtAudioFileDispose, OSStatus, (ExtAudioFileRef inExtAudioFile), (inExtAudioFile))
Expand Down
8 changes: 7 additions & 1 deletion Source/WebCore/PAL/pal/cf/AudioToolboxSoftLink.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020 Apple Inc. All rights reserved.
* Copyright (C) 2020-2023 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
Expand Down Expand Up @@ -76,6 +76,9 @@ typedef UInt32 AudioUnitPropertyID;
typedef UInt32 AudioUnitScope;
typedef UInt32 AudioUnitElement;

enum SpatialContentTypeID : UInt32;
struct SpatialAudioPreferences;

SOFT_LINK_FRAMEWORK_FOR_HEADER(PAL, AudioToolbox)
SOFT_LINK_FRAMEWORK_FOR_HEADER(PAL, AudioToolboxCore)

Expand Down Expand Up @@ -111,6 +114,9 @@ SOFT_LINK_FUNCTION_MAY_FAIL_FOR_HEADER(PAL, AudioToolboxCore, AudioComponentFetc
SOFT_LINK_FUNCTION_MAY_FAIL_FOR_HEADER(PAL, AudioToolboxCore, AudioComponentApplyServerRegistrations, OSStatus, (CFDataRef inBundleRegistrations), (inBundleRegistrations))
#define AudioComponentApplyServerRegistrations softLinkAudioToolboxCoreAudioComponentApplyServerRegistrations

SOFT_LINK_FUNCTION_MAY_FAIL_FOR_HEADER(PAL, AudioToolbox, AudioGetDeviceSpatialPreferencesForContentType, OSStatus, (CFStringRef inDeviceUID, SpatialContentTypeID contentType, SpatialAudioPreferences *outPreferences), (inDeviceUID, contentType, outPreferences))
#define AudioGetDeviceSpatialPreferencesForContentType softLinkAudioToolboxAudioGetDeviceSpatialPreferencesForContentType

SOFT_LINK_FUNCTION_FOR_HEADER(PAL, AudioToolbox, AudioFileClose, OSStatus, (AudioFileID inAudioFile), (inAudioFile))
#define AudioFileClose softLink_AudioToolbox_AudioFileClose
SOFT_LINK_FUNCTION_FOR_HEADER(PAL, AudioToolbox, AudioFileOpenWithCallbacks, OSStatus, (void* inClientData, AudioFile_ReadProc inReadFunc, AudioFile_WriteProc inWriteFunc, AudioFile_GetSizeProc inGetSizeFunc, AudioFile_SetSizeProc inSetSizeFunc, AudioFileTypeID inFileTypeHint, AudioFileID* outAudioFile), (inClientData, inReadFunc, inWriteFunc, inGetSizeFunc, inSetSizeFunc, inFileTypeHint, outAudioFile))
Expand Down
1 change: 0 additions & 1 deletion Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,6 @@ SOFT_LINK_FUNCTION_FOR_HEADER(PAL, CoreMedia, CMAudioDeviceClockCreate, OSStatus
SOFT_LINK_FUNCTION_FOR_HEADER(PAL, CoreMedia, CMBaseObjectGetDerivedStorage, void*, (CMBaseObjectRef baseObject), (baseObject))
#define CMBaseObjectGetDerivedStorage softLink_CoreMedia_CMBaseObjectGetDerivedStorage
SOFT_LINK_FUNCTION_FOR_HEADER(PAL, CoreMedia, CMBaseObjectGetVTable, const CMBaseVTable*, (CMBaseObjectRef baseObject), (baseObject))
#define CMBaseObjectGetVTable softLink_CoreMedia_CMBaseObjectGetVTable
SOFT_LINK_FUNCTION_FOR_HEADER(PAL, CoreMedia, CMDerivedObjectCreate, OSStatus, (CFAllocatorRef allocator, const CMBaseVTable* vTable, CMBaseClassID classID, CMBaseObjectRef* baseObject), (allocator, vTable, classID, baseObject))
#define CMDerivedObjectCreate softLink_CoreMedia_CMDerivedObjectCreate

Expand Down
2 changes: 2 additions & 0 deletions Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.h
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,8 @@ SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(PAL, AVFoundation, AVURLAssetExtendedMIME
#if HAVE(AVAUDIOSESSION)
SOFT_LINK_CONSTANT_FOR_HEADER(PAL, AVFoundation, AVAudioSessionPortCarAudio, NSString *)
#define AVAudioSessionPortCarAudio PAL::get_AVFoundation_AVAudioSessionPortCarAudio()
SOFT_LINK_CONSTANT_FOR_HEADER(PAL, AVFoundation, AVAudioSessionSpatialPlaybackCapabilitiesChangedNotification, NSString *)
#define AVAudioSessionSpatialPlaybackCapabilitiesChangedNotification PAL::get_AVFoundation_AVAudioSessionSpatialPlaybackCapabilitiesChangedNotification()
#endif // HAVE(AVAUDIOSESSION)

#if HAVE(AVSPEECHSYNTHESIS_VOICES_CHANGE_NOTIFICATION)
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.mm
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ static BOOL justReturnsNO()

#if HAVE(AVAUDIOSESSION)
SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVAudioSessionPortCarAudio, NSString *, PAL_EXPORT)
SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVAudioSessionSpatialPlaybackCapabilitiesChangedNotification, NSString *, PAL_EXPORT)
#endif // HAVE(AVAUDIOSESSION)

SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVCaptureMaxAvailableTorchLevel, float, PAL_EXPORT)
Expand Down
23 changes: 22 additions & 1 deletion Source/WebCore/PAL/pal/spi/cocoa/AudioToolboxSPI.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018 Apple Inc. All rights reserved.
* Copyright (C) 2018-2023 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
Expand Down Expand Up @@ -27,6 +27,7 @@

#import <AudioToolbox/AudioComponentPriv.h>
#import <AudioToolbox/AudioFormatPriv.h>
#import <AudioToolbox/Spatialization.h>

#else

Expand All @@ -41,4 +42,24 @@ struct AudioFormatVorbisModeInfo {
};
typedef struct AudioFormatVorbisModeInfo AudioFormatVorbisModeInfo;

enum SpatialAudioSourceID : UInt32;
static constexpr UInt32 kSpatialAudioSource_Multichannel = 'mlti';
static constexpr UInt32 kSpatialAudioSource_MonoOrStereo = 'most';
static constexpr UInt32 kSpatialAudioSource_BinauralForHeadphones = 'binh';
static constexpr UInt32 kSpatialAudioSource_Unknown = '?src';

enum SpatialContentTypeID : UInt32;
static constexpr UInt32 kAudioSpatialContentType_Audiovisual = 'moov';
static constexpr UInt32 kAudioSpatialContentType_AudioOnly = 'soun';

struct SpatialAudioPreferences {
Boolean prefersHeadTrackedSpatialization;
Boolean prefersLossyAudioSources;
Boolean alwaysSpatialize;
Boolean pad[5];
UInt32 maxSpatializableChannels;
UInt32 spatialAudioSourceCount;
SpatialAudioSourceID spatialAudioSources[3];
};

#endif
14 changes: 14 additions & 0 deletions Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,20 @@ void PlatformMediaSessionManager::setIsPlayingToAutomotiveHeadUnit(bool isPlayin
m_isPlayingToAutomotiveHeadUnit = isPlayingToAutomotiveHeadUnit;
}

void PlatformMediaSessionManager::setSupportsSpatialAudioPlayback(bool supportsSpatialAudioPlayback)
{
if (supportsSpatialAudioPlayback == m_supportsSpatialAudioPlayback)
return;

ALWAYS_LOG(LOGIDENTIFIER, supportsSpatialAudioPlayback);
m_supportsSpatialAudioPlayback = supportsSpatialAudioPlayback;
}

std::optional<bool> PlatformMediaSessionManager::supportsSpatialAudioPlaybackForConfiguration(const MediaConfiguration&)
{
return m_supportsSpatialAudioPlayback;
}

void PlatformMediaSessionManager::sessionIsPlayingToWirelessPlaybackTargetChanged(PlatformMediaSession& session)
{
if (!m_isApplicationInBackground || !(restrictions(session.mediaType()) & BackgroundProcessPlaybackRestricted))
Expand Down
7 changes: 7 additions & 0 deletions Source/WebCore/platform/audio/PlatformMediaSessionManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
namespace WebCore {

class PlatformMediaSession;
struct MediaConfiguration;

class PlatformMediaSessionManager
#if !RELEASE_LOG_DISABLED
Expand Down Expand Up @@ -152,6 +153,9 @@ class PlatformMediaSessionManager
WEBCORE_EXPORT void setIsPlayingToAutomotiveHeadUnit(bool);
bool isPlayingToAutomotiveHeadUnit() const { return m_isPlayingToAutomotiveHeadUnit; }

WEBCORE_EXPORT void setSupportsSpatialAudioPlayback(bool);
virtual std::optional<bool> supportsSpatialAudioPlaybackForConfiguration(const MediaConfiguration&);

void forEachMatchingSession(const Function<bool(const PlatformMediaSession&)>& predicate, const Function<void(PlatformMediaSession&)>& matchingCallback);

bool processIsSuspended() const { return m_processIsSuspended; }
Expand Down Expand Up @@ -203,6 +207,8 @@ class PlatformMediaSessionManager

bool computeSupportsSeeking() const;

std::optional<bool> supportsSpatialAudioPlayback() { return m_supportsSpatialAudioPlayback; }

private:
friend class Internals;

Expand All @@ -219,6 +225,7 @@ class PlatformMediaSessionManager
bool m_willIgnoreSystemInterruptions { false };
bool m_processIsSuspended { false };
bool m_isPlayingToAutomotiveHeadUnit { false };
std::optional<bool> m_supportsSpatialAudioPlayback;

bool m_alreadyScheduledSessionStatedUpdate { false };
#if USE(AUDIO_SESSION)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020-2021 Apple Inc. All rights reserved.
* Copyright (C) 2020-2023 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
Expand Down Expand Up @@ -120,6 +120,8 @@ class MediaSessionManagerCocoa

void possiblyChangeAudioCategory();

std::optional<bool> supportsSpatialAudioPlaybackForConfiguration(const MediaConfiguration&) final;

bool m_nowPlayingActive { false };
bool m_registeredAsNowPlayingApplication { false };
bool m_haveEverRegisteredAsNowPlayingApplication { false };
Expand Down
57 changes: 52 additions & 5 deletions Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2013-2021 Apple Inc. All rights reserved.
* Copyright (C) 2013-2023 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
Expand Down Expand Up @@ -32,6 +32,7 @@
#import "DeprecatedGlobalSettings.h"
#import "HTMLMediaElement.h"
#import "Logging.h"
#import "MediaConfiguration.h"
#import "MediaPlayer.h"
#import "MediaStrategy.h"
#import "NowPlayingInfo.h"
Expand All @@ -40,6 +41,7 @@
#import "SharedBuffer.h"
#import "VP9UtilitiesCocoa.h"
#import <pal/SessionID.h>
#import <pal/spi/cocoa/AudioToolboxSPI.h>
#import <wtf/BlockObjCExceptions.h>
#import <wtf/Function.h>
#import <wtf/MathExtras.h>
Expand All @@ -59,7 +61,7 @@
#endif // !PLATFORM(MAC)

MediaSessionManagerCocoa::MediaSessionManagerCocoa()
: m_nowPlayingManager(platformStrategies()->mediaStrategy().createNowPlayingManager())
: m_nowPlayingManager(hasPlatformStrategies() ? platformStrategies()->mediaStrategy().createNowPlayingManager() : nullptr)
, m_defaultBufferSize(AudioSession::sharedSession().preferredBufferSize())
, m_delayCategoryChangeTimer(RunLoop::main(), this, &MediaSessionManagerCocoa::possiblyChangeAudioCategory)
{
Expand Down Expand Up @@ -148,9 +150,9 @@

if (!hasAudibleAudioOrVideoMediaType) {
bool isPotentiallyAudible = session.isPlayingToWirelessPlaybackTarget()
|| ((type == PlatformMediaSession::MediaType::VideoAudio || type == PlatformMediaSession::MediaType::Audio)
&& session.isAudible()
&& (session.isPlaying() || session.preparingToPlay() || session.hasPlayedAudiblySinceLastInterruption()));
|| ((type == PlatformMediaSession::MediaType::VideoAudio || type == PlatformMediaSession::MediaType::Audio)
&& session.isAudible()
&& (session.isPlaying() || session.preparingToPlay() || session.hasPlayedAudiblySinceLastInterruption()));
if (isPotentiallyAudible) {
hasAudibleAudioOrVideoMediaType = true;
hasAudibleVideoMediaType |= type == PlatformMediaSession::MediaType::VideoAudio;
Expand Down Expand Up @@ -544,6 +546,51 @@
updateSessionState();
}

#if PLATFORM(MAC)
std::optional<bool> MediaSessionManagerCocoa::supportsSpatialAudioPlaybackForConfiguration(const MediaConfiguration& configuration)
{
ASSERT(configuration.audio);
if (!configuration.audio)
return { false };

auto supportsSpatialAudioPlayback = this->supportsSpatialAudioPlayback();
if (supportsSpatialAudioPlayback.has_value())
return supportsSpatialAudioPlayback;

auto calculateSpatialAudioSupport = [] (const MediaConfiguration& configuration) {
if (!PAL::canLoad_AudioToolbox_AudioGetDeviceSpatialPreferencesForContentType())
return false;

SpatialAudioPreferences spatialAudioPreferences { };
auto contentType = configuration.video ? kAudioSpatialContentType_Audiovisual : kAudioSpatialContentType_AudioOnly;

if (noErr != PAL::AudioGetDeviceSpatialPreferencesForContentType(nullptr, static_cast<SpatialContentTypeID>(contentType), &spatialAudioPreferences))
return false;

if (!spatialAudioPreferences.spatialAudioSourceCount)
return false;

auto channelCount = configuration.audio->channels.toDouble();
if (channelCount <= 0)
return true;

for (uint32_t i = 0; i < spatialAudioPreferences.spatialAudioSourceCount; ++i) {
auto& source = spatialAudioPreferences.spatialAudioSources[i];
if (source == kSpatialAudioSource_Multichannel && channelCount > 2)
return true;
if (source == kSpatialAudioSource_MonoOrStereo && channelCount >= 1)
return true;
}

return false;
};

setSupportsSpatialAudioPlayback(calculateSpatialAudioSupport(configuration));

return this->supportsSpatialAudioPlayback();
}
#endif

} // namespace WebCore

#endif // USE(AUDIO_SESSION) && PLATFORM(COCOA)
11 changes: 10 additions & 1 deletion Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020 Apple Inc. All rights reserved.
* Copyright (C) 2020-2023 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
Expand Down Expand Up @@ -54,6 +54,9 @@ class MediaSessionHelperClient : public CanMakeWeakPtr<MediaSessionHelperClient>

enum class SupportsAirPlayVideo : bool { No, Yes };
virtual void activeVideoRouteDidChange(SupportsAirPlayVideo, Ref<MediaPlaybackTarget>&&) = 0;

enum class SupportsSpatialAudioPlayback : bool { No, Yes };
virtual void activeAudioRouteSupportsSpatialPlaybackDidChange(SupportsSpatialAudioPlayback) = 0;
};

class WEBCORE_EXPORT MediaSessionHelper : public ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr<MediaSessionHelper> {
Expand Down Expand Up @@ -90,17 +93,22 @@ class WEBCORE_EXPORT MediaSessionHelper : public ThreadSafeRefCountedAndCanMakeT
using ShouldPause = MediaSessionHelperClient::ShouldPause;
using SupportsAirPlayVideo = MediaSessionHelperClient::SupportsAirPlayVideo;
using SuspendedUnderLock = MediaSessionHelperClient::SuspendedUnderLock;
using SupportsSpatialAudioPlayback = MediaSessionHelperClient::SupportsSpatialAudioPlayback;

void activeAudioRouteDidChange(ShouldPause);
void applicationWillEnterForeground(SuspendedUnderLock);
void applicationDidEnterBackground(SuspendedUnderLock);
void applicationWillBecomeInactive();
void applicationDidBecomeActive();

void setActiveAudioRouteSupportsSpatialPlayback(bool);
void updateActiveAudioRouteSupportsSpatialPlayback();

protected:
void externalOutputDeviceAvailableDidChange(HasAvailableTargets);
void isPlayingToAutomotiveHeadUnitDidChange(PlayingToAutomotiveHeadUnit);
void activeVideoRouteDidChange(SupportsAirPlayVideo, Ref<MediaPlaybackTarget>&&);
void activeAudioRouteSupportsSpatialPlaybackDidChange(SupportsSpatialAudioPlayback);

private:
virtual void startMonitoringWirelessRoutesInternal() = 0;
Expand All @@ -111,6 +119,7 @@ class WEBCORE_EXPORT MediaSessionHelper : public ThreadSafeRefCountedAndCanMakeT
uint32_t m_monitoringWirelessRoutesCount { 0 };
bool m_activeVideoRouteSupportsAirPlayVideo { false };
bool m_isPlayingToAutomotiveHeadUnit { false };
SupportsSpatialAudioPlayback m_activeAudioRouteSupportsSpatialPlayback { SupportsSpatialAudioPlayback::No };
RefPtr<MediaPlaybackTarget> m_playbackTarget;
};

Expand Down
Loading

0 comments on commit f8df164

Please sign in to comment.