V4L2程式設計

2021-07-09 07:06:53 字數 2584 閱讀 4007

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef struct

buftype;

buftype *user_buf;

int n_buffer = 0;

//開啟攝像頭裝置

int open_camer_device()

return fd;

}int init_mmap(int fd)

n_buffer = reqbuf.count;

printf("n_buffer = %d\n",n_buffer);

user_buf = calloc(reqbuf.count,sizeof(*user_buf));

if(user_buf == null)

//將核心緩衝區對映到使用者程序空間

for(i = 0; i < reqbuf.count; i ++)

user_buf[i].length = buf.length;

user_buf[i].start = 

mmap(

null,/*start anywhere*/

buf.length,

prot_read | prot_write,

map_shared,

fd,buf.m.offset

);if(map_failed == user_buf[i].start)}

return 0;

}int init_camer_device(int fd)

,description = '%s'\n",

fmt.pixelformat & 0xff,(fmt.pixelformat >> 8)&0xff,

(fmt.pixelformat >> 16) & 0xff,(fmt.pixelformat >> 24)&0xff,

fmt.description);

}ret = ioctl(fd,vidioc_querycap,&cap);

if(ret < 0)

if(!(cap.capabilities & v4l2_buf_type_video_capture))

if(!(cap.capabilities & v4l2_cap_streaming))

//設定攝像頭採集資料格式,如設定採集資料的

//長,寬,影象格式(jpeg,yuyv,mjpeg等格式)

stream_fmt.type = v4l2_buf_type_video_capture;

stream_fmt.fmt.pix.width = 680;

stream_fmt.fmt.pix.height = 480;

stream_fmt.fmt.pix.pixelformat = v4l2_pix_fmt_mjpeg;

stream_fmt.fmt.pix.field = v4l2_field_interlaced;

if(-1 == ioctl(fd,vidioc_s_fmt,&stream_fmt))

init_mmap(fd);

return 0;

}int start_capturing(int fd)

}//開始採集資料

type = v4l2_buf_type_video_capture;

if(-1 == ioctl(fd,vidioc_streamon,&type))

return 0;

}//將採集好的資料放到檔案中

int process_image(void *addr,int length)

fwrite(addr,length,1,fp);

usleep(500);

fclose(fp);

return 0;

}int read_frame(int fd)

assert(buf.index < n_buffer);

//讀取程序空間的資料到乙個檔案中

process_image(user_buf[buf.index].start,user_buf[buf.index].length);

if(-1 == ioctl(fd,vidioc_qbuf,&buf))

return 1;

}int mainloop(int fd)

if(0 == r)

if(read_frame(fd))

break;}}

return 0;

}void stop_capturing(int fd)

return;

}void uninit_camer_device()}

free(user_buf);

return;

}void close_camer_device(int fd)

return;

}int main()

注意:每個攝像頭採集出來的資料格式可能不一樣,一般支援mjpeg,jpeg格式的攝像頭,採集出來的資料可以直接放在檔案中,然後用檢視器顯示。

V4L2 程式設計

v4l2程式設計 1.定義 2.工作流程 開啟裝置 檢查和設定裝置屬性 設定幀格式 設定一種輸入輸出方法 緩衝區管理 迴圈獲取資料 關閉裝置。3.裝置的開啟和關閉 include int open const char device name,int flags include int close ...

V4L2程式設計 轉

前言 目前正在忙於arm 平台的linux 應用程式的開發 其實是剛剛起步學習啦 底層的東西不用考慮了,開發板子提供了 nand bootloader 和linux 2.6 的原始碼,而且都編譯好了。自己編譯的 bootloader 可以用,但是 linux 編譯後,檔案很大,暫且就用人家編譯的系統...

V4L2程式設計例項

include include include include include include include include include include include include include include define req buf num 4 申請的緩衝區個數,最多5個,緩衝區...