Doh! Queue the buffers for frames before trying to get frames! Jared McNeill very kindly pointed out that I somehow managed to entirely lose the VIDIOC_QBUF calls somewhere along the line.