 |
Flutter Windows Embedder
|
|
Go to the documentation of this file.
30 using FlutterDesktopMessengerScopedLock =
31 std::unique_ptr<FlutterDesktopMessenger,
43 auto* response_handle =
message->response_handle;
44 auto messenger_ptr = std::shared_ptr<FlutterDesktopMessenger>(
47 BinaryReply reply_handler = [messenger_ptr, response_handle](
49 size_t reply_size)
mutable {
51 auto lock = FlutterDesktopMessengerScopedLock(
58 if (!response_handle) {
59 std::cerr <<
"Error: Response can be set only once. Ignoring "
68 response_handle =
nullptr;
75 std::move(reply_handler));
81 : messenger_(core_messenger) {}
89 if (reply ==
nullptr) {
97 auto captures =
new Captures();
98 captures->reply = reply;
100 auto message_reply = [](
const uint8_t* data,
size_t data_size,
102 auto captures =
reinterpret_cast<Captures*
>(
user_data);
103 captures->reply(data, data_size);
107 messenger_, channel.c_str(),
message, message_size, message_reply,
117 handlers_.erase(channel);
123 handlers_[channel] = std::move(handler);
127 ForwardToHandler, message_handler);
135 : reply_handler_(std::move(reply_handler)) {
136 assert(reply_handler_);
140 if (reply_handler_) {
144 <<
"Warning: Failed to respond to a message. This is a memory leak."
150 if (!reply_handler_) {
152 <<
"Error: Only one of Success, Error, or NotImplemented can be "
154 <<
" and it can be called exactly once. Ignoring duplicate result."
159 const uint8_t*
message = data && !data->empty() ? data->data() :
nullptr;
160 size_t message_size = data ? data->size() : 0;
161 reply_handler_(
message, message_size);
162 reply_handler_ =
nullptr;
171 : texture_registrar_ref_(texture_registrar_ref) {}
177 if (
auto pixel_buffer_texture = std::get_if<PixelBufferTexture>(texture)) {
181 [](
size_t width,
size_t height,
186 }
else if (
auto gpu_surface_texture =
187 std::get_if<GpuSurfaceTexture>(texture)) {
194 [](
size_t width,
size_t height,
200 std::cerr <<
"Attempting to register unknown texture variant." << std::endl;
205 texture_registrar_ref_, &info);
218 texture_registrar_ref_,
texture_id,
nullptr,
nullptr);
225 auto captures =
new Captures();
226 captures->callback = std::move(
callback);
230 auto captures =
reinterpret_cast<Captures*
>(opaque);
231 captures->callback();
ReplyManager(BinaryReply reply_handler_)
TextureRegistrarImpl(FlutterDesktopTextureRegistrarRef texture_registrar_ref)
BinaryMessengerImpl(FlutterDesktopMessengerRef core_messenger)
@ kFlutterDesktopGpuSurfaceTexture
void FlutterDesktopMessengerUnlock(FlutterDesktopMessengerRef messenger)
bool FlutterDesktopMessengerSend(FlutterDesktopMessengerRef messenger, const char *channel, const uint8_t *message, const size_t message_size)
bool MarkTextureFrameAvailable(int64_t texture_id) override
virtual ~BinaryMessengerImpl()
FlutterDesktopPixelBufferTextureCallback callback
FlutterDesktopMessengerRef FlutterDesktopMessengerLock(FlutterDesktopMessengerRef messenger)
FlutterDesktopTextureType type
struct FlutterDesktopTextureRegistrar * FlutterDesktopTextureRegistrarRef
FlutterDesktopPixelBufferTextureConfig pixel_buffer_config
std::function< void(const uint8_t *reply, size_t reply_size)> BinaryReply
FlutterDesktopGpuSurfaceType type
const FlutterDesktopPixelBuffer * CopyPixelBuffer(size_t width, size_t height) const
FlutterDesktopGpuSurfaceTextureCallback callback
std::variant< PixelBufferTexture, GpuSurfaceTexture > TextureVariant
virtual ~TextureRegistrarImpl()
void FlutterDesktopTextureRegistrarUnregisterExternalTexture(FlutterDesktopTextureRegistrarRef texture_registrar, int64_t texture_id, void(*callback)(void *user_data), void *user_data)
void UnregisterTexture(int64_t texture_id, std::function< void()> callback) override
FlutterDesktopGpuSurfaceTextureConfig gpu_surface_config
bool FlutterDesktopTextureRegistrarMarkExternalTextureFrameAvailable(FlutterDesktopTextureRegistrarRef texture_registrar, int64_t texture_id)
void SetMessageHandler(const std::string &channel, BinaryMessageHandler handler) override
struct FlutterDesktopMessenger * FlutterDesktopMessengerRef
void FlutterDesktopMessengerSendResponse(FlutterDesktopMessengerRef messenger, const FlutterDesktopMessageResponseHandle *handle, const uint8_t *data, size_t data_length)
bool FlutterDesktopMessengerIsAvailable(FlutterDesktopMessengerRef messenger)
void SendResponseData(const std::vector< uint8_t > *data)
int64_t RegisterTexture(TextureVariant *texture) override
std::function< void(const uint8_t *message, size_t message_size, BinaryReply reply)> BinaryMessageHandler
const FlutterDesktopGpuSurfaceDescriptor * ObtainDescriptor(size_t width, size_t height) const
void FlutterDesktopMessengerRelease(FlutterDesktopMessengerRef messenger)
int64_t FlutterDesktopTextureRegistrarRegisterExternalTexture(FlutterDesktopTextureRegistrarRef texture_registrar, const FlutterDesktopTextureInfo *texture_info)
void FlutterDesktopMessengerSetCallback(FlutterDesktopMessengerRef messenger, const char *channel, FlutterDesktopMessageCallback callback, void *user_data)
@ kFlutterDesktopPixelBufferTexture
void Send(const std::string &channel, const uint8_t *message, size_t message_size, BinaryReply reply) const override
bool FlutterDesktopMessengerSendWithReply(FlutterDesktopMessengerRef messenger, const char *channel, const uint8_t *message, const size_t message_size, const FlutterDesktopBinaryReply reply, void *user_data)
FlutterDesktopBinaryReply callback
FlutterDesktopMessengerRef FlutterDesktopMessengerAddRef(FlutterDesktopMessengerRef messenger)