AMcap是一款用于捕获视频或从网络摄像头预览的应用程序。其源代码随Microsoft Windows SDK一起提供。
我想(绕过amcap代码中的以下用户交互过程或说要)将其设置为默认值:
Ampcap菜单
Options
Video Capture Pin ...
Color Space/Compression: YUY2
Output size: 1600x1200
我有一个兼容的网络摄像头,可以在AMcap应用程序中手动更改为YUY2和1600x1200时正常工作。
默认情况下是:
Color Space/Compression: MJPG
Output size: 160x120
我试图在整个项目中找到'YUY2'字符串,但找不到,因此可以对其进行硬编码。它似乎是动态创建的,然后可以操作;请参阅:在文件amcap.cpp附近的第3395行中。
最佳答案
我有一些代码使用IID_IAMStreamConfig接口(interface)设置摄像机图像大小。我没有用它来设置图像格式,但是我添加了我认为可以完成工作的代码。但是未经测试。
// get the number of formats and make sure the strutucre size matches
int count;
int size;
VIDEO_STREAM_CONFIG_CAPS caps;
pSC->GetNumberOfCapabilities(&count, &size);
if( sizeof(caps) != size )
{
// Error
}
AM_MEDIA_TYPE* mt_p = NULL;
hr = pSC->GetStreamCaps(0, &mt_p, (BYTE*)&caps);
if (hr != S_OK)
{
// Error
}
if ((mt_p->majortype != MEDIATYPE_Video) || (mt_p->formattype != FORMAT_VideoInfo))
{
// Error
}
VIDEOINFOHEADER* video_info_header_p = (VIDEOINFOHEADER *)mt_p->pbFormat;
video_info_header_p->bmiHeader.biWidth = 1600;
video_info_header_p->bmiHeader.biHeight = 1200;
// Code to change video format
// I think 16 is the right value for biBitCount, but I am not sure!!!!
video_info_header_p->bmiHeader.biCompression = MAKEFOURCC('Y','U','Y','2');
video_info_header_p->bmiHeader.biBitCount = 16;
hr = pSC->SetFormat(mt_p);
if (hr != S_OK)
{
// Error
}
if (mt_p->cbFormat != 0)
{
CoTaskMemFree((PVOID)mt_p->pbFormat);
mt_p->cbFormat = 0;
mt_p->pbFormat = NULL;
}
if (mt_p->pUnk != NULL)
{
// Unecessary because pUnk should not be used, but safest.
mt_p->pUnk->Release();
mt_p->pUnk = NULL;
}
您应该将代码放在amcap中的以下代码块之后:
if(hr != NOERROR)
hr = gcap.pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Video, gcap.pVCap,
IID_IAMStreamConfig, (void **)&pSC);
同样,这是未经测试的代码,但是您可以尝试一下,希望对您有所帮助。
关于.net - 如何将amcap的默认颜色空间设置为YUY2?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/897300/