//------------------------------------------------------------------------------
// File: AMVPE.idl
//
// Desc: 
//
// Copyright (c) 1992 - 2000, Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------------------------


import "unknwn.idl";
import "objidl.idl";	// for IPersist (IFilter's root)


/*
 * VIDOESIGNALINFO
 */
typedef struct _VIDEOSIGNALINFO
{
    DWORD dwSize;				// Size of the structure
    DWORD dwVREFHeight;			// Specifies the number of lines of data in the vref
	BOOL  bDoubleClock;			// videoport should enable double clocking
	BOOL  bVACT;				// videoport should use an external VACT signal
	BOOL  bInterlaced;			// Indicates that the signal is interlaced
	BOOL  bHalfline;			// Device will write half lines into the frame buffer
	BOOL  bInvertedPolarity;    // Devoce inverts the polarity by default
} AMVIDEOSIGNALINFO;

typedef struct AMVIDEOSIGNALINFO        *LPAMVIDEOSIGNALINFO;


interface IVPEConfig;
interface IVPE;


/*
 * DDVIDEOPORTCONNECT
 */
typedef struct _DDVIDEOPORTCONNECT
{
    DWORD dwSize;			// size of the DDVIDEOPORTCONNECT structure
    GUID  guidTypeID; 			// Description of video port connection
    DWORD dwPortWidth;			// Width of the video port
    DWORD dwFlags;			// Connection flags
} DDVIDEOPORTCONNECT;

typedef DDVIDEOPORTCONNECT *LPDDVIDEOPORTCONNECT;



/*
 * DDPIXELFORMAT
 */
typedef struct _DDPIXELFORMAT
{
    DWORD	dwSize;			// size of structure
    DWORD	dwFlags;		// pixel format flags
    DWORD	dwFourCC;		// (FOURCC code)
    union
    {
	DWORD	dwRGBBitCount;		// how many bits per pixel (BD_1,2,4,8,16,24,32)
	DWORD	dwYUVBitCount;		// how many bits per pixel (BD_4,8,16,24,32)
	DWORD	dwZBufferBitDepth;	// how many bits for z buffers (BD_8,16,24,32)
	DWORD	dwAlphaBitDepth;	// how many bits for alpha channels (BD_1,2,4,8)
    };
    union
    {
	DWORD	dwRBitMask;		// mask for red bit
	DWORD	dwYBitMask;		// mask for Y bits
    };
    union
    {
	DWORD	dwGBitMask;		// mask for green bits
	DWORD	dwUBitMask;		// mask for U bits
    };
    union
    {
	DWORD	dwBBitMask;		// mask for blue bits
	DWORD	dwVBitMask;		// mask for V bits
    };
    union
    {
	DWORD	dwRGBAlphaBitMask;	// mask for alpha channel
	DWORD	dwYUVAlphaBitMask;	// mask for alpha channel
	DWORD	dwRGBZBitMask;		// mask for Z channel
	DWORD	dwYUVZBitMask;		// mask for Z channel
    };
} DDPIXELFORMAT;

typedef DDPIXELFORMAT * LPDDPIXELFORMAT;


[
object,
uuid(BC29A660-30E3-11d0-9E69-00C04FD7C15B),
pointer_default(unique)
]

interface IVPEConfig : IUnknown {

		// gets the various connection information structures (guid, portwidth)
		// in an array of structures. If the pointer to the array is NULL, first 
		// parameter returns the total number of formats supported.
		HRESULT GetConnectInfo(
						[in,out] LPDWORD lpNumConnectInfo,
						[out] LPDDVIDEOPORTCONNECT lpddvpConnectInfo
		);

		HRESULT SetConnectInfo(
						[in] DDVIDEOPORTCONNECT ddvpConnectInfo
		);

		// gets the various formats supported by the decoder in an array
		// of structures. If the pointer to the array is NULL, first parameter
		// returns the total number of formats supported.
		HRESULT GetVideoFormats(
						[in,out] LPDWORD lpNumFormats,
						[out] LPDDPIXELFORMAT lpddpfFormats
		);

		// retrives maximum pixels per second rate expected for a given 
		// format and a given scaling factor. If decoder does not support 
		// those scaling factors, then it gives the rate and the nearest 
		// scaling factors.
		HRESULT GetMaxPixelRate(
						[in] DDPIXELFORMAT ddpfFormat,
						[in,out] LPDWORD lpdwZoomHeight,
						[in,out] LPDWORD lpdwZoomWidth,
						[out] LPDWORD lpdwMaxPixelsPerSecond
		);

		// retrives various properties of the decoder for a given format
		HRESULT GetVideoSignalInfo(
						[in] DDPIXELFORMAT ddpfFormat,
						[out] LPAMVIDEOSIGNALINFO lpAMVideoSignalInfo
		);
		
		// asks the decoder to ouput in this format. Return value should give
		// appropriate error code
		HRESULT SetVideoFormat(
						[in] DDPIXELFORMAT ddpfFormat
		);

		// asks the decoder to treat even fields like odd fields and visa versa
		HRESULT SetInvertPolarity(
		);

		// sets the scaling factors. If decoder does not support these,
		// then it sets the values to the nearest factors it can support
		HRESULT SetScalingFactors(
						[in,out] LPDWORD lpdwZoomHeight,
						[in,out] LPDWORD lpdwZoomWidth
		);
 
 }



[
object,
uuid(BC29A661-30E3-11d0-9E69-00C04FD7C15B),
pointer_default(unique)
]

interface IVPE : IUnknown {
		HRESULT SetOverlaySurface(
//                            [in] LPDIRECTDRAWSURFACE lpOverlaySurface,
                            [in] LPUNKNOWN lpOverlaySurface,
							[in] INT iNumBackBuffers
		);

}
