色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

V4L2框架概述 Xilinx視頻編解碼詳解

我快閉嘴 ? 來源:Comtech FPGA ? 作者:Jimmy Chen ? 2022-09-14 10:31 ? 次閱讀
  1. 1、V4L2框架概述

  2. V4L2是Video for Linux2的簡稱,為Linux中關于視頻設備的內核驅動。在Linux中,視頻設備是設備文件,可以像訪問普通文件一樣對其進行讀寫。

  3. 1.1 V4L2設備應用層流程

  4. 注冊的設備節(jié)點有/dev/video和/dev/v4l2-subdev;其應用層操作video設備主要流程如下:

  5. 1) 通過打開video設備設置video參數(shù)

  6. 2) 設置采集方式;

  7. 3) 將數(shù)據(jù)取出、處理、放回,可循環(huán)處理;

  8. 4) 完成相應的任務后關閉。

  9. 1.2 內核V4L2模塊

應用層流程可以通過打開文件一樣打開視頻輸入設備,并且配置設備相關參數(shù), 這是由于內核相關模塊做了很多基礎工作。跟V4L2相關的模塊如下圖所示:

ebaf11b6-33d4-11ed-ba43-dac502259ad0.png

圖1 V4L2基本框架

1.3 典型捕獲管道:

ec0316c6-33d4-11ed-ba43-dac502259ad0.png

圖2 Xilinx視頻典型捕獲管道

  1. 1、硬件視圖

  2. 1)多種組合可以開發(fā)一個捕獲管道;

  3. 2)使用標準化接口(AXI總線接口)在管道中縫合多個IP。

  4. 2、軟件視圖

  5. 1)復雜性存在于軟件級別,以支持多種組合;

  6. 2)由于沒有任何標準的方法來配置管道中的不同元素,這給軟件開發(fā)人員帶來了更大的復雜性。

  7. 1.4具有流媒體和/或內存接口的基于幀的視頻管道視頻捕獲設備:

  8. 1)視頻存儲器到存儲器設備;

  9. 2)視頻輸出設備(無圖形);

  10. 3)DMABUF:0拷貝緩沖區(qū)共享Media controller;

  11. 4)描述邏輯拓撲和數(shù)據(jù)流;

  12. 5)多媒體庫 GStreamer、FFMPEG、OpenCV、OpenMAX、LibAV、VLC媒體播放器、MPlayers

  13. eca05418-33d4-11ed-ba43-dac502259ad0.png

  14. 圖3 V4L2框架對應設備

  15. 2、Xilinx 視頻編解碼

在使用gst命令創(chuàng)建pipeline 完成視頻輸入到編碼輸出的過程如下:

ece88512-33d4-11ed-ba43-dac502259ad0.png

圖4 Xilinx 視頻輸入設備及相關內核模塊

當使用gst 命令處理HDMI視頻輸入時,我們會使用下面的命令:gst-launch-1.0 -v v4l2src device=/dev/video0 io-mode=4 !video/x-raw(memory:XLNXLL), format=NV16_10LE32, width=3840, height=2160,framerate=60/1 ! omxh265enc num-slices=8 periodicity-idr=240 cpb-size=500gdr-mode=horizontal initial-delay=250 control-rate=low-latencyprefetch-buffer=true target-bitrate=25000 gop-mode=low-delay-p ! video/x-h265,alignment=nal ! rtph265pay ! udpsink buffer-size=60000000 host=192.168.25.89port=5004 async=false max-lateness=-1 qos-dscp=60 max-bitrate=120000000 -v 其中/dev/video0設備對應我們的HDMI輸入,使用omxh265enc進行編碼,在使用rtph265pay完成RTP封裝后,在通過udpsink使用udp將編碼后的碼流發(fā)送出去。這個實現(xiàn)我們可以通過V4L2接口來完成,本身gst 插件也是調用了V4L2接口完成,下面是使用V4L2接口完成上述工作的過程。
  1. 2.1 應用程序通過V4L2接口采集視頻數(shù)據(jù)步驟

  2. 1)打開視頻設備文件,通過視頻采集的參數(shù)初始化, 通過V4L2接口設置視頻圖像屬性;

  3. 2)申請若干視頻采集的幀緩存區(qū),并將這些幀緩沖區(qū)從內核空間映射到用戶空間,便于應用程序讀取/處理視頻數(shù)據(jù);

  4. 3)將申請到的幀緩沖區(qū)在視頻采集輸入隊列排隊,并啟動視頻采集;

  5. 4)驅動開始視頻數(shù)據(jù)的采集,應用程序從視頻采集輸出隊列中取出幀緩沖區(qū),處理后,將幀緩沖區(qū)重新放入視頻采集輸入隊列,循環(huán)往復采集連續(xù)的視頻數(shù)據(jù)。最后停止視頻采集。

