/*
 * Copyright (C) 2002 Lionel Ulmer
 * Copyright (C) 2004 Alexandre Julliard
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

cpp_quote("#if 0")  /* FIXME: these files are not included on Windows */
import "shldisp.idl";
import "strmif.idl";
cpp_quote("#endif")

interface IMediaControl;
interface IBasicAudio;
interface IBasicVideo;
interface IVideoWindow;
interface IMediaEvent;
interface IMediaEventEx;

typedef long OAFilterState;
typedef LONG_PTR OAHWND;
typedef LONG_PTR OAEVENT;

/*****************************************************************************
 * IMediaControl interface
 */
[
    object,
    uuid(56a868b1-0ad4-11ce-b03a-0020af0ba770),
    pointer_default(unique)
]
interface IMediaControl : IDispatch
{
    HRESULT Run();
    HRESULT Pause();
    HRESULT Stop();
    HRESULT GetState( [in] LONG msTimeout, [out] OAFilterState *pfs );
    HRESULT RenderFile( [in] BSTR strFilename );
    HRESULT AddSourceFilter( [in] BSTR strFilename, [out] IDispatch **ppUnk );
    [propget] HRESULT FilterCollection( [out] IDispatch **ppUnk );
    [propget] HRESULT RegFilterCollection( [out] IDispatch **ppUnk );
    HRESULT StopWhenReady();
}


/*****************************************************************************
 * IBasicAudio interface
 */
[
    object,
    uuid(56a868b3-0ad4-11ce-b03a-0020af0ba770),
    pointer_default(unique)
]
interface IBasicAudio : IDispatch
{
    [propput] HRESULT Volume( [in] long lVolume );
    [propget] HRESULT Volume( [out] long *plVolume );
    [propput] HRESULT Balance( [in] long lBalance );
    [propget] HRESULT Balance( [out] long *plBalance );
}


/*****************************************************************************
 * IVideoWindow interface
 */
[
    object,
    uuid(56a868b4-0ad4-11ce-b03a-0020af0ba770),
    pointer_default(unique)
]
interface IVideoWindow : IDispatch
{
    [propput] HRESULT Caption( [in] BSTR strCaption );
    [propget] HRESULT Caption( [out] BSTR *strCaption );
    [propput] HRESULT WindowStyle( [in] long WindowStyle );
    [propget] HRESULT WindowStyle( [out] long *WindowStyle );
    [propput] HRESULT WindowStyleEx( [in] long WindowStyleEx );
    [propget] HRESULT WindowStyleEx( [out] long *WindowStyleEx );
    [propput] HRESULT AutoShow( [in] long AutoShow );
    [propget] HRESULT AutoShow( [out] long *AutoShow );
    [propput] HRESULT WindowState( [in] long WindowState );
    [propget] HRESULT WindowState( [out] long *WindowState );
    [propput] HRESULT BackgroundPalette( [in] long BackgroundPalette );
    [propget] HRESULT BackgroundPalette( [out] long *pBackgroundPalette );
    [propput] HRESULT Visible( [in] long Visible );
    [propget] HRESULT Visible( [out] long *pVisible );
    [propput] HRESULT Left( [in] long Left );
    [propget] HRESULT Left( [out] long *pLeft );
    [propput] HRESULT Width( [in] long Width );
    [propget] HRESULT Width( [out] long *pWidth );
    [propput] HRESULT Top( [in] long Top );
    [propget] HRESULT Top( [out] long *pTop );
    [propput] HRESULT Height( [in] long Height );
    [propget] HRESULT Height( [out] long *pHeight );
    [propput] HRESULT Owner( [in] OAHWND Owner );
    [propget] HRESULT Owner( [out] OAHWND *Owner );
    [propput] HRESULT MessageDrain( [in] OAHWND Drain );
    [propget] HRESULT MessageDrain( [out] OAHWND *Drain );
    [propget] HRESULT BorderColor( [out] long *Color );
    [propput] HRESULT BorderColor( [in] long Color );
    [propget] HRESULT FullScreenMode( [out] long *FullScreenMode );
    [propput] HRESULT FullScreenMode( [in] long FullScreenMode );
    HRESULT SetWindowForeground( [in] long Focus );
    HRESULT NotifyOwnerMessage( [in] OAHWND hwnd, [in] long uMsg, [in] LONG_PTR wParam, [in] LONG_PTR lParam );
    HRESULT SetWindowPosition( [in] long Left, [in] long Top, [in] long Width, [in] long Height );
    HRESULT GetWindowPosition( [out] long *pLeft, [out] long *pTop, [out] long *pWidth, [out] long *pHeight );
    HRESULT GetMinIdealImageSize( [out] long *pWidth, [out] long *pHeight );
    HRESULT GetMaxIdealImageSize( [out] long *pWidth, [out] long *pHeight );
    HRESULT GetRestorePosition( [out] long *pLeft, [out] long *pTop, [out] long *pWidth, [out] long *pHeight );
    HRESULT HideCursor( [in] long HideCursor );
    HRESULT IsCursorHidden( [out] long *CursorHidden );
}


