资源简介
这个是开发符合UVC标准的USB模拟数据包来模拟虚拟摄像头。 首先进入“虚拟端驱动-最新-”目录, 按照里边的说明安装USB虚拟总线驱动, 64位驱动没签名,若要安装成功,需要你自己签名处理. 然后,就可以编译运行程序xusb_vcam,会生成2个虚拟实例摄像头, 摄像头是符合UVC协议标准的免驱的。 可以按照正常使用摄像头的用法来使用虚拟摄像头。 src 目录里边的 old-drv-interface 子目录是使用发布到CSDN上的 http://download.csdn.net/detail/fanxiushu/9538188 驱动代码的接口部分代码, 若想开发自己的虚拟USB总线驱动,和自己的USB虚拟摄像头, 则可下载上边连接提供的驱动代码,并且编译测试。 代码作为例子,并没提供实际的数据源,只是在main.cpp代码中简单的动态模拟了一段文字大小不断变化。 你若有实际需要,可自行扩展功能, 但是慎重申明,请勿使用本代码作为基础开发出具有欺骗性功能的摄像头从事欺诈活动.
![](http://www.nz998.com/pic/32176.jpg)
代码片段和文件信息
//////Fanxiushu 2016-10-06
#include
#include
#include “uvc_vcam.h“
//// RGB -> YUV 从网络查询的算法
void rgb24_yuy2(void* rgb void* yuy2 int width int height)
{
int R1 G1 B1 R2 G2 B2 Y1 U1 Y2 V1;
unsigned char* pRGBData = (unsigned char *)rgb;
unsigned char* pYUVData = (unsigned char *)yuy2;
for (int i = 0; i {
for (int j = 0; j {
B1 = *(pRGBData + (height - i - 1)*width * 3 + j * 6);
G1 = *(pRGBData + (height - i - 1)*width * 3 + j * 6 + 1);
R1 = *(pRGBData + (height - i - 1)*width * 3 + j * 6 + 2);
B2 = *(pRGBData + (height - i - 1)*width * 3 + j * 6 + 3);
G2 = *(pRGBData + (height - i - 1)*width * 3 + j * 6 + 4);
R2 = *(pRGBData + (height - i - 1)*width * 3 + j * 6 + 5);
Y1 = ((66 * R1 + 129 * G1 + 25 * B1 + 128) >> 8) + 16;
U1 = (((-38 * R1 - 74 * G1 + 112 * B1 + 128) >> 8) + ((-38 * R2 - 74 * G2 + 112 * B2 + 128) >> 8)) / 2 + 128;
Y2 = ((66 * R2 + 129 * G2 + 25 * B2 + 128) >> 8) + 16;
V1 = (((112 * R1 - 94 * G1 - 18 * B1 + 128) >> 8) + ((112 * R2 - 94 * G2 - 18 * B2 + 128) >> 8)) / 2 + 128;
*(pYUVData + i*width * 2 + j * 4) = max(min( Y1 255) 0);
*(pYUVData + i*width * 2 + j * 4 + 1) = max(min( U1 255) 0);
*(pYUVData + i*width * 2 + j * 4 + 2) = max(min( Y2 255) 0);
*(pYUVData + i*width * 2 + j * 4 + 3) = max(min( V1 255) 0);
}
}
}
////////////////////
struct vcam_param
{
HBITMAP hbmp;
HDC hdc;
void* rgb_data;
int width;
int height;
const char* text;
int i_color;
int clr_flip;
int i_size;
int sz_flip;
};
int create_dib(vcam_param* p int w int h)
{
if (p->width == w && p->height == h && p->hbmp ) return 0;
////
if (p->hbmp)Deleteobject(p->hbmp);
if (p->hdc)DeleteDC(p->hdc);
p->hbmp = 0; p->hdc = 0;
p->hdc = CreateCompatibleDC(NULL);
BITMAPINFOHEADER bi; memset(&bi 0 sizeof(bi));
bi.biSize = sizeof(bi);
bi.biWidth = w;
bi.biHeight = h;
bi.biPlanes = 1;
bi.biBitCount = 24; //RGB
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
p->hbmp = CreateDIBSection(p->hdc (BITMAPINFO*)&bi DIB_RGB_COLORS &p->rgb_data NULL 0);
if (!p->hbmp) {
p->rgb_data = 0;
printf(“CreateDIBSection err=%d\n“ GetLastError() );
return -1;
}
Selectobject(p->hdc p->hbmp); ///
////
p->width = w;
p->height = h;
p->clr_flip = 1;
p->i_color = 0;
p->i_size = 20;
p->sz_flip = 2; ///
return 0;
}
void draw_text(vcam_param* p)
{
if (!p->hbmp)return;
////
int len = p->width*p->height * 3; //
memset(p->rgb_data p->i_color len); /// 背景色渐变
p->i_color += p->clr_flip;
if (p->i_color <=0 || p->i_color >=245 ) p->clr_flip = -p->clr_flip; ///
////
p->i_size += p->sz_flip;
if (p->i_size <= 10 || p->i_size >= 60 ) p->sz_flip = -p->sz_flip;
HFONT font = CreateFont(p->i_size p->i_size*3/4 1 0 800 FALSE FALSE FALSE DEFAULT_CHARSET 0 0 0 0 NULL);
HFON
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 57344 2016-10-08 22:59 xusb_vcam\.vs\xusb_vcam\v14\.suo
文件 875008 2016-10-07 01:37 xusb_vcam\Debug\xusb_vcam.exe
文件 4988 2016-10-07 00:39 xusb_vcam\src\ioctl.h
文件 4813 2016-10-08 16:05 xusb_vcam\src\main.cpp
文件 4495 2016-05-22 20:18 xusb_vcam\src\old-drv-interface\ioctl.h
文件 8367 2016-10-06 19:30 xusb_vcam\src\old-drv-interface\virt_dev.cpp
文件 3493 2016-10-06 16:58 xusb_vcam\src\old-drv-interface\virt_dev.h
文件 18152 2016-10-05 01:05 xusb_vcam\src\uvc_struct.h
文件 25970 2016-10-07 01:11 xusb_vcam\src\uvc_vcam.cpp
文件 493 2016-10-07 00:37 xusb_vcam\src\uvc_vcam.h
文件 10776 2016-10-07 00:38 xusb_vcam\src\virt_dev.cpp
文件 4008 2016-10-05 19:17 xusb_vcam\src\virt_dev.h
文件 70360 2016-10-08 22:55 xusb_vcam\win10运行效果图.png
文件 1299 2016-10-01 14:39 xusb_vcam\xusb_vcam.sln
文件 7631 2016-10-06 04:00 xusb_vcam\xusb_vcam.vcxproj
文件 1482 2016-10-06 04:00 xusb_vcam\xusb_vcam.vcxproj.filters
文件 783 2016-10-08 23:04 xusb_vcam\使用说明.txt
文件 2175 2016-05-29 04:28 xusb_vcam\虚拟端驱动-最新-2016-10月份\x64\xusb_bus.inf
文件 2210 2016-05-29 03:58 xusb_vcam\虚拟端驱动-最新-2016-10月份\x64\xusb_ctrl.inf
文件 1939 2016-10-07 00:19 xusb_vcam\虚拟端驱动-最新-2016-10月份\x64\xusb_virt.cat
文件 45568 2016-10-07 00:18 xusb_vcam\虚拟端驱动-最新-2016-10月份\x64\xusb_virt.sys
文件 2175 2016-05-29 04:28 xusb_vcam\虚拟端驱动-最新-2016-10月份\x86\xusb_bus.inf
文件 2210 2016-05-29 03:58 xusb_vcam\虚拟端驱动-最新-2016-10月份\x86\xusb_ctrl.inf
文件 1939 2016-10-07 00:21 xusb_vcam\虚拟端驱动-最新-2016-10月份\x86\xusb_virt.cat
文件 36864 2016-10-07 00:20 xusb_vcam\虚拟端驱动-最新-2016-10月份\x86\xusb_virt.sys
文件 572 2016-10-07 01:35 xusb_vcam\虚拟端驱动-最新-2016-10月份\使用说明.txt
文件 908 2016-10-07 00:42 xusb_vcam\虚拟端驱动-最新-2016-10月份\说明.txt
目录 0 2016-10-01 14:39 xusb_vcam\.vs\xusb_vcam\v14
目录 0 2016-10-01 14:39 xusb_vcam\.vs\xusb_vcam
目录 0 2016-10-06 19:45 xusb_vcam\src\old-drv-interface
............此处省略10个文件信息
- 上一篇:单片机8-16位曼彻斯特编码
- 下一篇:征途资源提取器 征途资源提取器
相关资源
-
Windows em
bedded Compact 2013 应用开发调 - 黑苹果硬件兼容检测和查询软件
- Uninstall_Cortana_WINCLIENT.CN.rar
- VisualStudioUninstaller vs卸载工具
- 组态王驱动开发包3.0.0.7(中文)
- 多窗口后台鼠标连点器
- 使用选择性重传协议实现UDP可靠通信
- VMware65_SLP_DeLLSLIC2.1
- Windows异步套接字网络编程
- WINDOWS98启动盘镜像Win98.IMA
- VC 获得文件属性 获取文件的创建时
- 仿windows记事本
- 读者写者问题(读者优先,写者优先
- 用VC 编写的仿QQ聊天室程序源代码
- 外点法程序
- 外罚函数程序
- qt-电子点菜系统
- windows7用的,非常漂亮的透明计时器
- 推箱子及人工智能寻路C 源代码
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- MUSIC算法c 实现
- C 餐厅叫号系统(QT平)
- 国际象棋c 完整版
-
ob
jectARX给Auto CAD加工具条 - 画图程序MFC/VC/VC CRectTracker 串行化
- MFC网络编程实例
- c 课程设计 职工信息管理系统
- VC 游戏编程—附源代码
- IpHlpApi.h&IpHlpApi.lib
评论
共有 条评论