On 08/03/2017 01:53 AM, Mark Thompson wrote:
agree with all your previous comments up to here (will fix).
+ case V4L2_BUF_TYPE_VIDEO_OUTPUT:
+ case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
+ pfd.events = POLLOUT | POLLERR | POLLWRNORM;
+ break;
+ default:
+ pfd.events = POLLIN | POLLERR | POLLRDNORM;
What hits this default case?
nothing, it can't happen will remove.
+ }
+
+ ret = poll(&pfd, 1, timeout);
Can this poll be interrupted?
yes. when that happens, we indicate no buffer available.
I think the main program should set the necessary masks.
+ if (ret <= 0)
+ return NULL;
+
+ memset(&buf, 0, sizeof(buf));
+ buf.memory = bp->memory;
+ buf.type = bp->type;
+ if (V4L2_TYPE_IS_MULTIPLANAR(bp->type)) {
+ memset(planes, 0, sizeof(planes));
+ buf.length = VIDEO_MAX_PLANES;
+ buf.m.planes = planes;
+ }
+ ret = ioctl(bp->fd, VIDIOC_DQBUF, &buf);
+ if (ret) {
+ if (errno != EAGAIN && errno != EINVAL) {
EINVAL is considered ok?
no any ioctl that returns non zero is a fault condition.
EINVAL (just as EAGAIN) is just not an unrecoverable error (we will just
return null indicating that there is no buffer available)
+ av_log(bp->log_ctx, AV_LOG_DEBUG, "%s: VIDIOC_DQBUF, errno (%d)\n",
bp->name, errno);
+ bp->broken = errno;
errno can be overwritten by the av_log() call.
OK.
+ }
+ return NULL;
+ }
+
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel