激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

Linux主板多通道視頻采集方案

 2019-6-20     作者:黃志超        
文章標(biāo)簽:Qt視頻

  英創(chuàng)公司推出的ESM7100主板搭載了I.MX7DL處理器,這款處理器是雙核Cortex-A7架構(gòu),并且主頻達(dá)到1GHz,不僅有著強(qiáng)勁的處理性能,還繼承了Cortext-A7的低功耗特性,非常適用于工業(yè)應(yīng)用。進(jìn)一步,ESM7100的還配置高速PCIe接口,使其可滿足工業(yè)視頻監(jiān)控對(duì)高速數(shù)據(jù)采集的需求。本文主要介紹基于英創(chuàng)公司ESM7100的多通道視頻采集應(yīng)用方案。


  ETA6869模塊是英創(chuàng)公司開發(fā)的具有標(biāo)準(zhǔn)mini PCIe尺寸,最多能夠支持8通道視頻采集模塊,核心芯片為視頻解碼芯片tw6869。ETA6869模塊通過(guò)PCIe×1接口與ESM7100相連接,保證了數(shù)據(jù)的高速傳輸。標(biāo)準(zhǔn)的mini-PCIe尺寸模塊的設(shè)計(jì),可以讓模塊方便的嵌入在底板上,如下:


Linux主板多通道視頻采集方案.png


  ESM7100主板已經(jīng)預(yù)裝了ETA6869模塊的驅(qū)動(dòng),上電后驅(qū)動(dòng)會(huì)自動(dòng)加載,成功加載后在/dev目錄下會(huì)生成video節(jié)點(diǎn),通過(guò)操作video節(jié)點(diǎn),就能夠獲取視頻數(shù)據(jù),通過(guò)ls命令就能夠查看設(shè)備節(jié)點(diǎn),如下圖,/dev/vidoe0為ESM7100主板的顯示輸出設(shè)備節(jié)點(diǎn),系統(tǒng)顯示服務(wù)程序會(huì)調(diào)用這個(gè)設(shè)備節(jié)點(diǎn),客戶應(yīng)當(dāng)避免直接操作它,/dev/video1~/dev/video8就是生成的視頻輸入設(shè)備節(jié)點(diǎn),分別代表視頻輸入的通道1-通道8:


Linux主板多通道視頻采集方案.png

video節(jié)點(diǎn)


  在軟件開發(fā)方面,ESM7100的文件系統(tǒng)中已經(jīng)集成了gstreamer工具,這是一種跨平臺(tái)的多媒體框架工具,而整個(gè)框架是基于模塊化設(shè)計(jì)的,在框架中將提供不同功能的模塊插件集合起來(lái),就能夠?qū)崿F(xiàn)所需求的多媒體應(yīng)用功能。關(guān)于gstreamer的資料在官網(wǎng)中有非常詳細(xì)的文檔介紹以及例程參考,這里就不再贅述,有興趣的客戶可以查看:https://gstreamer.freedesktop.org/documentation/index.html?gi-language=c了解詳情。通過(guò)gstreamer可以方便快捷的處理視頻數(shù)據(jù),同時(shí)ESM7100板載了Qt5.8,能夠使用Qt實(shí)現(xiàn)界面的設(shè)計(jì),然后與gstreamer配合,讓gstreamer將視頻數(shù)據(jù)輸出到Qt窗口控件上,采用這種方法就能夠讓整個(gè)多通道視頻采集方案快速實(shí)現(xiàn)。


  考慮到部分客戶可能對(duì)gstreamer不熟悉,英創(chuàng)公司在gstreamer提供的API函數(shù)基礎(chǔ)上重新封裝了一層,通過(guò)庫(kù)文件libemgst.so提供三個(gè)簡(jiǎn)單的API函數(shù),利用這三個(gè)API函數(shù),客戶就可以將視頻數(shù)據(jù)顯示在Qt實(shí)現(xiàn)的界面上,而不需要使用代碼對(duì)gstreamer單獨(dú)進(jìn)行操作,客戶可以專注于Qt程序的開發(fā)。下面就詳細(xì)介紹libemgst.so的三個(gè)API函數(shù):



