RemoteAudioDestinationManager.h [plain text]
#pragma once
#if ENABLE(GPU_PROCESS) && ENABLE(WEB_AUDIO)
#include "Connection.h"
#include "RemoteAudioDestinationIdentifier.h"
#include "SharedMemory.h"
#include <memory>
#include <wtf/CompletionHandler.h>
#include <wtf/HashMap.h>
#if PLATFORM(COCOA)
namespace WebCore {
class CAAudioStreamDescription;
}
namespace WTF {
class MachSendRight;
}
#endif
namespace WebKit {
class GPUConnectionToWebProcess;
class RemoteAudioDestination;
class RemoteAudioDestinationManager : private IPC::MessageReceiver {
WTF_MAKE_FAST_ALLOCATED;
WTF_MAKE_NONCOPYABLE(RemoteAudioDestinationManager);
public:
RemoteAudioDestinationManager(GPUConnectionToWebProcess&);
~RemoteAudioDestinationManager();
void didReceiveSyncMessageFromWebProcess(IPC::Connection& connection, IPC::Decoder& decoder, std::unique_ptr<IPC::Encoder>& encoder) { didReceiveSyncMessage(connection, decoder, encoder); }
void didReceiveMessageFromWebProcess(IPC::Connection& connection, IPC::Decoder& decoder) { didReceiveMessage(connection, decoder); }
private:
void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&);
#if PLATFORM(COCOA)
using CreationCompletionHandler = CompletionHandler<void(RemoteAudioDestinationIdentifier, WTF::MachSendRight)>;
#else
using CreationCompletionHandler = CompletionHandler<void(RemoteAudioDestinationIdentifier)>;
#endif
void createAudioDestination(const String& inputDeviceId, uint32_t numberOfInputChannels, uint32_t numberOfOutputChannels, float sampleRate, float hardwareSampleRate, CreationCompletionHandler&&);
void deleteAudioDestination(RemoteAudioDestinationIdentifier, CompletionHandler<void()>&&);
void startAudioDestination(RemoteAudioDestinationIdentifier, CompletionHandler<void(bool)>&&);
void stopAudioDestination(RemoteAudioDestinationIdentifier, CompletionHandler<void(bool)>&&);
#if PLATFORM(COCOA)
void audioSamplesStorageChanged(RemoteAudioDestinationIdentifier, const SharedMemory::IPCHandle&, const WebCore::CAAudioStreamDescription&, uint64_t numberOfFrames);
#endif
HashMap<RemoteAudioDestinationIdentifier, Ref<RemoteAudioDestination>> m_audioDestinations;
GPUConnectionToWebProcess& m_gpuConnectionToWebProcess;
};
}
#endif // ENABLE(GPU_PROCESS) && ENABLE(WEB_AUDIO)