DirectShow 修该摄像机采集分辨率时,提示错误
int hr;
IntPtr intPtr = IntPtr.Zero;
try
{
// 修该分辨率
object streamConfig = null;
//int resultHr = capGraph.FindInterface(vdCap, gTemp, capFilter, gTemp, out ppvideoCap);
int resultHr = capGraph.FindInterface(PinCategory.Capture,
MediaType.Video,
capFilter,
typeof(IAMStreamConfig).GUID,
out streamConfig);
if (resultHr < 0)
Marshal.ThrowExceptionForHR(resultHr);
IAMStreamConfig videoStreamConfig = streamConfig as IAMStreamConfig;
if (videoStreamConfig == null)
{
throw new Exception("Failed to get IAMStreamConfig");
}
// 修改分辨率
AMMediaType ammtp = new AMMediaType();
videoStreamConfig.GetFormat(ammtp);
VideoInfoHeader pvihdr = new VideoInfoHeader();
Marshal.PtrToStructure(ammtp.formatPtr, pvihdr);
pvihdr.BmiHeader.Height = 720; //修改采集视频的高为720
pvihdr.BmiHeader.Width = 1080; //修改采集视频的宽为1080
int nSizeOfHeaderInfo = Marshal.SizeOf(pvihdr);
intPtr = Marshal.AllocHGlobal(nSizeOfHeaderInfo);
IntPtr newConfigHeaderInfo = IntPtr.Zero;
Marshal.StructureToPtr((object)pvihdr, intPtr, true);
ammtp.formatPtr = newConfigHeaderInfo;
videoStreamConfig.SetFormat(ammtp);
}
catch(Exception ex)
{
}
finally
{
Marshal.FreeHGlobal(intPtr);
}