/**

 *    初始化gstreamer

*

*    本函數(shù)在C的main函數(shù)中調(diào)用,將會(huì)初始化gstreamer庫(kù)

*

*    參數(shù)說(shuō)明:

*    使用main函數(shù)的兩個(gè)參數(shù)填入,gstramer初始化時(shí)需要讀取main函數(shù)的兩個(gè)參數(shù)

*

*      返回值說(shuō)明:

*    無(wú)返回值

*

 */

void init_emgst(int argc, char **argv);

 

/**

 *    配置gstreamer,并顯示到指定Qt窗口

*

*    函數(shù)會(huì)配置gstreamer,顯示多個(gè)通道的視頻到xwinid所指定的窗口,窗口的大小通過(guò)

*    參數(shù)width和height來(lái)確定,而視頻的設(shè)備節(jié)點(diǎn)由指針devlist傳入,listsize指定同時(shí)顯示

*    的通道數(shù)量

*

*    參數(shù)說(shuō)明:

*  xwinid:Qt窗口的id號(hào),每一個(gè)窗口類中都包含這個(gè)成員變量。

*    width:顯示視頻數(shù)據(jù)所使用的窗口控件的寬度,單位pixel

*    height:顯示視頻數(shù)據(jù)所使用的窗口控件的高度,單位pixel

*devlist:指向設(shè)備列表的指針,通常是一個(gè)包含設(shè)備號(hào)的數(shù)組,比如需要顯示

*    /dev/video1和/dev/video2,那么devlist就應(yīng)該指向一個(gè)長(zhǎng)度為2的數(shù)組,其中

*    devlist[0]=1,devlist[1]=2

*  listsize:顯示的視頻通道數(shù)。支持1,2,4,6,8這五個(gè)值,函數(shù)會(huì)按照固定模式對(duì)顯

*    示進(jìn)行排列

*

 *    返回值說(shuō)明:

*    0表示正常啟動(dòng)gstreamer

*  -1 表示填入?yún)?shù)出現(xiàn)錯(cuò)誤,啟動(dòng)gstreamer失敗

*

 */

  int config_emgst(unsignedint xwinid, int width,int height, char *devlist, int listsize);

 

/**

*    關(guān)閉gstreamer,釋放資源

*

*    函數(shù)會(huì)關(guān)閉gstreamer輸出,并釋放相關(guān)資源

*

*    返回值說(shuō)明:

*    無(wú)返回值

*

*/

void release_emgst(void);


  init_emgst函數(shù)進(jìn)行g(shù)streamer的初始化,在啟動(dòng)gstreamer功能之前需要調(diào)用一次,客戶配合Qt使用時(shí)在main函數(shù)中調(diào)用即可:



int main(intargc, char *argv[])

{

        //初始化英創(chuàng)主板gstreamer功能

        init_emgst(argc, argv);

                   

        //Qt窗口初始化,由QtCreator自動(dòng)生成

        QApplicationa(argc, argv);

        MainWindow w;

        w.show();

 

        returna.exec();


  config_emgst函數(shù)會(huì)配置并啟動(dòng)gstreamer,客戶只要得到用來(lái)顯示視頻的窗口控件的id就可以了,在每一個(gè)Qt窗口控件類中都有對(duì)應(yīng)的成員變量,可以很簡(jiǎn)單的獲取到。config_emgst函數(shù)會(huì)根據(jù)width和height的值自動(dòng)分配顯示區(qū)域。通過(guò)devlist可以設(shè)置需要操作的設(shè)備節(jié)點(diǎn)索引號(hào),listsize指定同時(shí)顯示的通道數(shù),支持的值為1、2、4、6、8,顯示的方式如下圖:


Linux主板多通道視頻采集方案.png

視頻數(shù)據(jù)顯示排列方式


  函數(shù)調(diào)用后gstreamer會(huì)將對(duì)應(yīng)通道數(shù)的視頻顯示在指定的Qt窗口控件中,每一個(gè)區(qū)域所顯示的視頻數(shù)據(jù)是通過(guò)指針devlist指定的,下面是部分參考代碼,將graphicsView控件的id傳給gstreamer,并顯示/dev/video1的數(shù)據(jù):



MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

       ui->setupUi(this);

      

  //初始化設(shè)備列表

       devlist = (char*)malloc(sizeof(char));

       devlist[0] = 1;

 

       //獲取窗口控件id,并賦值給成員變量xwinid

       xwinid = ui->graphicsView->winId();

 

       //將參數(shù)傳入函數(shù)中初始化gstreamer,并開始輸出視頻數(shù)據(jù)

       config_emgst(xwinid, 640, 480, devlist, 1);

}


  release_emgst函數(shù)會(huì)停止gstreamer輸出,并釋放資源,在程序退出或者需要切換顯示的時(shí)候調(diào)用,下面的代碼是通過(guò)檢測(cè)Qt按鈕控件的點(diǎn)擊事件,實(shí)現(xiàn)切換顯示通道數(shù):



