![](/img/trans.png)
[英]How to render opengl in a separate thread in Qt, using QOpenGLWidget?
[英]Need to render YUV frame(AVFrame from ffmpeg) using QT QOpenGLWidget
我有一個來自 FFMPEG 的 YUV 格式的 AVFrame。 我想使用來自 QOpenGLWidget 和 QOpenGLFunctions 的 qt 派生類來渲染它。
我是 qt 和 OpenGL 的初學者。
有人可以幫忙嗎?
謝謝阿斯溫
好吧,實際上,如果您需要實現一個真正快速渲染的播放器,您將不得不處理緩沖區優化、離屏渲染、緩沖區流——其中的一些東西。 但就 Qt 新手而言,有一些簡單但有效的解決方案:
上面鏈接中的 QFFmpegGLWidget 類足以讓您理解。 轉換為 RGB 是通過片段着色器完成的,使用 GL_LUMINANCE 應用的 3 個紋理的好老技巧在那里工作。
我在自己的幾乎類似的解決方案中苦苦掙扎,但是從相機(rtsp)中得到了錯誤、混亂的顏色。 因此,請確保您在YUV420p中獲得幀。 如果其他像素格式更適合您,請查看這些中文資源以使其更深入(谷歌翻譯使它們易於閱讀):
祝你好運!
對於這些情況,我使用自定義 QQuickItem 編寫了一個演示。 YUV 數據上傳到 GPU 並使用 OpenGL 着色器進行轉換。 這是帶有代碼的倉庫: https ://github.com/carlonluca/qtyuv。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.