📄 usbcamdi.h
字号:
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
USBCAMDI.H
Abstract:
interface definition for .
Environment:
Kernel & user mode
Revision History:
--*/
#ifndef __USBCAMDI_H__
#define __USBCAMDI_H__
// the purpose of this structure is to establish a connection between pipes discovered and
// streams to be declared (video,still). the following structure will be be passed along with
// USBD_PIPE_INFO structure in CamConfigEx to the cam driver. The Cam driver has to indicate
// pipe stream asscociation by oring all the relevant streams associated with this particular
// pipe. If there is more than one stream association, USBCAMD creates a virtual still pin,
// and assumes the first stream is video followed by still stream.
// The cam driver has to set the first field to USBCAMD_DONT_CARE_PIPE if a particular pipe should not be used by
// usbcamd. For example, if you have an iso audio pipe, iso video pipe in a camera device that
// supports stills and video .you should set the flag field in the first structure to
// USBCAMD_DONT_CARE_PIPE, The second structure should be set as foolows:
// {USBCAMD_VIDEO_STILL_STREAM,USBCAMD_MULTIPLEX_PIPE)}.
// the assumption here is that cam has one config descr, and all alt.interfcaes have the same
// number and types of pipes.
// also, notice that the flags are mutually exclusive.
//
typedef struct _pipe_config_descriptor {
CHAR StreamAssociation ; // video stream, still stream, or both
UCHAR PipeConfigFlags; // USBCAMD_PIPECONFIG_*
} USBCAMD_Pipe_Config_Descriptor, *PUSBCAMD_Pipe_Config_Descriptor;
#define USBCAMD_DATA_PIPE 0x0001 // video or still data pipe
#define USBCAMD_MULTIPLEX_PIPE 0x0002 // pipe used for both still & video
#define USBCAMD_SYNC_PIPE 0x0004 // out-of-band signalling pipe.
#define USBCAMD_DONT_CARE_PIPE 0x0008 // pipe is not to be used for streaming vidoe or still.
#define USBCAMD_VIDEO_STREAM 0x1
#define USBCAMD_STILL_STREAM 0x2
#define USBCAMD_VIDEO_STILL_STREAM (USBCAMD_VIDEO_STREAM | USBCAMD_STILL_STREAM)
// PacketFlag definitions for CamProcessUSBPacketEx
// *** Notice *** : these flags are mutually exclusive.
// current frame is unsalvageable, recycle the read IRP
#define USBCAMD_PROCESSPACKETEX_DropFrame 0x0002
// following frame is still.
#define USBCAMD_PROCESSPACKETEX_NextFrameIsStill 0x0004
// copy this frame to still pin. .
#define USBCAMD_PROCESSPACKETEX_CurrentFrameIsStill 0x0008
// these flags are used in PipeStateFlag in usbcamd_setpipestate function.
#define USBCAMD_STOP_STREAM 0x00000001
#define USBCAMD_START_STREAM 0x00000000
//
// the following flags are passed to usbcamd in USBCAMD_InitializeNewInterface.
// If Cam driver doesn't need to operate on the still image raw frame, then it should
// set the second flag in order to elminate on ebuffer copy. Likewise for the video frame.
// the associatedformat flag is set if the cam driver use the same format fro video and
// virtual still pin. Once, this flag is set, USBCAMD will not allow virtual still pin to be
// opened at different format than the video pin. USE this flag only when the virtual still
// pin produces frames that have exact format as video frames.
// EnableDeviceEvents will expose a deviceevents to stream class & DSHOW which will enable an STI
// Monitor to lunch a still image app if still button is pressed on the camera.
typedef enum {
USBCAMD_CamControlFlag_NoVideoRawProcessing = 0x0001,
USBCAMD_CamControlFlag_NoStillRawProcessing = 0x0002,
USBCAMD_CamControlFlag_AssociatedFormat = 0x0004,
USBCAMD_CamControlFlag_EnableDeviceEvents = 0x0008,
} USBCAMD_CamControlFlags;
// ------------------------------------------------------------------------
// The master list of all streams supported by this driver
// ------------------------------------------------------------------------
typedef
NTSTATUS
(*PCOMMAND_COMPLETE_FUNCTION)(
PVOID DeviceContext,
PVOID CommandContext,
NTSTATUS NtStatus
);
typedef
VOID
(*PSTREAM_RECEIVE_PACKET) (
IN PVOID Srb,
IN PVOID DeviceContext,
IN PBOOLEAN Completed
);
typedef
NTSTATUS
(*PCAM_INITIALIZE_ROUTINE)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext
);
typedef
NTSTATUS
(*PCAM_CONFIGURE_ROUTINE)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
PUSBD_INTERFACE_INFORMATION Interface,
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
PLONG DataPipeIndex,
PLONG SyncPipeIndex
);
typedef
NTSTATUS
(*PCAM_CONFIGURE_ROUTINE_EX)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
PUSBD_INTERFACE_INFORMATION Interface,
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
ULONG PipeConfigListSize,
PUSBCAMD_Pipe_Config_Descriptor PipeConfig,
PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
);
typedef
NTSTATUS
(*PCAM_START_CAPTURE_ROUTINE)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext
);
typedef
NTSTATUS
(*PCAM_START_CAPTURE_ROUTINE_EX)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
ULONG StreamNumber
);
typedef
NTSTATUS
(*PCAM_ALLOCATE_BW_ROUTINE)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
PULONG RawFrameLength,
PVOID Format
);
typedef
NTSTATUS
(*PCAM_ALLOCATE_BW_ROUTINE_EX)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
PULONG RawFrameLength,
PVOID Format,
ULONG StreamNumber
);
typedef
NTSTATUS
(*PCAM_FREE_BW_ROUTINE)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext
);
typedef
NTSTATUS
(*PCAM_FREE_BW_ROUTINE_EX)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
ULONG STreamNumber
);
typedef
VOID
(*PADAPTER_RECEIVE_PACKET_ROUTINE)(
IN PHW_STREAM_REQUEST_BLOCK Srb
);
typedef
NTSTATUS
(*PCAM_STOP_CAPTURE_ROUTINE)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext
);
typedef
NTSTATUS
(*PCAM_STOP_CAPTURE_ROUTINE_EX)(
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
ULONG StreamNumber
);
typedef
ULONG
(*PCAM_PROCESS_PACKET_ROUTINE) (
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
PVOID CurrentFrameContext,
PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket,
PVOID SyncBuffer,
PUSBD_ISO_PACKET_DESCRIPTOR DataPacket,
PVOID DataBuffer,
PBOOLEAN FrameComplete,
PBOOLEAN NextFrameIsStill
);
typedef
ULONG
(*PCAM_PROCESS_PACKET_ROUTINE_EX) (
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
PVOID CurrentFrameContext,
PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket,
PVOID SyncBuffer,
PUSBD_ISO_PACKET_DESCRIPTOR DataPacket,
PVOID DataBuffer,
PBOOLEAN FrameComplete,
PULONG PacketFlag,
PULONG ValidDataOffset
);
typedef
VOID
(*PCAM_NEW_FRAME_ROUTINE) (
PVOID DeviceContext,
PVOID FrameContext
);
typedef
VOID
(*PCAM_NEW_FRAME_ROUTINE_EX) (
PVOID DeviceContext,
PVOID FrameContext,
ULONG StreamNumber,
PULONG FrameLength
);
typedef
NTSTATUS
(*PCAM_PROCESS_RAW_FRAME_ROUTINE) (
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
PVOID FrameContext,
PVOID FrameBuffer,
ULONG FrameLength,
PVOID RawFrameBuffer,
ULONG RawFrameLength,
ULONG NumberOfPackets,
PULONG BytesReturned
);
typedef
NTSTATUS
(*PCAM_PROCESS_RAW_FRAME_ROUTINE_EX) (
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext,
PVOID FrameContext,
PVOID FrameBuffer,
ULONG FrameLength,
PVOID RawFrameBuffer,
ULONG RawFrameLength,
ULONG NumberOfPackets,
PULONG BytesReturned,
ULONG ActualRawFrameLength,
ULONG StreamNumber
);
typedef
NTSTATUS
(*PCAM_STATE_ROUTINE) (
PDEVICE_OBJECT BusDeviceObject,
PVOID DeviceContext
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -