diff --git a/cmd/camera_srgb_isp.c b/cmd/camera_srgb_isp.c index c6dc58d..7dad1b9 100644 --- a/cmd/camera_srgb_isp.c +++ b/cmd/camera_srgb_isp.c @@ -12,7 +12,7 @@ extern bool check_streaming(); int camera_configure_srgb_isp(camera_t *camera, bool use_half) { - if (device_open_buffer_list(camera->camera, true, camera->width, camera->height, V4L2_PIX_FMT_SRGGB10P, camera->nbufs) < 0) { + if (device_open_buffer_list(camera->camera, true, camera->width, camera->height, V4L2_PIX_FMT_SRGGB10P, 0, camera->nbufs) < 0) { return -1; } @@ -23,15 +23,15 @@ int camera_configure_srgb_isp(camera_t *camera, bool use_half) camera->codec_jpeg = device_open("JPEG", "/dev/video31"); camera->codec_h264 = device_open("H264", "/dev/video11"); - if (device_open_buffer_list(camera->isp.isp_srgb, false, src->fmt_width, src->fmt_height, src->fmt_format, camera->nbufs) < 0 || - device_open_buffer_list(camera->isp.isp_yuuv, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_YUYV, camera->nbufs) < 0) { + if (device_open_buffer_list(camera->isp.isp_srgb, false, src->fmt_width, src->fmt_height, src->fmt_format, src->fmt_bytesperline, camera->nbufs) < 0 || + device_open_buffer_list(camera->isp.isp_yuuv, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_YUYV, 0, camera->nbufs) < 0) { return -1; } if (use_half) { camera->isp.isp_yuuv_low = device_open("ISP-YUUV-LOW", "/dev/video15"); - if (device_open_buffer_list(camera->isp.isp_yuuv_low, true, src->fmt_width / 2, src->fmt_height / 2, V4L2_PIX_FMT_YUYV, camera->nbufs) < 0) { + if (device_open_buffer_list(camera->isp.isp_yuuv_low, true, src->fmt_width / 2, src->fmt_height / 2, V4L2_PIX_FMT_YUYV, 0, camera->nbufs) < 0) { return -1; } @@ -40,13 +40,13 @@ int camera_configure_srgb_isp(camera_t *camera, bool use_half) src = camera->isp.isp_yuuv->capture_list; } - if (device_open_buffer_list(camera->codec_jpeg, false, src->fmt_width, src->fmt_height, src->fmt_format, camera->nbufs) < 0 || - device_open_buffer_list(camera->codec_jpeg, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_JPEG, camera->nbufs) < 0) { + if (device_open_buffer_list(camera->codec_jpeg, false, src->fmt_width, src->fmt_height, src->fmt_format, src->fmt_bytesperline, camera->nbufs) < 0 || + device_open_buffer_list(camera->codec_jpeg, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_JPEG, 0, camera->nbufs) < 0) { return -1; } - if (device_open_buffer_list(camera->codec_h264, false, src->fmt_width, src->fmt_height, src->fmt_format, camera->nbufs) < 0 || - device_open_buffer_list(camera->codec_h264, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_H264, camera->nbufs) < 0) { + if (device_open_buffer_list(camera->codec_h264, false, src->fmt_width, src->fmt_height, src->fmt_format, src->fmt_bytesperline, camera->nbufs) < 0 || + device_open_buffer_list(camera->codec_h264, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_H264, 0, camera->nbufs) < 0) { return -1; } diff --git a/cmd/camera_srgb_legacy_isp.c b/cmd/camera_srgb_legacy_isp.c index dcdfb07..f63e5cd 100644 --- a/cmd/camera_srgb_legacy_isp.c +++ b/cmd/camera_srgb_legacy_isp.c @@ -12,7 +12,7 @@ extern bool check_streaming(); int camera_configure_srgb_legacy_isp(camera_t *camera) { - if (device_open_buffer_list(camera->camera, true, camera->width, camera->height, V4L2_PIX_FMT_SRGGB10P, camera->nbufs) < 0) { + if (device_open_buffer_list(camera->camera, true, camera->width, camera->height, V4L2_PIX_FMT_SRGGB10P, 0, camera->nbufs) < 0) { return -1; } @@ -22,20 +22,20 @@ int camera_configure_srgb_legacy_isp(camera_t *camera) camera->codec_jpeg = device_open("JPEG", "/dev/video31"); camera->codec_h264 = device_open("H264", "/dev/video11"); - if (device_open_buffer_list(camera->legacy_isp.isp, false, src->fmt_width, src->fmt_height, src->fmt_format, camera->nbufs) < 0 || - device_open_buffer_list(camera->legacy_isp.isp, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_YUYV, camera->nbufs) < 0) { + if (device_open_buffer_list(camera->legacy_isp.isp, false, src->fmt_width, src->fmt_height, src->fmt_format, src->fmt_bytesperline, camera->nbufs) < 0 || + device_open_buffer_list(camera->legacy_isp.isp, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_YUYV, 0, camera->nbufs) < 0) { return -1; } src = camera->legacy_isp.isp->capture_list; - if (device_open_buffer_list(camera->codec_jpeg, false, src->fmt_width, src->fmt_height, src->fmt_format, camera->nbufs) < 0 || - device_open_buffer_list(camera->codec_jpeg, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_JPEG, camera->nbufs) < 0) { + if (device_open_buffer_list(camera->codec_jpeg, false, src->fmt_width, src->fmt_height, src->fmt_format, src->fmt_bytesperline, camera->nbufs) < 0 || + device_open_buffer_list(camera->codec_jpeg, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_JPEG, 0, camera->nbufs) < 0) { return -1; } - if (device_open_buffer_list(camera->codec_h264, false, src->fmt_width, src->fmt_height, src->fmt_format, camera->nbufs) < 0 || - device_open_buffer_list(camera->codec_h264, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_H264, camera->nbufs) < 0) { + if (device_open_buffer_list(camera->codec_h264, false, src->fmt_width, src->fmt_height, src->fmt_format, src->fmt_bytesperline, camera->nbufs) < 0 || + device_open_buffer_list(camera->codec_h264, true, src->fmt_width, src->fmt_height, V4L2_PIX_FMT_H264, 0, camera->nbufs) < 0) { return -1; } diff --git a/hw/buffer_list.c b/hw/buffer_list.c index 1a3596b..2c78ffe 100644 --- a/hw/buffer_list.c +++ b/hw/buffer_list.c @@ -64,7 +64,7 @@ void buffer_list_close(buffer_list_t *buf_list) free(buf_list); } -int buffer_list_set_format(buffer_list_t *buf_list, unsigned width, unsigned height, unsigned format) +int buffer_list_set_format(buffer_list_t *buf_list, unsigned width, unsigned height, unsigned format, unsigned bytesperline) { struct v4l2_format *fmt = &buf_list->v4l2_format; @@ -120,9 +120,13 @@ retry: fourcc_to_string(fmt->fmt.pix.pixelformat).buf); } - E_LOG_INFO(buf_list, "Using: %ux%u/%s", - fmt->fmt.pix.width, fmt->fmt.pix.height, fourcc_to_string(fmt->fmt.pix.pixelformat).buf); - + E_LOG_INFO( + buf_list, + "Using: %ux%u/%s, bytesperline=%d", + fmt->fmt.pix.width, fmt->fmt.pix.height, + fourcc_to_string(fmt->fmt.pix.pixelformat).buf, + fmt->fmt.pix.bytesperline + ); buf_list->fmt_width = fmt->fmt.pix.width; buf_list->fmt_height = fmt->fmt.pix.height; diff --git a/hw/buffer_list.h b/hw/buffer_list.h index 63a28ef..f53d5ae 100644 --- a/hw/buffer_list.h +++ b/hw/buffer_list.h @@ -15,7 +15,7 @@ typedef struct buffer_list_s { bool do_dma; bool do_capture; - unsigned fmt_width, fmt_height, fmt_format; + unsigned fmt_width, fmt_height, fmt_format, fmt_bytesperline; bool streaming; int frames; @@ -24,7 +24,7 @@ typedef struct buffer_list_s { buffer_list_t *buffer_list_open(const char *name, struct device_s *dev, unsigned type, bool do_mmap); void buffer_list_close(buffer_list_t *buf_list); -int buffer_list_set_format(buffer_list_t *buffer_list, unsigned width, unsigned height, unsigned format); +int buffer_list_set_format(buffer_list_t *buffer_list, unsigned width, unsigned height, unsigned format, unsigned bytesperline); int buffer_list_request(buffer_list_t *buf_list, int nbufs); int buffer_list_stream(buffer_list_t *buf_list, bool do_on); diff --git a/hw/device.c b/hw/device.c index 3ee2842..63ccc25 100644 --- a/hw/device.c +++ b/hw/device.c @@ -49,7 +49,7 @@ void device_close(device_t *dev) { free(dev); } -int device_open_buffer_list(device_t *dev, bool do_capture, unsigned width, unsigned height, unsigned format, int nbufs) +int device_open_buffer_list(device_t *dev, bool do_capture, unsigned width, unsigned height, unsigned format, unsigned bytesperline, int nbufs) { unsigned type; char name[64]; @@ -101,7 +101,7 @@ int device_open_buffer_list(device_t *dev, bool do_capture, unsigned width, unsi goto error; } - if (buffer_list_set_format(*buf_list, width, height, format) < 0) { + if (buffer_list_set_format(*buf_list, width, height, format, bytesperline) < 0) { goto error; } diff --git a/hw/device.h b/hw/device.h index a86191c..be0563d 100644 --- a/hw/device.h +++ b/hw/device.h @@ -18,7 +18,7 @@ typedef struct device_s { device_t *device_open(const char *name, const char *path); void device_close(device_t *device); -int device_open_buffer_list(device_t *dev, bool do_capture, unsigned width, unsigned height, unsigned format, int nbufs); +int device_open_buffer_list(device_t *dev, bool do_capture, unsigned width, unsigned height, unsigned format, unsigned bytesperline, int nbufs); int device_consume_event(device_t *device); int device_stream(device_t *dev, bool do_on);