歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 關於Linux平台視頻采集程序的修改

關於Linux平台視頻采集程序的修改

日期:2017/2/28 16:19:53   编辑:Linux教程

在真正開始編寫程序前,我作了大量工作,包括了解Linux支持的攝像頭類型、Linux攝像頭驅動程序、攝像頭采集模型,等等,——當然,還包括去買個攝像頭。網上流行的是gspca驅動以及一些老式攝像頭的程序,這些攝像頭目前市面上比較難找了。而且驅動、應用程序的安裝也比較麻煩。此外,網上能搜索到的資料絕大部分均為轉載而不注明出處,因此許多資料十分相似。而且許多資料都是介紹基本的流程,每當涉及到關鍵算法及代碼時,均一句話帶過。因此,只參考網上資料很難寫出一個可能使用的程序。

我相信網上有許多人已經做出來了,不過我未查到能直接使用的程序。因此我決定將我所做的一切公布出來,——這是我的習慣,每當遇到難題而別人沒有解決(或自己找不到牛人幫忙),我都會由著自己的性子將解決問題的過程寫出來。這不是為了炫耀自己的能力,而是心中有一種怨氣,覺得不爽,需要找個地方(用某種方式)發洩一下(下面講到的那篇文章中,其實我已經刪除了部分文字)。

我以“嵌入式 Linux 視頻采集”等為關鍵字查閱許多期刊、論文(在學校的一大好處是可以免費下載萬方的期刊、論文),但這些文章都是在一個很高很抽象的層次來講解,動不動就涉及到系統設計、框架,如果想找點能使用的代碼,基本上沒有。當然,這是論文的最大特色。但是,我們還沒有達到那麼高的層次,我們需要的是代碼,真正能使用的代碼。

經過一段時候的搜索,我終於知道了一些專業名詞,比如“UVC”、“V4L2”等,也看了一些介紹視采集的介紹。不過我還是有選擇地查閱了V4L2官方的文檔,將其中一些用得到的章節反復看幾次。我曾一時心血來潮想翻譯這個文檔,甚至還到論壇上發帖想跟別人一起翻譯,然而由於能力及時間問題,還是沒有做成這件事(當時翻譯了一些IBM developerworks上的文章,有點上瘾了)。這個時候,我發現網上那些號稱xx的程序,不過是人家文檔中給出的例子,——有意思的是,這個例子中處理圖像的函數是空函數。同時,我找到了一個叫luvcview的開源項目,並閱讀其中的代碼,不過由於一些處理函數太過復雜,自己沒能力理解(比如huffman、rgb、yuyv這些東西)。後面將這個項目中采集及顯示的部分抽出來,自己整理,成為自己的程序——從中可以看到,這是站在別人肩膀上得到的結果。但不可否認,這中間有我的心血。

這次重新修改以前的代碼,由於在編碼風格上下了比較大的力氣,因此還算順利,沒有遇到連自己也不認識的函數、變量名。此外,為了方便doxygen生成文檔,在doxygen風格的注釋中使用了中文。大部分相關的源代碼文件使用了”UFT-8 無BOM格式編碼“保存(實際使用的編輯器為notepad++)。注釋也不是一件好差事,它也要講究技巧及內容。當然,在發布之前必須做一些測試,至少要保證在自己的平台中測試沒有問題才敢發布。下面是測試的環境:

虛擬機fc10
內核版本:
[latelee@latelee camera-pc-utf]$ uname -a
Linux latelee.latelee.org 2.6.27.5-117.fc10.i686 #1 SMP Tue Nov 18 12:19:59 EST 2008 i686 i686 i386 GNU/Linux
SDL版本:
[latelee@latelee camera-pc-utf]$ rpm -q "SDL"
SDL-1.2.13-6.fc10.i386
glibc版本:
[latelee@latelee camera-pc-utf]$ rpm -q "glibc"
glibc-2.9-2.i686
gcc版本:
[latelee@latelee camera-pc-utf]$ gcc --version
gcc (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7)
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software ; see the source for copying conditions. There is NO
warranty ; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Copyright © Linux教程網 All Rights Reserved