我正在尝试编写一个程序,将设置摄像头设置根据存储的预设。我使用的是C#和DirectShow.Net。到目前为止,除了上面提到的那些,我还可以访问所有的设置。
要读取设置,我使用以下代码:
DsDevice[] capDevices;
// Get the collection of video devices
capDevices =
DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
// Select first camera
var dev = capDevices[0];
int hr;
IBaseFilter capFilter = null;
ICaptureGraphBuilder2 capGraph = null;
// Get the graphbuilder object
IFilterGraph2 m_FilterGraph = (IFilterGraph2)new FilterGraph();
try
{
// Get the ICaptureGraphBuilder2
capGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
/// Start building the graph
hr = capGraph.SetFiltergraph(m_FilterGraph);
DsError.ThrowExceptionForHR(hr);
// Add the video device
hr = m_FilterGraph.AddSourceFilterForMoniker(dev.Mon, null, "Video input", out capFilter);
DsError.ThrowExceptionForHR(hr);
int value;
// Reset settings
cameraSettings.Reset();
// Get IAMVideoProcAmp Values
IAMVideoProcAmp pVideoAmp = (IAMVideoProcAmp)capFilter;
VideoProcAmpFlags vpaFlags;
pVideoAmp.Get(VideoProcAmpProperty.Brightness, out value, out vpaFlags);
.....
// Get IAMCameraControl Values
IAMCameraControl pCameraControl = (IAMCameraControl)capFilter;
CameraControlFlags ccFlags;
pCameraControl.Get(CameraControlProperty.Exposure, out value, out ccFlags);
.....
但是,这两个接口都不允许获取这两个值。我将附加一个屏幕截图,其中显示了在网络摄像头设置的典型窗口界面中可访问的值:
如何通过DirectShow.Net访问这些值?
发布于 2020-10-10 23:04:16
这些属性页分别使用IAMVideoProcAmp
和IAMCameraControl
接口与筛选器对象通信。也就是说,IAMVideoProcAmp::Set
和IAMCameraControl::Set
是由属性页实现调用的方法,它们同样可以由应用程序以编程方式使用。
属性枚举没有定义电力线频率和弱光补偿的值,因为SDK和文档不再更新以指示来自扩展枚举的值,但是确实存在新的属性。具体地说,它们存在于常用属性页实现中。
命名和文档化的属性值可从较低层SDK定义中获得:
https://stackoverflow.com/questions/64278994
复制相似问题