Now that we have a UniqueFD class, the name FileDescriptor is ambiguous. Rename it to SharedFD. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
131 lines
3.3 KiB
Cheetah
131 lines
3.3 KiB
Cheetah
{#-
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
# Copyright (C) 2020, Google Inc.
|
|
-#}
|
|
{%- import "proxy_functions.tmpl" as proxy_funcs -%}
|
|
|
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
/*
|
|
* Copyright (C) 2020, Google Inc.
|
|
*
|
|
* {{module_name}}_ipa_proxy.h - Image Processing Algorithm proxy for {{module_name}}
|
|
*
|
|
* This file is auto-generated. Do not edit.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <libcamera/ipa/ipa_interface.h>
|
|
#include <libcamera/ipa/{{module_name}}_ipa_interface.h>
|
|
|
|
#include <libcamera/base/thread.h>
|
|
|
|
#include "libcamera/internal/control_serializer.h"
|
|
#include "libcamera/internal/ipa_proxy.h"
|
|
#include "libcamera/internal/ipc_pipe.h"
|
|
#include "libcamera/internal/ipc_pipe_unixsocket.h"
|
|
#include "libcamera/internal/ipc_unixsocket.h"
|
|
|
|
namespace libcamera {
|
|
{%- if has_namespace %}
|
|
{% for ns in namespace %}
|
|
namespace {{ns}} {
|
|
{% endfor %}
|
|
{%- endif %}
|
|
|
|
class {{proxy_name}} : public IPAProxy, public {{interface_name}}, public Object
|
|
{
|
|
public:
|
|
{{proxy_name}}(IPAModule *ipam, bool isolate);
|
|
~{{proxy_name}}();
|
|
|
|
{% for method in interface_main.methods %}
|
|
{{proxy_funcs.func_sig(proxy_name, method, "", false, true)|indent(8, true)}};
|
|
{% endfor %}
|
|
|
|
{%- for method in interface_event.methods %}
|
|
Signal<
|
|
{%- for param in method.parameters -%}
|
|
{{"const " if not param|is_pod}}{{param|name}}{{" &" if not param|is_pod}}
|
|
{{- ", " if not loop.last}}
|
|
{%- endfor -%}
|
|
> {{method.mojom_name}};
|
|
{% endfor %}
|
|
|
|
private:
|
|
void recvMessage(const IPCMessage &data);
|
|
|
|
{% for method in interface_main.methods %}
|
|
{{proxy_funcs.func_sig(proxy_name, method, "Thread", false)|indent(8, true)}};
|
|
{{proxy_funcs.func_sig(proxy_name, method, "IPC", false)|indent(8, true)}};
|
|
{% endfor %}
|
|
{% for method in interface_event.methods %}
|
|
{{proxy_funcs.func_sig(proxy_name, method, "Thread", false)|indent(8, true)}};
|
|
void {{method.mojom_name}}IPC(
|
|
std::vector<uint8_t>::const_iterator data,
|
|
size_t dataSize,
|
|
const std::vector<SharedFD> &fds);
|
|
{% endfor %}
|
|
|
|
/* Helper class to invoke async functions in another thread. */
|
|
class ThreadProxy : public Object
|
|
{
|
|
public:
|
|
ThreadProxy()
|
|
: ipa_(nullptr)
|
|
{
|
|
}
|
|
|
|
void setIPA({{interface_name}} *ipa)
|
|
{
|
|
ipa_ = ipa;
|
|
}
|
|
|
|
void stop()
|
|
{
|
|
ipa_->stop();
|
|
}
|
|
{% for method in interface_main.methods %}
|
|
{%- if method|is_async %}
|
|
{{proxy_funcs.func_sig(proxy_name, method, "", false)|indent(16)}}
|
|
{
|
|
ipa_->{{method.mojom_name}}({{method.parameters|params_comma_sep}});
|
|
}
|
|
{%- elif method.mojom_name == "start" %}
|
|
{{proxy_funcs.func_sig(proxy_name, method, "", false)|indent(16)}}
|
|
{
|
|
{%- if method|method_return_value != "void" %}
|
|
return ipa_->{{method.mojom_name}}({{method.parameters|params_comma_sep}});
|
|
{%- else %}
|
|
ipa_->{{method.mojom_name}}({{method.parameters|params_comma_sep}}
|
|
{{- ", " if method|method_param_outputs|params_comma_sep -}}
|
|
{{- method|method_param_outputs|params_comma_sep}});
|
|
{%- endif %}
|
|
}
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
|
|
private:
|
|
{{interface_name}} *ipa_;
|
|
};
|
|
|
|
Thread thread_;
|
|
ThreadProxy proxy_;
|
|
std::unique_ptr<{{interface_name}}> ipa_;
|
|
|
|
const bool isolate_;
|
|
|
|
std::unique_ptr<IPCPipeUnixSocket> ipc_;
|
|
|
|
ControlSerializer controlSerializer_;
|
|
|
|
{# \todo Move this to IPCPipe #}
|
|
uint32_t seq_;
|
|
};
|
|
|
|
{%- if has_namespace %}
|
|
{% for ns in namespace|reverse %}
|
|
} /* namespace {{ns}} */
|
|
{% endfor %}
|
|
{%- endif %}
|
|
} /* namespace libcamera */
|