偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳解 QT 顯示視頻 Linux下 Qt 和 Xv實現(xiàn)

移動開發(fā)
無論是Qt還是Xv,他們都是基于一個顯示架構(gòu)的,那就是X架構(gòu),Qt是對Xlib進行的更高層及的封裝,而Xv則是對Xlib功能上 的一個擴展,先來看內(nèi)容。

 

QT 顯示視頻 linuxQt Xv 是本文要介紹的內(nèi)容,先來對linux下的 Qt Xv來做個總結(jié),然后加了一段代碼,供大家參考!先來看內(nèi)容。

采用Qt+Xv實現(xiàn)視頻顯示的原因是因為Xv可以使用顯卡進行顯示加速;比如,對于視頻大小的縮放,如果交給cpu來完成這項操作,那cpu的計算量是非常大的,一般的cpu基本上是滿負荷運轉(zhuǎn)了,所以,選用Xv來實現(xiàn)視頻縮放和顯示,是一個非常明智的選擇;這里我先簡單說一下,為什么Qt可以和Xv和在一起來顯示視頻幀呢?它的原理又是什么呢?

首先,我們要知道,無論是Qt還是Xv,他們都是基于一個顯示架構(gòu)的,那就是X架構(gòu),Qt是對Xlib進行的更高層及的封裝,而Xv則是對Xlib功能上 的一個擴展,旨在盡可能的挖掘顯卡的運算能力,而實現(xiàn)更為強大的功能;這也是為什么兩者可以結(jié)合在一起顯示視頻的理論和實際基礎(chǔ)了;然而,又由于,兩者所 在的層次不同,而且目的也不同,那么如何將這兩者結(jié)合起來,就成為了當前的最大的問題了;

通過在網(wǎng)上搜索,可以知道Xv可以直接顯示YUV數(shù)據(jù),并且很容易實現(xiàn)視頻縮放,而且這些都已經(jīng)經(jīng)過硬件加速優(yōu)化過了;這也正是我最需要的!

我們直接開始介紹Xv中的顯示圖片的函數(shù)--XvPutImage,和Xlib提供的顯示圖片函數(shù)XPutImage只相差一個字母,但是這個函數(shù)功能確強大了許多;

此函數(shù)的函數(shù)原型為:

  1. XvPutImage(Display *, XvPortID, Window, GC *, XvImage *, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h); 

針對此函數(shù),我們來看怎么使用此函數(shù),會用了此函數(shù),就可以顯示YUV數(shù)據(jù)了;

此函數(shù)需要結(jié)合一個QWidget才能夠顯示圖片;

第一個參數(shù),可以通過QWidget的x11Display()函數(shù)得到;

第二個,可以通過XvQueryAdaptors得到;

第三個,通過QWidget的winId()得到;

第四個,通過XvCreateImage得到;

剩下的幾個坐標函數(shù),我就不解釋了,光看參數(shù)名稱,就應(yīng)該猜的出來;

這里需要注意的一點是,在使用XvCreateImage生成了新的XvImage時,此函數(shù)的第四個參數(shù)可以直接賦予AVFrame的data[0]指 針,這樣,就把ffmpeg的數(shù)據(jù)幀同要顯示的XvImage聯(lián)系到了一起,并且,這個AVFrame中的data[0]數(shù)據(jù)為YUV數(shù)據(jù),完全符合要 求,可以直接刷新顯示了;

總的來說,大致就是這樣子了,以后有什么疑問,還會對此文檔進行詳細擴充;爭取寫成教程;

采用Xv進行顯示也是存在風險的,一旦當前系統(tǒng)的驅(qū)動對Xv支持不好,或者干脆不支持,那么就不能顯示視頻了。

QT 顯示視頻代碼:

  1.  
  2. QPainter has a method called drawImage. You can do something like the   
  3.  
  4. following in a subclass of QWidget:   
  5.  
  6. void VideoWidget::paintEvent()   
  7. {   
  8. //Get   
  9. the current frame and size data...   
  10. //Passing QImage   
  11. QImage frame(frameDataUCharPtr, frameWidth, frameHeight.  
  12. QImage::Format_RBG32 );   
  13. QPainter painter(this);   
  14. painter.drawImage(rect(), frame);   
  15. }   
  16. Under Qtopia   
  17. you can use QDirectPainter to write directly to framebuffer   
  18. memory and get   
  19. some faster access for drawing frames. You will have to   
  20. do the color conversions yourself to get   
  21. the frame into your   
  22. framebuffer's color model.   
  23. --Justin  

小結(jié):關(guān)于詳解 QT 顯示視頻 linux Qt Xv 實現(xiàn) 的內(nèi)容介紹到這里,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-24 13:27:13

Ubuntu QT SDK

2011-06-29 10:18:20

LINUX QT ARM

2011-06-22 17:36:50

QT Linux 串口

2011-04-02 09:17:38

2011-06-08 14:06:42

linux SDK Qt

2011-06-30 17:51:17

QT 元類型 線程

2011-06-24 09:01:20

Qt QLibrary dll

2011-06-24 17:05:07

QT QT 4.7.3 windows

2011-06-24 10:05:51

QT 對象 父對象

2011-07-05 11:10:23

Linux Qt 移植

2011-07-05 10:55:14

Linux Qt 移植

2011-06-28 15:18:45

Qt 單例模式

2011-06-28 13:38:15

Arm linux QT

2011-06-23 14:05:32

Qt 事件機制

2011-07-01 12:52:50

Ubuntu Qt wxWidgets

2011-06-16 10:09:25

QT Windows DLL

2011-06-23 13:38:27

QT 元對象 信號

2011-06-21 17:01:44

Qt 靜態(tài) 編譯

2011-08-30 13:59:06

QTMysql數(shù)據(jù)庫

2011-06-28 15:01:01

Qt PIMPL
點贊
收藏

51CTO技術(shù)棧公眾號