RemoteSampleBufferDisplayLayer.h [plain text]
#pragma once
#if PLATFORM(COCOA) && ENABLE(GPU_PROCESS) && ENABLE(MEDIA_STREAM)
#include "LayerHostingContext.h"
#include "MessageReceiver.h"
#include "MessageSender.h"
#include "SampleBufferDisplayLayerIdentifier.h"
#include <WebCore/SampleBufferDisplayLayer.h>
#include <wtf/MediaTime.h>
namespace WebCore {
class ImageTransferSessionVT;
class LocalSampleBufferDisplayLayer;
class RemoteVideoSample;
};
namespace WebKit {
class RemoteSampleBufferDisplayLayer : public WebCore::SampleBufferDisplayLayer::Client, public IPC::MessageReceiver, private IPC::MessageSender {
WTF_MAKE_FAST_ALLOCATED;
public:
static std::unique_ptr<RemoteSampleBufferDisplayLayer> create(SampleBufferDisplayLayerIdentifier, Ref<IPC::Connection>&&);
~RemoteSampleBufferDisplayLayer();
using LayerInitializationCallback = CompletionHandler<void(Optional<LayerHostingContextID>)>;
void initialize(bool hideRootLayer, WebCore::IntSize, LayerInitializationCallback&&);
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
CGRect bounds() const;
private:
RemoteSampleBufferDisplayLayer(SampleBufferDisplayLayerIdentifier, Ref<IPC::Connection>&&);
void updateDisplayMode(bool hideDisplayLayer, bool hideRootLayer);
void updateAffineTransform(CGAffineTransform);
void updateBoundsAndPosition(CGRect, WebCore::MediaSample::VideoRotation);
void flush();
void flushAndRemoveImage();
void play();
void pause();
void enqueueSample(WebCore::RemoteVideoSample&&);
void clearEnqueuedSamples();
IPC::Connection* messageSenderConnection() const final;
uint64_t messageSenderDestinationID() const final { return m_identifier.toUInt64(); }
void sampleBufferDisplayLayerStatusDidChange(WebCore::SampleBufferDisplayLayer&) final;
SampleBufferDisplayLayerIdentifier m_identifier;
Ref<IPC::Connection> m_connection;
std::unique_ptr<WebCore::ImageTransferSessionVT> m_imageTransferSession;
std::unique_ptr<WebCore::LocalSampleBufferDisplayLayer> m_sampleBufferDisplayLayer;
std::unique_ptr<LayerHostingContext> m_layerHostingContext;
};
}
#endif // PLATFORM(COCOA) && ENABLE(GPU_PROCESS) && ENABLE(MEDIA_STREAM)