Make device to support composite devices (single output, many captures)
This commit is contained in:
@ -93,7 +93,7 @@ int camera_set_params(camera_t *camera)
|
||||
|
||||
device_set_fps(camera->camera, camera->options.fps);
|
||||
device_set_option_list(camera->camera, camera->options.options);
|
||||
device_set_option_list(camera->isp_srgb, camera->options.isp.options);
|
||||
device_set_option_list(camera->isp, camera->options.isp.options);
|
||||
device_set_option_list(camera->codec_h264, camera->options.h264.options);
|
||||
device_set_option_list(camera->codec_h264_lowres, camera->options.h264.options);
|
||||
device_set_option_list(camera->codec_jpeg, camera->options.jpeg.options);
|
||||
|
@ -55,10 +55,7 @@ typedef struct camera_s {
|
||||
struct {
|
||||
device_t *camera;
|
||||
device_t *decoder; // decode JPEG/H264 into YUVU
|
||||
device_t *legacy_isp; // convert pRAA/YUVU into YUVU
|
||||
device_t *isp_srgb;
|
||||
device_t *isp_yuuv;
|
||||
device_t *isp_yuuv_lowres;
|
||||
device_t *isp;
|
||||
device_t *codec_jpeg; // encode YUVU into JPEG
|
||||
device_t *codec_h264; // encode YUVU into H264
|
||||
device_t *codec_jpeg_lowres; // encode YUVU into JPEG
|
||||
|
@ -15,16 +15,12 @@ int camera_configure_isp(camera_t *camera, buffer_list_t *camera_capture, float
|
||||
{
|
||||
link_t *links = camera->links;
|
||||
|
||||
camera->isp_srgb = device_v4l2_open("ISP", "/dev/video13");
|
||||
camera->isp_yuuv = device_v4l2_open("ISP-YUUV", "/dev/video14");
|
||||
if (camera->isp_yuuv) {
|
||||
camera->isp_yuuv->output_device = camera->isp_srgb;
|
||||
}
|
||||
camera->isp = device_v4l2_open("ISP", "/dev/video13");
|
||||
camera->codec_jpeg = device_v4l2_open("JPEG", "/dev/video31");
|
||||
camera->codec_h264 = device_v4l2_open("H264", "/dev/video11");
|
||||
|
||||
buffer_list_t *isp_output = device_open_buffer_list_output(camera->isp_srgb, camera_capture);
|
||||
buffer_list_t *isp_capture = device_open_buffer_list_capture(camera->isp_yuuv, isp_output, high_div, V4L2_PIX_FMT_YUYV, true);
|
||||
buffer_list_t *isp_output = device_open_buffer_list_output(camera->isp, camera_capture);
|
||||
buffer_list_t *isp_capture = device_open_buffer_list_capture2(camera->isp, "/dev/video14", isp_output, high_div, V4L2_PIX_FMT_YUYV, true);
|
||||
|
||||
*links++ = (link_t){ camera_capture, { isp_output } };
|
||||
|
||||
@ -47,14 +43,10 @@ int camera_configure_isp(camera_t *camera, buffer_list_t *camera_capture, float
|
||||
return 0;
|
||||
}
|
||||
|
||||
camera->isp_yuuv_lowres = device_v4l2_open("ISP-YUUV-LOW", "/dev/video15");
|
||||
if (camera->isp_yuuv_lowres) {
|
||||
camera->isp_yuuv_lowres->output_device = camera->isp_srgb;
|
||||
}
|
||||
camera->codec_jpeg_lowres = device_v4l2_open("JPEG-LOW", "/dev/video31");
|
||||
camera->codec_h264_lowres = device_v4l2_open("H264-LOW", "/dev/video11");
|
||||
|
||||
buffer_list_t *isp_lowres_capture = device_open_buffer_list_capture(camera->isp_yuuv_lowres, isp_output, low_div, V4L2_PIX_FMT_YUYV, true);
|
||||
buffer_list_t *isp_lowres_capture = device_open_buffer_list_capture2(camera->isp, "/dev/video15", isp_output, low_div, V4L2_PIX_FMT_YUYV, true);
|
||||
|
||||
buffer_list_t *jpeg_lowres_output = device_open_buffer_list_output(camera->codec_jpeg_lowres, isp_lowres_capture);
|
||||
buffer_list_t *jpeg_lowres_capture = device_open_buffer_list_capture(camera->codec_jpeg_lowres, jpeg_lowres_output, 1.0, V4L2_PIX_FMT_JPEG, true);
|
||||
|
@ -23,12 +23,12 @@ void write_yuvu(buffer_t *buffer)
|
||||
|
||||
int camera_configure_legacy_isp(camera_t *camera, buffer_list_t *camera_capture, float div)
|
||||
{
|
||||
camera->legacy_isp = device_v4l2_open("ISP", "/dev/video12");
|
||||
camera->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");
|
||||
|
||||
buffer_list_t *isp_output = device_open_buffer_list_output(camera->legacy_isp, camera_capture);
|
||||
buffer_list_t *isp_capture = device_open_buffer_list_capture(camera->legacy_isp, isp_output, div, V4L2_PIX_FMT_YUYV, true);
|
||||
buffer_list_t *isp_output = device_open_buffer_list_output(camera->isp, camera_capture);
|
||||
buffer_list_t *isp_capture = device_open_buffer_list_capture(camera->isp, isp_output, div, V4L2_PIX_FMT_YUYV, true);
|
||||
|
||||
buffer_list_t *jpeg_output = device_open_buffer_list_output(camera->codec_jpeg, isp_capture);
|
||||
buffer_list_t *jpeg_capture = device_open_buffer_list_capture(camera->codec_jpeg, jpeg_output, 1.0, V4L2_PIX_FMT_JPEG, true);
|
||||
|
Reference in New Issue
Block a user