/*****************************************************************************
 * IBasicVideo interface
 */
[
    object,
    uuid(56a868b5-0ad4-11ce-b03a-0020af0ba770),
    pointer_default(unique)
]
interface IBasicVideo : IDispatch
{
    [propget] HRESULT AvgTimePerFrame( [out] REFTIME *pAvgTimePerFrame );
    [propget] HRESULT BitRate( [out] long *pBitRate );
    [propget] HRESULT BitErrorRate( [out] long *pBitErrorRate );
    [propget] HRESULT VideoWidth( [out] long *pVideoWidth );
    [propget] HRESULT VideoHeight( [out] long *pVideoHeight );
    [propput] HRESULT SourceLeft( [in] long SourceLeft );
    [propget] HRESULT SourceLeft( [out] long *pSourceLeft );
    [propput] HRESULT SourceWidth( [in] long SourceWidth );
    [propget] HRESULT SourceWidth( [out] long *pSourceWidth );
    [propput] HRESULT SourceTop( [in] long SourceTop );
    [propget] HRESULT SourceTop( [out] long *pSourceTop );
    [propput] HRESULT SourceHeight( [in] long SourceHeight );
    [propget] HRESULT SourceHeight( [out] long *pSourceHeight );
    [propput] HRESULT DestinationLeft( [in] long DestinationLeft );
    [propget] HRESULT DestinationLeft( [out] long *pDestinationLeft );
    [propput] HRESULT DestinationWidth( [in] long DestinationWidth );
    [propget] HRESULT DestinationWidth( [out] long *pDestinationWidth );
    [propput] HRESULT DestinationTop( [in] long DestinationTop );
    [propget] HRESULT DestinationTop( [out] long *pDestinationTop );
    [propput] HRESULT DestinationHeight( [in] long DestinationHeight );
    [propget] HRESULT DestinationHeight( [out] long *pDestinationHeight );
    HRESULT SetSourcePosition( [in] long Left, [in] long Top, [in] long Width, [in] long Height );
    HRESULT GetSourcePosition( [out] long *pLeft, [out] long *pTop, [out] long *pWidth, [out] long *pHeight );
    HRESULT SetDefaultSourcePosition();
    HRESULT SetDestinationPosition( [in] long Left, [in] long Top, [in] long Width, [in] long Height );
    HRESULT GetDestinationPosition( [out] long *pLeft, [out] long *pTop, [out] long *pWidth, [out] long *pHeight );
    HRESULT SetDefaultDestinationPosition();
    HRESULT GetVideoSize( [out] long *pWidth, [out] long *pHeight );
    HRESULT GetVideoPaletteEntries( [in] long StartIndex,
                                    [in] long Entries,
                                    [out] long *pRetrieved,
                                    [out, size_is(Entries), length_is(*pRetrieved)] long *pPalette );
    HRESULT GetCurrentImage( [in, out] long *pBufferSize,
                             [out, size_is(*pBufferSize), length_is(*pBufferSize)] long *pDIBImage );
    HRESULT IsUsingDefaultSource();
    HRESULT IsUsingDefaultDestination();
}


/*****************************************************************************
 * IMediaEvent interface
 */
[
    object,
    uuid(56a868b6-0ad4-11ce-b03a-0020af0ba770),
    pointer_default(unique)
]
interface IMediaEvent : IDispatch
{
    HRESULT GetEventHandle( [out] OAEVENT *hEvent );
    HRESULT GetEvent( [out] long *lEventCode, [out] LONG_PTR *lParam1, [out] LONG_PTR *lParam2, [in] long msTimeout );
    HRESULT WaitForCompletion( [in] long msTimeout, [out] long *pEvCode );
    HRESULT CancelDefaultHandling( [in] long lEvCode );
    HRESULT RestoreDefaultHandling( [in] long lEvCode );
    HRESULT FreeEventParams( [in] long lEvCode, [in] LONG_PTR lParam1, [in] LONG_PTR lParam2 );
}


/*****************************************************************************
 * IMediaEventEx interface
 */
[
    object,
    uuid(56a868c0-0ad4-11ce-b03a-0020af0ba770),
    pointer_default(unique)
]
interface IMediaEventEx : IMediaEvent
{
    HRESULT SetNotifyWindow( [in] OAHWND hwnd, [in] long lMsg, [in] LONG_PTR lInstanceData );
    HRESULT SetNotifyFlags( [in] long lNoNotifyFlags );
    HRESULT GetNotifyFlags( [out] long *lplNoNotifyFlags );
}