voidMainWindow::on_channel_4_released()

{

  //初始化設(shè)備列表,填入四個(gè)通道的值

  devlist = (char *)malloc(4*sizeof(char));

  devlist[0] = 1;

  devlist[1] = 2;

  devlist[2] = 3;

  devlist[3] = 4;

 

  //關(guān)閉原來(lái)的輸出并釋放資源

  release_emgst();

 

  //將參數(shù)傳入函數(shù)中初始化gstreamer,并開始輸出視頻數(shù)據(jù)

       config_emgst(xwinid, 640, 480, devlist, 4);

}


  庫(kù)文件libemgst.so已經(jīng)預(yù)裝在ESM7100主板的文件系統(tǒng)中了,客戶不需要針對(duì)主板再做任何設(shè)置。在開發(fā)程序的時(shí)候,Qt工程中需要將英創(chuàng)公司提供的emgst.h頭文件和libemgst.so庫(kù)文件添加進(jìn)去。頭文件添加的方法十分簡(jiǎn)單,增加一個(gè)新的頭文件即可。關(guān)于外部庫(kù)的添加,Qt的開發(fā)工具QtCreator提供了非常簡(jiǎn)便的方法,客戶只需要將libemgst.so拷貝到工程目錄下,然后在QtCreator中的項(xiàng)目欄用鼠標(biāo)右鍵單擊工程,選擇添加庫(kù)(外部庫(kù)),如下圖:


Linux主板多通道視頻采集方案.png

添加庫(kù)操作界面


  選擇外部庫(kù)后,點(diǎn)擊下一步,按照下圖設(shè)置,在庫(kù)文件一欄中選擇到工程下的libemgst.so文件,如下圖:


Linux主板多通道視頻采集方案.png

選擇庫(kù)文件


  這樣就完成了外部庫(kù)的設(shè)置,客戶可以在代碼中調(diào)用libemgst.so提供的API函數(shù)了。英創(chuàng)公司提供了一個(gè)通過(guò)按鈕切換顯示視頻通道數(shù)的例程,效果如下:


Linux主板多通道視頻采集方案.png

例程截圖


  通過(guò)這種方式,英創(chuàng)公司希望能夠幫助客戶縮短開發(fā)周期,讓客戶可以專注于Qt程序的開發(fā),而不用花時(shí)間去學(xué)習(xí)并在代碼中設(shè)置gstreamer。對(duì)于例程感興趣的客戶可以和工程師聯(lián)系,索取相關(guān)代碼。

文章標(biāo)簽:Qt視頻
主站蜘蛛池模板: 成人中文字幕在线高清| 国产精品日本不卡一区二区 | 免费又黄又硬又大爽日本| 国产在线一区二区杨幂| 妖精视频免费入口| 三黄色| 丝袜亚洲综合| 色屁屁www影院入口免费观看| 国产成人一区在线播放| 美国黄色a级片| 91久久国产露脸国语对白| 国产最新自拍| 97射射| 久久日本精品国产精品白| 亚洲精品中文一区不卡| 男女免费爽爽爽在线视频| 国产一级片免费观看| 国产精品酒店| 国产成人免费午夜性视频 | 国产精品久久久久久久久鸭| 亚洲一区二区综合| 九九九色视频在线观看免费| 日韩免费在线视频观看| 免费黄色一级| 国产1页| 国产在线爱做人成小视频| 国产精品果冻| 中文在线播放| 国产日产欧美精品一区二区三区| 黄色一级片黄色一级片| 国内精品久久久久激情影院| 青青免费视频精品一区二区| 一级级黄| 亚洲欧美在线制服丝袜国产| 国产三级黄色毛片| 国产黄大片在线视频| 国产精品福利片免费看| www.天天色.com| 国产精品夫妇久久| 国产美女视频爽爽爽| 国产香蕉视频在线|