/****************************************************************************
 *
 *	$Archive:   S:/STURGEON/SRC/INCLUDE/VCS/vidinfo.h_v  $
 *
 *  INTEL Corporation Prorietary Information
 *
 *  This listing is supplied under the terms of a license agreement
 *  with INTEL Corporation and may not be copied nor disclosed except
 *  in accordance with the terms of that agreement.
 *
 *	Copyright (c) 1993-1994 Intel Corporation.
 *
 *	$Author:   MLAKSHMX  $
 *
 *	Deliverable:
 *
 *	Abstract: Header file for the video MSP to share information with the App.
 *
 *	Notes:
 *
 ***************************************************************************/

#ifndef VIDINFO_H
#define VIDINFO_H
#include	"h245api.h"

#ifdef __cplusplus
extern "C" {				// Assume C declarations for C++.
#endif // __cplusplus


//Unique ID for this version of MSP.
#define VIDEOSRCMSP "IntelIPhoneVideoH2631.0Src"
#define VIDEOSNKMSP "IntelIPhoneVideoH2631.0Snk"

// This function allows the MSM to make IO Control (IOCTL) type calls into 
// the MSP. The following controls can be exercised on the sink instance of
// VIDMSP.

//  Change the display frame size.
//  lparam2 = pointer to a RECT
#define	VIDCMD_RESIZE_VIDEO		0x00000001

/**********************
Please Ignore these defunct	#defines for Video Attributes!!
//
//	Change the display frame rate.
//  lparam2 = frame rate in msec/frame
#define	VIDCMD_SET_DISPLAY_RATE	0x00000002

// Specify whether quality or frame rate is more desirable for remote
// video.
//  lparam1 = TRUE - 
//  lparam2 = Quality (1-10000)
//
// or
//  lparam1 = FALSE
//  lparam2 = Frame rate in msec/frame.
//
#define	VIDCMD_QUALITY_FRAMERATE	0x00000003


//The following controls can be exercised on the source instance of VIDMSP.

// Use the constant quality bit rate controller.	
//  lparam1 = Byte rate in bytes/sec.
//  lparam2 = Quality.
#define	VIDCMD_SET_QUALITY_BRC		0x00000004

// Use constant frame rate bit rate  controller.
//  lparam1 = Byte rate in bytes/sec.
//  lparam2 = frame rate in	msec/frame.
#define	VIDCMD_SET_FRAME_RATE_BRC	0x00000005 
// Use constant frame size bit rate  controller.
//  lparam1 = Byte rate in bytes/sec.
//  lparam2 = frame rate in msec/frame.

#define	VIDCMD_SET_FRAME_SIZE_BRC	0x00000006

// Turn PB frames on/off.
// lparam1 = TRUE - PB frames on.
//       FALSE - PB frames off.

#define	VIDCMD_CNTL_PB_FRAMES		0x00000007	
								
// Set the packet-size
// lparam1 = 0 for Get, 1 for Set.
// lparam2 = packet size in bytes.
#define	VIDCMD_PACKET_SIZE		0x00000008
******************************************/

// this command instructs the Video MSP to launch the Video config
// dialog box, to allow user to set frame rate,data rate , quality etc.
#define VIDCMD_CONFIG_VIDEO             0x0000000A
#define VIDCMD_GET_VIDCFG	            0x0000000B

// Mute & Unmute Video
#define	VIDCMD_PAUSE_VIDEO				0x0000000C
#define	VIDCMD_UNPAUSE_VIDEO			0x0000000D

// Commands for the Video Source. These will xlate to 
// commands for the encoder
#define	VIDCMD_SET_SRC_FRAMERATE		0x0000000E
#define	VIDCMD_SET_SRC_BITRATE			0x0000000F
#define	VIDCMD_SET_SRC_QUALITY			0x00000010

// commands for the Video Sink. These will xlate to
// commands for the decoder
#define VIDCMD_SET_SNK_BRIGHTNESS		0x00000011
#define VIDCMD_SET_SNK_CONTRAST			0x00000012


#define	AVPHONE_APP		1
#define	MSMTEST_APP		0

typedef struct _VIDEOCONFIG
{
	int	m_FrameRate;
	int	m_DataRate;
	int	m_Quality;
	BOOL	AppOrMsmtest; // need to diff between a H323 based app and msmtest
}
VIDEOCONFIG,*PVIDEOCONFIG;

// Set the expected packet loss rate.
// lparam1 = 0 for Get, 1 for Set.
// lparam2 = a number from 0 - 100.
#define	VIDCMD_EXPECTED_PACKET_LOSS	0x00000009

// Video MSP Open Port structure
// To be passed in lParamIn by MSM in the MSP_OpenPort call
typedef struct _VIDMSPOPENPORT
{
	H245_TOTCAP_T	*pH245TotCapT;
	HWND hAppWnd;
	BYTE	RTPPayloadType;
}
VIDMSPOPENPORT, *LPVIDMSPOPENPORT;


// ISDM Keys & Values
#define IPHONE_VIDEO    "IIPHONE_VIDEO"
#define	VIDEO_SEND		"Send"
#define	VIDEO_RCV		"Receive"

typedef	struct	_IPHONE_VIDEO_VALUE
{
	DWORD	dwRevNumber; // 1 for Release
	DWORD	dwTargetFrameRate; // frames/sec
	DWORD	dwFrameRate; // Frames/sec since last updated
	DWORD	dwTargetDataRate; // bits/sec
	DWORD	dwDataRate;	// bits/sec rate since value last updated
	DWORD	Reserved[59];
}IPHONEVIDEOVALUE,*LPIPHONEVIDEOVALUE;

// Video MSP Error Codes
#define EVID_ERROR_BASE					0xA000
#define FIRST_EVID_ID					-400 + EVID_ERROR_BASE//Same as next err.
#define EVID_BAD_MSP_HND				-400 + EVID_ERROR_BASE
#define EVID_NULL_INSTANCE_HANDLE		-400 + EVID_ERROR_BASE
#define EVID_BAD_MSP_TYPE				-401 + EVID_ERROR_BASE
#define EVID_BAD_CALL_ORDER 			-402 + EVID_ERROR_BASE
#define EVID_BAD_BUF_PTR				-403 + EVID_ERROR_BASE
#define EVID_CANT_LOAD_DLL				-404 + EVID_ERROR_BASE
#define EVID_VM_INIT_FAILED 			-405 + EVID_ERROR_BASE
#define EVID_VM_OPEN_FAILED 			-406 + EVID_ERROR_BASE
#define EVID_VM_CAPT_FAILED 			-407 + EVID_ERROR_BASE
#define EVID_VM_LINKIN_FAILED			-408 + EVID_ERROR_BASE
#define EVID_VM_UNLINKIN_FAILED 		-409 + EVID_ERROR_BASE
#define EVID_VM_LINKOUT_FAILED			-410 + EVID_ERROR_BASE
#define EVID_VM_UNLINKOUT_FAILED		-411 + EVID_ERROR_BASE
#define EVID_VM_PLAY_FAILED 			-412 + EVID_ERROR_BASE
#define EVID_VM_ENDPLAY_FAILED			-413 + EVID_ERROR_BASE
#define EVID_BAD_CONFIG_SETTING			-414 + EVID_ERROR_BASE
#define EVID_MALLOC_FAILED				-415 + EVID_ERROR_BASE
#define EVID_VM_REGISTER_FAILED			-450 + EVID_ERROR_BASE
#define EVID_VM_UNREGISTER_FAILED		-451 + EVID_ERROR_BASE
#define EVID_BAD_PARAMETER				-452 + EVID_ERROR_BASE
#define EVID_VM_START_SENDING_FAILED	-453 + EVID_ERROR_BASE
#define EVID_VM_STOP_SENDING_FAILED		-454 + EVID_ERROR_BASE
#define EVID_VM_CREATEWINDOW_FAILED		-455 + EVID_ERROR_BASE
#define LAST_EVID_ID					-414 + EVID_ERROR_BASE

#ifdef __cplusplus
}						// End of extern "C" {
#endif // __cplusplus


#endif // VIDINFO_H