Add device_hw_t
and device_v4l2_open
This commit is contained in:
parent
13528eff1d
commit
76f35f37c8
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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
9
device/v4l2/device.c
Normal 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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user