硬件平臺:Jetson TK1 開發(fā)板(NVIDIA Tegra K1 Mobile Processor 32bit),寧波舜宇光電SP103A(OV16825)模組
軟件平臺:Ubuntu/Linaro 4.8.2-16ubuntu4(Linux version 3.10.40 32bit)
攝像頭驅(qū)動已經(jīng)實現(xiàn),支持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下載官網(wǎng)最新的版本,當(dāng)前版本是2.8版本,通過configure --enable-memalign-hack --enable-static,make, sudo make install安裝就可以了。
我們的驅(qū)動輸出的是sensor的原始數(shù)據(jù),為bayer raw10格式,每個顏色占用16bit,只有低10位是有效數(shù)據(jù),順序為bggr。ffmpeg的原始代碼是不支持raw10的,需要做一定的修改。原始代碼支持bayer raw8和bayer raw16, 因為bayer raw10和bayer raw16一樣都是占用兩個字節(jié),所以我們參考bay raw16修改。首先在libavdevice/v4l2-common.c中的ff_fmt_conversion_table中增加一項,這里我們直接借用raw16格式,在應(yīng)用看來raw10作為raw16處理,在v4l2接口調(diào)用時使用V4L2_PIX_FMT_SBGGR10。
{ AV_PIX_FMT_BAYER_BGGR16LE, AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_SBGGR10 },
對于raw16,目前的代碼在libswscale/bayer_template.c中BAYER_SHIFT設(shè)置為8,表示低位的8位直接舍棄,因為raw10只能舍棄低2位,所以我們將BAYER_SHIFT設(shè)置為2。
為了方便調(diào)試可以將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"就可以實現(xiàn)預(yù)覽了,如果還是提示SDL初始化失敗,可以在shell中輸入DISPLAY=:0和export DISPLAY命令設(shè)置一下DISPLAY。