libcamera: dynamically add new configurations

device: add `buffer_type_t`
This commit is contained in:
Kamil Trzcinski
2023-02-23 11:15:50 +01:00
parent 21ce78a277
commit 23491cef49
4 changed files with 39 additions and 6 deletions

View File

@ -56,12 +56,35 @@ int libcamera_buffer_list_open(buffer_list_t *buf_list)
return -1;
}
if (buf_list->index >= (int)buf_list->dev->libcamera->configuration->size()) {
auto &configurations = buf_list->dev->libcamera->configuration;
// add new configuration based on a buffer
{
libcamera::StreamRole role = libcamera::StreamRole::StillCapture;
switch(buf_list->fmt.type) {
case BUFFER_TYPE_RAW:
role = libcamera::StreamRole::Raw;
break;
case BUFFER_TYPE_VIDEO:
role = libcamera::StreamRole::VideoRecording;
break;
default:
role = libcamera::StreamRole::StillCapture;
break;
}
auto newConfigurations = buf_list->dev->libcamera->camera->generateConfiguration({ role });
configurations->addConfiguration(newConfigurations->at(0));
}
if (buf_list->index >= (int)configurations->size()) {
LOG_INFO(buf_list, "Not enough configurations.");
return -1;
}
auto &configurations = buf_list->dev->libcamera->configuration;
auto &configuration = configurations->at(buf_list->index);
configuration.size = libcamera::Size(buf_list->fmt.width, buf_list->fmt.height);
if (buf_list->fmt.format) {

View File

@ -101,8 +101,7 @@ int libcamera_device_open(device_t *dev)
LOG_ERROR(dev, "Failed to acquire `%s` camera.", dev->libcamera->camera->id().c_str());
}
dev->libcamera->configuration = dev->libcamera->camera->generateConfiguration(
{ libcamera::StreamRole::Raw, libcamera::StreamRole::StillCapture });
dev->libcamera->configuration = dev->libcamera->camera->generateConfiguration();
dev->libcamera->allocator = std::make_shared<libcamera::FrameBufferAllocator>(
dev->libcamera->camera);