airockchip / librga

Apache License 2.0
242 stars 52 forks source link

“v4l2 + librga releasebuffer_handle函数未释放,导致无法正常关闭设备 #65

Closed zhuhwu closed 4 months ago

zhuhwu commented 5 months ago

查看了librga问题库以及FAQ文档,没有找到关于“v4l2 + librga 导致无法正常关闭设备。 最开始使用v4l2是可以正常关闭(closed(fd))文件描述符,只要加入importbuffer_virtualaddr,会导致设备如/dev/video0一直被占用, releasebuffer_handle也无法解除,只能通过重启解决,想请教下如何在程序中解除设备一直占用的问题,部分代码如下所示

void sigint_handler(int signo)
{
    if (signo == SIGINT)
    {
        keeprunning = false;
        printf("received SIGINT\n");
        if (src_handle)
            releasebuffer_handle(src_handle);
        if (dst_handle)
            releasebuffer_handle(dst_handle);

        if (src_buf)
            free(src_buf);
        if (dst_buf)
            free(dst_buf);
        //出错位置
        if (ioctl(fd, VIDIOC_STREAMOFF, &buffer.type) == -1)
        {
            perror("Error stopping stream");
        }
        munmap(buffer_start, buffer.length);
        close(fd);
    }
}

buffer_start = mmap(NULL, buffer.m.planes[0].length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buffer.m.planes[0].m.mem_offset);
memcpy(buffer2mat, buffer_start, buffer.m.planes[0].bytesused);
src_handle = importbuffer_virtualaddr(buffer2mat, src_buf_size);
dst_handle = importbuffer_virtualaddr(dst_buf, dst_buf_size);

librga版本: rga_api version 1.9.1_[5] 目标平台: rk3588