一:JPG庫----》jpg或者jpeg圖檔-----》液晶
jpg檔案是有損的
jpg是24位顔色圖
JPEG格式:經過壓縮-----》使用算法還原回RGB
JPEG壓縮算法:開源的第三庫
開源的第三方庫
經過壓縮JPEG格式------------------》RGB------>lcd液晶螢幕
1)下載下傳飛秋的JPEG庫:jpegsrc.v9a.tar.gz
2) 把jpegsrc.v9a.tar.gz放置共享目錄
3)在Ubuntu中,回到JPEG庫所在的位置
cd /mnt/hgfs/linux/jpegsrc.v9a.tar.gz
4)解壓到家目錄中
tar zxvf jpegsrc.v9a.tar.gz -C ~
其中:
tar:解壓或者壓縮的指令
z :解壓以.gz結尾的壓縮包 j----》.bz2
x :解壓 c----》壓縮
v :可見的方式進行解壓(把解壓縮的過程列印出來)
f :檔案
-C :指定你解壓的路徑
~ :指定解壓到位置
5)回到家目錄下,看看是否解壓成功
回家目錄 cd
ls-----》是否有jpeg-9a----》解壓成功
6)在家目錄中建立一個新的目錄,作為jpeg庫安裝
回家目錄 cd
mkdir jpg
chmod 777 jpg
7)切換到解壓後目錄
cd ~/jpeg-9a
8)配置
./configure --host=arm-linux --prefix=/home/gec/jpg
9)編譯
make
10)安裝
make install
11)檢查是否安裝成功
cd ~/jpg
ls
bin:二進制檔案
include:頭檔案
jconfig.h jerror.h jmorecfg.h jpeglib.
lib:庫檔案
libjpeg.so.9.1.0----》jpeg算法庫
share:幫助文檔
12)下載下傳飛秋的jpeg_show.c檔案
jpeg開放源碼:jpeg_show.c
13)把jpeg_show.c放置到共享目錄
14)去Ubuntu中,回到jpeg_show.c所在路徑下面
cd /mnt/hgfs/linux/
15)編譯工程
arm-linux-gcc jpeg_show.c -o jpeg_show
-I /home/gec/jpg/include -L /home/gec/jpg/lib/ -ljpeg
arm-linux-gcc jpeg_show.c -o jpeg_show 編譯指令
-I /home/gec/jpg/include :指定頭檔案的路徑
-L /home/gec/jpg/lib/ :指定庫檔案的路徑
-ljpeg :指定連結庫jpeg
16)把jpeg_show拷貝到開發闆中
rx
17)修改權限
chmod
18)執行
./jpeg_show 1.jpg
[[email protected] /]#./jpeg_show 1.jpg
./jpeg_show: error while loading shared libraries:
libjpeg.so.9: cannot open shared object file:
No such file or directory
解決方案:把libjpeg.so.9.1.0 下載下傳到開發闆
19)先拷貝libjpeg.so.9.1.0到共享目錄
20)将庫拷貝到CRT當中去;
mv libjpeg.so.9.1.0 /lib
并且将名字改為libjpeg.so.9
21)重新執行工程
===================攝像頭=====================
1.在linux中那些常用的應用裝置
液晶顯示螢幕、鍵盤、滑鼠、觸摸屏、攝像頭、U盤等
linux前輩設計很多的模型
1.友善我們去調用驅動
2.按部就班的操作
=============================================
2.由于這種原因我們在寫的時候就可以按照模型的“套路”
頭檔案指定庫指定我們需要的路徑
宏定義包含了所有的狀态
函數主體
1.打開檔案(open 驅動)
2.代碼功能子產品
3.關閉檔案
=============================================
3.linux當中有關視訊類的裝置------》攝像頭 統一的架構(V4l2)
使程式有發現裝置和操作裝置的能力。
它主要用一系列的函數實作我們想要的功能。
像設定攝像頭的參數、幀頻、視訊壓縮格式和圖像參數等。
當然統一的架構隻能在linux作業系統
linux系統中有一個頭檔案和V4L2架構是相關的
vi /usr/include/linux/videodev2.h
=============================================
4.幀捕捉畫面
幀——就是影像動畫中最小機關的單幅影像畫面,
相當于電影膠片上的每一格鏡頭。
一幀就是一副靜止的畫面,連續的幀就形成動畫
=============================================
5.攝像頭操作流程:
1.打開裝置檔案。 int fd=open("/dev/video7",O_RDWR);
注意(等開發闆開啟之後在插攝像touch)
2. 取得裝置的capability,看看裝置具有什麼功能,
比如是否具有視訊輸入,或者音頻輸入輸出等。VIDIOC_QUERYCAP,struct v4l2_capability(可選)
3. 選擇視訊輸入,一個視訊裝置可以有多個視訊輸入。VIDIOC_S_INPUT,struct v4l2_input
4. 設定視訊的制式和幀格式,制式包括PAL,NTSC,
幀的格式個包括寬度和高度等。
VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format
5. 向驅動申請幀緩沖,一般不超過5個。
struct v4l2_requestbuffers
6. 将申請到的幀緩沖映射到使用者空間,
這樣就可以直接操作采集到的幀了,而不必去複制。
7. 将申請到的幀緩沖全部入隊列,以便存放采集到的資料.
VIDIOC_QBUF,struct v4l2_buffer
8. 開始視訊的采集。VIDIOC_STREAMON
9. 出隊列以取得已采集資料的幀緩沖,取得原始采集資料。
VIDIOC_DQBUF
10. 将緩沖重新入隊列尾,這樣可以循環采集。VIDIOC_QBUF
11. 停止視訊的采集。VIDIOC_STREAMOFF
12. 關閉視訊裝置。close(fd);
=======================================
攝像頭:
1.驅動/dev/video7
2.使用結構體
typedef struct Frame_Buffer
{
char buf[1843200]; //攝像頭捕捉的資料顯示(jpg:600*480)
int length; //攝像頭捕捉的資料大小
}FrameBuffer;
3.代碼功能子產品
//初始化攝像頭
int linux_v4l2_device_init(const char *dev);
//開啟攝像頭捕捉
int linux_v4l2_start_capturing();
//擷取攝像頭的畫面
int linux_v4l2_get_fream(FrameBuffer *freambuf);
//攝像頭顯示畫面
int show_video_data(unsigned int x,unsigned int y,
char *pjpg_buf,unsigned int jpg_buf_size)
//攝像頭暫停捕捉
int linux_v4l2_stop_capturing();
//解除攝像頭的初始化
int linux_v4l2_device_uinit();
====================================
頭檔案:
什麼時候用<.h> 頭檔案存在系統庫裡面
什麼時候用".h" 頭檔案不在系統庫,根據目前目錄查找
編譯指令
arm-linux-gcc *.c -o viode_show -L./jpeg -lapi_v4l2_arm -I./jpeg -ljpeg
github源代碼