RemoteMediaSourceProxy.cpp [plain text]
#include "config.h"
#include "RemoteMediaSourceProxy.h"
#if ENABLE(GPU_PROCESS) && ENABLE(MEDIA_SOURCE)
#include "GPUConnectionToWebProcess.h"
#include "MediaSourcePrivateRemoteMessages.h"
#include "RemoteMediaPlayerProxy.h"
#include "RemoteMediaSourceProxyMessages.h"
#include "RemoteSourceBufferProxy.h"
#include <WebCore/ContentType.h>
#include <WebCore/NotImplemented.h>
#include <WebCore/SourceBufferPrivate.h>
namespace WebKit {
using namespace WebCore;
RemoteMediaSourceProxy::RemoteMediaSourceProxy(GPUConnectionToWebProcess& connectionToWebProcess, RemoteMediaSourceIdentifier identifier, bool webMParserEnabled, RemoteMediaPlayerProxy& remoteMediaPlayerProxy)
: m_connectionToWebProcess(connectionToWebProcess)
, m_identifier(identifier)
, m_webMParserEnabled(webMParserEnabled)
, m_remoteMediaPlayerProxy(makeWeakPtr(remoteMediaPlayerProxy))
{
m_connectionToWebProcess.messageReceiverMap().addMessageReceiver(Messages::RemoteMediaSourceProxy::messageReceiverName(), m_identifier.toUInt64(), *this);
}
RemoteMediaSourceProxy::~RemoteMediaSourceProxy()
{
m_connectionToWebProcess.messageReceiverMap().removeMessageReceiver(Messages::RemoteMediaSourceProxy::messageReceiverName(), m_identifier.toUInt64());
}
void RemoteMediaSourceProxy::setPrivateAndOpen(Ref<MediaSourcePrivate>&& mediaSourcePrivate)
{
ASSERT(!m_private);
m_private = WTFMove(mediaSourcePrivate);
}
MediaTime RemoteMediaSourceProxy::duration() const
{
return m_duration;
}
std::unique_ptr<PlatformTimeRanges> RemoteMediaSourceProxy::buffered() const
{
ASSERT_NOT_REACHED();
return makeUnique<PlatformTimeRanges>();
}
void RemoteMediaSourceProxy::seekToTime(const MediaTime& time)
{
m_connectionToWebProcess.connection().send(Messages::MediaSourcePrivateRemote::SeekToTime(time), m_identifier);
}
void RemoteMediaSourceProxy::monitorSourceBuffers()
{
notImplemented();
}
#if !RELEASE_LOG_DISABLED
void RemoteMediaSourceProxy::setLogIdentifier(const void*)
{
notImplemented();
}
#endif
void RemoteMediaSourceProxy::failedToCreateRenderer(RendererType)
{
notImplemented();
}
void RemoteMediaSourceProxy::addSourceBuffer(const WebCore::ContentType& contentType, AddSourceBufferCallback&& callback)
{
if (!m_remoteMediaPlayerProxy)
return;
RefPtr<SourceBufferPrivate> sourceBufferPrivate;
MediaSourcePrivate::AddStatus status = m_private->addSourceBuffer(contentType, m_webMParserEnabled, sourceBufferPrivate);
Optional<RemoteSourceBufferIdentifier> remoteSourceIdentifier;
if (status == MediaSourcePrivate::AddStatus::Ok) {
auto identifier = RemoteSourceBufferIdentifier::generate();
auto remoteSourceBufferProxy = RemoteSourceBufferProxy::create(m_connectionToWebProcess, identifier, sourceBufferPrivate.releaseNonNull(), *m_remoteMediaPlayerProxy);
m_sourceBuffers.append(WTFMove(remoteSourceBufferProxy));
remoteSourceIdentifier = identifier;
}
callback(status, remoteSourceIdentifier);
}
void RemoteMediaSourceProxy::durationChanged(const MediaTime& duration)
{
if (m_duration == duration)
return;
m_duration = duration;
if (m_private)
m_private->durationChanged(duration);
}
void RemoteMediaSourceProxy::setReadyState(WebCore::MediaPlayerEnums::ReadyState readyState)
{
if (m_private)
m_private->setReadyState(readyState);
}
void RemoteMediaSourceProxy::setIsSeeking(bool isSeeking)
{
if (m_private)
m_private->setIsSeeking(isSeeking);
}
void RemoteMediaSourceProxy::waitForSeekCompleted()
{
if (m_private)
m_private->waitForSeekCompleted();
}
void RemoteMediaSourceProxy::seekCompleted()
{
if (m_private)
m_private->seekCompleted();
}
void RemoteMediaSourceProxy::setTimeFudgeFactor(const MediaTime& fudgeFactor)
{
if (m_private)
m_private->setTimeFudgeFactor(fudgeFactor);
}
}
#endif // ENABLE(GPU_PROCESS) && ENABLE(MEDIA_SOURCE)