资源简介
这个是开发符合UVC标准的USB模拟数据包来模拟虚拟摄像头。 首先进入“虚拟端驱动-最新-”目录, 按照里边的说明安装USB虚拟总线驱动, 64位驱动没签名,若要安装成功,需要你自己签名处理. 然后,就可以编译运行程序xusb_vcam,会生成2个虚拟实例摄像头, 摄像头是符合UVC协议标准的免驱的。 可以按照正常使用摄像头的用法来使用虚拟摄像头。 src 目录里边的 old-drv-interface 子目录是使用发布到CSDN上的 http://download.csdn.net/detail/fanxiushu/9538188 驱动代码的接口部分代码, 若想开发自己的虚拟USB总线驱动,和自己的USB虚拟摄像头, 则可下载上边连接提供的驱动代码,并且编译测试。 代码作为例子,并没提供实际的数据源,只是在main.cpp代码中简单的动态模拟了一段文字大小不断变化。 你若有实际需要,可自行扩展功能, 但是慎重申明,请勿使用本代码作为基础开发出具有欺骗性功能的摄像头从事欺诈活动.
代码片段和文件信息
//////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位曼彻斯特编码
- 下一篇:征途资源提取器 征途资源提取器
相关资源
- CRF++windows版本
- 将DataSnap服务端做成Windows服务
- WindowsServer2008R2(X64)MSDN镜像简体中文
- 实现了异常管理流程QtSharpCore.zip
- Windows7 SP1旗舰版官方原版BT种子
- VC编写的简单聊天程序
- windows睡眠休眠唤醒助手
- Windows驱动签名工具 64Signer
- vivo_fastboot_for_windows
- windows安全检查bat脚本
- MindVision_Installer_Vise_for_Windows_v3.6 注册
- 图解方式详细说明Windows Server 2016原生
- QuartusII_13.0_Windows6432.zip
- Windows 7 SP1 6.1.7601.16537 泄漏版
- C经典教材-C和指针课后习题答案
- Symantec Backup Exec 12.5 for Windows Servers 注
- Windows命令行压缩解压缩工具
- Pinball - 非常经典windows自带的三维弹球
- ExtPart Windows Server 2003 磁盘扩容工具
- WindowsServer2012安装.net3.5.docx
- WindowsFormsApplication1.sln
- WPE PRO IND
- FX CONTRASE?AS
- PLC password unlock Mitsubishi
- MathType6.9简体中文注册版
- VS2008试用版升级正式版工具 CrackVS20
- windows10下spark2.3.0本地开发环境搭建
- win server 2019+激活工具.zip
- metricbeat-5.6.8-windows-x86_64.zip
- KB2999226-x64.rar
评论
共有 条评论