 |
Flutter Linux Embedder
|
|
Go to the documentation of this file.
30 using FlutterDesktopMessengerScopedLock =
31 std::unique_ptr<FlutterDesktopMessenger,
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) {}
86 const uint8_t* message,
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)) {
186 }
else if (
auto gpu_surface_texture =
187 std::get_if<GpuSurfaceTexture>(texture)) {
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)
FLUTTER_EXPORT FlutterDesktopMessengerRef FlutterDesktopMessengerAddRef(FlutterDesktopMessengerRef messenger)
FLUTTER_EXPORT void FlutterDesktopMessengerUnlock(FlutterDesktopMessengerRef messenger)
BinaryMessengerImpl(FlutterDesktopMessengerRef core_messenger)
@ kFlutterDesktopGpuSurfaceTexture
FLUTTER_EXPORT int64_t FlutterDesktopTextureRegistrarRegisterExternalTexture(FlutterDesktopTextureRegistrarRef texture_registrar, const FlutterDesktopTextureInfo *info)
bool MarkTextureFrameAvailable(int64_t texture_id) override
FLUTTER_EXPORT bool FlutterDesktopMessengerSendWithReply(FlutterDesktopMessengerRef messenger, const char *channel, const uint8_t *message, const size_t message_size, const FlutterDesktopBinaryReply reply, void *user_data)
FlKeyEvent uint64_t FlKeyResponderAsyncCallback gpointer user_data
virtual ~BinaryMessengerImpl()
FlutterDesktopPixelBufferTextureCallback callback
FlutterDesktopTextureType type
FLUTTER_EXPORT void FlutterDesktopMessengerSetCallback(FlutterDesktopMessengerRef messenger, const char *channel, FlutterDesktopMessageCallback callback, void *user_data)
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
FLUTTER_EXPORT void FlutterDesktopMessengerRelease(FlutterDesktopMessengerRef messenger)
FlutterDesktopGpuSurfaceTextureCallback callback
std::variant< PixelBufferTexture, GpuSurfaceTexture > TextureVariant
FLUTTER_EXPORT void FlutterDesktopMessengerSendResponse(FlutterDesktopMessengerRef messenger, const FlutterDesktopMessageResponseHandle *handle, const uint8_t *data, size_t data_length)
virtual ~TextureRegistrarImpl()
void UnregisterTexture(int64_t texture_id, std::function< void()> callback) override
FlutterDesktopGpuSurfaceTextureConfig gpu_surface_config
FLUTTER_EXPORT FlutterDesktopMessengerRef FlutterDesktopMessengerLock(FlutterDesktopMessengerRef messenger)
void SetMessageHandler(const std::string &channel, BinaryMessageHandler handler) override
FLUTTER_EXPORT bool FlutterDesktopMessengerSend(FlutterDesktopMessengerRef messenger, const char *channel, const uint8_t *message, const size_t message_size)
FLUTTER_EXPORT void FlutterDesktopTextureRegistrarUnregisterExternalTexture(FlutterDesktopTextureRegistrarRef texture_registrar, int64_t texture_id, void(*callback)(void *user_data), void *user_data)
struct FlutterDesktopMessenger * FlutterDesktopMessengerRef
void SendResponseData(const std::vector< uint8_t > *data)
FLUTTER_EXPORT bool FlutterDesktopTextureRegistrarMarkExternalTextureFrameAvailable(FlutterDesktopTextureRegistrarRef texture_registrar, int64_t texture_id)
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
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
const FlutterDesktopMessageResponseHandle * response_handle
FLUTTER_EXPORT bool FlutterDesktopMessengerIsAvailable(FlutterDesktopMessengerRef messenger)
const uint8_t uint32_t * width
@ kFlutterDesktopPixelBufferTexture
void Send(const std::string &channel, const uint8_t *message, size_t message_size, BinaryReply reply) const override