• 大小: 331KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-05
  • 语言: 其他
  • 标签: C++  Windows  

资源简介

这个是开发符合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个文件信息

评论

共有 条评论