// ap.idl : IDL source for VMRAllocPresenter.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (ap.tlb) and marshalling code.

//=====================================================================


import "unknwn.idl";

cpp_quote("#ifdef DSHOW_INDEPENDENT")
typedef struct _AMMediaType {
   GUID     majortype;
   GUID     subtype;
   BOOL     bFixedSizeSamples;
   BOOL     bTemporalCompression;
   ULONG    lSampleSize;
   GUID     formattype;
   IUnknown *pUnk;
   ULONG    cbFormat;
   [size_is(cbFormat)] BYTE * pbFormat;
} AM_MEDIA_TYPE;
cpp_quote ("#endif")


cpp_quote("#if 0")
// This is temporary hack to get around the fact thatI don't know how to persuade
// MIDL to allow forward declarations.
typedef DOWRD*    LPDIRECTDRAW7;
typedef DOWRD*    LPDIRECTDRAWSURFACE7;
typedef DWORD*    IVMRSurfaceAllocator;
typedef DWORD*    IImageSync;
typedef DWORD*    IMediaSample;
cpp_quote ("#endif")
cpp_quote("#include <ddraw.h>")

interface IVMRMixerControl;
interface IVMRMixerStream;


import "oaidl.idl";
import "ocidl.idl";

[
    object,
    uuid(56949f22-aa07-4061-bb8c-10159d8f92e5),

    helpstring("IVMRMixerControl Interface"),
    pointer_default(unique)
]
interface IVMRMixerControl : IUnknown
{
        HRESULT SetBackEndAllocator(
                [in] IVMRSurfaceAllocator* lpAllocator
                );

        HRESULT SetBackEndImageSync(
                [in] IImageSync* lpImageSync
                );

        HRESULT SetMixerConfiguration(
                [in] DWORD dwMaxStreams
                );

        HRESULT GetMixerConfiguration(
                [out] DWORD* lpdwMaxStreams
                );
};

[
    object,
    uuid(43062408-3d55-43cc-9415-0daf218db422),

    helpstring("IVMRMixerStream Interface"),
    pointer_default(unique)
]
interface IVMRMixerStream : IUnknown
{
        HRESULT QueueStreamMediaSample(
                [in] DWORD dwStreamID,
                [in] IMediaSample* lpSample
                );

        HRESULT SetStreamMediaType(
                [in] DWORD dwStreamID,
                [in] AM_MEDIA_TYPE* pmt
                );

        HRESULT SetStreamActiveState(
                [in] DWORD dwStreamID,
                [in] BOOL fActive
                );

        HRESULT GetStreamActiveState(
                [in] DWORD dwStreamID,
                [out] BOOL* lpfActive
                );

        HRESULT SetStreamMode(
                [in] DWORD dwStreamID,
                [in] DWORD dwMixerMode
                );

        HRESULT GetStreamMode(
                [in] DWORD dwStreamID,
                [out] DWORD* lpdwMixerMode
                );

        HRESULT SetStreamColorKey(
                [in] DWORD dwStreamID,
                [in] COLORREF Clr
                );

        HRESULT GetStreamColorKey(
                [in] DWORD dwStreamID,
                [out] COLORREF* lpClr
                );

        HRESULT SetStreamAlpha(
                [in] DWORD dwStreamID,
                [in] DWORD Alpha
                );

        HRESULT GetStreamAlpha(
                [in] DWORD dwStreamID,
                [out] DWORD* lpAlpha
                );
};

[
    uuid(529b581a-2f2c-4a77-be9b-d8866d48dd4c),
    version(1.0),
    helpstring("Video Mixer 1.0 Type Library")
]
library VMRMIXERLib
{
    importlib("stdole2.tlb");

    [
        uuid(06b32aee-77da-484b-973b-5d64f47201b0),
        helpstring("AllocatorPresenter Class")
    ]
    coclass VideoMixer
    {
        [default] interface IVMRMixerControl;
    };

    [
         uuid(B87BEB7B-8D29-423f-AE4D-6582C10175AC),
         helpstring("Mixer Filter")
     ]
     coclass VideoMixingRenderer
     {
 	interface IUnknown;
     };

};

