Decklink SDK & QtQuick
Decklink SDK & QtQuick
我正在尝试使用BlackMagic Decklink SDK将视频从Decklink卡显示到QtQuick应用程序中。我成功地使用QWidgets做了同样的事情,所以视频流采集部分正在工作。
当使用QWidgets(更具体地说是QOpenGLWidget(时,基本上我们所要做的就是创建QOpenGLWidget的子类并覆盖initializeGL和paintGL,如下所示:
void DeckLinkOpenGLWidget::initializeGL()
{
if (m_deckLinkScreenPreviewHelper != nullptr)
{
m_mutex.lock();
m_deckLinkScreenPreviewHelper->InitializeGL();
m_mutex.unlock();
}
}
void DeckLinkOpenGLWidget::paintGL()
{
m_mutex.lock();
glLoadIdentity();
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
m_deckLinkScreenPreviewHelper->PaintGL();
m_mutex.unlock();
}
当使用QtQuick在自定义渲染器中执行相同的操作时,没有任何反应。我想我必须编写我的程序和着色器,但我不知道它需要什么。当使用着色器对颜色中的每个像素进行着色时,会绘制该颜色的正方形,所以我想我离得不远(但可能是错的......
下面是一些代码:
void VideoViewRenderer::initializeGL()
{
QOpenGLFunctions::initializeOpenGLFunctions();
const char* vertexShaderSource = "#version 330 coren"
"layout (location = 0) in vec3 aPos;n"
"void main()n"
"{n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);n"
"}n";
const char* fragmentShaderSource = "#version 330 coren"
"out vec4 FragColor;n"
"void main()n"
"{n"
" FragColor = vec4(0.6f, 0.0f, 0.0f, 1.0f);n"
"}n";
m_program = new QOpenGLShaderProgram();
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex,vertexShaderSource);
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
m_program->link();
m_mutex.lock();
m_deckLinkScreenPreviewHelper->InitializeGL();
m_mutex.unlock();
}
void VideoViewRenderer::paintGL()
{
m_program->bind();
glLoadIdentity();
glClearColor(0.0f, 0.4f, 0.0f, 0.0f);
glViewport(0, 0, m_viewportSize.width(), m_viewportSize.height());
glClear(GL_COLOR_BUFFER_BIT);
m_mutex.lock();
m_deckLinkScreenPreviewHelper->PaintGL();
m_mutex.unlock();
m_program->release();
}
我应该如何更新我的着色器?
解决此问题的最简单方法是在屏幕上渲染形成正方形的两个三角形,而不是点。将这些三角形设置为纹理,并使用Decklink卡中的数据动态更改纹理缓冲区内容。
有关在 opengl 中使用视频帧的更多信息,请参阅此线程:如何将视频(帧(输入到 GLSL 着色器
相关文章:
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- Vulkan SDK 版本 1.1.85.0 在 Kubuntu 18.10 上链接
- QML TableView 使用 QtQuick.Controls 2 单击行
- 升级到 Windows 10 版本 1809 SDK 后,我无法编译使用 C++/WinRT 的项目
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- Eventloop 卡住:NAO C++ SDK OnFaceDetection 示例
- 构建失败错误:无法使用 qibuild 构建C++ SDK Helloworld
- Microsoft C++ 用于图形 API 的 Rest SDK
- 如何检索 Steamwork SDK 的当前版本
- 佳能SDK无法从相机下载图片
- 如何使用 CPP REST SDK 实现 CAS(中央认证服务)?
- 导入时,QtQuick.Controls 1.4 不应用材质样式
- 在为 iOS 构建 aws-sdk-cpp 时,cmake 上的 CXX 编译器错误已损坏
- 关于 API 文档和设备操作 在助手-sdk-cpp 上
- C++标准视窗 SDK 文件中的编译错误
- DLL:当 SDK 头文件不使用 __declspec(dllexport) 时,我可以使用它吗
- 将 aws-iot-device-sdk-cpp-v2 与 CMake 结合使用
- "byte":使用Crypto++和Windows SDK时出现不明确的符号错误
- Decklink SDK & QtQuick