-
大小: 137KB文件类型: .zip金币: 1下载: 0 次发布日期: 2021-06-10
- 语言: 其他
- 标签: DirectShow Virtual Camera
资源简介
这是基于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
- 上一篇:基于LM算法的非线性最小二乘法拟合
- 下一篇:虚拟声卡驱动代码
相关资源
- virtual listctrl
- camera calibrate点集排序算法
- zw_CameraDemo.zip
- cameraCalibration.cfg
- QCamera支持多摄像头切换显示
- camera tuning file
- VirtualList.7z
- 资源树Virtualizing 使用模板.unitypackag
- IPcamera Test
- 本地安装CentOS-7-x86_64-Vagrant-2004_01.Vi
- Virtual Audio Cable 4.10 Win10版
- linux下基于QT和v4l2驱动的USB摄像头视频
- 基于QAbstractVideoSurface实现的摄像头数
- IP Camera的硬件电路图
- rk3399 camera支持型号列表V2.1--更新至
- VirtualBox
- cameraplugin.aar
- 虚拟声卡Virtual Audio
- GPS导航系统仿真源代码+仿真文件+虚拟
- 带数字签名Virtual USB Multikey64bit drive
- VirtualAudioCable4.60Win10版.rar
- DVDFabVirtualDriver
- CameraDs.h CameraDs.cpp directshow文件夹
- opencv与qt结合使用的(亲测可用)
- Hi3559V100/Hi3556V100 HD Mobile Camera SoC 用
- Virtual Audio Cable 4.1.3 完美破解版
- rocon_devices_kinetic
- virtual audio cable 4.10 破解去女声
-
camerali
nk 标准协议 - Pixel Perfect Camera 1.42
评论
共有 条评论