Моя цель состоит в том, чтобы захватить видео с помощью V4L2 и тестирование его виртуальным видеоустройством, созданным V4L2loopback. Я питаю фиктивное .mp4 к этому устройству Virt Vid с FFMPEG, которое находится AT/dev/Video7 . Я могу просматривать этот видеопоток с VLC, поэтому поддельное видео уже настроено и готово к захвату. init_device () :
Ошибка:
Моя цель состоит в том, чтобы захватить видео с помощью V4L2 и тестирование его виртуальным видеоустройством, созданным V4L2loopback. Я питаю фиктивное .mp4 к этому устройству Virt Vid с FFMPEG, которое находится AT/dev/Video7 . Я могу просматривать этот видеопоток с VLC, поэтому поддельное видео уже настроено и готово к захвату. init_device () : Ошибка: [code]VIDIOC_ENUM_FMT: Inappropriate ioctl for device < /code> Я удалил другой код, так как он был слишком длинным и неактуальным, так как он даже не доходит до этих других вызовов.#include #include #include #include [*] #include #include #include #include #include #include // ioctl #include #include // size_t usage #include // uint32_t usage #include // std::cout
// Change this to set the image format. static const uint32_t FORMAT_INDEX = 0;
static const char DEVICE[] = "/dev/video7";
int fd;
// Wrapper around ioctl calls. static int xioctl(int fd, int request, void *arg) { int r;
do { r = ioctl(fd, request, arg); } while (-1 == r && EINTR == errno);
// This gets changed / overwritten when we make the ioctl call. fmt.fmt.pix.width = 640; fmt.fmt.pix.height = 480; fmt.fmt.pix.pixelformat = fmtdesc.pixelformat; fmt.fmt.pix.field = V4L2_FIELD_NONE;
// Set format if (-1 == xioctl(fd, VIDIOC_S_FMT, &fmt)) { perror("VIDIOC_S_FMT"); exit(errno); }