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