资源简介
本智能家居模拟系统,使用linux作为服务器操作系统。多线程服务器,实现了照明、手动调节控制环境状态信息,QT远程视频监控等功能。代码俱全
代码片段和文件信息
/*
* camera.c
*
* Created on: 2017年2月21日
* Author: farsight
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “camera.h“
//#include “sendPic.h“
struct VideoBuffer *buffers; //一片缓存
int buffer_num; //缓存个数
char rgbbuf[PICWIDTH * PICHEIGHT * 3]; //RGB缓存
unsigned char *rgbdata;//保存一帧rgb数据
unsigned char *jpegdata;//保存一帧jpeg数据
struct jpeg_compress_struct jpeg;
struct jpeg_error_mgr jerr;
int picsize;//用于记录文件大小
void *pthread_cameraClient(void *arg) {
pthread_camera();
return NULL;
}
int pthread_camera() {
//打开摄像头
if (0 > (camfd = cam_open())) {
perror(“open camera“);
return -1;
}
//初始化摄像头
cam_init();
//分配内存
get_memory();
//捕获视频
while(1){
capture_video();
}
return 0;
}
int cam_open() {
int fd;
fd = open(“/dev/video0“ O_RDWR 0);
return fd;
}
int cam_init() {
set_capture_format();
set_time_per_frame();
return 0;
}
int set_capture_format() {
struct v4l2_format fmt;
memset(&fmt 0 sizeof(fmt));
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
//设置图片大小
fmt.fmt.pix.width = PICWIDTH;
fmt.fmt.pix.height = PICHEIGHT;
//设置采集的图片的格式
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
if (-1 == ioctl(camfd VIDIOC_S_FMT &fmt)) {
return -1;
}
return 0;
}
int set_time_per_frame() {
struct v4l2_streamparm parm;
memset(&parm 0 sizeof(parm));
parm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
parm.parm.capture.timeperframe.numerator = 1;
parm.parm.capture.timeperframe.denominator = TIME_PER_frame;
parm.parm.capture.capturemode = V4L2_MODE_HIGHQUALITY;
parm.parm.capture.capability = V4L2_CAP_TIMEPERframe;
if (0 > ioctl(camfd VIDIOC_S_PARM &parm)) {
return -1;
}
return 0;
}
int get_memory() {
struct v4l2_requestbuffers req;
req.count = TIME_PER_frame;
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; //数据流类型: 必须是 V4L2_BUF_TYPE_VIDEO_CAPTURE
req.memory = V4L2_MEMORY_MMAP; //内存工作方式 mmap 映射
if (-1 == ioctl(camfd VIDIOC_REQBUFS &req)) {
return -1;
}
buffers = calloc(req.count sizeof(VB));
struct v4l2_buffer tmp;
for (buffer_num = 0; buffer_num < req.count; ++buffer_num) {
memset(&tmp 0 sizeof(tmp));
tmp.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
tmp.memory = V4L2_MEMORY_MMAP;
tmp.index = buffer_num;
//读取缓存
if (-1 == ioctl(camfd VIDIOC_QUERYBUF &tmp)) {
return -1;
}
buffers[buffer_num].length = tmp.length;
//使用mmap映射转换成相应的地址
buffers[buffer_num].start = mmap(NULL tmp.length
PROT_READ | PROT_WRITE MAP_SHARED camfd tmp.m.offset);
if (buffers[buffer_num].start == MAP_FAILED) {
return -1;
}
//放入缓存队列
if (-1 == ioctl(camfd VIDIOC_QBUF &tmp)) {
return -1;
}
}
return 0;
}
int turn_on_video() {
enum v4l2_buf_type v4l2type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (-1 == ioctl(camfd VIDIOC_STRE
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\
文件 13876 2017-02-23 10:34 AutomaticSprinklerSystem_1.4.2\.cproject
文件 825 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.project
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.settings\
文件 2088 2017-02-23 10:34 AutomaticSprinklerSystem_1.4.2\.settings\language.settings.xm
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\
文件 2 2017-02-23 10:05 AutomaticSprinklerSystem_1.4.2\.svn\entries
文件 2 2017-02-23 10:05 AutomaticSprinklerSystem_1.4.2\.svn\format
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\0c\
文件 62 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\0c\0c082d90f5daa56c761bfe3e9fb016b0b84fe88b.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\0f\
文件 10890 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\0f\0f79b9b6627d4abb38d5c6d043175ec041a42e73.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\11\
文件 224 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\11\11d76698efe23ac67897e50cabb13f3455541b5f.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\12\
文件 589 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\12\12538e9a83348aeef959e73a1542eadcb8d1aabc.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\15\
文件 2326 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\15\15ba5c27a7854aefab86063deb10baded155f27f.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\16\
文件 196 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\16\165bbcfc5cc5b0e8cadb148ec51e2fe9b560a59a.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\18\
文件 6536 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\18\186a8e777ccf20b0cec9a5aadba36430dbff7598.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\1e\
文件 137 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\1e\1ed12e2b729624ed78b72ada2546d234c7e5a88c.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\22\
文件 798434 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\22\223fa0b83c1259de02c6c04a7c2fc9b97789a595.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\24\
文件 5459 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\24\24d13bc5cd724a511d88119ed9ebb30c27125712.svn-ba
目录 0 2017-02-24 16:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\2b\
文件 157 2017-02-23 10:06 AutomaticSprinklerSystem_1.4.2\.svn\pristine\2b\2b723b8f21e15fbf12d52d4ddd87e3221aa931fa.svn-ba
............此处省略313个文件信息
- 上一篇:Spring 框架做的问卷调查系统源代码
- 下一篇:100天学会SAP
评论
共有 条评论