From 5160bdeb3deffa6fe00874195fc472f33136ac32 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 12 Apr 2022 00:38:27 +0200 Subject: [PATCH] Use legacy isp to rescale outputs --- device/camera/camera.h | 4 ++-- device/camera/camera_decoder.c | 8 ++++++++ device/camera/camera_legacy_isp.c | 10 +++++----- device/camera/camera_libcamera.c | 8 ++++++++ device/camera/camera_v4l2.c | 2 +- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/device/camera/camera.h b/device/camera/camera.h index 00733b3..cad82a7 100644 --- a/device/camera/camera.h +++ b/device/camera/camera.h @@ -49,7 +49,7 @@ typedef struct camera_s { device_t *camera; device_t *decoder; // decode JPEG/H264 into YUVU device_t *isp; - device_t *legacy_isp; + device_t *legacy_isp[2]; device_t *codec_jpeg[2]; // encode YUVU into JPEG device_t *codec_h264[2]; // encode YUVU into H264 }; @@ -76,4 +76,4 @@ int camera_configure_decoder(camera_t *camera, buffer_list_t *src_capture); int camera_configure_v4l2(camera_t *camera); int camera_configure_libcamera(camera_t *camera); int camera_configure_isp(camera_t *camera, buffer_list_t *src, float high_div, float low_div); -int camera_configure_legacy_isp(camera_t *camera, buffer_list_t *src, float div); +int camera_configure_legacy_isp(camera_t *camera, buffer_list_t *src, float div, int res); diff --git a/device/camera/camera_decoder.c b/device/camera/camera_decoder.c index ece333f..f75e7af 100644 --- a/device/camera/camera_decoder.c +++ b/device/camera/camera_decoder.c @@ -26,6 +26,14 @@ int camera_configure_decoder(camera_t *camera, buffer_list_t *src_capture) return -1; } + if (camera->options.low_res_factor > 1) { + float div = camera->options.low_res_factor / camera->options.high_res_factor; + + if (camera_configure_legacy_isp(camera, decoder_capture, div, 1) < 0) { + return -1; + } + } + if (device_set_decoder_start(camera->decoder, true) < 0) { return -1; } diff --git a/device/camera/camera_legacy_isp.c b/device/camera/camera_legacy_isp.c index c13b47d..aa02b55 100644 --- a/device/camera/camera_legacy_isp.c +++ b/device/camera/camera_legacy_isp.c @@ -9,18 +9,18 @@ #include "device/buffer_list.h" #include "http/http.h" -int camera_configure_legacy_isp(camera_t *camera, buffer_list_t *src_capture, float div) +int camera_configure_legacy_isp(camera_t *camera, buffer_list_t *src_capture, float div, int res) { - camera->legacy_isp = device_v4l2_open("ISP", "/dev/video12"); + camera->legacy_isp[res] = device_v4l2_open("ISP", "/dev/video12"); buffer_list_t *isp_output = device_open_buffer_list_output( - camera->legacy_isp, src_capture); + camera->legacy_isp[res], src_capture); buffer_list_t *isp_capture = device_open_buffer_list_capture( - camera->legacy_isp, isp_output, div, V4L2_PIX_FMT_YUYV, true); + camera->legacy_isp[res], isp_output, div, V4L2_PIX_FMT_YUYV, true); camera_capture_add_output(camera, src_capture, isp_output); - if (camera_configure_output(camera, isp_capture, 0) < 0) { + if (camera_configure_output(camera, isp_capture, res) < 0) { return -1; } diff --git a/device/camera/camera_libcamera.c b/device/camera/camera_libcamera.c index 084bfe2..47b63a0 100644 --- a/device/camera/camera_libcamera.c +++ b/device/camera/camera_libcamera.c @@ -31,6 +31,14 @@ int camera_configure_libcamera(camera_t *camera) goto error; } + if (camera->options.low_res_factor > 1) { + float div = camera->options.low_res_factor / camera->options.high_res_factor; + + if (camera_configure_legacy_isp(camera, camera_capture, div, 1) < 0) { + return -1; + } + } + return 0; error: diff --git a/device/camera/camera_v4l2.c b/device/camera/camera_v4l2.c index a11594d..456b68c 100644 --- a/device/camera/camera_v4l2.c +++ b/device/camera/camera_v4l2.c @@ -57,7 +57,7 @@ int camera_configure_v4l2(camera_t *camera) goto error; } #else - if (camera_configure_legacy_isp(camera, camera_capture, camera->options.high_res_factor) < 0) { + if (camera_configure_legacy_isp(camera, camera_capture, camera->options.high_res_factor, 0) < 0) { goto error; } #endif