流程圖如下所示

ed0d89de-33d4-11ed-ba43-dac502259ad0.png

  1. 2.2 V4L2ioctl控制符

  2. 1)VIDIOC_QUERYCAP 查詢設備的屬性;

  3. 2)VIDIOC_ENUM_FMT 幀格式;

  4. 3)VIDIOC_S_FMT 設置視頻幀格式,對應struct v4l2_format;

  5. 4)VIDIOC_G_FMT 獲取視頻幀格式等;

  6. 5)VIDIOC_REQBUFS 請求/申請若干個幀緩沖區(qū),一般為不少于3個;

  7. 6)VIDIOC_QUERYBUF 查詢幀緩沖區(qū)在內核空間的長度和偏移量;

  8. 7)VIDIOC_QBUF 將申請到的幀緩沖區(qū)全部放入視頻采集輸出隊列;

  9. 8)VIDIOC_STREAMON 開始視頻流數(shù)據(jù)的采集;

  10. 9)VIDIOC_DQBUF 應用程序從視頻采集輸出隊列中取出已含有采集數(shù)據(jù)的幀緩沖區(qū);

  11. 10)VIDIOC_STREAMOFF 應用程序將該幀緩沖區(qū)重新掛入輸入隊列。

  12. 2.3 控制字符解析和使用用例:

1)VIDIOC_QUERYCAP-------->struct v4l2_capability 例如: if ((cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) ==V4L2_CAP_VIDEO_CAPTURE) { printf("Device %s: supports capture. ", FILE_VIDEO); } if ((cap.capabilities & V4L2_CAP_STREAMING) ==V4L2_CAP_STREAMING) { printf("Device %s: supports streaming. ", FILE_VIDEO); }

2)VIDIOC_ENUM_FMT-------->struct v4l2_fmtdesc

//通過這個結構體,可以顯示對應的攝像頭所支持視頻幀格式。例如

struct v4l2_fmtdesc fmtdesc; fmtdesc.index = 0; fmtdesc.type =V4L2_BUF_TYPE_VIDEO_CAPTURE; printf("Supportformat:/n"); while(ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) != -1) { printf("/t%d.%s/n",fmtdesc.index+1,fmtdesc.description); fmtdesc.index++; } 3)VIDIOC_G_FMT-------->struct v4l2_format 查看視頻幀格式 4)VIDIOC_S_FMT 設置視頻幀格式 5) VIDIOC_CROPCAP-------->struct v4l2_cropcap結構體 6)設置Stream信息,主要設置幀率 VIDIOC_G_PARM&VIDIOC_S_PARM-------->structv4l2_streamparm 7)設置Stream信息,主要設置幀率 VIDIOC_G_PARM&VIDIOC_S_PARM-------->structv4l2_streamparm 8)設置Stream信息,主要設置幀率 VIDIOC_G_PARM&VIDIOC_S_PARM-------->structv4l2_streamparm 9)申請和管理緩沖區(qū) VIDIOC_REQBUFS-------->struct v4l2_requestbuffers 10) 應用程序從視頻采集輸出隊列中取出已含有采集數(shù)據(jù)的幀緩沖區(qū) VIDIOC_QUERYBUF-------->struct v4l2_buffer 應用程序從視頻采集輸出隊列中取出已含有采集數(shù)據(jù)的幀緩沖區(qū) intioctl(intfd,VIDIOC_DQBUF, structv4l2_buffer*argp) 11) 開始視頻采集和關閉視頻采集 VIDIOC_STREAMON&VIDIOC_STREAMOFF int ioctl(int fd, VIDIOC_STREAMON, const int *argp) int ioctl(int fd, VIDIOC_STREAMOFF, const int *argp) 12) 應用程序將該幀緩沖區(qū)重新掛入輸入隊列VIDIOC_QBUF intioctl(intfd,VIDIOC_QBUF,structv4l2_buffer*argp)

3、Xilinx V4L2 Demo

ed41e4ae-33d4-11ed-ba43-dac502259ad0.png

圖5:Xilinx V4L2 demo

