//------------------------------------------------------------------------------
// File: AMVPE.idl
//
// Desc: 
//
// Copyright (c) 1992-2001, 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] LPUNKNOWN lpOverlaySurface,
                            [in] INT iNumBackBuffers
        );

}
