/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2019, Google Inc.
 *
 * camera_ops.h - Android Camera HAL Operations
 */

#include "camera_ops.h"

#include <system/camera_metadata.h>

#include "camera_device.h"

using namespace libcamera;

/*
 * Translation layer between the Android Camera HAL device operations and the
 * CameraDevice.
 */

static int hal_dev_initialize(const struct camera3_device *dev,
			      const camera3_callback_ops_t *callback_ops)
{
	if (!dev)
		return -EINVAL;

	CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
	camera->setCallbacks(callback_ops);

	return 0;
}

static int hal_dev_configure_streams(const struct camera3_device *dev,
				     camera3_stream_configuration_t *stream_list)
{
	if (!dev)
		return -EINVAL;

	CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
	return camera->configureStreams(stream_list);
}

static const camera_metadata_t *
hal_dev_construct_default_request_settings(const struct camera3_device *dev,
					   int type)
{
	if (!dev)
		return nullptr;

	CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
	return camera->constructDefaultRequestSettings(type);
}

static int hal_dev_process_capture_request(const struct camera3_device *dev,
					   camera3_capture_request_t *request)
{
	if (!dev)
		return -EINVAL;

	CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
	return camera->processCaptureRequest(request);
}

static void hal_dev_dump([[maybe_unused]] const struct camera3_device *dev,
			 [[maybe_unused]] int fd)
{
}

static int hal_dev_flush(const struct camera3_device *dev)
{
	if (!dev)
		return -EINVAL;

	CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
	camera->flush();

	return 0;
}

int hal_dev_close(hw_device_t *hw_device)
{
	if (!hw_device)
		return -EINVAL;

	camera3_device_t *dev = reinterpret_cast<camera3_device_t *>(hw_device);
	CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);

	camera->close();

	return 0;
}

camera3_device_ops hal_dev_ops = {
	.initialize = hal_dev_initialize,
	.configure_streams = hal_dev_configure_streams,
	.register_stream_buffers = nullptr,
	.construct_default_request_settings = hal_dev_construct_default_request_settings,
	.process_capture_request = hal_dev_process_capture_request,
	.get_metadata_vendor_tag_ops = nullptr,
	.dump = hal_dev_dump,
	.flush = hal_dev_flush,
	.reserved = { nullptr },
};
pstreaming'>pfc/rkisp1-free-run-upstreaming</option>
<option value='pfc/rkisp1-free-run-v2'>pfc/rkisp1-free-run-v2</option>
<option value='rcar-gen4'>rcar-gen4</option>
<option value='yaml-emitter'>yaml-emitter</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>Jacopo Mondi's clone of libcamera</td><td class='sub right'>git repository hosting on libcamera.org</td></tr></table>
<table class='tabs'><tr><td>
<a href='/libcamera/jmondi/libcamera.git/?h=multicontext/rpi/v3'>summary</a><a href='/libcamera/jmondi/libcamera.git/refs/?h=multicontext/rpi/v3&amp;id=364ae3b78d3f0fc18c9bf1c2c3ee9fee1d80e68a'>refs</a><a href='/libcamera/jmondi/libcamera.git/log/utils/gen-ipa-priv-key.sh?h=multicontext/rpi/v3'>log</a><a class='active' href='/libcamera/jmondi/libcamera.git/tree/utils/gen-ipa-priv-key.sh?h=multicontext/rpi/v3&amp;id=364ae3b78d3f0fc18c9bf1c2c3ee9fee1d80e68a'>tree</a><a href='/libcamera/jmondi/libcamera.git/commit/utils/gen-ipa-priv-key.sh?h=multicontext/rpi/v3&amp;id=364ae3b78d3f0fc18c9bf1c2c3ee9fee1d80e68a'>commit</a><a href='/libcamera/jmondi/libcamera.git/diff/utils/gen-ipa-priv-key.sh?h=multicontext/rpi/v3&amp;id=364ae3b78d3f0fc18c9bf1c2c3ee9fee1d80e68a'>diff</a></td><td class='form'><form class='right' method='get' action='/libcamera/jmondi/libcamera.git/log/utils/gen-ipa-priv-key.sh'>
<input type='hidden' name='h' value='multicontext/rpi/v3'/><input type='hidden' name='id' value='364ae3b78d3f0fc18c9bf1c2c3ee9fee1d80e68a'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/libcamera/jmondi/libcamera.git/tree/?h=multicontext/rpi/v3&amp;id=364ae3b78d3f0fc18c9bf1c2c3ee9fee1d80e68a'>root</a>/<a href='/libcamera/jmondi/libcamera.git/tree/utils?h=multicontext/rpi/v3&amp;id=364ae3b78d3f0fc18c9bf1c2c3ee9fee1d80e68a'>utils</a>/<a href='/libcamera/jmondi/libcamera.git/tree/utils/gen-ipa-priv-key.sh?h=multicontext/rpi/v3&amp;id=364ae3b78d3f0fc18c9bf1c2c3ee9fee1d80e68a'>gen-ipa-priv-key.sh</a></div><div class='content'>blob: 919751f25b714e8a39c1969784786afa72ec3aeb (<a href='/libcamera/jmondi/libcamera.git/plain/utils/gen-ipa-priv-key.sh?h=multicontext/rpi/v3&amp;id=364ae3b78d3f0fc18c9bf1c2c3ee9fee1d80e68a'>plain</a>)
<table summary='blob content' class='blob'>
<tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a>
<a id='n2' href='#n2'>2</a>
<a id='n3' href='#n3'>3</a>
<a id='n4' href='#n4'>4</a>
<a id='n5' href='#n5'>5</a>
<a id='n6' href='#n6'>6</a>
<a id='n7' href='#n7'>7</a>
<a id='n8' href='#n8'>8</a>
<a id='n9' href='#n9'>9</a>
<a id='n10' href='#n10'>10</a>
<a id='n11' href='#n11'>11</a>
</pre></td>
<td class='lines'><pre><code><span class="hl slc">#!/bin/sh</span>
<span class="hl slc"># SPDX-License-Identifier: GPL-2.0-or-later</span>
<span class="hl slc"># Copyright (C) 2020, Google Inc.</span>
<span class="hl slc">#</span>
<span class="hl slc"># Author: Laurent Pinchart &lt;laurent.pinchart&#64;ideasonboard.com&gt;</span>
<span class="hl slc">#</span>
<span class="hl slc"># gen-ipa-priv-key.sh - Generate an RSA private key to sign IPA modules</span>

key<span class="hl opt">=</span><span class="hl str">&quot;</span><span class="hl ipl">$1</span><span class="hl str">&quot;</span>

openssl genpkey <span class="hl kwb">-algorithm</span> RSA <span class="hl kwb">-out</span> <span class="hl str">&quot;</span><span class="hl ipl">${key}</span><span class="hl str">&quot;</span> <span class="hl kwb">-pkeyopt</span> rsa_keygen_bits<span class="hl opt">:</span><span class="hl num">2048</span>
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.1</a> (<a href='https://git-scm.com/'>git 2.18.0</a>) at 2025-02-26 12:23:30 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>