From 2c17a1c838f53cb00ecd72d619abca2b406e84e3 Mon Sep 17 00:00:00 2001 From: Ezequiel Garcia <ezequiel@collabora.com> Date: Thu, 21 May 2020 15:48:06 -0300 Subject: [PATCH] h264: Apply offset for proper CAPTURE mmap There's an offset that applies to CAPTURE queue, and apparently is obtained via QUERYBUF. Instead of doing the QUERYBUF dance, just apply the offset. Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> --- libv4l-rockchip_v2/libvepu/h264e/h264e.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libv4l-rockchip_v2/libvepu/h264e/h264e.c b/libv4l-rockchip_v2/libvepu/h264e/h264e.c index 3dbbf89..d321da8 100644 --- a/libv4l-rockchip_v2/libvepu/h264e/h264e.c +++ b/libv4l-rockchip_v2/libvepu/h264e/h264e.c @@ -660,18 +660,24 @@ static int h264e_assemble_bitstream(struct rk_venc *ictx, int fd, return -1; if (buffer->m.planes[0].bytesused + ctx->stream_header_size > - buffer->m.planes[0].length) + buffer->m.planes[0].length) { + fprintf(stderr, "Not enough space for H264 header\n"); return -1; + } buffer->length = 1; +#define DST_QUEUE_OFF_BASE (1 << 30) buf = mmap(NULL, buffer->m.planes[0].length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, - buffer->m.planes[0].m.mem_offset); + buffer->m.planes[0].m.mem_offset + DST_QUEUE_OFF_BASE); - if (buf == MAP_FAILED) + if (buf == MAP_FAILED) { + fprintf(stderr, "mmap failure! mem_offset %x\n", + buffer->m.planes[0].m.mem_offset + DST_QUEUE_OFF_BASE); return -1; + } memmove((uint8_t *)buf + ctx->stream_header_size, buf, buffer->m.planes[0].bytesused); -- GitLab