You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
312 lines
14 KiB
312 lines
14 KiB
#ifndef __tapivid_h__
|
|
#define __tapivid_h__
|
|
|
|
#include "h245if.h"
|
|
#include "tapiqc.h"
|
|
|
|
/****************************************************************************
|
|
* @doc INTERNAL TAPIVID
|
|
*
|
|
* @module TAPIVid.h | Header file for the new TAPI internal interfaces and
|
|
* devine enumeration enums and struct, and our filter GUID.
|
|
*
|
|
* @comm Two interface declaration changes are due to a multiple inheritance
|
|
* problem: <i IAMCameraControl> and <i IAMVideoProcAmp> interface methods
|
|
* have identical prototypes. Our Video Capture filter implements both
|
|
* interfaces.
|
|
***************************************************************************/
|
|
|
|
DEFINE_GUID(CLSID_TAPIVideoCapture,
|
|
0x70616376L, 0x5245, 0x4945, 0x52, 0x52, 0x45, 0x46, 0x4C, 0x49, 0x48, 0x50);
|
|
|
|
struct DECLSPEC_UUID("47a39f38-7f0f-4ce0-b788-d76b39fd6a4f") TAPIVideoCapture;
|
|
struct DECLSPEC_UUID("145cb377-e7bb-4adf-bd42-a42304717ede") TAPIVideoDecoder;
|
|
|
|
const WCHAR* const PNAME_PREVIEW = L"Preview";
|
|
const WCHAR* const PNAME_CAPTURE = L"Capture";
|
|
const WCHAR* const PNAME_RTPPD = L"RtpPd";
|
|
|
|
/*****************************************************************************
|
|
* @doc INTERNAL CDEVENUMSTRUCTENUM
|
|
*
|
|
* @enum DeviceType | The <t DeviceType> enum is used to identify VfW and WDM
|
|
* device types.
|
|
*
|
|
* @emem DeviceType_VfW | Specifies a VfW device.
|
|
*
|
|
* @emem DeviceType_WDM | Specifies a WDM device.
|
|
*
|
|
* @emem DeviceType_DShow | Specifies unknown DirectShow device (e.g.,
|
|
* DV camera)
|
|
****************************************************************************/
|
|
typedef enum tagDeviceType
|
|
{
|
|
DeviceType_VfW,
|
|
DeviceType_WDM,
|
|
DeviceType_DShow
|
|
} DeviceType;
|
|
|
|
/*****************************************************************************
|
|
* @doc INTERNAL CDEVENUMSTRUCTENUM
|
|
*
|
|
* @enum CaptureMode | The <t CaptureMode> enum is used to identify frame
|
|
* grabbing or streaming mode.
|
|
*
|
|
* @emem CaptureMode_FrameGrabbing | Specifies frame grabbing mode.
|
|
*
|
|
* @emem CaptureMode_Streaming | Specifies streaming mode.
|
|
****************************************************************************/
|
|
typedef enum tagCaptureMode
|
|
{
|
|
CaptureMode_FrameGrabbing,
|
|
CaptureMode_Streaming
|
|
} CaptureMode;
|
|
|
|
/*****************************************************************************
|
|
* @doc EXTERNAL CONSTANTS
|
|
*
|
|
* @const 4 | MAX_CAPTURE_DEVICES | Maximum number of capture devices.
|
|
*
|
|
* @const MAX_PATH | MAX_CAPDEV_DESCRIPTION | Maximum length of capture
|
|
* device description string.
|
|
*
|
|
* @const 80 | MAX_CAPDEV_VERSION | Maximum length of capture device version
|
|
* string.
|
|
****************************************************************************/
|
|
#define MAX_CAPTURE_DEVICES 10
|
|
#define MAX_CAPDEV_DESCRIPTION MAX_PATH
|
|
#define MAX_CAPDEV_VERSION 80
|
|
|
|
/*****************************************************************************
|
|
* @doc INTERNAL CDEVENUMSTRUCTENUM
|
|
*
|
|
* @struct VIDEOCAPTUREDEVICEINFO | The <t VIDEOCAPTUREDEVICEINFO> structure is used to store capture
|
|
* device information.
|
|
*
|
|
* @field char | szDeviceDescription[] | Specifies the description string of
|
|
* the capture device.
|
|
*
|
|
* @field char | szDeviceVersion[] | Specifies the version string of
|
|
* the capture device.
|
|
*
|
|
* @field BOOL | fHasOverlay | Specifies the overlay support of the capture
|
|
* device.
|
|
*
|
|
* @field BOOL | fInUse | Set to TRUE when a device is being used by an
|
|
* instance of the capture filter.
|
|
*
|
|
* @field DeviceType | nDeviceType | Specifies the type (VfW or WDM) of the
|
|
* capture device.
|
|
*
|
|
* @field CaptureMode | nCaptureMode | Specifies the capture mode (frame grabbing
|
|
* or streaming) of the capture device.
|
|
*
|
|
* @field DWORD | dwVfWIndex | Specifies the VfW index of the capture device.
|
|
***************************************************************************/
|
|
typedef struct tagDEVICEINFO
|
|
{
|
|
char szDeviceDescription[MAX_CAPDEV_DESCRIPTION];
|
|
char szDeviceVersion[MAX_CAPDEV_VERSION];
|
|
char szDevicePath[MAX_PATH];
|
|
BOOL fHasOverlay;
|
|
BOOL fInUse;
|
|
DeviceType nDeviceType;
|
|
CaptureMode nCaptureMode;
|
|
DWORD dwVfWIndex;
|
|
} VIDEOCAPTUREDEVICEINFO, *PDEVICEINFO;
|
|
|
|
typedef HRESULT (WINAPI *PFNGetCapDeviceInfo)(
|
|
IN DWORD dwDeviceIndex,
|
|
OUT PDEVICEINFO pDeviceInfo
|
|
);
|
|
|
|
typedef HRESULT (WINAPI *PFNGetNumCapDevices)(
|
|
OUT PDWORD pdwNumDevices
|
|
);
|
|
|
|
// Video capture device selection/control interface (filter interface)
|
|
interface DECLSPEC_UUID("bda95399-48da-4309-af1b-9b8f65f4f9be") IVideoDeviceControl : public IUnknown
|
|
{
|
|
public:
|
|
virtual STDMETHODIMP GetNumDevices(OUT PDWORD pdwNumDevices) PURE;
|
|
virtual STDMETHODIMP GetDeviceInfo(IN DWORD dwDeviceIndex, OUT VIDEOCAPTUREDEVICEINFO *pDeviceInfo) PURE;
|
|
virtual STDMETHODIMP GetCurrentDevice(OUT DWORD *pdwDeviceIndex) PURE;
|
|
virtual STDMETHODIMP SetCurrentDevice(IN DWORD dwDeviceIndex) PURE;
|
|
};
|
|
|
|
/*****************************************************************************
|
|
* @doc INTERNAL CPROCAMPSTRUCTENUM
|
|
*
|
|
* @enum VideoProcAmpProperty | The <t VideoProcAmpProperty> enum is used to
|
|
* identify specific video quality settings.
|
|
*
|
|
* @emem VideoProcAmp_Brightness | Specifies the brightness setting in IRE
|
|
* units * 100. The range for Value is -10000 to 10000; the default value
|
|
* is 750 (7.5 IRE).
|
|
*
|
|
* @emem VideoProcAmp_Contrast | Specifies the contrast or luma gain setting
|
|
* in gain factor * 100. The Value range is from zero to 10000, and the
|
|
* default is 100 (1x). Note that a particular video encoder filter may
|
|
* only implement a subset of this range.
|
|
*
|
|
* @emem VideoProcAmp_Hue | Specifies the hue setting in degrees * 100. Value
|
|
* range is from -18000 to 18000 ( -180 to +180 degrees), and the default
|
|
* is zero. Note that a particular video encoder filter may only implement
|
|
* a subset of this range.
|
|
*
|
|
* @emem VideoProcAmp_Saturation | Specifies the saturation or chroma gain
|
|
* setting in gain * 100. Value ranges from zero to 10000, and the default
|
|
* is 100 (1x). Note that a particular video encoder filter may only
|
|
* implement a subset of this range.
|
|
*
|
|
* @emem VideoProcAmp_Sharpness | Specifies the sharpness setting in
|
|
* arbitrary units. Value ranges from zero to 100, and the default is 50.
|
|
* Note that a particular video encoder filter may only implement a subset
|
|
* of this range.
|
|
*
|
|
* @emem VideoProcAmp_Gamma | Specifies the gamma setting in gamma * 100.
|
|
* Value ranges from 1 to 500, and the default is 100 (gamma = 1). Note
|
|
* that a particular video encoder filter may only implement a subset of
|
|
* this range.
|
|
*
|
|
* @emem VideoProcAmp_ColorEnable | Specifies the color enable setting as a
|
|
* Boolean value. Value ranges from zero to 1, and the default is 1.
|
|
*
|
|
* @emem VideoProcAmp_WhiteBalance | Specifies the white balance setting
|
|
* expressed as a color temperature in degrees Kelvin. The range and
|
|
* default values for this setting are video encoder filter dependent.
|
|
*
|
|
* @emem VideoProcAmp_BacklightCompensation | Specifies the backlight
|
|
* compensation setting which is a Boolean. Zero indicates backlight
|
|
* compensation is disabled, and 1 indicates backlight compensation is
|
|
* enabled.
|
|
****************************************************************************/
|
|
|
|
// IAMVideoProcAmp interface (filter interface)
|
|
interface DECLSPEC_UUID("C6E13360-30AC-11d0-A18C-00A0C9118956") IVideoProcAmp : public IUnknown
|
|
{
|
|
public:
|
|
virtual STDMETHODIMP GetRange(IN VideoProcAmpProperty Property, OUT long *pMin, OUT long *pMax, OUT long *pSteppingDelta, OUT long *pDefault, OUT TAPIControlFlags *pCapsFlags) PURE;
|
|
virtual STDMETHODIMP Set(IN VideoProcAmpProperty Property, IN long lValue, IN TAPIControlFlags Flags) PURE;
|
|
virtual STDMETHODIMP Get(IN VideoProcAmpProperty Property, OUT long *lValue, OUT TAPIControlFlags *Flags) PURE;
|
|
};
|
|
|
|
/*****************************************************************************
|
|
* @doc INTERNAL CCAMERACSTRUCTENUM
|
|
*
|
|
* @enum TAPICameraControlProperty | The <t TAPICameraControlProperty> enum
|
|
* is used to identify specific camera control settings.
|
|
*
|
|
* @emem TAPICameraControl_Pan | Specifies the camera pan setting in degrees.
|
|
* Values range from -180 to +180, and the default is zero. Positive values
|
|
* are clockwise from the origin (the camera rotates clockwise when viewed
|
|
* from above), and negative values are counterclockwise from the origin.
|
|
* Note that a particular video capture filter may only implement a subset
|
|
* of this range.
|
|
*
|
|
* @emem TAPICameraControl_Tilt | Specifies the camera tilt setting in degrees.
|
|
* Values range from -180 to +180, and the default is zero. Positive values
|
|
* point the imaging plane up, and negative values point the imaging plane
|
|
* down. Note that a particular video capture filter may only implement a
|
|
* subset of this range.
|
|
*
|
|
* @emem TAPICameraControl_Roll | Specifies the roll setting in degrees. Values
|
|
* range from -180 to +180, and the default is zero. Positive values cause
|
|
* a clockwise rotation of the camera along the image viewing axis, and
|
|
* negative values cause a counterclockwise rotation of the camera. Note
|
|
* that a particular video capture filter may only implement a subset of
|
|
* this range.
|
|
*
|
|
* @emem TAPICameraControl_Zoom | Specifies the zoom setting in millimeter units.
|
|
* Values range from 10 to 600, and the default is video capture filter
|
|
* specific.
|
|
*
|
|
* @emem TAPICameraControl_Exposure | Specifies the exposure setting in seconds
|
|
* using the following formula. For values less than zero, the exposure
|
|
* time is 1/2n seconds. For positive values and zero, the exposure time is
|
|
* 2n seconds. Note that a particular video capture filter may only
|
|
* implement a subset of this range.
|
|
*
|
|
* @emem TAPICameraControl_Iris | Specifies the iris setting expressed as the
|
|
* fstop * 10.
|
|
*
|
|
* @emem TAPICameraControl_Focus | Specifies the camera focus setting as the
|
|
* distance to the optimally focused target in millimeters. The range and
|
|
* default values are video encoder filter specific. Note that a
|
|
* particular video capture filter may only implement a subset of this
|
|
* range.
|
|
*
|
|
* @emem TAPICameraControl_FlipVertical | Specifies that the picture is
|
|
* flipped vertically.
|
|
*
|
|
* @emem TAPICameraControl_FlipHorizontal | Specifies that the picture is
|
|
* flipped horizontally.
|
|
*
|
|
* @comm Our software-only implementation provides zoom, pan, tilt, vertical
|
|
* flip and horizontal flip capabilities.
|
|
****************************************************************************/
|
|
|
|
typedef enum tagTAPICameraControlProperty
|
|
{
|
|
TAPICameraControl_Pan = CameraControl_Pan,
|
|
TAPICameraControl_Tilt = CameraControl_Tilt,
|
|
TAPICameraControl_Roll = CameraControl_Roll,
|
|
TAPICameraControl_Zoom = CameraControl_Zoom,
|
|
TAPICameraControl_Exposure = CameraControl_Exposure,
|
|
TAPICameraControl_Iris = CameraControl_Iris,
|
|
TAPICameraControl_Focus = CameraControl_Focus,
|
|
TAPICameraControl_FlipVertical = 0x100,
|
|
TAPICameraControl_FlipHorizontal = 0x200
|
|
} TAPICameraControlProperty;
|
|
|
|
// ICameraControl interface (filter interface)
|
|
interface DECLSPEC_UUID("4cda4f2d-969e-4223-801e-68267395fce4") ICameraControl : public IUnknown
|
|
{
|
|
public:
|
|
virtual STDMETHODIMP GetRange(IN TAPICameraControlProperty Property, OUT long *plMin, OUT long *plMax, OUT long *plSteppingDelta, OUT long *plDefault, OUT TAPIControlFlags *plCapsFlags) PURE;
|
|
virtual STDMETHODIMP Set(IN TAPICameraControlProperty Property, IN long lValue, IN TAPIControlFlags lFlags) PURE;
|
|
virtual STDMETHODIMP Get(IN TAPICameraControlProperty Property, OUT long *plValue, OUT TAPIControlFlags *plFlags) PURE;
|
|
};
|
|
|
|
// IVideoControl interface (pin interface)
|
|
interface DECLSPEC_UUID("12345678-30AC-11d0-A18C-00A0C9118956") IVideoControl : public IUnknown
|
|
{
|
|
public:
|
|
virtual STDMETHODIMP GetCaps(OUT long *pCapsFlags) PURE;
|
|
virtual STDMETHODIMP SetMode(IN long Mode) PURE;
|
|
virtual STDMETHODIMP GetMode(OUT long *Mode) PURE;
|
|
virtual STDMETHODIMP GetCurrentActualFrameRate(OUT LONGLONG *ActualFrameRate) PURE;
|
|
virtual STDMETHODIMP GetMaxAvailableFrameRate(IN long iIndex, IN SIZE Dimensions, OUT LONGLONG *MaxAvailableFrameRate) PURE;
|
|
virtual STDMETHODIMP GetFrameRateList(IN long iIndex, IN SIZE Dimensions, IN long *ListSize, OUT LONGLONG **FrameRates) PURE;
|
|
};
|
|
|
|
// RTP packetization descriptor control interface (pin interface)
|
|
interface DECLSPEC_UUID("f454d51d-dfa4-4f88-ad4a-e64940eba1c0") IRTPPDControl : public IUnknown
|
|
{
|
|
public:
|
|
virtual STDMETHODIMP SetMaxRTPPacketSize(IN DWORD dwMaxRTPPacketSize, IN DWORD dwLayerId) PURE;
|
|
virtual STDMETHODIMP GetMaxRTPPacketSize(OUT LPDWORD pdwMaxRTPPacketSize, IN DWORD dwLayerId) PURE;
|
|
virtual STDMETHODIMP GetMaxRTPPacketSizeRange(OUT LPDWORD pdwMin, OUT LPDWORD pdwMax, OUT LPDWORD pdwSteppingDelta, OUT LPDWORD pdwDefault, IN DWORD dwLayerId) PURE;
|
|
};
|
|
|
|
// Interface used to pass down an addrefed pointer to the IH245EncoderCommand interface (pin interface)
|
|
interface DECLSPEC_UUID("dcbd33c7-dc65-48f1-8e83-22fdc954a8e7") IOutgoingInterface : public IUnknown
|
|
{
|
|
public:
|
|
virtual STDMETHODIMP Set(IN IH245EncoderCommand *pIH245EncoderCommand) PURE;
|
|
};
|
|
|
|
typedef enum tagRTPPayloadHeaderMode
|
|
{
|
|
RTPPayloadHeaderMode_Draft = 0, // 0 = draft payload header (as for older compatibility, like Netmeeting)
|
|
RTPPayloadHeaderMode_RFC2190 = 1 // 1 = standard payload header (as in RFC 2190)
|
|
} RTPPayloadHeaderMode;
|
|
|
|
// Interface used to switch the above mode in filters (TAPIVCap and TAPIVDec)
|
|
interface DECLSPEC_UUID("d884c4e3-41d9-42a6-85c0-7d00658b4a26") IRTPPayloadHeaderMode : public IUnknown
|
|
{
|
|
public:
|
|
virtual STDMETHODIMP SetMode(IN RTPPayloadHeaderMode rtpphmMode) PURE;
|
|
};
|
|
|
|
#endif
|