资源简介

这是基于DirectShow的虚拟摄像头驱动源代码工程, 此工程采用从零开发,采用非常原始的方法实现COM基础组件和IBaseFilter,IPin等接口功能。 不依赖 DSHOW的SDK库就可以编译运行, 本代码工程使用VS2015编译。 如果你不喜欢,或者不想去了解DirectShow的工作原理, 大可不必理会我这种比较“疯狂”的做法,也不必下载我的这份代码给你平添无谓的烦恼。 source目录是工程目录, bin是已经编译好的dll,可以调用register.bat注册,调用unregister.bat注销. 注册成功后,使用DirectShow框架的程序就可以发现并访问这个虚拟摄像头,比如QQ,amcap等。 本工程详细原理介绍,请看如下链接: https://blog.csdn.net/fanxiushu/article/details/79830750 Fanxiushu 2018

资源截图

代码片段和文件信息

////by fanxiushu 2018-03-08

#include 
#include “stdio.h“
#include “vcamera.h“

HINSTANCE g_hInstance;
////
BOOL APIENTRY DllMain(HINSTANCE hInstance DWORD dwReason LPVOID lpReserved)
{
g_hInstance = hInstance;
if (dwReason == DLL_PROCESS_ATTACH) {
////
DisableThreadLibraryCalls(hInstance);
}

////
return TRUE;
}

//////
//下面从我的 虚拟USB摄像头的例子工程copy

//// 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  2018-04-06 02:03  vcam_dshow\
     目录           0  2018-04-06 01:52  vcam_dshow\bin\
     文件         233  2018-03-12 09:24  vcam_dshow\bin\register.bat
     文件         216  2018-03-12 09:24  vcam_dshow\bin\unregister.bat
     文件      124928  2018-04-05 19:03  vcam_dshow\bin\vcam_dshow.dll
     文件         636  2018-04-06 02:23  vcam_dshow\README.txt
     目录           0  2018-04-06 01:51  vcam_dshow\source\
     目录           0  2018-04-06 01:51  vcam_dshow\source\src\
     文件        4271  2018-04-05 02:39  vcam_dshow\source\src\main.cpp
     文件       13899  2018-04-05 17:39  vcam_dshow\source\src\vcamera.cpp
     文件         165  2018-04-04 22:57  vcam_dshow\source\src\vcamera.def
     文件         367  2018-04-05 17:02  vcam_dshow\source\src\vcamera.h
     文件       11631  2018-04-05 19:03  vcam_dshow\source\src\vcam_dshow.h
     文件       22475  2018-04-05 19:03  vcam_dshow\source\src\vcam_stream.cpp
     文件        1301  2018-03-12 07:08  vcam_dshow\source\vcam_dshow.sln
     文件        1505  2018-03-12 07:44  vcam_dshow\source\vcam_dshow.vcxproj.filters
     文件         643  2018-04-02 07:23  vcam_dshow\source\vcam_dshow.vcxproj.user
     文件       55744  2018-04-05 08:39  vcam_dshow\vcam_dshow.png

评论

共有 条评论