RemoteMediaRecorderManager.cpp [plain text]
#include "config.h"
#include "RemoteMediaRecorderManager.h"
#if PLATFORM(COCOA) && ENABLE(GPU_PROCESS) && ENABLE(MEDIA_STREAM) && HAVE(AVASSETWRITERDELEGATE)
#include "DataReference.h"
#include "Decoder.h"
#include "RemoteMediaRecorder.h"
#include <WebCore/ExceptionData.h>
namespace WebKit {
using namespace WebCore;
RemoteMediaRecorderManager::RemoteMediaRecorderManager(GPUConnectionToWebProcess& gpuConnectionToWebProcess)
: m_gpuConnectionToWebProcess(gpuConnectionToWebProcess)
{
}
RemoteMediaRecorderManager::~RemoteMediaRecorderManager()
{
}
void RemoteMediaRecorderManager::didReceiveRemoteMediaRecorderMessage(IPC::Connection& connection, IPC::Decoder& decoder)
{
if (auto* recorder = m_recorders.get(makeObjectIdentifier<MediaRecorderIdentifierType>(decoder.destinationID())))
recorder->didReceiveMessage(connection, decoder);
}
void RemoteMediaRecorderManager::createRecorder(MediaRecorderIdentifier identifier, bool recordAudio, bool recordVideo, const MediaRecorderPrivateOptions& options, CompletionHandler<void(Optional<ExceptionData>&&, String&&, unsigned, unsigned)>&& completionHandler)
{
ASSERT(!m_recorders.contains(identifier));
auto recorder = RemoteMediaRecorder::create(m_gpuConnectionToWebProcess, identifier, recordAudio, recordVideo, options);
if (!recorder)
return completionHandler(ExceptionData { NotSupportedError, "Unable to create a recorder with the provided stream"_s }, { }, 0, 0);
completionHandler({ }, recorder->mimeType(), recorder->audioBitRate(), recorder->videoBitRate());
m_recorders.add(identifier, WTFMove(recorder));
}
void RemoteMediaRecorderManager::releaseRecorder(MediaRecorderIdentifier identifier)
{
m_recorders.remove(identifier);
}
}
#endif