-
大小: 137KB文件類型: .zip金幣: 2下載: 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算法的非線性最小二乘法擬合
- 下一篇:虛擬聲卡驅動代碼
評論
共有 條評論