#ifndef __MPRPOBJ_H__
#define __MPRPOBJ_H__

/*++

Copyright (c) 1997 1998 PHILIPS  I&C

Module Name:  mprpobj.c

Abstract:     Property handling module

Author:       Michael Verberne

Revision History:

Date        Reason

Sept.22, 98 Optimized for NT5
Nov. 30, 98 PID, VID and pushbutton flag added as custom properties

--*/	

/*
 * This file defines custom properties for the 
 * camera. These properties are additional to the 
 * property sets VideoProcAmp and CameraControl as 
 * defined in ksmedia.h
 *
 * The set of properties that is currently supported 
 * by the minidriver is a subset of the properties 
 * defined in the CRS (VGAUSB13.DOC) 
 *
 * Note 1: Most of the ranges in the table(s) above
 * follow from the SSI Lionsoft Philips Desktop Video 
 * Camera
 * 
 * Note 2: The Pan and Tilt properties (in SQ-CIF) are 
 * part of PROPSETID_VIDCAP_CAMERACONTROL. These 
 * properties must be added at a later stage.
 *
 * Note 3: Color Saturation is part of 
 * PROPSETID_VIDCAP_VIDEOPROCAMP. This must be added 
 * at a later stage.
 *
 *-------------------------------------------------------
 * Properties defined in PROPSETID_VIDCAP_VIDEOPROCAMP
 *
 * PROPERTY					RANGE			ACTIVE STATE
 *
 * Contrast					-32..31			Always
 *
 * Brightness				?? 0..31		Always
 *
 * Back_Light_Compensation	0 = Off			Always
 *							1 = On
 *
 * Color Enable				0 = Off			Always
 *							1 = On
 *
 * Gamma					0..100			Always
 *
 *-------------------------------------------------------
 * Properties defined in PROPSETID_PHILIPS_CUSTOM_PROP
 *
 * PROPERTY					RANGE			ACTIVE STATE
 *
 * White Balance			0 = Indoor |	Always
 *							1 = Outdoor |
 *							2 = FL |
 *							3 = Auto |
 *							4 = Manual
 *
 * White Balance Speed		1..32			In WB_Auto
 *
 * White Balance Delay		1..63			In WB_Auto
 *
 * White Balance Red Gain	0..255			In WB_Manual
 *
 * White Balance Blue_Gain	0..255			In WB_Manual
 *
 * Auto exposure			8..255
 * speed control			
 *
 * Shutterspeed				0 = 1/25,		In Shutter Fixed
 *							1 = 1/33, 
 *							2 = 1/50, 
 *							3 = 1/100, 
 *							4 = 1/250,
 *							5 = 1/500,
 *							6 = 1/1000
 *							7 = 1/1500
 *							8 = 1/2500
 *							9 = 1/5000
 *							a = 1/10000
 *
 * Shutter Mode 			0				Auto Mode
 *							0xff			Fixed Mode
 *
 * Shutter Status			0				Smaller
 *							1				Equal
 *							2				Greater
 *
 * AGC Mode					0				Auto Mode
 *							0xff			Fixed Mode
 *
 * AGC Speed				0..0x9f			In AGC Mode Auto
 *
 * Framerate				ff = VGA,		still image for VGA
 *							1 = 3.75		CIF
 *							2 = 5,			Always
 *							3 = 7,5			Always
 *							4 = 10,			Always
 *							5 = 12,			Not for VGA
 *							6 = 15,			Always
 *							7 = 20,			Q-CIF/SQ-CIF
 *							8 = 24			Q-CIF/SQ-CIF
 *
 * Framerate supported		returns a long representing 
 *							the currently available 
 *							framerates
 *							b0			VGA
 *							b1			3_75
 *							b2			5
 *							b3			7.5
 *							b4			10
 *							b5			12
 *							b6			15
 *							b7			20
 *							b8			24
 *							b9...b31	not used
 *
 * Video format				3 = SQ-CIF		Always			
 *							2 = Q-CIF
 *							1 = CIF
 *							4 = VGA
 *
 * Exposure Control			0 = Auto		Always			
 *							ff= Shutter Fixed
 *
 *
 */

#include "windef.h"
#include "mmsystem.h"
#include "ks.h"

