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.
335 lines
6.8 KiB
335 lines
6.8 KiB
#ifndef __MCAMDRV_H__
|
|
#define __MCAMDRV_H__
|
|
|
|
/*++
|
|
|
|
Copyright (c) 1997 1998, Philips I&C
|
|
|
|
Module Name:
|
|
|
|
mcamdrv.h
|
|
|
|
Abstract:
|
|
|
|
driver for the philips camera.
|
|
|
|
Author:
|
|
|
|
Paul Oosterhof
|
|
|
|
Environment:
|
|
|
|
Kernel mode only
|
|
|
|
|
|
Revision History:
|
|
|
|
Date Change
|
|
sept.22 98 Optimized for NT5
|
|
|
|
--*/
|
|
|
|
#include <strmini.h>
|
|
#include <ksmedia.h>
|
|
|
|
#include "usbdi.h"
|
|
#include "usbcamdi.h"
|
|
|
|
#include "mprpobj.h"
|
|
#include "mprpobjx.h"
|
|
|
|
//--- Compiler switches:------------------------------
|
|
|
|
// DEFINES FOR CODEC
|
|
// Copy for each line pixel 3 to pixel 2, pixel 2 to pixel 1.
|
|
#define PIX12_FIX
|
|
|
|
//--- end Compiler switches:------------------------------
|
|
|
|
#define DRIVERVERSION 001
|
|
|
|
// SSI numbers + added functionality
|
|
|
|
#define SSI_INITIAL 1
|
|
#define SSI_AUDIO_8KHZ 2 // 8kHz audio i.s.o. 11kHz
|
|
#define SSI_STRINGS 3 // strings added
|
|
#define SSI_YGAIN_MUL2 4 // Ygain divided by two in camera. Only this version !!
|
|
#define SSI_CIF3 5 // PCF4 substituted by PCF3
|
|
#define SSI_PIX12_FIX 5 // vertical black line pixel 1/2 change
|
|
#define SSI_8117_N3 8 // new N3 silicium for 8117
|
|
|
|
|
|
typedef struct _PHILIPSCAM_CAMSTATUS {
|
|
DWORD ReleaseNumber;
|
|
USHORT SensorType;
|
|
USHORT PictureFormat;
|
|
USHORT PictureFrameRate;
|
|
USHORT PictureCompressing;
|
|
GUID PictureSubFormat; // added RMR
|
|
} PHILIPSCAM_CAMSTATUS, *PPHILIPSCAM_CAMSTATUS;
|
|
|
|
typedef struct _PHILIPSCAM_DEVICE_CONTEXT {
|
|
ULONG Sig;
|
|
ULONG EmptyPacketCounter;
|
|
PHILIPSCAM_CAMSTATUS CamStatus;
|
|
PHILIPSCAM_CAMSTATUS PreviousCamStatus;
|
|
BOOLEAN FrrSupported[9];
|
|
// internal counters
|
|
ULONG FrameLength;
|
|
PUSBD_INTERFACE_INFORMATION Interface;
|
|
} PHILIPSCAM_DEVICE_CONTEXT, *PPHILIPSCAM_DEVICE_CONTEXT;
|
|
|
|
typedef struct _PHILIPSCAM_FRAME_CONTEXT {
|
|
ULONG Sig;
|
|
ULONG USBByteCounter;
|
|
} PHILIPSCAM_FRAME_CONTEXT, *PPHILIPSCAM_FRAME_CONTEXT;
|
|
|
|
#define PHILIPSCAM_DEVICE_SIG 0x45544e49 //"INTE"
|
|
|
|
#if DBG
|
|
#define ASSERT_DEVICE_CONTEXT(d) ASSERT((d)->Sig == PHILIPSCAM_DEVICE_SIG)
|
|
#else
|
|
#define ASSERT_DEVICE_CONTEXT(d)
|
|
#endif
|
|
|
|
#define PHILIPSCAM_DEFAULT_FRAME_RATE 15
|
|
#define PHILIPSCAM_MAX_FRAME_RATE 24
|
|
#define PHILIPSCAM_SYNC_PIPE 0
|
|
#define PHILIPSCAM_DATA_PIPE 1
|
|
|
|
#define ULTRA_TRACE 3
|
|
#define MAX_TRACE 2
|
|
#define MIN_TRACE 1
|
|
|
|
#define CIF_X 352
|
|
#define CIF_Y 288
|
|
#define QCIF_X 176
|
|
#define QCIF_Y 144
|
|
#define SQCIF_X 128
|
|
#define SQCIF_Y 96
|
|
#define QQCIF_X 88
|
|
#define QQCIF_Y 72
|
|
#define VGA_X 640
|
|
#define VGA_Y 480
|
|
#define SIF_X 320
|
|
#define SIF_Y 240
|
|
#define SSIF_X 240
|
|
#define SSIF_Y 180
|
|
#define QSIF_X 160
|
|
#define QSIF_Y 120
|
|
#define SQSIF_X 80
|
|
#define SQSIF_Y 60
|
|
#define SCIF_X 240
|
|
#define SCIF_Y 176
|
|
|
|
#define ALT_INTERFACE_0 0
|
|
|
|
typedef enum {
|
|
FORMATCIF,
|
|
FORMATQCIF,
|
|
FORMATSQCIF,
|
|
FORMATQQCIF,
|
|
FORMATVGA,
|
|
FORMATSIF,
|
|
FORMATSSIF,
|
|
FORMATQSIF,
|
|
FORMATSQSIF,
|
|
FORMATSCIF
|
|
} PHFORMAT;
|
|
|
|
typedef enum {
|
|
FRRATEVGA,
|
|
FRRATE375,
|
|
FRRATE5,
|
|
FRRATE75,
|
|
FRRATE10,
|
|
FRRATE12,
|
|
FRRATE15,
|
|
FRRATE20,
|
|
FRRATE24
|
|
} PHFRAMERATE;
|
|
|
|
typedef enum{
|
|
COMPRESSION0,
|
|
COMPRESSION3,
|
|
COMPRESSION4
|
|
} PHCOMPRESSION;
|
|
|
|
typedef enum{
|
|
SUBTYPEP420,
|
|
SUBTYPEI420,
|
|
SUBTYPEIYUV
|
|
} PHSUBTYPE;
|
|
|
|
#if DBG
|
|
extern ULONG PHILIPSCAM_DebugTraceLevel;
|
|
|
|
#define PHILIPSCAM_KdPrint(_t_, _x_) \
|
|
if (PHILIPSCAM_DebugTraceLevel >= _t_) { \
|
|
DbgPrint("PHILCAM1.SYS: "); \
|
|
DbgPrint _x_ ;\
|
|
}
|
|
|
|
PCHAR
|
|
FRString (
|
|
USHORT index
|
|
);
|
|
|
|
#ifdef NTKERN
|
|
#define TRAP() _asm {int 3}
|
|
#define TEST_TRAP() _asm {int 3}
|
|
#define TRAP_ERROR(e) if (!NT_SUCCESS(e)) { _asm {int 3} }
|
|
#else
|
|
#define TRAP() DbgBreakPoint()
|
|
#define TEST_TRAP() DbgBreakPoint()
|
|
#define TRAP_ERROR(e) if (!NT_SUCCESS(e)) { DbgBreakPoint(); }
|
|
#endif
|
|
#else
|
|
#define PHILIPSCAM_KdPrint(_t_, _x_)
|
|
#define TEST_TRAP()
|
|
#define TRAP()
|
|
#endif /* DBG */
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_Initialize(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_UnInitialize(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_StartVideoCapture(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_StopVideoCapture(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
ULONG
|
|
PHILIPSCAM_ProcessUSBPacket(
|
|
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
|
|
);
|
|
|
|
VOID
|
|
PHILIPSCAM_NewFrame(
|
|
PVOID DeviceContext,
|
|
PVOID FrameContext
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_ProcessRawVideoFrame(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext,
|
|
PVOID FrameContext,
|
|
PVOID FrameBuffer,
|
|
ULONG FrameLength,
|
|
PVOID RawFrameBuffer,
|
|
ULONG RawFrameLength,
|
|
ULONG NumberOfPackets,
|
|
PULONG BytesReturned
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_Configure(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext,
|
|
PUSBD_INTERFACE_INFORMATION Interface,
|
|
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
|
PLONG DataPipeIndex,
|
|
PLONG SyncPipeIndex
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_SaveState(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_RestoreState(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_ReadRegistry(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_AllocateBandwidth(
|
|
IN PDEVICE_OBJECT BusDeviceObject,
|
|
IN PVOID DeviceContext,
|
|
OUT PULONG RawFrameLength,
|
|
IN PVOID Format
|
|
);
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_FreeBandwidth(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_CameraToDriverDefaults(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_SaveControlsToRegistry(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID pDeviceContext
|
|
);
|
|
|
|
|
|
NTSTATUS
|
|
PHILIPSCAM_PropertyRequest(
|
|
BOOLEAN SetProperty,
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext,
|
|
PVOID PropertyContext
|
|
);
|
|
|
|
|
|
VOID STREAMAPI
|
|
PHILIPSCAM_ReceiveDataPacket(
|
|
IN PHW_STREAM_REQUEST_BLOCK Srb,
|
|
IN PVOID DeviceContext,
|
|
IN PBOOLEAN Completed
|
|
);
|
|
|
|
VOID STREAMAPI
|
|
PHILIPSCAM_ReceiveCtrlPacket(
|
|
IN PHW_STREAM_REQUEST_BLOCK Srb,
|
|
IN PVOID DeviceContext,
|
|
IN PBOOLEAN Completed
|
|
);
|
|
|
|
BOOL
|
|
AdapterVerifyFormat(
|
|
PKS_DATAFORMAT_VIDEOINFOHEADER pKSDataFormatToVerify,
|
|
int StreamNumber
|
|
);
|
|
|
|
#endif
|