diff --git a/device/camera/camera_decoder.c b/device/camera/camera_decoder.c index 8387cba..b4767d1 100644 --- a/device/camera/camera_decoder.c +++ b/device/camera/camera_decoder.c @@ -68,8 +68,8 @@ buffer_list_t *camera_configure_decoder(camera_t *camera, buffer_list_t *src_cap buffer_list_t *decoder_output = device_open_buffer_list_output( camera->decoder, src_capture); - buffer_list_t *decoder_capture = device_open_buffer_list_capture( - camera->decoder, NULL, decoder_output, 0, 0, chosen_format, true); + buffer_list_t *decoder_capture = device_open_buffer_list_capture2( + camera->decoder, NULL, decoder_output, chosen_format, true); if (getenv("CAMERA_DECODER_DEBUG")) { camera_capture_add_callbacks(camera, decoder_capture, decoder_debug_callbacks); diff --git a/device/camera/camera_isp.c b/device/camera/camera_isp.c index d5b695a..3a61422 100644 --- a/device/camera/camera_isp.c +++ b/device/camera/camera_isp.c @@ -16,8 +16,8 @@ buffer_list_t *camera_configure_isp(camera_t *camera, buffer_list_t *src_capture buffer_list_t *isp_output = device_open_buffer_list_output( camera->isp, src_capture); - buffer_list_t *isp_capture = device_open_buffer_list_capture( - camera->isp, "/dev/video14", isp_output, 0, 0, V4L2_PIX_FMT_YUYV, true); + buffer_list_t *isp_capture = device_open_buffer_list_capture2( + camera->isp, "/dev/video14", isp_output, V4L2_PIX_FMT_YUYV, true); camera_capture_add_output(camera, src_capture, isp_output); diff --git a/device/camera/camera_output.c b/device/camera/camera_output.c index fd13fc1..a26fefc 100644 --- a/device/camera/camera_output.c +++ b/device/camera/camera_output.c @@ -104,7 +104,7 @@ int camera_configure_output(camera_t *camera, const char *name, unsigned target_ *device = device_v4l2_open(name, device_info->path); buffer_list_t *output = device_open_buffer_list_output(*device, src_capture); - buffer_list_t *capture = device_open_buffer_list_capture(*device, NULL, output, 0, 0, chosen_format, true); + buffer_list_t *capture = device_open_buffer_list_capture2(*device, NULL, output, chosen_format, true); if (!capture) { return -1; diff --git a/device/camera/camera_rescaller.c b/device/camera/camera_rescaller.c index addc399..d6e04f4 100644 --- a/device/camera/camera_rescaller.c +++ b/device/camera/camera_rescaller.c @@ -40,9 +40,15 @@ buffer_list_t *camera_try_rescaller(camera_t *camera, buffer_list_t *src_capture buffer_list_t *rescaller_output = device_open_buffer_list_output( device, src_capture); + + buffer_format_t target_fmt = { + .width = target_width, + .height = target_height, + .format = target_format + }; + buffer_list_t *rescaller_capture = device_open_buffer_list_capture( - device, NULL, rescaller_output, - target_width, target_height, target_format, true); + device, NULL, rescaller_output, target_fmt, true); if (!rescaller_capture) { device_close(device); diff --git a/device/device.c b/device/device.c index dd3c55f..124fed0 100644 --- a/device/device.c +++ b/device/device.c @@ -125,25 +125,33 @@ buffer_list_t *device_open_buffer_list_output(device_t *dev, buffer_list_t *capt do_mmap); } -buffer_list_t *device_open_buffer_list_capture(device_t *dev, const char *path, buffer_list_t *output_list, unsigned width, unsigned height, unsigned format, bool do_mmap) +buffer_list_t *device_open_buffer_list_capture(device_t *dev, const char *path, buffer_list_t *output_list, buffer_format_t fmt, bool do_mmap) { if (!dev || !output_list) { return NULL; } - buffer_format_t fmt = output_list->fmt; - - if (width) - fmt.width = width; - if (height) - fmt.height = height; - fmt.format = format; - fmt.bytesperline = 0; - fmt.sizeimage = 0; + if (!fmt.width) + fmt.width = output_list->fmt.width; + if (!fmt.height) + fmt.height = output_list->fmt.height; + if (!fmt.nbufs) + fmt.nbufs = output_list->fmt.nbufs; + if (!fmt.interval_us) + fmt.interval_us = output_list->fmt.interval_us; return device_open_buffer_list2(dev, path, true, fmt, do_mmap); } +buffer_list_t *device_open_buffer_list_capture2(device_t *dev, const char *path, buffer_list_t *output_list, unsigned choosen_format, bool do_mmap) +{ + buffer_format_t fmt = { + .format = choosen_format + }; + + return device_open_buffer_list_capture(dev, path, output_list, fmt, do_mmap); +} + int device_set_stream(device_t *dev, bool do_on) { // TODO: support events diff --git a/device/device.h b/device/device.h index b52dee9..1263221 100644 --- a/device/device.h +++ b/device/device.h @@ -61,7 +61,8 @@ void device_close(device_t *dev); buffer_list_t *device_open_buffer_list(device_t *dev, bool do_capture, buffer_format_t fmt, bool do_mmap); buffer_list_t *device_open_buffer_list2(device_t *dev, const char *path, bool do_capture, buffer_format_t fmt, bool do_mmap); buffer_list_t *device_open_buffer_list_output(device_t *dev, buffer_list_t *capture_list); -buffer_list_t *device_open_buffer_list_capture(device_t *dev, const char *path, buffer_list_t *output_list, unsigned width, unsigned height, unsigned format, bool do_mmap); +buffer_list_t *device_open_buffer_list_capture(device_t *dev, const char *path, buffer_list_t *output_list, buffer_format_t fmt, bool do_mmap); +buffer_list_t *device_open_buffer_list_capture2(device_t *dev, const char *path, buffer_list_t *output_list, unsigned choosen_format, bool do_mmap); int device_consume_event(device_t *dev); int device_set_stream(device_t *dev, bool do_on);