資源簡介
這個是開發符合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位曼徹斯特編碼
- 下一篇:征途資源提取器 征途資源提取器
評論
共有 條評論