Fix reflinks
This commit is contained in:
20
cmd/main.c
20
cmd/main.c
@ -33,15 +33,31 @@ int main(int argc, char *argv[])
|
|||||||
//camera.width = 4656; camera.height = 3496;
|
//camera.width = 4656; camera.height = 3496;
|
||||||
//camera.width = 3840; camera.height = 2160;
|
//camera.width = 3840; camera.height = 2160;
|
||||||
//camera.width = 1280; camera.height = 720;
|
//camera.width = 1280; camera.height = 720;
|
||||||
camera.nbufs = 4;
|
camera.nbufs = 1;
|
||||||
|
|
||||||
|
#if 1
|
||||||
camera.format = V4L2_PIX_FMT_SRGGB10P;
|
camera.format = V4L2_PIX_FMT_SRGGB10P;
|
||||||
//camera.format = V4L2_PIX_FMT_YUYV; camera.allow_dma = false;
|
|
||||||
|
|
||||||
if (camera_open(&camera, "/dev/video2") < 0) {
|
if (camera_open(&camera, "/dev/video2") < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
//camera.width = 1920; camera.height = 1080;
|
||||||
|
camera.width = 1280; camera.height = 720;
|
||||||
|
// camera.format = V4L2_PIX_FMT_YUYV;
|
||||||
|
camera.format = V4L2_PIX_FMT_MJPEG;
|
||||||
|
camera.allow_dma = false;
|
||||||
|
|
||||||
|
if (camera_open(&camera, "/dev/video0") < 0) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
if (camera_configure_decoder(&camera) < 0) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
#elif 0
|
||||||
if (camera_configure_direct(&camera) < 0) {
|
if (camera_configure_direct(&camera) < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,11 @@ bool buffer_consumed(buffer_t *buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&buffer_lock);
|
pthread_mutex_lock(&buffer_lock);
|
||||||
if (!buf->enqueued && buf->mmap_reflinks == 1) {
|
if (buf->mmap_reflinks > 0) {
|
||||||
|
buf->mmap_reflinks--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!buf->enqueued && buf->mmap_reflinks == 0) {
|
||||||
// update used bytes
|
// update used bytes
|
||||||
if (buf->buf_list->do_mplanes) {
|
if (buf->buf_list->do_mplanes) {
|
||||||
buf->v4l2_plane.bytesused = buf->used;
|
buf->v4l2_plane.bytesused = buf->used;
|
||||||
@ -44,17 +48,16 @@ bool buffer_consumed(buffer_t *buf)
|
|||||||
buf->enqueued_time_us = get_monotonic_time_us(NULL, &buf->v4l2_buffer.timestamp);
|
buf->enqueued_time_us = get_monotonic_time_us(NULL, &buf->v4l2_buffer.timestamp);
|
||||||
E_XIOCTL(buf, buf->buf_list->device->fd, VIDIOC_QBUF, &buf->v4l2_buffer, "Can't queue buffer.");
|
E_XIOCTL(buf, buf->buf_list->device->fd, VIDIOC_QBUF, &buf->v4l2_buffer, "Can't queue buffer.");
|
||||||
buf->enqueued = true;
|
buf->enqueued = true;
|
||||||
buf->mmap_reflinks--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_unlock(&buffer_lock);
|
pthread_mutex_unlock(&buffer_lock);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
||||||
error:
|
error:
|
||||||
{
|
{
|
||||||
buffer_t *mmap_source = buf->mmap_source;
|
buffer_t *mmap_source = buf->mmap_source;
|
||||||
buf->mmap_source = NULL;
|
buf->mmap_source = NULL;
|
||||||
|
buf->mmap_reflinks--;
|
||||||
pthread_mutex_unlock(&buffer_lock);
|
pthread_mutex_unlock(&buffer_lock);
|
||||||
|
|
||||||
if (mmap_source) {
|
if (mmap_source) {
|
||||||
|
Reference in New Issue
Block a user