Improve decoding pipeline
This commit is contained in:
parent
6d3f992034
commit
a387f4d70c
@ -15,8 +15,11 @@ int camera_configure_decoder(camera_t *camera)
|
|||||||
|
|
||||||
camera->decoder = device_open("DECODER", "/dev/video10");
|
camera->decoder = device_open("DECODER", "/dev/video10");
|
||||||
|
|
||||||
if (device_open_buffer_list_output(camera->decoder, src) < 0 ||
|
if (device_open_buffer_list_output(camera->decoder, src) < 0) {
|
||||||
device_open_buffer_list_capture(camera->decoder, src, 1.0, V4L2_PIX_FMT_YUV420, true) < 0) {
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (device_open_buffer_list_capture(camera->decoder, NULL, 1.0, 0, true) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,3 +225,37 @@ int buffer_list_stream(buffer_list_t *buf_list, bool do_on)
|
|||||||
error:
|
error:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int buffer_list_refresh_states(buffer_list_t *buf_list)
|
||||||
|
{
|
||||||
|
if (!buf_list) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct v4l2_buffer v4l2_buf = {0};
|
||||||
|
struct v4l2_plane v4l2_plane = {0};
|
||||||
|
|
||||||
|
v4l2_buf.type = buf_list->type;
|
||||||
|
|
||||||
|
if (buf_list->do_mplanes) {
|
||||||
|
v4l2_buf.length = 1;
|
||||||
|
v4l2_buf.m.planes = &v4l2_plane;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buf_list->do_mmap) {
|
||||||
|
v4l2_buf.memory = V4L2_MEMORY_MMAP;
|
||||||
|
} else {
|
||||||
|
v4l2_buf.memory = V4L2_MEMORY_DMABUF;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < buf_list->nbufs; i++) {
|
||||||
|
v4l2_buf.index = i;
|
||||||
|
|
||||||
|
E_XIOCTL(buf_list, buf_list->device->fd, VIDIOC_QUERYBUF, &v4l2_buf, "Can't query buffer (flags=%08x)", i);
|
||||||
|
E_LOG_INFO(buf_list, "Buffer: %d, Flags: %08x. Offset: %d", i, v4l2_buf.flags,
|
||||||
|
buf_list->do_mplanes ? v4l2_plane.m.mem_offset : v4l2_buf.m.offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
error:
|
||||||
|
return -1;
|
||||||
|
}
|
@ -34,3 +34,4 @@ buffer_t *buffer_list_dequeue(buffer_list_t *buf_list);
|
|||||||
int buffer_list_count_enqueued(buffer_list_t *buf_list);
|
int buffer_list_count_enqueued(buffer_list_t *buf_list);
|
||||||
|
|
||||||
int buffer_list_enqueue(buffer_list_t *buf_list, buffer_t *dma_buf);
|
int buffer_list_enqueue(buffer_list_t *buf_list, buffer_t *dma_buf);
|
||||||
|
int buffer_list_refresh_states(buffer_list_t *buf_list);
|
||||||
|
@ -183,13 +183,14 @@ buffer_t *buffer_list_dequeue(buffer_list_t *buf_list)
|
|||||||
buf->mmap_reflinks = 1;
|
buf->mmap_reflinks = 1;
|
||||||
uint64_t enqueued_time_us = get_monotonic_time_us(NULL, NULL) - buf->enqueued_time_us;
|
uint64_t enqueued_time_us = get_monotonic_time_us(NULL, NULL) - buf->enqueued_time_us;
|
||||||
|
|
||||||
E_LOG_DEBUG(buf_list, "Grabbed mmap buffer=%u, bytes=%d, used=%d, frame=%d, linked=%s, enqueued_time_us=%lluus",
|
E_LOG_DEBUG(buf_list, "Grabbed mmap buffer=%u, bytes=%d, used=%d, frame=%d, linked=%s, enqueued_time_us=%lluus, flags=%08x",
|
||||||
buf->index,
|
buf->index,
|
||||||
buf->length,
|
buf->length,
|
||||||
buf->used,
|
buf->used,
|
||||||
buf_list->frames,
|
buf_list->frames,
|
||||||
buf->mmap_source ? buf->mmap_source->name : NULL,
|
buf->mmap_source ? buf->mmap_source->name : NULL,
|
||||||
enqueued_time_us);
|
enqueued_time_us,
|
||||||
|
buf->v4l2_buffer.flags);
|
||||||
|
|
||||||
if (buf->mmap_source) {
|
if (buf->mmap_source) {
|
||||||
buf->mmap_source->used = 0;
|
buf->mmap_source->used = 0;
|
||||||
|
@ -138,6 +138,13 @@ int device_open_buffer_list_output(device_t *dev, buffer_list_t *capture_list)
|
|||||||
|
|
||||||
int device_open_buffer_list_capture(device_t *dev, buffer_list_t *output_list, float div, unsigned format, bool do_mmap)
|
int device_open_buffer_list_capture(device_t *dev, buffer_list_t *output_list, float div, unsigned format, bool do_mmap)
|
||||||
{
|
{
|
||||||
|
if (!output_list) {
|
||||||
|
output_list = dev->output_list;
|
||||||
|
}
|
||||||
|
if (!output_list) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return device_open_buffer_list(dev, true,
|
return device_open_buffer_list(dev, true,
|
||||||
output_list->fmt_width / div, output_list->fmt_height / div,
|
output_list->fmt_width / div, output_list->fmt_height / div,
|
||||||
format, 0, output_list->nbufs, do_mmap);
|
format, 0, output_list->nbufs, do_mmap);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user