diff --git a/cmd/camera_direct.c b/cmd/camera_direct.c index eed1712..d6c8eb0 100644 --- a/cmd/camera_direct.c +++ b/cmd/camera_direct.c @@ -17,9 +17,9 @@ 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_jpeg->allow_dma = false; + camera->codec_jpeg->buf_sink = true; camera->codec_h264 = device_open("H264", "/dev/video11"); - camera->codec_h264->allow_dma = false; + camera->codec_h264->buf_sink = true; 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) { diff --git a/cmd/camera_isp.c b/cmd/camera_isp.c index 0fa7311..810e759 100644 --- a/cmd/camera_isp.c +++ b/cmd/camera_isp.c @@ -22,7 +22,9 @@ int camera_configure_isp(camera_t *camera, float high_div, float low_div) camera->isp.isp_yuuv = device_open("ISP-YUUV", "/dev/video14"); camera->isp.isp_yuuv->output_device = camera->isp.isp_srgb; camera->codec_jpeg = device_open("JPEG", "/dev/video31"); + camera->codec_jpeg->buf_sink = true; camera->codec_h264 = device_open("H264", "/dev/video11"); + camera->codec_h264->buf_sink = true; 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 / high_div, src->fmt_height / high_div, V4L2_PIX_FMT_YUYV, 0, camera->nbufs) < 0) { diff --git a/cmd/camera_legacy_isp.c b/cmd/camera_legacy_isp.c index 86d6c2a..40dad01 100644 --- a/cmd/camera_legacy_isp.c +++ b/cmd/camera_legacy_isp.c @@ -30,7 +30,9 @@ int camera_configure_legacy_isp(camera_t *camera, float div) camera->legacy_isp.isp = device_open("ISP", "/dev/video12"); camera->codec_jpeg = device_open("JPEG", "/dev/video31"); + camera->codec_jpeg->buf_sink = true; camera->codec_h264 = device_open("H264", "/dev/video11"); + camera->codec_h264->buf_sink = true; 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 / div, src->fmt_height / div, V4L2_PIX_FMT_YUYV, 0, camera->nbufs) < 0) { diff --git a/hw/device.c b/hw/device.c index 63ccc25..6b68944 100644 --- a/hw/device.c +++ b/hw/device.c @@ -62,7 +62,12 @@ int device_open_buffer_list(device_t *dev, bool do_capture, unsigned width, unsi if (do_capture) { buf_list = &dev->capture_list; - do_mmap = true; + + if (dev->buf_sink) { + do_mmap = true; + } else { + do_mmap = dev->allow_dma; + } if (dev->capture_list) { E_LOG_ERROR(dev, "The capture_list is already created."); diff --git a/hw/device.h b/hw/device.h index c7f66a8..60cdea5 100644 --- a/hw/device.h +++ b/hw/device.h @@ -8,6 +8,7 @@ typedef struct device_s { int fd; struct v4l2_capability v4l2_cap; bool allow_dma; + bool buf_sink; struct buffer_list_s *capture_list; struct buffer_list_s *output_list;