<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 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)控對高速數(shù)據(jù)采集的需求。本文主要介紹基于英創(chuàng)公司ESM7100的多通道視頻采集應(yīng)用方案。


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


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


      ESM7100主板已經(jīng)預(yù)裝了ETA6869模塊的驅(qū)動,上電后驅(qū)動會自動加載,成功加載后在/dev目錄下會生成video節(jié)點(diǎn),通過操作video節(jié)點(diǎn),就能夠獲取視頻數(shù)據(jù),通過ls命令就能夠查看設(shè)備節(jié)點(diǎn),如下圖,/dev/vidoe0為ESM7100主板的顯示輸出設(shè)備節(jié)點(diǎn),系統(tǒng)顯示服務(wù)程序會調(diào)用這個設(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工具,這是一種跨平臺的多媒體框架工具,而整個框架是基于模塊化設(shè)計的,在框架中將提供不同功能的模塊插件集合起來,就能夠?qū)崿F(xiàn)所需求的多媒體應(yīng)用功能。關(guān)于gstreamer的資料在官網(wǎng)中有非常詳細(xì)的文檔介紹以及例程參考,這里就不再贅述,有興趣的客戶可以查看:https://gstreamer.freedesktop.org/documentation/index.html?gi-language=c了解詳情。通過gstreamer可以方便快捷的處理視頻數(shù)據(jù),同時ESM7100板載了Qt5.8,能夠使用Qt實(shí)現(xiàn)界面的設(shè)計,然后與gstreamer配合,讓gstreamer將視頻數(shù)據(jù)輸出到Qt窗口控件上,采用這種方法就能夠讓整個多通道視頻采集方案快速實(shí)現(xiàn)。


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



    /**

     *    初始化gstreamer

    *

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

    *

    *    參數(shù)說明:

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

    *

    *      返回值說明:

    *    無返回值

    *

     */

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

     

    /**

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

    *

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

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

    *    的通道數(shù)量

    *

    *    參數(shù)說明:

    *  xwinid:Qt窗口的id號,每一個窗口類中都包含這個成員變量。

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

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

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

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

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

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

    *    示進(jìn)行排列

    *

     *    返回值說明:

    *    0表示正常啟動gstreamer

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

    *

     */

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

     

    /**

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

    *

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

    *

    *    返回值說明:

    *    無返回值

    *

    */

    void release_emgst(void);


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



    int main(intargc, char *argv[])

    {

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

            init_emgst(argc, argv);

                       

            //Qt窗口初始化,由QtCreator自動生成

            QApplicationa(argc, argv);

            MainWindow w;

            w.show();

     

            returna.exec();


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


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

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


      函數(shù)調(diào)用后gstreamer會將對應(yīng)通道數(shù)的視頻顯示在指定的Qt窗口控件中,每一個區(qū)域所顯示的視頻數(shù)據(jù)是通過指針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ù)會停止gstreamer輸出,并釋放資源,在程序退出或者需要切換顯示的時候調(diào)用,下面的代碼是通過檢測Qt按鈕控件的點(diǎn)擊事件,實(shí)現(xiàn)切換顯示通道數(shù):



    voidMainWindow::on_channel_4_released()

    {

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

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

      devlist[0] = 1;

      devlist[1] = 2;

      devlist[2] = 3;

      devlist[3] = 4;

     

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

      release_emgst();

     

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

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

    }


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


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

    添加庫操作界面


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


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

    選擇庫文件


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


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

    例程截圖


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

    文章標(biāo)簽:Qt視頻
    国产精品冒白浆免费视频| 亚洲午夜国产精品无码| 久久精品国产只有精品2020| 亚洲AV无码一区二区三区久久精品| 久久五月精品中文字幕 | 亚洲精品视频免费| 亚洲精品福利在线观看| 成人区人妻精品一区二区不卡网站| 思思久久96热在精品国产| 亚洲精品人成在线观看| 国产成人无码精品久久久免费| 国产va免费精品观看精品| 亚洲精品高清无码视频| 国产乱码精品一区三上| 中文字幕国产精品| 无码人妻精品一区二区三区在线| 亚洲国产精品自在拍在线播放| 国产精品久久久久久| 亚洲AV无码精品色午夜在线观看| 婷婷国产成人精品一区二| 国产精品亚洲精品久久精品| 18精品久久久无码午夜福利| 国内精品久久久久伊人av| 2022精品天堂在线视频| 日产精品卡2卡三卡乱码网址| 精品久久久久久国产潘金莲 | 人妻精品久久无码专区精东影业| 国产精品成人69XXX免费视频| 无码人妻精品一区二区三区9厂 | 精品国产亚洲男女在线线电影| 麻豆国产精品入口免费观看| 91午夜精品亚洲一区二区三区 | 亚洲日韩精品无码专区加勒比| 久久66久这里精品99| 久久99国产精品久久| 精品国产91久久久久久久a| 国产精品无码久久久久久久久久 | 国产美女精品久久久久久久免费| 国产精品天天影视久久综合网 | 麻豆AV无码精品一区二区| 精品一区二区三区在线观看视频|