ed6ab5dc-33d4-11ed-ba43-dac502259ad0.png

圖6:Xilinx V4L2 + CTRLSW encode

  1. 3.1Xilinx使用V4L2實現(xiàn)視頻輸入的代碼

  2. edea3ba4-33d4-11ed-ba43-dac502259ad0.png

  3. ee47a3ac-33d4-11ed-ba43-dac502259ad0.png

eeafdf58-33d4-11ed-ba43-dac502259ad0.png

3.2應用程序將幀緩沖區(qū)重新排入輸入隊列

ioctl(fd_v4l2,VIDIOC_QBUF, &buf)

ef4e903a-33d4-11ed-ba43-dac502259ad0.pngef7a86e0-33d4-11ed-ba43-dac502259ad0.png
  1. 3.3開始視頻流數(shù)據(jù)的采集

  2. ioctl(fd_v4l2,VIDIOC_STREAMON, &type)

efc36996-33d4-11ed-ba43-dac502259ad0.png

3.4 應用程序將視頻采集輸出隊列中取出已含有采集數(shù)據(jù)的幀緩沖區(qū) ioctl(fd_v4l2, VIDIOC_DQBUF, &buf)

f00ae794-33d4-11ed-ba43-dac502259ad0.png

3.5 停止視頻采集 ioctl(fd_v4l2,VIDIOC_STREAMOFF, &tpe)f0390b10-33d4-11ed-ba43-dac502259ad0.png 上面為主要功能函數(shù)介紹,具體代碼等等請參考如下鏈接:https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1010303367/Zynq+UltraScale+MPSoC+VCU+TRD+2020.2+-+Xilinx+Low+Latency+PS+DDR+NV12+HDMI+Audio+Video+Capture+and+Display

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Xilinx
    +關注

    關注

    71

    文章

    2167

    瀏覽量

    121308
  • 視頻編解碼
    +關注

    關注

    2

    文章

    54

    瀏覽量

    11748
  • V4L2
    +關注

    關注

    0

    文章

    17

    瀏覽量

    3894

原文標題:在Xilinx平臺使用V4L2框架編程實現(xiàn)視頻輸入

