V4L2應用層程式設計

2021-06-22 21:44:20 字數 2568 閱讀 5259

#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()

V4L2程式設計

include include include include include include include include include include typedef struct buftype buftype user buf int n buffer 0 開啟攝像頭裝置 int ope...

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 編譯後,檔案很大,暫且就用人家編譯的系統...