Я использую Linux 4.4 на комплекте разработчика NVIDIA Jetson TX1 ARM. Я построил свою систему с помощью системы Qt Boot2Qt Yocto, которая выдает Qt 5.11.
У меня есть небольшое приложение Qt5, которое использует OpenCV 3.3 для успешного захвата видео с встроенной камеры CSI TX1. Это делается так, как показано ниже:
std::string get_tegra_pipeline(int width, int height, int fps) {
return "nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)" + std::to_string(width) + ", height=(int)" +
std::to_string(height) + ", format=(string)I420, framerate=(fraction)" + std::to_string(fps) +
"/1 ! nvvidconv flip-method=0 ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink";
}
...
// Define the gstream pipeline for CSI
std::string pipelineCSI = get_tegra_pipeline(WIDTH, HEIGHT, FPS);
std::cout << "Using pipeline: \n\t" << pipelineCSI << "\n";
// Create OpenCV CSI capture object, ensure it works.
m_VLCapture = cv::VideoCapture(pipelineCSI, cv::CAP_GSTREAMER);
if (!m_VLCapture.isOpened()) {
std::cout << "CSI Connection failed";
}
Затем я могу захватить и отобразить кадры на моей QGraphicsScene, как показано здесь:
cv::Mat vlFrame;
m_VLCapture >> vlFrame; // Get a new frame from camera
m_VLPixmap = QPixmap::fromImage(QImage((unsigned char*)vlFrame.data,vlFrame.cols,vlFrame.rows,QImage::Format_RGB888).rgbSwapped().scaled(m_AppSize,Qt::IgnoreAspectRatio,Qt::SmoothTransformation));
m_VL->setPixmap(m_VLPixmap);
Эта операция занимает около 5 мс, и мне нужно, чтобы она была быстрее.
Вместо создания QImage и QPixmap из cv :: Mat, я хотел бы использовать QCamera для прямого захвата в QVideoFrame, который я могу отображать напрямую.
Я читал документы QCamera и искал примеры, но не могу понять, как настроить серверную часть QMultimedia gstreamer для работы с реализацией NVIDIA gstreamer.
Эта ошибка, кажется, указывает на то, что это невозможно:
https://bugreports.qt.io/browse/QTBUG-49357
Как настроить конвейер gstreamer для сеанса захвата QCamera? Благодарю.
Задача ещё не решена.
Других решений пока нет …