成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解 QT 顯示視頻 Linux下 Qt 和 Xv實現

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

 

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

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

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

通過在網上搜索,可以知道Xv可以直接顯示YUV數據,并且很容易實現視頻縮放,而且這些都已經經過硬件加速優化過了;這也正是我最需要的!

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

此函數的函數原型為:

  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); 

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

此函數需要結合一個QWidget才能夠顯示圖片;

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

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

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

第四個,通過XvCreateImage得到;

剩下的幾個坐標函數,我就不解釋了,光看參數名稱,就應該猜的出來;

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

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

采用Xv進行顯示也是存在風險的,一旦當前系統的驅動對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  

小結:關于詳解 QT 顯示視頻 linux Qt Xv 實現 的內容介紹到這里,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

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-07-01 12:52:50

Ubuntu Qt wxWidgets

2011-06-23 14:05:32

Qt 事件機制

2011-06-23 13:38:27

QT 元對象 信號

2011-06-16 10:09:25

QT Windows DLL

2011-06-21 17:01:44

Qt 靜態 編譯

2011-06-20 17:33:58

Qt MeegoTouch Maemo

2011-06-28 15:01:01

Qt PIMPL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国精日本亚洲欧州国产中文久久 | 亚洲性视频| 久一久| 日本久久久久久 | 日韩成人在线观看 | 欧美精品一区在线 | 性高湖久久久久久久久3小时 | 欧美xxxx在线| 久久中文字幕视频 | 中文字幕乱码亚洲精品一区 | 欧美在线一区二区三区 | 在线精品观看 | 欧美日高清 | 欧美精品一区在线发布 | 99成人免费视频 | 91欧美精品成人综合在线观看 | 国产精品日产欧美久久久久 | 成人网址在线观看 | 91观看| 久久久久久国产精品免费 | 国产在线视频三区 | 欧美a v在线 | 国产精品视频久久久久 | 精品一区二区三区91 | 国产成人精品一区二区 | 一区二区国产精品 | 81精品国产乱码久久久久久 | 天天干视频网 | 天天操天天干天天透 | 亚洲精品一区二区三区蜜桃久 | 久久久噜噜噜久久中文字幕色伊伊 | 91视频国产区 | av中文在线播放 | 国产精品视频一二三区 | 中国美女撒尿txxxxx视频 | 羞羞视频在线免费 | 国产精品久久久久久亚洲调教 | 国产人成精品一区二区三 | 国产一区二区三区高清 | 日韩欧美一区二区在线播放 | 久久高清 |