コード例 #1
0
        private bool SupportFor(KSProperties.CameraControlFeature feature)
        {
            KSPropertySupport supported = new KSPropertySupport();

            _ksPropertySet.QuerySupported(PROPSETID_VIDCAP_CAMERACONTROL, (int)feature, out supported);

            return(supported.HasFlag(KSPropertySupport.Set) && supported.HasFlag(KSPropertySupport.Get));
        }
コード例 #2
0
        private void MoveDirection(
            KSProperties.CameraControlFeature cameraControlFeature,
            int durationMilliseconds,
            int value
            )
        {
            // Create and prepare data structures
            var control = new KSProperties.KSPROPERTY_CAMERACONTROL_S();

            IntPtr controlData = Marshal.AllocCoTaskMem(Marshal.SizeOf(control));
            IntPtr instData    = Marshal.AllocCoTaskMem(Marshal.SizeOf(control.Instance));

            control.Instance.Value = value;

            //TODO: Fix for Absolute
            control.Instance.Flags = (int)CameraControlFlags.Relative;

            Marshal.StructureToPtr(control, controlData, true);
            Marshal.StructureToPtr(control.Instance, instData, true);

            _ksPropertySet.Set(
                PROPSETID_VIDCAP_CAMERACONTROL,
                (int)cameraControlFeature,
                instData,
                Marshal.SizeOf(control.Instance),
                controlData, Marshal.SizeOf(control)
                );

            // do stop after a while, to be safe
            Thread.Sleep(durationMilliseconds);

            control.Instance.Value = 0; //STOP!
            control.Instance.Flags = (int)CameraControlFlags.Relative;

            Marshal.StructureToPtr(control, controlData, true);
            Marshal.StructureToPtr(control.Instance, instData, true);

            _ksPropertySet.Set(
                PROPSETID_VIDCAP_CAMERACONTROL,
                (int)cameraControlFeature,
                instData,
                Marshal.SizeOf(control.Instance),
                controlData, Marshal.SizeOf(control)
                );

            if (controlData != IntPtr.Zero)
            {
                Marshal.FreeCoTaskMem(controlData);
            }
            if (instData != IntPtr.Zero)
            {
                Marshal.FreeCoTaskMem(instData);
            }
        }
コード例 #3
0
ファイル: PTZDevice.cs プロジェクト: sexroute/dvr_control
        private void MoveInternal(KSProperties.CameraControlFeature axis, int value)
        {
            // Create and prepare data structures
            var control = new KSProperties.KSPROPERTY_CAMERACONTROL_S();

            IntPtr controlData = Marshal.AllocCoTaskMem(Marshal.SizeOf(control));
            IntPtr instData    = Marshal.AllocCoTaskMem(Marshal.SizeOf(control.Instance));

            control.Instance.Value = value;

            //TODO: Fix for Absolute
            //control.Instance.Flags = (int)CameraControlFlags.Manual;
            control.Instance.Flags = (KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE | KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL);

            Marshal.StructureToPtr(control, controlData, true);
            Marshal.StructureToPtr(control.Instance, instData, true);
            var hr2 = _ksPropertySet.Set(PROPSETID_VIDCAP_CAMERACONTROL, (int)axis,
                                         instData, Marshal.SizeOf(control.Instance), controlData, Marshal.SizeOf(control));

            //TODO: It's a DC motor, no better way?
            Thread.Sleep(20);

            control.Instance.Value = 0; //STOP!
                                        // control.Instance.Flags = (int)CameraControlFlags.Manual;
            control.Instance.Flags = (KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE | KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL);
            Marshal.StructureToPtr(control, controlData, true);
            Marshal.StructureToPtr(control.Instance, instData, true);
            var hr3 = _ksPropertySet.Set(PROPSETID_VIDCAP_CAMERACONTROL, (int)axis,
                                         instData, Marshal.SizeOf(control.Instance), controlData, Marshal.SizeOf(control));

            if (controlData != IntPtr.Zero)
            {
                Marshal.FreeCoTaskMem(controlData);
            }
            if (instData != IntPtr.Zero)
            {
                Marshal.FreeCoTaskMem(instData);
            }
        }
コード例 #4
0
        private void MoveInternal(KSProperties.CameraControlFeature axis, int value)
        {
            // Create and prepare data structures
            var control = new KSProperties.KSPROPERTY_CAMERACONTROL_S();

            IntPtr controlData = Marshal.AllocCoTaskMem(Marshal.SizeOf(control));
            IntPtr instData    = Marshal.AllocCoTaskMem(Marshal.SizeOf(control.Instance));

            control.Instance.Value = value;

            //TODO: Fix for Absolute
            control.Instance.Flags = (int)CameraControlFlags.Relative;

            Marshal.StructureToPtr(control, controlData, true);
            Marshal.StructureToPtr(control.Instance, instData, true);
            var hr2 = _ksPropertySet.Set(PROPSETID_VIDCAP_CAMERACONTROL, (int)axis,
                                         instData, Marshal.SizeOf(control.Instance), controlData, Marshal.SizeOf(control));

            //TODO: It's a DC motor, no better way?
            Thread.Sleep(axis == KSProperties.CameraControlFeature.KSPROPERTY_CAMERACONTROL_TILT_RELATIVE ? 50 : 20); // Tilt needs longer to move

            control.Instance.Value = 0;                                                                               //STOP!
            control.Instance.Flags = (int)CameraControlFlags.Relative;

            Marshal.StructureToPtr(control, controlData, true);
            Marshal.StructureToPtr(control.Instance, instData, true);
            var hr3 = _ksPropertySet.Set(PROPSETID_VIDCAP_CAMERACONTROL, (int)axis,
                                         instData, Marshal.SizeOf(control.Instance), controlData, Marshal.SizeOf(control));

            if (controlData != IntPtr.Zero)
            {
                Marshal.FreeCoTaskMem(controlData);
            }
            if (instData != IntPtr.Zero)
            {
                Marshal.FreeCoTaskMem(instData);
            }
        }