文章出處:【微信號:Comtech FPGA,微信公眾號:Comtech FPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Xilinx Linux 如何理解V4L2的管道驅動程序

    概述 Xilinx提供了完整的V4L2的驅動程序, Xilinx V4L2 driver 。處于最頂層的驅動程序是
    的頭像 發(fā)表于 09-30 13:44 ?4870次閱讀
    <b class='flag-5'>Xilinx</b> Linux 如何理解<b class='flag-5'>V4L2</b>的管道驅動程序

    V853平臺Camera模塊開發(fā)框架詳解

    引入media框架實現(xiàn)pipeline管理 將libisp移植到用戶空間解決GPL問題 將統(tǒng)計buffer獨立為v4l2 subdev 將的scaler(vipp)模塊獨立為v4l2 subdev
    的頭像 發(fā)表于 12-05 14:30 ?5878次閱讀
    <b class='flag-5'>V</b>853平臺Camera模塊開發(fā)<b class='flag-5'>框架</b><b class='flag-5'>詳解</b>

    V4L2視頻采集程序框架

    V4L2視頻采集程序框架
    發(fā)表于 11-05 12:44

    DM6446 V4L2采集驅動和輸出驅動與硬件工作原理

    Montavista 的Linux-2.6.18 V4L2好好分析一下,順便講解在產品中的應用,滿足一些客戶提出要求,畢竟V4L2是LINUX一個很重要的視頻驅動,適合很多嵌入式芯片平臺。本文首先講解DM6446
    發(fā)表于 08-02 07:39

    基于PCIe和V4L2的8通道視頻采集&顯示IP

    基于PCIe和V4L2的8通道視頻采集&顯示IPVideo Capture&Display IP for V4L2在主機端視頻設備內核驅動V4L2
    發(fā)表于 11-01 21:45

    什么是V4L2?有何作用

    1.什么是V4L2Video for(4) Linux 2 的簡稱,V4L的升級版。V4L2是linux操作系統(tǒng)下用于采集圖片、
    發(fā)表于 01-17 09:05

    Chromium V4L2視頻解碼的功能問題求解

    我正在為 IMX8MM 使用 Yocto Langdale 版本。根據(jù)此提交消息,此版本應在 Chromium 中啟用 V4L2 硬件視頻解碼:提交
    發(fā)表于 04-10 13:46

    需要了解Linux V4L2的驅動架構

    video4linux2(V4L2)是Linux內核中關于視頻設備的中間驅動層,向上為Linux應用程序訪問視頻設備提供了通用接口,向下為linux中設備驅動程序開發(fā)提供了統(tǒng)一的
    發(fā)表于 04-28 17:29 ?1135次閱讀
    需要了解Linux <b class='flag-5'>V4L2</b>的驅動架構

    學習V4L2應用程序框架時要注意的事項

    V4L2采用流水線的方式,操作更簡單直觀,基本遵循打開視頻設備、設置格式、處理數(shù)據(jù)、關閉設備,更多的具體操作通過ioctl函數(shù)來實現(xiàn)。
    發(fā)表于 05-14 14:00 ?1324次閱讀
    學習<b class='flag-5'>V4L2</b>應用程序<b class='flag-5'>框架</b>時要注意的事項

    Linux應用開發(fā)【第七章】攝像頭V4L2編程應用開發(fā)

    文章目錄 7 攝像頭V4L2編程應用開發(fā) 7.1 V4L2簡介 7.2 V4L2視頻采集原理 7.3 V4L2程序實現(xiàn)流程 7.4
    的頭像 發(fā)表于 12-10 19:23 ?3092次閱讀
    Linux應用開發(fā)【第七章】攝像頭<b class='flag-5'>V4L2</b>編程應用開發(fā)

    V4L2學習筆記

    1.什么是V4L2Video for(4) Linux 2 的簡稱,V4L的升級版。V4L2是linux操作系統(tǒng)下用于采集圖片、
    發(fā)表于 01-17 13:43 ?12次下載
    <b class='flag-5'>V4L2</b>學習筆記

    如何使用v4l2 API讀取攝像頭

    V4L2是Video For Linux的第二個版本,它是Linux的視頻捕獲的API。在這里,您可以找到有關的文檔。它提供了很方便的c,c++和python接口
    發(fā)表于 02-07 11:16 ?4次下載
    如何使用<b class='flag-5'>v4l2</b> API讀取攝像頭

    Linux內核中視頻設備驅動框架V4L2X詳解

    V4L2(Video for Linux 2):Linux內核中關于視頻設備驅動的框架,對上向應用層提供統(tǒng)一的接口,對下支持各類復雜硬件的靈活擴展.
    的頭像 發(fā)表于 05-30 16:18 ?6153次閱讀

    修改V4L2的Video Pipeline的devicetree

    PetaLinux 能夠根據(jù)Vivado的設計,自動生成V4L2的Video Pipeline的devicetree。但是它主要為Xilinx的VCU TRD服務,測試的組合比較少。很多時候,需要根據(jù)自己的工程,修改V4L2的V
    的頭像 發(fā)表于 08-02 08:03 ?2083次閱讀
    修改<b class='flag-5'>V4L2</b>的Video Pipeline的devicetree

    v4l2編程

    v4l2編程
    發(fā)表于 10-28 11:10 ?0次下載
    主站蜘蛛池模板: 妈妈的职业3完整版在线播放 | 欧美亚洲日韩国产在线在线| 嘟嘟嘟WWW在线观看视频高清| 小雪奶水涨翁工帮吸的推荐语录 | writeas雷狮直播| 日本69xxxxx| 九色终合九色综合88| qvod理论电影| 亚洲AV精品无码成人| 免费亚洲视频| 国产骚妇BB网| av先锋影音资源男人站| 亚洲成A人片在线观看中文不卡 | 西西人体一级裸片| 狼人射综合| 国产精品一区二区亚瑟不卡| 真实处破女全过程完免费观看| 日本日本熟妇中文在线视频| 饥渴的新婚女教师| 高清毛片一区二区三区| 97超在线视频| 亚洲AV国产国产久青草| 日本高清色片| 免费观看激烈日板子| 国产午夜理论片YY8840Y| fryee性欧美18 19| 在线日本高清日本免费| 香蕉久久日日躁夜夜嗓| 欧美猛男gaygayxxgv| 精品国产99久久久久久麻豆| 儿子日母亲B好爽| QVOD理论| 一区二区三区无码高清视频| 小柔的性放荡羞辱日记动漫| 日本丝袜护士| 精品久久久久久久99热| 国产学生无码中文视频一区| 国产成人无码视频一区二区三区 | 超碰 无码 中文字幕| A级超碰视频在线观看| 777EY_卡通动漫_1页|