MediaSessionManagerCocoa.cpp [plain text]
#include "config.h"
#include "PlatformMediaSessionManager.h"
#if USE(AUDIO_SESSION)
#include "AudioSession.h"
#include "Logging.h"
#include "Settings.h"
#include <wtf/Function.h>
using namespace WebCore;
static const size_t kWebAudioBufferSize = 128;
static const size_t kLowPowerVideoBufferSize = 4096;
void PlatformMediaSessionManager::updateSessionState()
{
LOG(Media, "PlatformMediaSessionManager::updateSessionState() - types: Video(%d), Audio(%d), WebAudio(%d)", count(PlatformMediaSession::Video), count(PlatformMediaSession::Audio), count(PlatformMediaSession::WebAudio));
if (has(PlatformMediaSession::WebAudio))
AudioSession::sharedSession().setPreferredBufferSize(kWebAudioBufferSize);
else if ((has(PlatformMediaSession::Video) || has(PlatformMediaSession::Audio)) && Settings::lowPowerVideoAudioBufferSizeEnabled()) {
size_t bufferSize;
if (m_audioHardwareListener && m_audioHardwareListener->outputDeviceSupportsLowPowerMode())
bufferSize = kLowPowerVideoBufferSize;
else
bufferSize = kWebAudioBufferSize;
AudioSession::sharedSession().setPreferredBufferSize(bufferSize);
}
#if PLATFORM(IOS)
if (!Settings::shouldManageAudioSessionCategory())
return;
bool hasAudioMediaType = false;
bool hasAudibleAudioOrVideoMediaType = anyOfSessions([this, hasAudioMediaType] (PlatformMediaSession& session, size_t) mutable {
auto type = session.mediaType();
if (type == PlatformMediaSession::VideoAudio || type == PlatformMediaSession::Audio || type == PlatformMediaSession::WebAudio)
hasAudioMediaType = true;
return (type == PlatformMediaSession::VideoAudio || type == PlatformMediaSession::Audio) && session.canProduceAudio();
});
if (hasAudibleAudioOrVideoMediaType)
AudioSession::sharedSession().setCategory(AudioSession::MediaPlayback);
else if (hasAudioMediaType)
AudioSession::sharedSession().setCategory(AudioSession::AmbientSound);
else
AudioSession::sharedSession().setCategory(AudioSession::None);
#endif
}
#endif // USE(AUDIO_SESSION)