1 Star 0 Fork 3

FengQiangjian / uvc_app

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
main.c 1.77 KB
一键复制 编辑 原始数据 按行查看 历史
#include <stdio.h>
#include <unistd.h>
#include "uvc_control.h"
#include "uvc_video.h"
#include "mpi_enc.h"
#include "drm.h"
int main(int argc, char* argv[])
{
int fd;
int ret;
unsigned int handle;
char *buffer;
int handle_fd;
size_t size;
int i = 0;
int width, height;
int y, uv;
int extra_cnt = 0;
uint32_t flags = 0;
if (argc != 3) {
printf("Usage: uvc_app width height\n");
printf("e.g. uvc_app 640 480\n");
return -1;
}
width = atoi(argv[1]);
height = atoi(argv[2]);
if (width == 0 || height == 0) {
printf("Usage: uvc_app width height\n");
printf("e.g. uvc_app 640 480\n");
return -1;
}
fd = drm_open();
if (fd < 0)
return -1;
size = width * height * 3 / 2;
ret = drm_alloc(fd, size, 16, &handle, 0);
if (ret)
return -1;
ret = drm_handle_to_fd(fd, handle, &handle_fd, 0);
if (ret)
return -1;
buffer = (char*)drm_map_buffer(fd, handle, size);
if (!buffer) {
printf("drm map buffer fail.\n");
return -1;
}
y = width * height / 4;
memset(buffer, 128, y);
memset(buffer + y, 64, y);
memset(buffer + y * 2, 128, y);
memset(buffer + y * 3, 192, y);
uv = width * height / 8;
memset(buffer + y * 4, 0, uv);
memset(buffer + y * 4 + uv, 64, uv);
memset(buffer + y * 4 + uv * 2, 128, uv);
memset(buffer + y * 4 + uv * 3, 192, uv);
flags = UVC_CONTROL_LOOP_ONCE;
uvc_control_run(flags);
while(1) {
extra_cnt++;
uvc_read_camera_buffer(buffer, handle_fd, size, &extra_cnt, sizeof(extra_cnt));
usleep(30000);
}
uvc_control_join(flags);
drm_unmap_buffer(buffer, size);
drm_free(fd, handle);
drm_close(fd);
return 0;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/xxJian/uvc_app.git
git@gitee.com:xxJian/uvc_app.git
xxJian
uvc_app
uvc_app
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891