context: /*
   * Cool Stream, Bro
   * 
   * DirectShowWrapper
   * 
   * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
   * If a copy of the MPL was not distributed with this file, 
   * You can obtain one at http://mozilla.org/MPL/2.0/. 
   */
  
  using System;
  using System.Runtime.InteropServices;
  
  namespace DirectShowWrapper
  {
  
  
    // ---------------------------------------------------------------------------------------
  
    [ComVisible(true), ComImport,
    Guid("56a868b1-0ad4-11ce-b03a-0020af0ba770"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IMediaControl
    {
      [PreserveSig]
      int Run();
  
      [PreserveSig]
      int Pause();
  
      [PreserveSig]
      int Stop();
  
      [PreserveSig]
      int GetState(int msTimeout, out int pfs);
  
      [PreserveSig]
      int RenderFile(string strFilename);
  
      [PreserveSig]
      int AddSourceFilter(
        [In]											string strFilename,
        [Out, MarshalAs(UnmanagedType.IDispatch)]	out object ppUnk);
  
      [PreserveSig]
      int get_FilterCollection(
        [Out, MarshalAs(UnmanagedType.IDispatch)]	out object ppUnk);
  
      [PreserveSig]
      int get_RegFilterCollection(
        [Out, MarshalAs(UnmanagedType.IDispatch)]	out object ppUnk);
  
      [PreserveSig]
      int StopWhenReady();
    }
  
  
  
  
  
    // ---------------------------------------------------------------------------------------
  
    [ComVisible(true), ComImport,
    Guid("56a868b6-0ad4-11ce-b03a-0020af0ba770"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IMediaEvent
    {
      [PreserveSig]
      int GetEventHandle(out IntPtr hEvent);
  
      [PreserveSig]
      int GetEvent(out DsEvCode lEventCode, out int lParam1, out int lParam2, int msTimeout);
  
      [PreserveSig]
      int WaitForCompletion(int msTimeout, out int pEvCode);
  
      [PreserveSig]
      int CancelDefaultHandling(int lEvCode);
  
      [PreserveSig]
      int RestoreDefaultHandling(int lEvCode);
  
      [PreserveSig]
      int FreeEventParams(DsEvCode lEvCode, int lParam1, int lParam2);
    }
  
  
  
  
  
    // ---------------------------------------------------------------------------------------
  
    [ComVisible(true), ComImport,
    Guid("56a868c0-0ad4-11ce-b03a-0020af0ba770"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IMediaEventEx
    {
      #region "IMediaEvent Methods"
      [PreserveSig]
      int GetEventHandle(out IntPtr hEvent);
  
      [PreserveSig]
      int GetEvent(out DsEvCode lEventCode, out int lParam1, out int lParam2, int msTimeout);
  
      [PreserveSig]
      int WaitForCompletion(int msTimeout, [Out] out int pEvCode);
  
      [PreserveSig]
      int CancelDefaultHandling(int lEvCode);
  
      [PreserveSig]
      int RestoreDefaultHandling(int lEvCode);
  
      [PreserveSig]
      int FreeEventParams(DsEvCode lEvCode, int lParam1, int lParam2);
      #endregion
  
  
      [PreserveSig]
      int SetNotifyWindow(IntPtr hwnd, int lMsg, IntPtr lInstanceData);
  
      [PreserveSig]
      int SetNotifyFlags(int lNoNotifyFlags);
  
      [PreserveSig]
      int GetNotifyFlags(out int lplNoNotifyFlags);
    }
  
  
  
  
  
    // ---------------------------------------------------------------------------------------
  
    [ComVisible(true), ComImport,
    Guid("329bb360-f6ea-11d1-9038-00a0c9697298"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IBasicVideo2
    {
      [PreserveSig]
      int AvgTimePerFrame(out double pAvgTimePerFrame);
  
      [PreserveSig]
      int BitRate(out int pBitRate);
  
      [PreserveSig]
      int BitErrorRate(out int pBitRate);
  
      [PreserveSig]
      int VideoWidth(out int pVideoWidth);
  
      [PreserveSig]
      int VideoHeight(out int pVideoHeight);
  
  
      [PreserveSig]
      int put_SourceLeft(int SourceLeft);
      [PreserveSig]
      int get_SourceLeft(out int pSourceLeft);
  
      [PreserveSig]
      int put_SourceWidth(int SourceWidth);
      [PreserveSig]
      int get_SourceWidth(out int pSourceWidth);
  
      [PreserveSig]
      int put_SourceTop(int SourceTop);
      [PreserveSig]
      int get_SourceTop(out int pSourceTop);
  
      [PreserveSig]
      int put_SourceHeight(int SourceHeight);
      [PreserveSig]
      int get_SourceHeight(out int pSourceHeight);
  
  
  
      [PreserveSig]
      int put_DestinationLeft(int DestinationLeft);
      [PreserveSig]
      int get_DestinationLeft(out int pDestinationLeft);
  
      [PreserveSig]
      int put_DestinationWidth(int DestinationWidth);
      [PreserveSig]
      int get_DestinationWidth(out int pDestinationWidth);
  
      [PreserveSig]
      int put_DestinationTop(int DestinationTop);
      [PreserveSig]
      int get_DestinationTop(out int pDestinationTop);
  
      [PreserveSig]
      int put_DestinationHeight(int DestinationHeight);
      [PreserveSig]
      int get_DestinationHeight(out int pDestinationHeight);
  
      [PreserveSig]
      int SetSourcePosition(int left, int top, int width, int height);
      [PreserveSig]
      int GetSourcePosition(out int left, out int top, out int width, out int height);
      [PreserveSig]
      int SetDefaultSourcePosition();
  
  
      [PreserveSig]
      int SetDestinationPosition(int left, int top, int width, int height);
      [PreserveSig]
      int GetDestinationPosition(out int left, out int top, out int width, out int height);
      [PreserveSig]
      int SetDefaultDestinationPosition();
  
  
      [PreserveSig]
      int GetVideoSize(out int pWidth, out int pHeight);
  
      [PreserveSig]
      int GetVideoPaletteEntries(int StartIndex, int Entries, out int pRetrieved, IntPtr pPalette);
  
      [PreserveSig]
      int GetCurrentImage(ref int pBufferSize, IntPtr pDIBImage);
  
      [PreserveSig]
      int IsUsingDefaultSource();
      [PreserveSig]
      int IsUsingDefaultDestination();
  
      [PreserveSig]
      int GetPreferredAspectRatio(out int plAspectX, out int plAspectY);
    }
  
  
  
  
  
  
  
  
  
    [ComVisible(true), ComImport,
    Guid("56a868b4-0ad4-11ce-b03a-0020af0ba770"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IVideoWindow
    {
      [PreserveSig]
      int put_Caption(string caption);
      [PreserveSig]
      int get_Caption([Out] out string caption);
  
      [PreserveSig]
      int put_WindowStyle(int windowStyle);
      [PreserveSig]
      int get_WindowStyle(out int windowStyle);
  
      [PreserveSig]
      int put_WindowStyleEx(int windowStyleEx);
      [PreserveSig]
      int get_WindowStyleEx(out int windowStyleEx);
  
      [PreserveSig]
      int put_AutoShow(int autoShow);
      [PreserveSig]
      int get_AutoShow(out int autoShow);
  
      [PreserveSig]
      int put_WindowState(int windowState);
      [PreserveSig]
      int get_WindowState(out int windowState);
  
      [PreserveSig]
      int put_BackgroundPalette(int backgroundPalette);
      [PreserveSig]
      int get_BackgroundPalette(out int backgroundPalette);
  
      [PreserveSig]
      int put_Visible(int visible);
      [PreserveSig]
      int get_Visible(out int visible);
  
      [PreserveSig]
      int put_Left(int left);
      [PreserveSig]
      int get_Left(out int left);
  
      [PreserveSig]
      int put_Width(int width);
      [PreserveSig]
      int get_Width(out int width);
  
      [PreserveSig]
      int put_Top(int top);
      [PreserveSig]
      int get_Top(out int top);
  
      [PreserveSig]
      int put_Height(int height);
      [PreserveSig]
      int get_Height(out int height);
  
      [PreserveSig]
      int put_Owner(IntPtr owner);
      [PreserveSig]
      int get_Owner(out IntPtr owner);
  
      [PreserveSig]
      int put_MessageDrain(IntPtr drain);
      [PreserveSig]
      int get_MessageDrain(out IntPtr drain);
  
      [PreserveSig]
      int get_BorderColor(out int color);
      [PreserveSig]
      int put_BorderColor(int color);
  
      [PreserveSig]
      int get_FullScreenMode(out int fullScreenMode);
      [PreserveSig]
      int put_FullScreenMode(int fullScreenMode);
  
      [PreserveSig]
      int SetWindowForeground(int focus);
  
      [PreserveSig]
      int NotifyOwnerMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam);
  
      [PreserveSig]
      int SetWindowPosition(int left, int top, int width, int height);
  
      [PreserveSig]
      int GetWindowPosition(out int left, out int top, out int width, out int height);
  
      [PreserveSig]
      int GetMinIdealImageSize(out int width, out int height);
  
      [PreserveSig]
      int GetMaxIdealImageSize(out int width, out int height);
  
      [PreserveSig]
      int GetRestorePosition(out int left, out int top, out int width, out int height);
  
      [PreserveSig]
      int HideCursor(int hideCursor);
  
      [PreserveSig]
      int IsCursorHidden(out int hideCursor);
  
    }
  
  
  
  
  
  
  
  
  
  
    // ---------------------------------------------------------------------------------------
  
    [ComVisible(true), ComImport,
    Guid("56a868b2-0ad4-11ce-b03a-0020af0ba770"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IMediaPosition
    {
      [PreserveSig]
      int get_Duration(out double pLength);
  
      [PreserveSig]
      int put_CurrentPosition(double llTime);
      [PreserveSig]
      int get_CurrentPosition(out double pllTime);
  
      [PreserveSig]
      int get_StopTime(out double pllTime);
      [PreserveSig]
      int put_StopTime(double llTime);
  
      [PreserveSig]
      int get_PrerollTime(out double pllTime);
      [PreserveSig]
      int put_PrerollTime(double llTime);
  
      [PreserveSig]
      int put_Rate(double dRate);
      [PreserveSig]
      int get_Rate(out double pdRate);
  
      [PreserveSig]
      int CanSeekForward(out int pCanSeekForward);
      [PreserveSig]
      int CanSeekBackward(out int pCanSeekBackward);
    }
  
  
  
  
  
  
  
    // ---------------------------------------------------------------------------------------
  
    [ComVisible(true), ComImport,
    Guid("56a868b3-0ad4-11ce-b03a-0020af0ba770"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IBasicAudio
    {
      [PreserveSig]
      int put_Volume(int lVolume);
      [PreserveSig]
      int get_Volume(out int plVolume);
  
      [PreserveSig]
      int put_Balance(int lBalance);
      [PreserveSig]
      int get_Balance(out int plBalance);
    }
  
  
  
  
  
    // ---------------------------------------------------------------------------------------
  
    [ComVisible(true), ComImport,
    Guid("56a868b9-0ad4-11ce-b03a-0020af0ba770"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMCollection
    {
      [PreserveSig]
      int get_Count(out int plCount);
  
      [PreserveSig]
      int Item(int lItem,
        [Out, MarshalAs(UnmanagedType.IUnknown)]		out	object ppUnk);
  
      [PreserveSig]
      int get_NewEnum(
        [Out, MarshalAs(UnmanagedType.IUnknown)]		out	object ppUnk);
    }
  
  
    public enum DsEvCode
    {
      None,
      Complete = 0x01,		// EC_COMPLETE
      UserAbort = 0x02,		// EC_USERABORT
      ErrorAbort = 0x03,		// EC_ERRORABORT
      Time = 0x04,		// EC_TIME
      Repaint = 0x05,		// EC_REPAINT
      StErrStopped = 0x06,		// EC_STREAM_ERROR_STOPPED
      StErrStPlaying = 0x07,		// EC_STREAM_ERROR_STILLPLAYING
      ErrorStPlaying = 0x08,		// EC_ERROR_STILLPLAYING
      PaletteChanged = 0x09,		// EC_PALETTE_CHANGED
      VideoSizeChanged = 0x0a,		// EC_VIDEO_SIZE_CHANGED
      QualityChange = 0x0b,		// EC_QUALITY_CHANGE
      ShuttingDown = 0x0c,		// EC_SHUTTING_DOWN
      ClockChanged = 0x0d,		// EC_CLOCK_CHANGED
      Paused = 0x0e,		// EC_PAUSED
      OpeningFile = 0x10,		// EC_OPENING_FILE
      BufferingData = 0x11,		// EC_BUFFERING_DATA
      FullScreenLost = 0x12,		// EC_FULLSCREEN_LOST
      Activate = 0x13,		// EC_ACTIVATE
      NeedRestart = 0x14,		// EC_NEED_RESTART
      WindowDestroyed = 0x15,		// EC_WINDOW_DESTROYED
      DisplayChanged = 0x16,		// EC_DISPLAY_CHANGED
      Starvation = 0x17,		// EC_STARVATION
      OleEvent = 0x18,		// EC_OLE_EVENT
      NotifyWindow = 0x19,		// EC_NOTIFY_WINDOW
      // EC_ ....
  
      // DVDevCod.h
      DvdDomChange = 0x101,	// EC_DVD_DOMAIN_CHANGE
      DvdTitleChange = 0x102,	// EC_DVD_TITLE_CHANGE
      DvdChaptStart = 0x103,	// EC_DVD_CHAPTER_START
      DvdAudioStChange = 0x104,	// EC_DVD_AUDIO_STREAM_CHANGE
  
      DvdSubPicStChange = 0x105,	// EC_DVD_SUBPICTURE_STREAM_CHANGE
      DvdAngleChange = 0x106,	// EC_DVD_ANGLE_CHANGE
  
gt:     DvdButtonChange = 0x107,	// EC_DVD_BUTTON_CHANGE