// Whitebalance mode values 
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_MODE_INDOOR			0
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_MODE_OUTDOOR			1
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_MODE_TL				2
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_MODE_MANUAL			3
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_MODE_AUTO				4

// Auto Exposure shutter mode values 
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_MODE_AUTO		0
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_MODE_FIXED	0xff

// Auto Exposure agc mode values
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_AGC_MODE_AUTO			0
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_AGC_MODE_FIXED		0xff

// Auto Exposure flickerless values 
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_FLICKERLESS_ON		0xff
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_FLICKERLESS_OFF		0x0

// Auto Exposure shutterspeed values (1/xx s) 
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_25		0x0
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_33		0x1
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_50		0x2
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_100		0x3
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_250		0x4
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_500		0x5
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_1000	0x6
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_1500	0x7
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_2500	0x8
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_5000	0x9
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED_10000	0xa

// Auto Exposure shutterspeed status values
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_STATUS_SMALLER	0x0
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_STATUS_EQUAL		0x1
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_STATUS_GREATER	0x2

// Framerate values
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE_VGA			0xff
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE_375			0x4
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE_5  			0x5
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE_75				0x8
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE_10				0xa
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE_12				0xc
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE_15				0xf
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE_20				0x14
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE_24				0x18

// Video format values
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_VIDEOFORMAT_CIF			0x1
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_VIDEOFORMAT_QCIF			0x2
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_VIDEOFORMAT_SQCIF		0x3
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_VIDEOFORMAT_VGA			0x4

// Video compression values
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_VIDEOCOMPRESSION_UNCOMPRESSED 0x1
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_VIDEOCOMPRESSION_COMPRESSED3X 0x3
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_VIDEOCOMPRESSION_COMPRESSED4X 0x4

// Sensortype values
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_SENSORTYPE_PAL_MR		0x1
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_SENSORTYPE_VGA			0x0

// Commands for camera default
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_DEFAULTS_RESTORE_USER	0x0
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_DEFAULTS_SAVE_USER		0x1
#define KSPROPERTY_PHILIPS_CUSTOM_PROP_DEFAULTS_RESTORE_FACTORY	0x2

// define the GUID of the custom propertyset
#define STATIC_PROPSETID_PHILIPS_CUSTOM_PROP \
	0xb5ca8702, 0xc487, 0x11d1, 0xb3, 0xd, 0x0, 0x60, 0x97, 0xd1, 0xcd, 0x79
DEFINE_GUIDEX(PROPSETID_PHILIPS_CUSTOM_PROP);

// define property id's for the custom property set
typedef enum {
	KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_MODE,		
	KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_SPEED,	
	KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_DELAY,		
	KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_RED_GAIN,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_WB_BLUE_GAIN,

	KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_CONTROL_SPEED,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_FLICKERLESS,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_MODE,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_SPEED,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_SHUTTER_STATUS,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_AGC_MODE,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_AE_AGC,

	KSPROPERTY_PHILIPS_CUSTOM_PROP_DRIVERVERSION,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATE,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_FRAMERATES_SUPPORTED,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_VIDEOFORMAT,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_SENSORTYPE,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_VIDEOCOMPRESSION,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_DEFAULTS,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_RELEASE_NUMBER,
    KSPROPERTY_PHILIPS_CUSTOM_PROP_PUSHBUTTON_FLAG,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_VENDOR_ID,
	KSPROPERTY_PHILIPS_CUSTOM_PROP_PRODUCT_ID
} KSPROPERTY_PHILIPS_CUSTOM_PROP;


// define a generic structure which will be used to pass
// the properties Currently, this is the same as for 
// KSPROPERTY_PROCAMP_S.
//
// Note: There are currently no 
// KSPROPERTY_PHILIPS_CUSTOM_PROP_FLAGS defined
typedef struct {
    KSPROPERTY Property;
    ULONG  Instance;                    
    LONG   Value;			// Value to set or get
    ULONG  Flags;			// KSPROPERTY_PHILIPS_CUSTOM_PROP_FLAGS_
    ULONG  Capabilities;	// KSPROPERTY_PHILIPS_CUSTOM_PROP_FLAGS_
} KSPROPERTY_PHILIPS_CUSTOM_PROP_S, *PKSPROPERTY_PHILIPS_CUSTOM_PROP_S;


#endif	/* __MPRPOBJ_H__ */