簡體   English   中英

需要使用 QT QOpenGLWidget 渲染 YUV 幀(來自 ffmpeg 的 AVFrame)

[英]Need to render YUV frame(AVFrame from ffmpeg) using QT QOpenGLWidget

我有一個來自 FFMPEG 的 YUV 格式的 AVFrame。 我想使用來自 QOpenGLWidget 和 QOpenGLFunctions 的 qt 派生類來渲染它。

我是 qt 和 OpenGL 的初學者。

有人可以幫忙嗎?

謝謝阿斯溫

好吧,實際上,如果您需要實現一個真正快速渲染的播放器,您將不得不處理緩沖區優化、離屏渲染、緩沖區流——其中的一些東西。 但就 Qt 新手而言,有一些簡單但有效的解決方案:

  1. 試試 AV_PIX_FMT_RGBA 像素格式,將一個簡單的紋理渲染成一些繪圖表面矩形就足夠簡單了。
  2. 當我想自己嘗試相同的方法時,發現了這個很棒的家伙,他在這里實現了完整的工作示例

上面鏈接中的 QFFmpegGLWidget 類足以讓您理解。 轉換為 RGB 是通過片段着色器完成的,使用 GL_LUMINANCE 應用的 3 個紋理的好老技巧在那里工作。

我在自己的幾乎類似的解決方案中苦苦掙扎,但是從相機(rtsp)中得到了錯誤、混亂的顏色。 因此,請確保您在YUV420p獲得幀。 如果其他像素格式更適合您,請查看這些中文資源以使其更深入(谷歌翻譯使它們易於閱讀):

  1. YUV 着色器轉換
  2. YUV 2 RGB 數學

祝你好運!

對於這些情況,我使用自定義 QQuickItem 編寫了一個演示。 YUV 數據上傳到 GPU 並使用 OpenGL 着色器進行轉換。 這是帶有代碼的倉庫: https ://github.com/carlonluca/qtyuv。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM