Add device_hw_t and device_v4l2_open

This commit is contained in:
Kamil Trzcinski 2022-04-10 09:54:02 +02:00
parent 13528eff1d
commit 76f35f37c8
8 changed files with 35 additions and 18 deletions

View File

@ -39,7 +39,7 @@ camera_t *camera_open(camera_options_t *options)
camera->name = "CAMERA";
camera->options = *options;
camera->camera = device_open(camera->name, camera->options.path);
camera->camera = device_v4l2_open(camera->name, camera->options.path);
if (!camera->camera) {
goto error;
}

View File

@ -14,7 +14,7 @@ int camera_configure_decoder(camera_t *camera)
buffer_list_t *src = camera_src;
device_video_force_key(camera->camera);
camera->decoder = device_open("DECODER", "/dev/video10");
camera->decoder = device_v4l2_open("DECODER", "/dev/video10");
if (device_open_buffer_list_output(camera->decoder, src) < 0) {
return -1;
@ -31,7 +31,7 @@ int camera_configure_decoder(camera_t *camera)
src = camera->decoder->capture_list;
if (camera_src->fmt_format != V4L2_PIX_FMT_MJPEG && camera_src->fmt_format != V4L2_PIX_FMT_JPEG) {
camera->codec_jpeg = device_open("JPEG", "/dev/video31");
camera->codec_jpeg = device_v4l2_open("JPEG", "/dev/video31");
if (device_open_buffer_list_output(camera->codec_jpeg, src) < 0 ||
device_open_buffer_list_capture(camera->codec_jpeg, src, 1.0, V4L2_PIX_FMT_JPEG, true) < 0) {
@ -40,7 +40,7 @@ int camera_configure_decoder(camera_t *camera)
}
if (camera_src->fmt_format != V4L2_PIX_FMT_H264) {
camera->codec_h264 = device_open("H264", "/dev/video11");
camera->codec_h264 = device_v4l2_open("H264", "/dev/video11");
if (device_open_buffer_list_output(camera->codec_h264, src) < 0 ||
device_open_buffer_list_capture(camera->codec_h264, src, 1.0, V4L2_PIX_FMT_H264, true) < 0) {

View File

@ -12,8 +12,8 @@ int camera_configure_direct(camera_t *camera)
{
buffer_list_t *src = camera->camera->capture_list;
camera->codec_jpeg = device_open("JPEG", "/dev/video31");
camera->codec_h264 = device_open("H264", "/dev/video11");
camera->codec_jpeg = device_v4l2_open("JPEG", "/dev/video31");
camera->codec_h264 = device_v4l2_open("H264", "/dev/video11");
if (device_open_buffer_list_output(camera->codec_jpeg, src) < 0 ||
device_open_buffer_list_capture(camera->codec_jpeg, src, 1.0, V4L2_PIX_FMT_JPEG, true) < 0) {

View File

@ -12,10 +12,10 @@ void write_yuvu(buffer_t *buffer);
int camera_configure_isp(camera_t *camera, float high_div, float low_div)
{
camera->isp_srgb = device_open("ISP", "/dev/video13");
camera->isp_yuuv = device_open("ISP-YUUV", "/dev/video14");
camera->codec_jpeg = device_open("JPEG", "/dev/video31");
camera->codec_h264 = device_open("H264", "/dev/video11");
camera->isp_srgb = device_v4l2_open("ISP", "/dev/video13");
camera->isp_yuuv = device_v4l2_open("ISP-YUUV", "/dev/video14");
camera->codec_jpeg = device_v4l2_open("JPEG", "/dev/video31");
camera->codec_h264 = device_v4l2_open("H264", "/dev/video11");
if (device_open_buffer_list_output(camera->isp_srgb, camera->camera->capture_list) < 0 ||
device_open_buffer_list_capture(camera->isp_yuuv, camera->camera->capture_list, high_div, V4L2_PIX_FMT_YUYV, true) < 0) {
@ -48,9 +48,9 @@ int camera_configure_isp(camera_t *camera, float high_div, float low_div)
return 0;
}
camera->isp_yuuv_lowres = device_open("ISP-YUUV-LOW", "/dev/video15");
camera->codec_jpeg_lowres = device_open("JPEG-LOW", "/dev/video31");
camera->codec_h264_lowres = device_open("H264-LOW", "/dev/video11");
camera->isp_yuuv_lowres = device_v4l2_open("ISP-YUUV-LOW", "/dev/video15");
camera->codec_jpeg_lowres = device_v4l2_open("JPEG-LOW", "/dev/video31");
camera->codec_h264_lowres = device_v4l2_open("H264-LOW", "/dev/video11");
if (device_open_buffer_list_capture(camera->isp_yuuv_lowres, camera->camera->capture_list, low_div, V4L2_PIX_FMT_YUYV, true) < 0) {
return -1;

View File

@ -24,9 +24,9 @@ int camera_configure_legacy_isp(camera_t *camera, float div)
{
buffer_list_t *src = camera->camera->capture_list;
camera->legacy_isp = device_open("ISP", "/dev/video12");
camera->codec_jpeg = device_open("JPEG", "/dev/video31");
camera->codec_h264 = device_open("H264", "/dev/video11");
camera->legacy_isp = device_v4l2_open("ISP", "/dev/video12");
camera->codec_jpeg = device_v4l2_open("JPEG", "/dev/video31");
camera->codec_h264 = device_v4l2_open("H264", "/dev/video11");
if (device_open_buffer_list_output(camera->legacy_isp, src) < 0 ||
device_open_buffer_list_capture(camera->legacy_isp, src, div, V4L2_PIX_FMT_YUYV, true) < 0) {

View File

@ -3,10 +3,11 @@
#include "device/hw/buffer_list.h"
#include "device/hw/v4l2.h"
device_t *device_open(const char *name, const char *path) {
device_t *device_open(const char *name, const char *path, device_hw_t *hw) {
device_t *dev = calloc(1, sizeof(device_t));
dev->name = strdup(name);
dev->path = strdup(path);
dev->hw = hw;
dev->fd = open(path, O_RDWR|O_NONBLOCK);
dev->subdev_fd = -1;
dev->allow_dma = true;

View File

@ -7,6 +7,11 @@
typedef struct buffer_list_s buffer_list_t;
typedef struct device_s device_t;
typedef struct device_hw_s {
int (*device_hw_open)(device_t *device);
int (*device_hw_close)(device_t *device);
} device_hw_t;
typedef struct device_s {
char *name;
char *path;
@ -15,6 +20,7 @@ typedef struct device_s {
struct v4l2_capability v4l2_cap;
bool allow_dma;
device_hw_t *hw;
buffer_list_t *capture_list;
buffer_list_t *output_list;
@ -23,7 +29,8 @@ typedef struct device_s {
bool decoder_started;
} device_t;
device_t *device_open(const char *name, const char *path);
device_t *device_open(const char *name, const char *path, device_hw_t *hw);
device_t *device_v4l2_open(const char *name, const char *path);
int device_open_media_device(device_t *dev);
int device_open_v4l2_subdev(device_t *dev, int subdev);
void device_close(device_t *device);

9
device/v4l2/device.c Normal file
View File

@ -0,0 +1,9 @@
#include "device/hw/v4l2.h"
#include "device/hw/device.h"
extern device_hw_t device_hw_v4l2;
device_t *device_v4l2_open(const char *name, const char *path)
{
return device_open(name, path, &device_hw_v4l2);
}