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 = 3840; camera.height = 2160;
|
||||
//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_YUYV; camera.allow_dma = false;
|
||||
|
||||
if (camera_open(&camera, "/dev/video2") < 0) {
|
||||
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 (camera_configure_decoder(&camera) < 0) {
|
||||
goto error;
|
||||
}
|
||||
#elif 0
|
||||
if (camera_configure_direct(&camera) < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
@ -30,7 +30,11 @@ bool buffer_consumed(buffer_t *buf)
|
||||
}
|
||||
|
||||
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
|
||||
if (buf->buf_list->do_mplanes) {
|
||||
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);
|
||||
E_XIOCTL(buf, buf->buf_list->device->fd, VIDIOC_QBUF, &buf->v4l2_buffer, "Can't queue buffer.");
|
||||
buf->enqueued = true;
|
||||
buf->mmap_reflinks--;
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&buffer_lock);
|
||||
return true;
|
||||
|
||||
|
||||
error:
|
||||
{
|
||||
buffer_t *mmap_source = buf->mmap_source;
|
||||
buf->mmap_source = NULL;
|
||||
buf->mmap_reflinks--;
|
||||
pthread_mutex_unlock(&buffer_lock);
|
||||
|
||||
if (mmap_source) {
|
||||
|
Reference in New Issue
Block a user