运行应用程序时报错“Resource temporarily unavailable”。根据这个错误可以在网上找到很多的原因及其解决方法,但我发现这些解决方法都不适用于我的情况。最后一点点排查发现我出现这个问题的原因在于没有在函数末尾添加return!
具体代码如下,
if (FD_ISSET(fd, fdsv))
{
do{
CLEAR(buf0);
CLEAR(planes);
buf0.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
buf0.memory = V4L2_MEMORY_USERPTR;
buf0.m.planes = &planes;
buf0.length = 1;
ret = ioctl(fd, VIDIOC_DQBUF, &buf0);
if (ret < 0)
{
if (errno == EAGAIN)
{
break;
}
LOG_ERROR("V4L2: uUnable to dqueue buffer: %s (%d).\n",
strerror(errno), errno);
return ret;
}
LOG_DEBUG("HERE1");
// push_drm_buffer_to_list(read_buffer_list, buffer_array[buf0.index]);
} while (ret == 0);
}
return 0;
}
这是函数的末尾部分,最初没有return 0这句话,就会报“Resource temporarily unavailable”错误,添加了return 0后,问题解决。