c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/** @file
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VBox Remote Desktop Extension (VRDE) - Video Input interface.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
15071fa8e053848b4a479e9c2be14231c115f330vboxsync * Copyright (C) 2012-2013 Oracle Corporation
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * available from http://www.virtualbox.org. This file is free software;
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * you can redistribute it and/or modify it under the terms of the GNU
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * General Public License (GPL) as published by the Free Software
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c58f1213e628a545081c70e26c6b67a841cff880vboxsync *
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * The contents of this file may alternatively be used under the terms
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * of the Common Development and Distribution License Version 1.0
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * VirtualBox OSE distribution, in which case the provisions of the
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * CDDL are applicable instead of those of the GPL.
c58f1213e628a545081c70e26c6b67a841cff880vboxsync *
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * You may elect to license modified versions of this file under the
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * terms and conditions of either the GPL or the CDDL or both.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#ifndef ___VBox_RemoteDesktop_VRDEVideoIn_h
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define ___VBox_RemoteDesktop_VRDEVideoIn_h
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* Define VRDE_VIDEOIN_WITH_VRDEINTERFACE to include the server VRDE interface parts. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#ifdef VRDE_VIDEOIN_WITH_VRDEINTERFACE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#include <VBox/RemoteDesktop/VRDE.h>
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#endif /* VRDE_VIDEOIN_WITH_VRDEINTERFACE */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#ifdef AssertCompileSize
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define ASSERTSIZE(type, size) AssertCompileSize(type, size);
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#else
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define ASSERTSIZE(type, size)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#endif /* AssertCompileSize */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Interface for accessing a video camera device on the client.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Async callbacks are used for providing feedback, reporting errors, etc.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Initial version supports: Camera + Processing Unit + Streaming Control.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * There are 2 modes:
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * 1) The virtual WebCam is already attached to the guest.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * 2) The virtual WebCam will be attached when the client has it.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Initially the mode 1 is supported.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Mode 1 details:
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The WebCam has some fixed functionality, according to the descriptors,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * which has been already read by the guest. So some of functions will
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * not work if the client does not support them.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Mode 2 details:
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Virtual WebCam descriptors are built from the client capabilities.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Similarly to the smartcard, the server will inform the ConsoleVRDE that there is a WebCam.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * ConsoleVRDE creates a VRDEVIDEOIN handle and forwards virtual WebCam requests to it.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Interface with VBox.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Virtual WebCam ConsoleVRDE VRDE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Negotiate <->
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * <- VideoInDeviceNotify(Attached, DeviceId)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * -> GetDeviceDesc
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * <- DeviceDesc
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * 2 <- CreateCamera
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * 2 CameraCreated ->
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * CameraRequest -> Request ->
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Response <- <- Response <- Response
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Frame <- <- Frame <- Frame
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * <- VideoInDeviceNotify(Detached, DeviceId)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Unsupported requests fail.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The Device Description received from the client may be used to validate WebCam requests
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * in the ConsoleVRDE code, for example filter out unsupported requests.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* All structures in this file are packed.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Everything is little-endian.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#pragma pack(1)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The interface supports generic video input descriptors, capabilities and controls:
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * * Descriptors
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * + Interface
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Input, Camera Terminal
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Processing Unit
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * + Video Streaming
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Input Header
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Payload Format
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Video Frame
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Still Image Frame
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * * Video Control requests
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * + Interface
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Power Mode
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * + Unit and Terminal
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * camera
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Scanning Mode (interlaced, progressive)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Auto-Exposure Mode
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Auto-Exposure Priority
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Exposure Time Absolute, Relative
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Focus Absolute, Relative, Auto
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Iris Absolute, Relative
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Zoom Absolute, Relative
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - PanTilt Absolute, Relative
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Roll Absolute, Relative
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Privacy
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * processing
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Backlight Compensation
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Brightness
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Contrast
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Gain
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Power Line Frequency
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Hue Manual, Auto
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Saturation
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Sharpness
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Gamma
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - White Balance Temperature Manual, Auto
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - White Balance Component Manual, Auto
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Digital Multiplier
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Digital Multiplier Limit
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * * Video Streaming requests
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * + Interface
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Synch Delay
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Still Image Trigger
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Generate Key Frame
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Update Frame Segment
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * - Stream Error Code
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Notes:
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * * still capture uses a method similar to method 2, because the still frame will
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * be send instead of video over the channel.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Also the method 2 can be in principle emulated by both 1 and 3 on the client.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * However the client can initiate a still frame transfer, similar to hardware button trigger.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * * all control changes are async.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * * probe/commit are not used. The server can select a supported format/frame from the list.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * * no color matching. sRGB is the default.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * * most of constants are the same as in USB Video Class spec, but they are not the same and
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * should be always converted.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The DEVICEDEC describes the device and provides a list of supported formats:
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINDEVICEDESC
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFORMATDESC[0];
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFRAMEDESC[0..N-1]
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFORMATDESC[1];
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFRAMEDESC[0..M-1]
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * ...
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINDEVICEDESC
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16ObjectiveFocalLengthMin;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16ObjectiveFocalLengthMax;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16OcularFocalLength;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16MaxMultiplier;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t fu32CameraControls; /* VRDE_VIDEOIN_F_CT_CTRL_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t fu32ProcessingControls; /* VRDE_VIDEOIN_F_PU_CTRL_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t fu8DeviceCaps; /* VRDE_VIDEOIN_F_DEV_CAP_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8NumFormats; /* Number of following VRDEVIDEOINFORMATDESC structures. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t cbExt; /* Size of the optional extended description. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* An extended description may follow. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* An array of VRDEVIDEOINFORMATDESC follows. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINDEVICEDESC;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* VRDEVIDEOINDEVICEDESC::fu32CameraControls */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_SCANNING_MODE 0x00000001 /* D0: Scanning Mode */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_AE_MODE 0x00000002 /* D1: Auto-Exposure Mode */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_AE_PRIORITY 0x00000004 /* D2: Auto-Exposure Priority */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_EXPOSURE_TIME_ABSOLUTE 0x00000008 /* D3: Exposure Time (Absolute) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_EXPOSURE_TIME_RELATIVE 0x00000010 /* D4: Exposure Time (Relative) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_FOCUS_ABSOLUTE 0x00000020 /* D5: Focus (Absolute) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_FOCUS_RELATIVE 0x00000040 /* D6: Focus (Relative) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_IRIS_ABSOLUTE 0x00000080 /* D7: Iris (Absolute) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_IRIS_RELATIVE 0x00000100 /* D8: Iris (Relative) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_ZOOM_ABSOLUTE 0x00000200 /* D9: Zoom (Absolute) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_ZOOM_RELATIVE 0x00000400 /* D10: Zoom (Relative) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_PANTILT_ABSOLUTE 0x00000800 /* D11: PanTilt (Absolute) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_PANTILT_RELATIVE 0x00001000 /* D12: PanTilt (Relative) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_ROLL_ABSOLUTE 0x00002000 /* D13: Roll (Absolute) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_ROLL_RELATIVE 0x00004000 /* D14: Roll (Relative) */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_RESERVED1 0x00008000 /* D15: Reserved */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_RESERVED2 0x00010000 /* D16: Reserved */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_FOCUS_AUTO 0x00020000 /* D17: Focus, Auto */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_CT_CTRL_PRIVACY 0x00040000 /* D18: Privacy */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* VRDEVIDEOINDEVICEDESC::fu32ProcessingControls */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_BRIGHTNESS 0x00000001 /* D0: Brightness */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_CONTRAST 0x00000002 /* D1: Contrast */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_HUE 0x00000004 /* D2: Hue */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_SATURATION 0x00000008 /* D3: Saturation */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_SHARPNESS 0x00000010 /* D4: Sharpness */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_GAMMA 0x00000020 /* D5: Gamma */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_WHITE_BALANCE_TEMPERATURE 0x00000040 /* D6: White Balance Temperature */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_WHITE_BALANCE_COMPONENT 0x00000080 /* D7: White Balance Component */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_BACKLIGHT_COMPENSATION 0x00000100 /* D8: Backlight Compensation */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_GAIN 0x00000200 /* D9: Gain */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_POWER_LINE_FREQUENCY 0x00000400 /* D10: Power Line Frequency */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_HUE_AUTO 0x00000800 /* D11: Hue, Auto */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_WHITE_BALANCE_TEMPERATURE_AUTO 0x00001000 /* D12: White Balance Temperature, Auto */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_WHITE_BALANCE_COMPONENT_AUTO 0x00002000 /* D13: White Balance Component, Auto */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_DIGITAL_MULTIPLIER 0x00004000 /* D14: Digital Multiplier */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_PU_CTRL_DIGITAL_MULTIPLIER_LIMIT 0x00008000 /* D15: Digital Multiplier Limit */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* VRDEVIDEOINDEVICEDESC::fu8DeviceCaps */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_DEV_CAP_DYNAMICCHANGE 0x01 /* Whether dynamic format change is supported. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_DEV_CAP_TRIGGER 0x02 /* Whether hardware triggering is supported. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_DEV_CAP_TRIGGER_USAGE 0x04 /* 0 - still image, 1 - generic button event.*/
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync/* VRDEVIDEOINDEVICEDESC extended description. */
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsynctypedef struct VRDEVIDEOINDEVICEEXT
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync{
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync uint32_t fu32Fields;
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync /* One or more VRDEVIDEOINDEVICEFIELD follow. */
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync} VRDEVIDEOINDEVICEEXT;
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsynctypedef struct VRDEVIDEOINDEVICEFIELDHDR
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync{
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync uint16_t cbField; /* Number of bytes reserved for this field. */
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync} VRDEVIDEOINDEVICEFIELDHDR;
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync/* VRDEVIDEOINDEVICEDESC::fu32Fields */
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync#define VRDE_VIDEOIN_F_DEV_EXT_NAME 0x00000001 /* Utf8 device name. */
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync#define VRDE_VIDEOIN_F_DEV_EXT_SERIAL 0x00000002 /* Utf8 device serial number. */
9b07c8e3aad094c958428fdc7e13b9645df8cb35vboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* The video format descriptor. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINFORMATDESC
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t cbFormat; /* Size of the structure including cbFormat and format specific data. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8FormatId; /* The unique identifier of the format on the client. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8FormatType; /* MJPEG etc. VRDE_VIDEOIN_FORMAT_* */
76cee75a33698a93fdc4b666fdc74df0167100dbvboxsync uint8_t u8FormatFlags; /* VRDE_VIDEOIN_F_FMT_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8NumFrames; /* Number of following VRDEVIDEOINFRAMEDESC structures. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Reserved; /* Must be set to 0. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Other format specific data may follow. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* An array of VRDEVIDEOINFRAMEDESC follows. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINFORMATDESC;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* VRDEVIDEOINFORMATDESC::u8FormatType */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FORMAT_UNCOMPRESSED 0x04
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FORMAT_MJPEG 0x06
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FORMAT_MPEG2TS 0x0A
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FORMAT_DV 0x0C
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FORMAT_FRAME_BASED 0x10
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FORMAT_STREAM_BASED 0x12
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* VRDEVIDEOINFORMATDESC::u8FormatFlags. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_FMT_GENERATEKEYFRAME 0x01 /* Supports Generate Key Frame */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_FMT_UPDATEFRAMESEGMENT 0x02 /* Supports Update Frame Segment */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_FMT_COPYPROTECT 0x04 /* If duplication should be restricted. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_FMT_COMPQUALITY 0x08 /* If the format supports an adjustable compression quality. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINFRAMEDESC
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t cbFrame; /* Size of the structure including cbFrame and frame specific data. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8FrameId; /* The unique identifier of the frame for the corresponding format on the client. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8FrameFlags;
735004e07580523007dea8e10a10d6add347f71cvboxsync uint16_t u16Width;
735004e07580523007dea8e10a10d6add347f71cvboxsync uint16_t u16Height;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32NumFrameIntervals; /* The number of supported frame intervals. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32MinFrameInterval; /* Shortest frame interval supported (at highest frame rate), in 100ns units. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32MaxFrameInterval; /* Longest frame interval supported (at lowest frame rate), in 100ns units. */
15071fa8e053848b4a479e9c2be14231c115f330vboxsync /* Supported frame intervals (in 100ns units) follow if VRDE_VIDEOIN_F_FRM_DISCRETE_INTERVALS is set.
15071fa8e053848b4a479e9c2be14231c115f330vboxsync * uint32_t au32FrameIntervals[u32NumFrameIntervals];
15071fa8e053848b4a479e9c2be14231c115f330vboxsync */
8a811a3d3a70bf6e95da0a2429422c0a0d34c1dfvboxsync /* Supported min and max bitrate in bits per second follow if VRDE_VIDEOIN_F_FRM_BITRATE is set.
8a811a3d3a70bf6e95da0a2429422c0a0d34c1dfvboxsync * uint32_t u32MinBitRate;
8a811a3d3a70bf6e95da0a2429422c0a0d34c1dfvboxsync * uint32_t u32MaxBitRate;
8a811a3d3a70bf6e95da0a2429422c0a0d34c1dfvboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Other frame specific data may follow. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINFRAMEDESC;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* VRDEVIDEOINFRAMEDESC::u8FrameFlags. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_F_FRM_STILL 0x01 /* If still images are supported for this frame. */
15071fa8e053848b4a479e9c2be14231c115f330vboxsync#define VRDE_VIDEOIN_F_FRM_DISCRETE_INTERVALS 0x02 /* If the discrete intervals list is included. */
8a811a3d3a70bf6e95da0a2429422c0a0d34c1dfvboxsync#define VRDE_VIDEOIN_F_FRM_BITRATE 0x04 /* If the bitrate fields are included. */
0dc88a056faed849e64b1f902402893c4e03f4a0vboxsync#define VRDE_VIDEOIN_F_FRM_SIZE_OF_FIELDS 0x08 /* If the all optional fields start with 16 bit field size. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Controls.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The same structures are used for both SET and GET requests.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Requests are async. A callback is invoked, when the client returns a reply.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * A control change notification also uses these structures.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * If a control request can not be fulfilled, then VRDE_VIDEOIN_CTRLHDR_F_FAIL
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * will be set and u8Status contains the error code. This replaces the VC_REQUEST_ERROR_CODE_CONTROL.
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync *
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync * If the client receives an unsupported control, then the client must ignore it.
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync * That is the control request must not affect the client in any way.
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync * The client may send a VRDEVIDEOINCTRLHDR response for the unsupported control with:
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync * u16ControlSelector = the received value;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync * u16RequestType = the received value;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync * u16ParmSize = 0;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync * u8Flags = VRDE_VIDEOIN_CTRLHDR_F_FAIL;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync * u8Status = VRDE_VIDEOIN_CTRLHDR_STATUS_INVALIDCONTROL;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRLHDR
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16ControlSelector; /* VRDE_VIDEOIN_CTRLSEL_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16RequestType; /* VRDE_VIDEOIN_CTRLREQ_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16ParmSize; /* The size of the control specific parameters. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Flags; /* VRDE_VIDEOIN_CTRLHDR_F_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Status; /* VRDE_VIDEOIN_CTRLHDR_STATUS_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Control specific data follows. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRLHDR;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* Control request types: VRDEVIDEOINCTRLHDR::u16RequestType. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLREQ_UNDEFINED 0x00
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLREQ_SET_CUR 0x01
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLREQ_GET_CUR 0x81
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLREQ_GET_MIN 0x82
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLREQ_GET_MAX 0x83
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLREQ_GET_RES 0x84
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLREQ_GET_LEN 0x85
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLREQ_GET_INFO 0x86
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLREQ_GET_DEF 0x87
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* VRDEVIDEOINCTRLHDR::u8Flags */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_F_NOTIFY 0x01 /* Control change notification, the attribute is derived from u16RequestType and F_FAIL. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_F_FAIL 0x02 /* The operation failed. Error code is in u8Status. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* VRDEVIDEOINCTRLHDR::u8Status if the VRDE_VIDEOIN_CTRLHDR_F_FAIL is set. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_STATUS_SUCCESS 0x00 /**/
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_STATUS_NOTREADY 0x01 /* Not ready */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_STATUS_WRONGSTATE 0x02 /* Wrong state */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_STATUS_POWER 0x03 /* Power */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_STATUS_OUTOFRANGE 0x04 /* Out of range */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_STATUS_INVALIDUNIT 0x05 /* Invalid unit */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_STATUS_INVALIDCONTROL 0x06 /* Invalid control */
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync#define VRDE_VIDEOIN_CTRLHDR_STATUS_INVALIDREQUEST 0x07 /* Invalid request */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLHDR_STATUS_UNKNOWN 0xFF /* Unknown */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* Control selectors. 16 bit. High byte is the category. Low byte is the identifier.*/
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#ifdef RT_MAKE_U16
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_MAKE(Lo, Hi) RT_MAKE_U16(Lo, Hi)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#else
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_MAKE(Lo, Hi) ((uint16_t)( (uint16_t)((uint8_t)(Hi)) << 8 | (uint8_t)(Lo) ))
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#endif
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_VC(a) VRDE_VIDEOIN_CTRLSEL_MAKE(a, 0x01)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT(a) VRDE_VIDEOIN_CTRLSEL_MAKE(a, 0x02)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU(a) VRDE_VIDEOIN_CTRLSEL_MAKE(a, 0x03)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_VS(a) VRDE_VIDEOIN_CTRLSEL_MAKE(a, 0x04)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_HW(a) VRDE_VIDEOIN_CTRLSEL_MAKE(a, 0x05)
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_CTRLSEL_PROT(a) VRDE_VIDEOIN_CTRLSEL_MAKE(a, 0x06)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_VC_VIDEO_POWER_MODE_CONTROL VRDE_VIDEOIN_CTRLSEL_VC(0x01)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_UNDEFINED VRDE_VIDEOIN_CTRLSEL_CT(0x00)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_SCANNING_MODE VRDE_VIDEOIN_CTRLSEL_CT(0x01)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_AE_MODE VRDE_VIDEOIN_CTRLSEL_CT(0x02)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_AE_PRIORITY VRDE_VIDEOIN_CTRLSEL_CT(0x03)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_EXPOSURE_TIME_ABSOLUTE VRDE_VIDEOIN_CTRLSEL_CT(0x04)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_EXPOSURE_TIME_RELATIVE VRDE_VIDEOIN_CTRLSEL_CT(0x05)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_FOCUS_ABSOLUTE VRDE_VIDEOIN_CTRLSEL_CT(0x06)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_FOCUS_RELATIVE VRDE_VIDEOIN_CTRLSEL_CT(0x07)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_FOCUS_AUTO VRDE_VIDEOIN_CTRLSEL_CT(0x08)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_IRIS_ABSOLUTE VRDE_VIDEOIN_CTRLSEL_CT(0x09)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_IRIS_RELATIVE VRDE_VIDEOIN_CTRLSEL_CT(0x0A)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_ZOOM_ABSOLUTE VRDE_VIDEOIN_CTRLSEL_CT(0x0B)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_ZOOM_RELATIVE VRDE_VIDEOIN_CTRLSEL_CT(0x0C)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_PANTILT_ABSOLUTE VRDE_VIDEOIN_CTRLSEL_CT(0x0D)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_PANTILT_RELATIVE VRDE_VIDEOIN_CTRLSEL_CT(0x0E)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_ROLL_ABSOLUTE VRDE_VIDEOIN_CTRLSEL_CT(0x0F)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_ROLL_RELATIVE VRDE_VIDEOIN_CTRLSEL_CT(0x10)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_CT_PRIVACY VRDE_VIDEOIN_CTRLSEL_CT(0x11)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_UNDEFINED VRDE_VIDEOIN_CTRLSEL_PU(0x00)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_BACKLIGHT_COMPENSATION VRDE_VIDEOIN_CTRLSEL_PU(0x01)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_BRIGHTNESS VRDE_VIDEOIN_CTRLSEL_PU(0x02)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_CONTRAST VRDE_VIDEOIN_CTRLSEL_PU(0x03)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_GAIN VRDE_VIDEOIN_CTRLSEL_PU(0x04)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_POWER_LINE_FREQUENCY VRDE_VIDEOIN_CTRLSEL_PU(0x05)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_HUE VRDE_VIDEOIN_CTRLSEL_PU(0x06)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_SATURATION VRDE_VIDEOIN_CTRLSEL_PU(0x07)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_SHARPNESS VRDE_VIDEOIN_CTRLSEL_PU(0x08)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_GAMMA VRDE_VIDEOIN_CTRLSEL_PU(0x09)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_WHITE_BALANCE_TEMPERATURE VRDE_VIDEOIN_CTRLSEL_PU(0x0A)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_WHITE_BALANCE_TEMPERATURE_AUTO VRDE_VIDEOIN_CTRLSEL_PU(0x0B)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_WHITE_BALANCE_COMPONENT VRDE_VIDEOIN_CTRLSEL_PU(0x0C)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_WHITE_BALANCE_COMPONENT_AUTO VRDE_VIDEOIN_CTRLSEL_PU(0x0D)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_DIGITAL_MULTIPLIER VRDE_VIDEOIN_CTRLSEL_PU(0x0E)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_DIGITAL_MULTIPLIER_LIMIT VRDE_VIDEOIN_CTRLSEL_PU(0x0F)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_HUE_AUTO VRDE_VIDEOIN_CTRLSEL_PU(0x10)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_ANALOG_VIDEO_STANDARD VRDE_VIDEOIN_CTRLSEL_PU(0x11)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_PU_ANALOG_LOCK_STATUS VRDE_VIDEOIN_CTRLSEL_PU(0x12)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_VS_UNDEFINED VRDE_VIDEOIN_CTRLSEL_VS(0x00)
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync#define VRDE_VIDEOIN_CTRLSEL_VS_SETUP VRDE_VIDEOIN_CTRLSEL_VS(0x01)
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync#define VRDE_VIDEOIN_CTRLSEL_VS_OFF VRDE_VIDEOIN_CTRLSEL_VS(0x02)
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync#define VRDE_VIDEOIN_CTRLSEL_VS_ON VRDE_VIDEOIN_CTRLSEL_VS(0x03)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_VS_STILL_IMAGE_TRIGGER VRDE_VIDEOIN_CTRLSEL_VS(0x05)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_VS_STREAM_ERROR_CODE VRDE_VIDEOIN_CTRLSEL_VS(0x06)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_VS_GENERATE_KEY_FRAME VRDE_VIDEOIN_CTRLSEL_VS(0x07)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_VS_UPDATE_FRAME_SEGMENT VRDE_VIDEOIN_CTRLSEL_VS(0x08)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_VS_SYNCH_DELAY VRDE_VIDEOIN_CTRLSEL_VS(0x09)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CTRLSEL_HW_BUTTON VRDE_VIDEOIN_CTRLSEL_HW(0x01)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_CTRLSEL_PROT_PING VRDE_VIDEOIN_CTRLSEL_PROT(0x01)
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_CTRLSEL_PROT_SAMPLING VRDE_VIDEOIN_CTRLSEL_PROT(0x02)
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_CTRLSEL_PROT_FRAMES VRDE_VIDEOIN_CTRLSEL_PROT(0x03)
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_VIDEO_POWER_MODE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8DevicePowerMode;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_VIDEO_POWER_MODE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_SCANNING_MODE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8ScanningMode;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_SCANNING_MODE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_AE_MODE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8AutoExposureMode;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_AE_MODE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_AE_PRIORITY
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8AutoExposurePriority;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_AE_PRIORITY;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_EXPOSURE_TIME_ABSOLUTE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32ExposureTimeAbsolute;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_EXPOSURE_TIME_ABSOLUTE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_EXPOSURE_TIME_RELATIVE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8ExposureTimeRelative;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_EXPOSURE_TIME_RELATIVE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_FOCUS_ABSOLUTE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16FocusAbsolute;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_FOCUS_ABSOLUTE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_FOCUS_RELATIVE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8FocusRelative;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Speed;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_FOCUS_RELATIVE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_FOCUS_AUTO
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8FocusAuto;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_FOCUS_AUTO;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_IRIS_ABSOLUTE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16IrisAbsolute;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_IRIS_ABSOLUTE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_IRIS_RELATIVE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8IrisRelative;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_IRIS_RELATIVE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_ZOOM_ABSOLUTE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16ZoomAbsolute;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_ZOOM_ABSOLUTE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_ZOOM_RELATIVE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Zoom;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8DigitalZoom;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Speed;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_ZOOM_RELATIVE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_PANTILT_ABSOLUTE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32PanAbsolute;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32TiltAbsolute;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_PANTILT_ABSOLUTE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_PANTILT_RELATIVE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8PanRelative;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8PanSpeed;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8TiltRelative;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8TiltSpeed;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_PANTILT_RELATIVE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_ROLL_ABSOLUTE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16RollAbsolute;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_ROLL_ABSOLUTE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_ROLL_RELATIVE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8RollRelative;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Speed;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_ROLL_RELATIVE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_CT_PRIVACY_MODE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Privacy;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_CT_PRIVACY_MODE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_BACKLIGHT_COMPENSATION
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16BacklightCompensation;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_BACKLIGHT_COMPENSATION;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_BRIGHTNESS
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Brightness;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_BRIGHTNESS;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_CONTRAST
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Contrast;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_CONTRAST;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_GAIN
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Gain;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_GAIN;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_POWER_LINE_FREQUENCY
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16PowerLineFrequency;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_POWER_LINE_FREQUENCY;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_HUE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Hue;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_HUE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_HUE_AUTO
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8HueAuto;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_HUE_AUTO;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_SATURATION
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Saturation;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_SATURATION;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_SHARPNESS
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Sharpness;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_SHARPNESS;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_GAMMA
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Gamma;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_GAMMA;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_WHITE_BALANCE_TEMPERATURE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16WhiteBalanceTemperature;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_WHITE_BALANCE_TEMPERATURE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_WHITE_BALANCE_TEMPERATURE_AUTO
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8WhiteBalanceTemperatureAuto;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_WHITE_BALANCE_TEMPERATURE_AUTO;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_WHITE_BALANCE_COMPONENT
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16WhiteBalanceBlue;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16WhiteBalanceRed;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_WHITE_BALANCE_COMPONENT;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_WHITE_BALANCE_COMPONENT_AUTO
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8WhiteBalanceComponentAuto;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_WHITE_BALANCE_COMPONENT_AUTO;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_DIGITAL_MULTIPLIER
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16MultiplierStep;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_DIGITAL_MULTIPLIER;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_DIGITAL_MULTIPLIER_LIMIT
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16MultiplierLimit;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_DIGITAL_MULTIPLIER_LIMIT;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_ANALOG_VIDEO_STANDARD
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8VideoStandard;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_ANALOG_VIDEO_STANDARD;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_PU_ANALOG_LOCK_STATUS
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Status;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_PU_ANALOG_LOCK_STATUS;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync/* Set streaming parameters. The actual streaming will be enabled by VS_ON. */
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync#define VRDEVIDEOINCTRL_F_VS_SETUP_FID 0x01
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync#define VRDEVIDEOINCTRL_F_VS_SETUP_EOF 0x02
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
fe35450e4724cae4176aee27f4325d8d451ed718vboxsynctypedef struct VRDEVIDEOINCTRL_VS_SETUP
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8FormatId; /* The format id on the client: VRDEVIDEOINFORMATDESC::u8FormatId. */
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync uint8_t u8FramingInfo; /* VRDEVIDEOINCTRL_F_VS_SETUP_*. Set by the client. */
735004e07580523007dea8e10a10d6add347f71cvboxsync uint16_t u16Width;
735004e07580523007dea8e10a10d6add347f71cvboxsync uint16_t u16Height;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32FrameInterval; /* Frame interval in 100 ns units, 0 means a still image capture.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The client may choose a different interval if this value is
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * not supported.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16CompQuality; /* 0 .. 10000 = 0 .. 100%.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Applicable if the format has VRDE_VIDEOIN_F_FMT_COMPQUALITY,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * otherwise this field is ignored.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Delay; /* Latency in ms from video data capture to presentation on the channel.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Set by the client, read by the server.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32ClockFrequency; /* @todo just all clocks in 100ns units? */
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync} VRDEVIDEOINCTRL_VS_SETUP;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* Stop sending video frames. */
fe35450e4724cae4176aee27f4325d8d451ed718vboxsynctypedef struct VRDEVIDEOINCTRL_VS_OFF
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync} VRDEVIDEOINCTRL_VS_OFF;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync/* Start sending video frames with parameters set by VS_SETUP. */
fe35450e4724cae4176aee27f4325d8d451ed718vboxsynctypedef struct VRDEVIDEOINCTRL_VS_ON
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync} VRDEVIDEOINCTRL_VS_ON;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_VS_STILL_IMAGE_TRIGGER
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Trigger;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_VS_STILL_IMAGE_TRIGGER;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
fe35450e4724cae4176aee27f4325d8d451ed718vboxsynctypedef struct VRDEVIDEOINCTRL_VS_STREAM_ERROR_CODE
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync{
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync VRDEVIDEOINCTRLHDR hdr;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync uint8_t u8StreamErrorCode;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync} VRDEVIDEOINCTRL_VS_STREAM_ERROR_CODE;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_VS_GENERATE_KEY_FRAME
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8GenerateKeyFrame;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_VS_GENERATE_KEY_FRAME;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_VS_UPDATE_FRAME_SEGMENT
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8StartFrameSegment;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8EndFrameSegment;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCTRL_VS_UPDATE_FRAME_SEGMENT;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
fe35450e4724cae4176aee27f4325d8d451ed718vboxsynctypedef struct VRDEVIDEOINCTRL_VS_SYNCH_DELAY
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync uint16_t u16Delay;
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync} VRDEVIDEOINCTRL_VS_SYNCH_DELAY;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* A hardware button was pressed/released on the device. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCTRL_HW_BUTTON
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8Pressed;
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync} VRDEVIDEOINCTRL_HW_BUTTON;
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsynctypedef struct VRDEVIDEOINCTRL_PROT_PING
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync{
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync VRDEVIDEOINCTRLHDR hdr;
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t u32Timestamp; /* Set in the request and the same value must be send back in the response. */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync} VRDEVIDEOINCTRL_PROT_PING;
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsynctypedef struct VRDEVIDEOINCTRL_PROT_SAMPLING
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync{
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync VRDEVIDEOINCTRLHDR hdr;
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t fu32SampleStart; /* Which parameters must be sampled VRDEVIDEOINCTRL_F_PROT_SAMPLING_*. */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t fu32SampleStop; /* Which parameters to disable VRDEVIDEOINCTRL_F_PROT_SAMPLING_*.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync * If both Start and Stop is set, then restart the sampling.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t u32PeriodMS; /* Sampling period in milliseconds. Applies to all samples in fu32SampleStart.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync * Not mandatory, the actual sampling period may be different.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync} VRDEVIDEOINCTRL_PROT_SAMPLING;
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDEVIDEOINCTRL_F_PROT_SAMPLING_FRAMES_SOURCE 0x00000001 /* Periodic VRDEVIDEOINCTRL_PROT_FRAMES samples */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDEVIDEOINCTRL_F_PROT_SAMPLING_FRAMES_CLIENT_OUT 0x00000002 /* Periodic VRDEVIDEOINCTRL_PROT_FRAMES samples */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsynctypedef struct VRDEVIDEOINCTRL_PROT_FRAMES
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync{
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync VRDEVIDEOINCTRLHDR hdr; /* Note: the message should be sent as VRDE_VIDEOIN_FN_CONTROL_NOTIFY. */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t u32Sample; /* Which sample is this, one of VRDEVIDEOINCTRL_F_PROT_SAMPLING_*. */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t u32TimestampMS; /* When the period started, milliseconds since the start of sampling. */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t u32PeriodMS; /* Actual period during which the frames were counted in milliseconds.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync * This may be different from VRDEVIDEOINCTRL_PROT_SAMPLING::u32PeriodMS.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t u32FramesCount; /* How many frames per u32PeriodMS milliseconds. */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync} VRDEVIDEOINCTRL_PROT_FRAMES;
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Payload transfers. How frames are sent to the server:
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * the client send a PAYLOAD packet, which has the already set format.
fe35450e4724cae4176aee27f4325d8d451ed718vboxsync * The server enables the transfers by sending VRDEVIDEOINCTRL_VS_ON.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* Payload header */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINPAYLOADHDR
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8HeaderLength; /* Entire header. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint8_t u8HeaderInfo; /* VRDE_VIDEOIN_PAYLOAD_F_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32PresentationTime; /* @todo define this */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32SourceTimeClock; /* @todo At the moment when the frame was sent to the channel.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Allows the server to measure clock drift.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Reserved; /* @todo */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINPAYLOADHDR;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* VRDEVIDEOINPAYLOADHDR::u8HeaderInfo */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_PAYLOAD_F_FID 0x01 /* Frame ID */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_PAYLOAD_F_EOF 0x02 /* End of Frame */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_PAYLOAD_F_PTS 0x04 /* Presentation Time */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_PAYLOAD_F_SCR 0x08 /* Source Clock Reference */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_PAYLOAD_F_RES 0x10 /* Reserved */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_PAYLOAD_F_STI 0x20 /* Still Image */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_PAYLOAD_F_ERR 0x40 /* Error */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_PAYLOAD_F_EOH 0x80 /* End of header */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The network channel specification.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The protocol uses a dynamic RDP channel.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Everything is little-endian.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync/* The dynamic RDP channel name. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_CHANNEL "RVIDEOIN"
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* Major functions. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FN_NEGOTIATE 0x0000 /* Version and capabilities check. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FN_NOTIFY 0x0001 /* Device attach/detach from the client. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FN_DEVICEDESC 0x0002 /* Query device description. */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_FN_CONTROL 0x0003 /* Control the device and start/stop video input.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync * This function is used for sending a request and
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync * the corresponding response.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_FN_CONTROL_NOTIFY 0x0004 /* The client reports a control change, etc.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync * This function indicated that the message is
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync * not a response to a CONTROL request.
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_FN_FRAME 0x0005 /* Frame from the client. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* Status codes. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_STATUS_SUCCESS 0 /* Function completed successfully. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_STATUS_FAILED 1 /* Failed for some reason. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINMSGHDR
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32Length; /* The length of the message in bytes, including the header. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32DeviceId; /* The client's device id. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32MessageId; /* Unique id assigned by the server. The client must send a reply with the same id.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * If the client initiates a request, then this must be set to 0, because there is
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * currently no client requests, which would require a response from the server.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16FunctionId; /* VRDE_VIDEOIN_FN_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint16_t u16Status; /* The result of a request. VRDE_VIDEOIN_STATUS_*. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINMSGHDR;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsyncASSERTSIZE(VRDEVIDEOINMSGHDR, 16)
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDE_VIDEOIN_FN_NEGOTIATE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
53e77d430ef04ce28cbf1bda175da3be58c931e9vboxsync * Sent by the server when the channel is established and the client replies with its capabilities.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_NEGOTIATE_VERSION 1
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync/* VRDEVIDEOINMSG_NEGOTIATE::fu32Capabilities */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_NEGOTIATE_CAP_VOID 0x00000000
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_NEGOTIATE_CAP_PROT 0x00000001 /* Supports VRDE_VIDEOIN_CTRLSEL_PROT_* controls. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINMSG_NEGOTIATE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINMSGHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32Version; /* VRDE_VIDEOIN_NEGOTIATE_VERSION */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t fu32Capabilities; /* VRDE_VIDEOIN_NEGOTIATE_CAP_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINMSG_NEGOTIATE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDE_VIDEOIN_FN_NOTIFY
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Sent by the client when a webcam is attached or detached.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The client must send the ATTACH notification for each webcam, which is
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * already connected to the client when the VIDEOIN channel is established.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_NOTIFY_EVENT_ATTACH 0
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_NOTIFY_EVENT_DETACH 1
53e77d430ef04ce28cbf1bda175da3be58c931e9vboxsync#define VRDE_VIDEOIN_NOTIFY_EVENT_NEGOTIATE 2 /* Negotiate again with the client. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINMSG_NOTIFY
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINMSGHDR hdr;
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t u32NotifyEvent; /* VRDE_VIDEOIN_NOTIFY_EVENT_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Event specific data may follow. The underlying protocol provides the length of the message. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINMSG_NOTIFY;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDE_VIDEOIN_FN_DEVICEDESC
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The server queries the description of a device.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINMSG_DEVICEDESC_REQ
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINMSGHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINMSG_DEVICEDESC_REQ;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINMSG_DEVICEDESC_RSP
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINMSGHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINDEVICEDESC Device;
76cee75a33698a93fdc4b666fdc74df0167100dbvboxsync /*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFORMATDESC[0]
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFRAMEDESC[0]
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * ...
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFRAMEDESC[n]
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFORMATDESC[1]
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFRAMEDESC[0]
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * ...
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDEVIDEOINFRAMEDESC[m]
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * ...
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINMSG_DEVICEDESC_RSP;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDE_VIDEOIN_FN_CONTROL
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDE_VIDEOIN_FN_CONTROL_NOTIFY
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Either sent by the server or by the client as a notification/response.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * If sent by the client as a notification, then hdr.u32MessageId must be 0.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINMSG_CONTROL
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINMSGHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINCTRLHDR Control;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Control specific data may follow. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINMSG_CONTROL;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * VRDE_VIDEOIN_FN_FRAME
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The client sends a video/still frame in the already specified format.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * hdr.u32MessageId must be 0.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINMSG_FRAME
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINMSGHDR hdr;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEVIDEOINPAYLOADHDR Payload;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* The frame data follow. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINMSG_FRAME;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#ifdef VRDE_VIDEOIN_WITH_VRDEINTERFACE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * The application interface between VirtualBox and the VRDE server.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#define VRDE_VIDEOIN_INTERFACE_NAME "VIDEOIN"
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINDEVICEHANDLE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32ClientId;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32DeviceId;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINDEVICEHANDLE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* The VRDE server video input interface entry points. Interface version 1. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOININTERFACE
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* The header. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEINTERFACEHDR header;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Tell the server that this device will be used and associate a context with the device.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param hServer The VRDE server instance.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pDeviceHandle The device reported by ATTACH notification.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvDeviceCtx The caller context associated with the pDeviceHandle.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @return IPRT status code.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync DECLR3CALLBACKMEMBER(int, VRDEVideoInDeviceAttach, (HVRDESERVER hServer,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync const VRDEVIDEOINDEVICEHANDLE *pDeviceHandle,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync void *pvDeviceCtx));
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* This device will be not be used anymore. The device context must not be used by the server too.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param hServer The VRDE server instance.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pDeviceHandle The device reported by ATTACH notification.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @return IPRT status code.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync DECLR3CALLBACKMEMBER(int, VRDEVideoInDeviceDetach, (HVRDESERVER hServer,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync const VRDEVIDEOINDEVICEHANDLE *pDeviceHandle));
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Get a device description.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param hServer The VRDE server instance.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvUser The callers context of this request.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pDeviceHandle The device reported by ATTACH notification.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @return IPRT status code.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync DECLR3CALLBACKMEMBER(int, VRDEVideoInGetDeviceDesc, (HVRDESERVER hServer,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync void *pvUser,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync const VRDEVIDEOINDEVICEHANDLE *pDeviceHandle));
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Submit a set/get control request.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param hServer The VRDE server instance.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvUser The callers context of this request.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pDeviceHandle The device reported by ATTACH notification.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pReq The request.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param cbReq Size of the request.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @return IPRT status code.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync DECLR3CALLBACKMEMBER(int, VRDEVideoInControl, (HVRDESERVER hServer,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync void *pvUser,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync const VRDEVIDEOINDEVICEHANDLE *pDeviceHandle,
62ab017295981c81484e5a5f93ff8b5f85f7defbvboxsync const VRDEVIDEOINCTRLHDR *pReq,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t cbReq));
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOININTERFACE;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/*
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Notifications.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * Data structures: pvData of VRDEVIDEOINCALLBACKS::VRDECallbackVideoInNotify.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINNOTIFYATTACH
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync VRDEVIDEOINDEVICEHANDLE deviceHandle;
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t u32Version; /* VRDE_VIDEOIN_NEGOTIATE_VERSION */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync uint32_t fu32Capabilities; /* VRDE_VIDEOIN_NEGOTIATE_CAP_* */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINNOTIFYATTACH;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINNOTIFYDETACH
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync VRDEVIDEOINDEVICEHANDLE deviceHandle;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINNOTIFYDETACH;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync/* Notification codes, */
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_NOTIFY_ID_ATTACH 0
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync#define VRDE_VIDEOIN_NOTIFY_ID_DETACH 1
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync/* Video input interface callbacks. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsynctypedef struct VRDEVIDEOINCALLBACKS
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync{
1acf60ed9c490056043f7bfa524f2de1a431ab10vboxsync /* The header. */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync VRDEINTERFACEHDR header;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Notifications.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvCallback The callbacks context specified in VRDEGetInterface.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param u32EventId The notification identifier: VRDE_VIDEOIN_NOTIFY_*.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvData The notification specific data.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param cbData The size of buffer pointed by pvData.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync DECLR3CALLBACKMEMBER(void, VRDECallbackVideoInNotify,(void *pvCallback,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t u32Id,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync const void *pvData,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t cbData));
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Device description received from the client.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvCallback The callbacks context specified in VRDEGetInterface.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param rcRequest The result code of the request.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pDeviceCtx The device context associated with the device in VRDEVideoInGetDeviceDesc.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvUser The pvUser parameter of VRDEVideoInGetDeviceDesc.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pDeviceDesc The device description.
62ab017295981c81484e5a5f93ff8b5f85f7defbvboxsync * @param cbDeviceDesc The size of buffer pointed by pDevice.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync DECLR3CALLBACKMEMBER(void, VRDECallbackVideoInDeviceDesc,(void *pvCallback,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync int rcRequest,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync void *pDeviceCtx,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync void *pvUser,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync const VRDEVIDEOINDEVICEDESC *pDeviceDesc,
62ab017295981c81484e5a5f93ff8b5f85f7defbvboxsync uint32_t cbDeviceDesc));
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Control response or notification.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvCallback The callbacks context specified in VRDEGetInterface.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param rcRequest The result code of the request.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pDeviceCtx The device context associated with the device in VRDEVideoInGetDeviceDesc.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvUser The pvUser parameter of VRDEVideoInControl. NULL if this is a notification.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pControl The control information.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param cbControl The size of buffer pointed by pControl.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync DECLR3CALLBACKMEMBER(void, VRDECallbackVideoInControl,(void *pvCallback,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync int rcRequest,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync void *pDeviceCtx,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync void *pvUser,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync const VRDEVIDEOINCTRLHDR *pControl,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t cbControl));
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync /* Frame which was received from the client.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync *
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pvCallback The callbacks context specified in VRDEGetInterface.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param rcRequest The result code of the request.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pDeviceCtx The device context associated with the device in VRDEVideoInGetDeviceDesc.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param pFrame The frame data.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync * @param cbFrame The size of buffer pointed by pFrame.
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync DECLR3CALLBACKMEMBER(void, VRDECallbackVideoInFrame,(void *pvCallback,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync int rcRequest,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync void *pDeviceCtx,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync const VRDEVIDEOINPAYLOADHDR *pFrame,
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync uint32_t cbFrame));
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync} VRDEVIDEOINCALLBACKS;
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#endif /* VRDE_VIDEOIN_WITH_VRDEINTERFACE */
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#pragma pack()
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync
c3890ba3bf003d2670542116b4e5fe108ff0f40evboxsync#endif