#region license

/*
DirectShowLib - Provide access to DirectShow interfaces via .NET
Copyright (C) 2007
http://sourceforge.net/projects/directshownet/

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
*/

#endregion

using System;
using System.Runtime.InteropServices;

namespace DirectShowLib
{
    #region Declarations

    /// <summary>
    /// From AMExtendedSeekingCapabilities
    /// </summary>
    [Flags]
    public enum AMExtendedSeekingCapabilities
    {
        None = 0,
        CanSeek = 1,
        CanScan = 2,
        MarkerSeek = 4,
        ScanWithoutClock = 8,
        NoStandardRepaint = 16,
        Buffering = 32,
        SendsVideoFrameReady = 64
    }

    #endregion

    #region Interfaces

#if ALLOW_UNTESTED_INTERFACES

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("FA2AA8F1-8B62-11D0-A520-000000000000"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMNetShowConfig
    {
        [PreserveSig]
        int get_BufferingTime(out double pBufferingTime);

        [PreserveSig]
        int put_BufferingTime(double BufferingTime);

        [PreserveSig]
        int get_UseFixedUDPPort([MarshalAs(UnmanagedType.VariantBool)] out bool pUseFixedUDPPort);

        [PreserveSig]
        int put_UseFixedUDPPort([MarshalAs(UnmanagedType.VariantBool)] bool UseFixedUDPPort);

        [PreserveSig]
        int get_FixedUDPPort(out int pFixedUDPPort);

        [PreserveSig]
        int put_FixedUDPPort(int FixedUDPPort);

        [PreserveSig]
        int get_UseHTTPProxy([MarshalAs(UnmanagedType.VariantBool)] out bool pUseHTTPProxy);

        [PreserveSig]
        int put_UseHTTPProxy([MarshalAs(UnmanagedType.VariantBool)] bool UseHTTPProxy);

        [PreserveSig]
        int get_EnableAutoProxy([MarshalAs(UnmanagedType.VariantBool)] out bool pEnableAutoProxy);

        [PreserveSig]
        int put_EnableAutoProxy([MarshalAs(UnmanagedType.VariantBool)] bool EnableAutoProxy);

        [PreserveSig]
        int get_HTTPProxyHost([MarshalAs(UnmanagedType.BStr)] out string pbstrHTTPProxyHost);

        [PreserveSig]
        int put_HTTPProxyHost([MarshalAs(UnmanagedType.BStr)] string bstrHTTPProxyHost);

        [PreserveSig]
        int get_HTTPProxyPort(out int pHTTPProxyPort);

        [PreserveSig]
        int put_HTTPProxyPort(int HTTPProxyPort);

        [PreserveSig]
        int get_EnableMulticast([MarshalAs(UnmanagedType.VariantBool)] out bool pEnableMulticast);

        [PreserveSig]
        int put_EnableMulticast([MarshalAs(UnmanagedType.VariantBool)] bool EnableMulticast);

        [PreserveSig]
        int get_EnableUDP([MarshalAs(UnmanagedType.VariantBool)] out bool pEnableUDP);

        [PreserveSig]
        int put_EnableUDP([MarshalAs(UnmanagedType.VariantBool)] bool EnableUDP);

        [PreserveSig]
        int get_EnableTCP([MarshalAs(UnmanagedType.VariantBool)] out bool pEnableTCP);

        [PreserveSig]
        int put_EnableTCP([MarshalAs(UnmanagedType.VariantBool)] bool EnableTCP);

        [PreserveSig]
        int get_EnableHTTP([MarshalAs(UnmanagedType.VariantBool)] out bool pEnableHTTP);

        [PreserveSig]
        int put_EnableHTTP([MarshalAs(UnmanagedType.VariantBool)] bool EnableHTTP);

    }

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("FA2AA8F2-8B62-11D0-A520-000000000000"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMChannelInfo
    {
        [PreserveSig]
        int get_ChannelName([MarshalAs(UnmanagedType.BStr)] out string pbstrChannelName);

        [PreserveSig]
        int get_ChannelDescription([MarshalAs(UnmanagedType.BStr)] out string pbstrChannelDescription);

        [PreserveSig]
        int get_ChannelURL([MarshalAs(UnmanagedType.BStr)] out string pbstrChannelURL);

        [PreserveSig]
        int get_ContactAddress([MarshalAs(UnmanagedType.BStr)] out string pbstrContactAddress);

        [PreserveSig]
        int get_ContactPhone([MarshalAs(UnmanagedType.BStr)] out string pbstrContactPhone);

        [PreserveSig]
        int get_ContactEmail([MarshalAs(UnmanagedType.BStr)] out string pbstrContactEmail);

    }

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("FA2AA8F3-8B62-11D0-A520-000000000000"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMNetworkStatus
    {
        [PreserveSig]
        int get_ReceivedPackets(out int pReceivedPackets);

        [PreserveSig]
        int get_RecoveredPackets(out int pRecoveredPackets);

        [PreserveSig]
        int get_LostPackets(out int pLostPackets);

        [PreserveSig]
        int get_ReceptionQuality(out int pReceptionQuality);

        [PreserveSig]
        int get_BufferingCount(out int pBufferingCount);

        [PreserveSig]
        int get_IsBroadcast([MarshalAs(UnmanagedType.VariantBool)] out bool pIsBroadcast);

        [PreserveSig]
        int get_BufferingProgress(out int pBufferingProgress);

    }

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("FA2AA8F5-8B62-11D0-A520-000000000000"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMNetShowExProps
    {
        [PreserveSig]
        int get_SourceProtocol(out int pSourceProtocol);

        [PreserveSig]
        int get_Bandwidth(out int pBandwidth);

        [PreserveSig]
        int get_ErrorCorrection([MarshalAs(UnmanagedType.BStr)] out string pbstrErrorCorrection);

        [PreserveSig]
        int get_CodecCount(out int pCodecCount);

        [PreserveSig]
        int GetCodecInstalled(int CodecNum, [MarshalAs(UnmanagedType.VariantBool)] out bool pCodecInstalled);

        [PreserveSig]
        int GetCodecDescription(int CodecNum, [MarshalAs(UnmanagedType.BStr)] out string pbstrCodecDescription);

        [PreserveSig]
        int GetCodecURL(int CodecNum, [MarshalAs(UnmanagedType.BStr)] out string pbstrCodecURL);

        [PreserveSig]
        int get_CreationDate(out double pCreationDate);

        [PreserveSig]
        int get_SourceLink([MarshalAs(UnmanagedType.BStr)] out string pbstrSourceLink);

    }

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("FA2AA8F6-8B62-11D0-A520-000000000000"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMExtendedErrorInfo
    {
        [PreserveSig]
        int get_HasError([MarshalAs(UnmanagedType.VariantBool)] out bool pHasError);

        [PreserveSig]
        int get_ErrorDescription([MarshalAs(UnmanagedType.BStr)] out string pbstrErrorDescription);

        [PreserveSig]
        int get_ErrorCode(out int pErrorCode);

    }

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("AAE7E4E2-6388-11D1-8D93-006097C9A2B2"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMNetShowPreroll
    {
        [PreserveSig]
        int put_Preroll([MarshalAs(UnmanagedType.VariantBool)] bool fPreroll);

        [PreserveSig]
        int get_Preroll([MarshalAs(UnmanagedType.VariantBool)] out bool pfPreroll);

    }

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("4746B7C8-700E-11D1-BECC-00C04FB6E937"),
    InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IDShowPlugin
    {
        [PreserveSig]
        int get_URL([MarshalAs(UnmanagedType.BStr)] out string pURL);

        [PreserveSig]
        int get_UserAgent([MarshalAs(UnmanagedType.BStr)] out string pUserAgent);

    }

#endif

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("FA2AA8F4-8B62-11D0-A520-000000000000"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMMediaContent
    {
        [PreserveSig]
        int get_AuthorName([MarshalAs(UnmanagedType.BStr)] out string pbstrAuthorName);

        [PreserveSig]
        int get_Title([MarshalAs(UnmanagedType.BStr)] out string pbstrTitle);

        [PreserveSig]
        int get_Rating([MarshalAs(UnmanagedType.BStr)] out string pbstrRating);

        [PreserveSig]
        int get_Description([MarshalAs(UnmanagedType.BStr)] out string pbstrDescription);

        [PreserveSig]
        int get_Copyright([MarshalAs(UnmanagedType.BStr)] out string pbstrCopyright);

        [PreserveSig]
        int get_BaseURL([MarshalAs(UnmanagedType.BStr)] out string pbstrBaseURL);

        [PreserveSig]
        int get_LogoURL([MarshalAs(UnmanagedType.BStr)] out string pbstrLogoURL);

        [PreserveSig]
        int get_LogoIconURL([MarshalAs(UnmanagedType.BStr)] out string pbstrLogoURL);

        [PreserveSig]
        int get_WatermarkURL([MarshalAs(UnmanagedType.BStr)] out string pbstrWatermarkURL);

        [PreserveSig]
        int get_MoreInfoURL([MarshalAs(UnmanagedType.BStr)] out string pbstrMoreInfoURL);

        [PreserveSig]
        int get_MoreInfoBannerImage([MarshalAs(UnmanagedType.BStr)] out string pbstrMoreInfoBannerImage);

        [PreserveSig]
        int get_MoreInfoBannerURL([MarshalAs(UnmanagedType.BStr)] out string pbstrMoreInfoBannerURL);

        [PreserveSig]
        int get_MoreInfoText([MarshalAs(UnmanagedType.BStr)] out string pbstrMoreInfoText);

    }

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("FA2AA8F9-8B62-11D0-A520-000000000000"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMExtendedSeeking
    {
        [PreserveSig]
        int get_ExSeekCapabilities(out AMExtendedSeekingCapabilities pExCapabilities);

        [PreserveSig]
        int get_MarkerCount(out int pMarkerCount);

        [PreserveSig]
        int get_CurrentMarker(out int pCurrentMarker);

        [PreserveSig]
        int GetMarkerTime(int MarkerNum, out double pMarkerTime);

        [PreserveSig]
        int GetMarkerName(
            int MarkerNum,
            [MarshalAs(UnmanagedType.BStr)] out string pbstrMarkerName
            );

        [PreserveSig]
        int put_PlaybackSpeed(double Speed);

        [PreserveSig]
        int get_PlaybackSpeed(out double pSpeed);

    }

    [ComImport, System.Security.SuppressUnmanagedCodeSecurity,
    Guid("CE8F78C1-74D9-11D2-B09D-00A0C9A81117"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAMMediaContent2
    {
        [PreserveSig]
        int get_MediaParameter(int EntryNum, [MarshalAs(UnmanagedType.BStr)] string bstrName, [MarshalAs(UnmanagedType.BStr)] out string pbstrValue);

        [PreserveSig]
        int get_MediaParameterName(int EntryNum, int Index, [MarshalAs(UnmanagedType.BStr)] out string pbstrName);

        [PreserveSig]
        int get_PlaylistCount(out int pNumberEntries);

    }

    #endregion
}
