2021-05-12 14:32:11
通過ffplay實現攝像頭preview
硬體平台:Jetson TK1 開發板(NVIDIA Tegra K1 Mobile Processor 32bit),寧波舜宇光電SP103A(OV16825)模組
軟體平台:Ubuntu/Linaro 4.8.2-16ubuntu4(Linux version 3.10.40 32bit)
攝像頭驅動已經實現,支援v4l2的介面。
首先安裝SDL庫,第一次通過原始碼安裝的SDL-1.2.14版本,使用時總是提示SDL初始化失敗。第二次先輸入命令“sudo apt-get remove libsdl1.2debian”,“sudo apt-get install libsdl1.2-dev”,再通過原始碼安裝SDL-1.2.15問題解決了。
然後安裝x264,步驟比較簡單
$git clone git://git.videolan.org/x264.git
$cd x264
$./configure
$make
$sudo make install
最後安裝ffmpeg,通過git下載官網最新的版本,當前版本是2.8版本,通過configure --enable-memalign-hack --enable-static,make, sudo make install安裝就可以了。
我們的驅動輸出的是sensor的原始資料,為bayer raw10格式,每個顏色佔用16bit,只有低10位是有效資料,順序為bggr。ffmpeg的原始程式碼是不支援raw10的,需要做一定的修改。原始程式碼支援bayer raw8和bayer raw16, 因為bayer raw10和bayer raw16一樣都是占用兩個位元組,所以我們參考bay raw16修改。首先在libavdevice/v4l2-common.c中的ff_fmt_conversion_table中增加一項,這裡我們直接借用raw16格式,在應用看來raw10作為raw16處理,在v4l2介面呼叫時使用V4L2_PIX_FMT_SBGGR10。
{ AV_PIX_FMT_BAYER_BGGR16LE, AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_SBGGR10 },
對於raw16,目前的程式碼在libswscale/bayer_template.c中BAYER_SHIFT設定為8,表示低位的8位元直接捨棄,因為raw10只能捨棄低2位,所以我們將BAYER_SHIFT設定為2。
為了方便偵錯可以將libavutil/log.c中av_log_level從AV_LOG_INFO改成AV_LOG_TRACE,輸出更多資訊。
做完以上修改後重新編譯,安裝ffmpeg,然後使用命令"ffplay -f v4l2 -input_format bayer_bggr16le -video_size 4608x3456 -i /dev/video0"就可以實現預覽了,如果還是提示SDL初始化失敗,可以在shell中輸入DISPLAY=:0和export DISPLAY命令設定一下DISPLAY。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-01/127336.htm
相關文章