//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Storage.idl";
import "Windows.Storage.Streams.idl";

// Forward Declare
namespace Windows
{
    namespace Media
    {
        namespace Streaming
        {
            apicontract StreamingContract;

            typedef enum ConnectionStatus ConnectionStatus;

            typedef enum DeviceTypes DeviceTypes;

            typedef enum TransportState TransportState;

            typedef enum TransportStatus TransportStatus;

            typedef struct PlaySpeed PlaySpeed;

            typedef struct PositionInformation PositionInformation;

            typedef struct RenderingParameters RenderingParameters;

            typedef struct TrackInformation TrackInformation;

            typedef struct TransportInformation TransportInformation;

            delegate ConnectionStatusHandler;

            delegate DeviceControllerFinderHandler;

            delegate RenderingParametersUpdateHandler;

            delegate TransportParametersUpdateHandler;

            interface IActiveBasicDevice;

            interface IActiveBasicDeviceStatics;

            interface IBasicDevice;

            interface IDeviceController;

            interface IDeviceIcon;

            interface IDevicePair;

            interface IMediaRenderer;

            interface IMediaRendererActionInformation;

            interface IMediaRendererFactory;

            interface IStreamSelectorStatics;

            interface ITransportParameters;

            runtimeclass ActiveBasicDevice;

            runtimeclass BasicDevice;

            runtimeclass CreateMediaRendererOperation;

            runtimeclass DeviceController;

            runtimeclass DevicePair;

            runtimeclass MediaRenderer;

            runtimeclass StreamSelector;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Media
    {
        namespace Streaming
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Media.Streaming.IBasicDevice*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Media.Streaming.IDeviceIcon*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Media.Streaming.PlaySpeed>;

                interface Windows.Foundation.Collections.IIterator<Windows.Media.Streaming.IBasicDevice*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Media.Streaming.IDeviceIcon*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Media.Streaming.PlaySpeed>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Media.Streaming.IBasicDevice*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Media.Streaming.IDeviceIcon*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Media.Streaming.PlaySpeed>;

                interface Windows.Foundation.Collections.IVector<Windows.Media.Streaming.IBasicDevice*>;

                interface Windows.Foundation.Collections.IVector<Windows.Media.Streaming.IDeviceIcon*>;

                interface Windows.Foundation.Collections.IVector<Windows.Media.Streaming.PlaySpeed>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.ActiveBasicDevice*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.DevicePair*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.MediaRenderer*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.PositionInformation>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.TransportInformation>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Media
    {
        namespace Streaming
        {
            [contractversion(1.0)]
            apicontract StreamingContract
            {
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            enum ConnectionStatus
            {
                Online   = 0,
                Offline  = 1,
                Sleeping = 2
            };

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [flags]
            enum DeviceTypes
            {
                Unknown              = 0x0,
                DigitalMediaRenderer = 0x1,
                DigitalMediaServer   = 0x2,
                DigitalMediaPlayer   = 0x4
            };

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            enum TransportState
            {
                Unknown        = 0,
                Stopped        = 1,
                Playing        = 2,
                Transitioning  = 3,
                Paused         = 4,
                Recording      = 5,
                NoMediaPresent = 6,
                Last           = 7
            };

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            enum TransportStatus
            {
                Unknown       = 0,
                Ok            = 1,
                ErrorOccurred = 2,
                Last          = 3
            };

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            struct PlaySpeed
            {
                INT32 Numerator;
                UINT32 Denominator;
            };

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            struct TrackInformation
            {
                UINT32 Track;
                UINT32 TrackId;
                Windows.Foundation.TimeSpan TrackDuration;
            };

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            struct PositionInformation
            {
                Windows.Media.Streaming.TrackInformation trackInformation;
                Windows.Foundation.TimeSpan relativeTime;
            };

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            struct RenderingParameters
            {
                UINT32 volume;
                boolean mute;
            };


            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            struct TransportInformation
            {
                Windows.Media.Streaming.TransportState CurrentTransportState;
                Windows.Media.Streaming.TransportStatus CurrentTransportStatus;
                Windows.Media.Streaming.PlaySpeed CurrentSpeed;
            };

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(B571C28C-A472-48D5-88D2-8ADCAF1B8813)]
            delegate
                HRESULT ConnectionStatusHandler([in] Windows.Media.Streaming.IBasicDevice* sender, [in] Windows.Media.Streaming.ConnectionStatus arg);

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(A88A7D06-988C-4403-9D8A-015BED140B34)]
            delegate
                HRESULT DeviceControllerFinderHandler([in] Windows.Media.Streaming.IDeviceController* sender, [in] HSTRING uniqueDeviceName, [in] Windows.Media.Streaming.IBasicDevice* device);

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(3A2D9D45-72E9-4311-B46C-27C8BB7E6CB3)]
            delegate
                HRESULT RenderingParametersUpdateHandler([in] Windows.Media.Streaming.IMediaRenderer* sender, [in] Windows.Media.Streaming.RenderingParameters arg);

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(16FD02D5-DA61-49D7-AAB2-76867DD42DB7)]
            delegate
                HRESULT TransportParametersUpdateHandler([in] Windows.Media.Streaming.IMediaRenderer* sender, [in] Windows.Media.Streaming.ITransportParameters* arg);

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(B64D6974-6E79-49AF-9933-908B6E9A160C)]
            interface IActiveBasicDevice : IInspectable
                requires
                    Windows.Media.Streaming.IBasicDevice
            {
                [propget] HRESULT MaxVolume([out] [retval] UINT32* value);
                [propget] HRESULT IsMuteSupported([out] [retval] boolean* value);
                [propget] HRESULT IsSetNextSourceSupported([out] [retval] boolean* value);
                [propget] HRESULT IsAudioSupported([out] [retval] boolean* value);
                [propget] HRESULT IsVideoSupported([out] [retval] boolean* value);
                [propget] HRESULT IsImageSupported([out] [retval] boolean* value);
                [propget] HRESULT IsSearchSupported([out] [retval] boolean* value);
                HRESULT GetCachedSinkProtocolInfo([out] [retval] HSTRING* value);
                HRESULT SetCachedSinkProtocolInfo([in] HSTRING value);
                HRESULT GetCachedExtraSinkProtocolInfo([out] [retval] HSTRING* value);
                HRESULT GetEffectiveBandwidth([in] boolean transmitSpeed, [out] [retval] UINT64* currentSpeed);
                HRESULT GetCachedBitrateMeasurement([in] GUID physicalNetworkInterface, [out] [retval] UINT64* bitrate);
                HRESULT SetCachedBitrateMeasurement([in] GUID physicalNetworkInterface, [in] UINT64 bitrate);
                [propget] HRESULT LogicalNetworkInterface([out] [retval] GUID* logicalNetworkInterface);
                [propget] HRESULT PhysicalNetworkInterface([out] [retval] GUID* physicalNetworkInterface);
                HRESULT NotifyStreamingStatus([in] boolean fIsStreaming);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(6D33255D-3642-4618-9DB6-43524F4DEADC)]
            interface IActiveBasicDeviceStatics : IInspectable
            {
                HRESULT CreateBasicDeviceAsync([in] HSTRING deviceIdentifier, [in] Windows.Media.Streaming.DeviceTypes type, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.ActiveBasicDevice*>** value);
                HRESULT CloneBasicDeviceAsync([in] Windows.Media.Streaming.IBasicDevice* basicDevice, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.ActiveBasicDevice*>** value);
                HRESULT GetDevicesOnMatchingNetworkAsync([in] Windows.Media.Streaming.IActiveBasicDevice* server, [in] Windows.Media.Streaming.IActiveBasicDevice* renderer, [in] boolean optimizeForProxying, [in] boolean allowChangeRendererNetwork, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.DevicePair*>** operation);
                HRESULT CreateDevicesOnMatchingNetworkAsync([in] HSTRING serverUDN, [in] Windows.Media.Streaming.IActiveBasicDevice* renderer, [in] boolean optimizeForProxying, [in] boolean allowChangeRendererNetwork, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.DevicePair*>** operation);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(F4F26CBB-7962-48B7-80F7-C3A5D753BCB0)]
            interface IBasicDevice : IInspectable
            {
                [propget] HRESULT FriendlyName([out] [retval] HSTRING* value);
                [propput] HRESULT FriendlyName([in] HSTRING value);
                [propget] HRESULT ManufacturerName([out] [retval] HSTRING* value);
                [propget] HRESULT ManufacturerUrl([out] [retval] HSTRING* value);
                [propget] HRESULT UniqueDeviceName([out] [retval] HSTRING* value);
                [propget] HRESULT ModelName([out] [retval] HSTRING* value);
                [propget] HRESULT ModelNumber([out] [retval] HSTRING* value);
                [propget] HRESULT ModelUrl([out] [retval] HSTRING* value);
                [propget] HRESULT Description([out] [retval] HSTRING* value);
                [propget] HRESULT SerialNumber([out] [retval] HSTRING* value);
                [propget] HRESULT PresentationUrl([out] [retval] HSTRING* value);
                [propget] HRESULT RemoteStreamingUrls([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
                [propget] HRESULT PhysicalAddresses([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
                [propget] HRESULT IpAddresses([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
                [propget] HRESULT CanWakeDevices([out] [retval] boolean* value);
                [propget] HRESULT DiscoveredOnCurrentNetwork([out] [retval] boolean* value);
                [propget] HRESULT Type([out] [retval] Windows.Media.Streaming.DeviceTypes* value);
                [propget] HRESULT Icons([out] [retval] Windows.Foundation.Collections.IVector<Windows.Media.Streaming.IDeviceIcon*>** value);
                [propget] HRESULT ConnectionStatus([out] [retval] Windows.Media.Streaming.ConnectionStatus* value);
                [eventadd] HRESULT ConnectionStatusChanged([in] Windows.Media.Streaming.ConnectionStatusHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT ConnectionStatusChanged([in] EventRegistrationToken token);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(4FEEB26D-50A7-402B-896A-BE95064D6BFF)]
            interface IDeviceController : IInspectable
            {
                [propget] HRESULT CachedDevices([out] [retval] Windows.Foundation.Collections.IVector<Windows.Media.Streaming.IBasicDevice*>** value);
                HRESULT AddDevice([in] HSTRING uniqueDeviceName);
                HRESULT RemoveDevice([in] Windows.Media.Streaming.IBasicDevice* device);
                [eventadd] HRESULT DeviceArrival([in] Windows.Media.Streaming.DeviceControllerFinderHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DeviceArrival([in] EventRegistrationToken token);
                [eventadd] HRESULT DeviceDeparture([in] Windows.Media.Streaming.DeviceControllerFinderHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DeviceDeparture([in] EventRegistrationToken token);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(8FFB1A1E-023D-4DE1-B556-AB5ABF01929C)]
            interface IDeviceIcon : IInspectable
            {
                [propget] HRESULT Width([out] [retval] UINT32* value);
                [propget] HRESULT Height([out] [retval] UINT32* value);
                [propget] HRESULT ContentType([out] [retval] HSTRING* value);
                [propget] HRESULT Stream([out] [retval] Windows.Storage.Streams.IRandomAccessStreamWithContentType** value);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(F1A423F1-B7B4-449C-A90D-AEA8E17C5E5F)]
            interface IDevicePair : IInspectable
            {
                [propget] HRESULT Server([out] [retval] Windows.Media.Streaming.ActiveBasicDevice** value);
                [propget] HRESULT Renderer([out] [retval] Windows.Media.Streaming.ActiveBasicDevice** value);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(2C012EC3-D975-47FB-96AC-A6418B326D2B)]
            interface IMediaRenderer : IInspectable
                requires
                    Windows.Media.Streaming.IBasicDevice
            {
                [propget] HRESULT IsAudioSupported([out] [retval] boolean* value);
                [propget] HRESULT IsVideoSupported([out] [retval] boolean* value);
                [propget] HRESULT IsImageSupported([out] [retval] boolean* value);
                [propget] HRESULT ActionInformation([out] [retval] Windows.Media.Streaming.IMediaRendererActionInformation** value);
                HRESULT SetSourceFromUriAsync([in] HSTRING URI, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** value);
                HRESULT SetSourceFromStreamAsync([in] IInspectable* stream, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** value);
                HRESULT SetSourceFromMediaSourceAsync([in] IInspectable* mediaSource, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** value);
                HRESULT SetNextSourceFromUriAsync([in] HSTRING URI, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** value);
                HRESULT SetNextSourceFromStreamAsync([in] IInspectable* stream, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** value);
                HRESULT SetNextSourceFromMediaSourceAsync([in] IInspectable* mediaSource, [out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** value);
                HRESULT PlayAsync([out] [retval] Windows.Foundation.IAsyncAction** value);
                HRESULT PlayAtSpeedAsync([in] Windows.Media.Streaming.PlaySpeed playSpeed, [out] [retval] Windows.Foundation.IAsyncAction** value);
                HRESULT StopAsync([out] [retval] Windows.Foundation.IAsyncAction** value);
                HRESULT PauseAsync([out] [retval] Windows.Foundation.IAsyncAction** value);
                HRESULT GetMuteAsync([out] [retval] Windows.Foundation.IAsyncOperation<boolean>** value);
                HRESULT SetMuteAsync([in] boolean mute, [out] [retval] Windows.Foundation.IAsyncAction** value);
                HRESULT GetVolumeAsync([out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** value);
                HRESULT SetVolumeAsync([in] UINT32 volume, [out] [retval] Windows.Foundation.IAsyncAction** value);
                HRESULT SeekAsync([in] Windows.Foundation.TimeSpan target, [out] [retval] Windows.Foundation.IAsyncAction** value);
                HRESULT GetTransportInformationAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.TransportInformation>** value);
                HRESULT GetPositionInformationAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.PositionInformation>** value);
                [eventadd] HRESULT TransportParametersUpdate([in] Windows.Media.Streaming.TransportParametersUpdateHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT TransportParametersUpdate([in] EventRegistrationToken token);
                [eventadd] HRESULT RenderingParametersUpdate([in] Windows.Media.Streaming.RenderingParametersUpdateHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT RenderingParametersUpdate([in] EventRegistrationToken token);
                HRESULT NextAsync([out] [retval] Windows.Foundation.IAsyncAction** value);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(66FBBFEE-5AB0-4A4F-8D15-E5056B26BEDA)]
            interface IMediaRendererActionInformation : IInspectable
            {
                [propget] HRESULT IsMuteAvailable([out] [retval] boolean* value);
                [propget] HRESULT IsPauseAvailable([out] [retval] boolean* value);
                [propget] HRESULT IsPlayAvailable([out] [retval] boolean* value);
                [propget] HRESULT IsSeekAvailable([out] [retval] boolean* value);
                [propget] HRESULT IsSetNextSourceAvailable([out] [retval] boolean* value);
                [propget] HRESULT IsStopAvailable([out] [retval] boolean* value);
                [propget] HRESULT IsVolumeAvailable([out] [retval] boolean* value);
                [propget] HRESULT PlaySpeeds([out] [retval] Windows.Foundation.Collections.IVector<Windows.Media.Streaming.PlaySpeed>** value);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(657AB43D-B909-42B2-94D0-E3A0B134E8C9)]
            interface IMediaRendererFactory : IInspectable
            {
                HRESULT CreateMediaRendererAsync([in] HSTRING deviceIdentifier, [out] [retval] Windows.Media.Streaming.CreateMediaRendererOperation** value);
                HRESULT CreateMediaRendererFromBasicDeviceAsync([in] Windows.Media.Streaming.IBasicDevice* basicDevice, [out] [retval] Windows.Media.Streaming.CreateMediaRendererOperation** value);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(8A4CD4A1-ED85-4E0F-BD68-8A6862E4636D)]
            interface IStreamSelectorStatics : IInspectable
            {
                HRESULT SelectBestStreamAsync([in] Windows.Storage.StorageFile* storageFile, [in] Windows.Foundation.Collections.IPropertySet* selectorProperties, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IRandomAccessStreamWithContentType*>** value);
                HRESULT GetStreamPropertiesAsync([in] Windows.Storage.StorageFile* storageFile, [in] Windows.Foundation.Collections.IPropertySet* selectorProperties, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Foundation.Collections.IPropertySet*>*>** value);
                HRESULT SelectBestStreamFromStreamAsync([in] Windows.Storage.Streams.IRandomAccessStream* stream, [in] Windows.Foundation.Collections.IPropertySet* selectorProperties, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IRandomAccessStreamWithContentType*>** value);
                HRESULT GetStreamPropertiesFromStreamAsync([in] Windows.Storage.Streams.IRandomAccessStream* stream, [in] Windows.Foundation.Collections.IPropertySet* selectorProperties, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Foundation.Collections.IPropertySet*>*>** value);
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [uuid(EB0C4E24-2283-438D-8FFF-DBE9DF1CB2CC)]
            interface ITransportParameters : IInspectable
            {
                [propget] HRESULT ActionInformation([out] [retval] Windows.Media.Streaming.IMediaRendererActionInformation** value);
                [propget] HRESULT TrackInformation([out] [retval] Windows.Media.Streaming.TrackInformation* value);
                [propget] HRESULT TransportInformation([out] [retval] Windows.Media.Streaming.TransportInformation* value);
            }

            [activatable(Windows.Media.Streaming.StreamingContract, 1.0)]
            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [static(Windows.Media.Streaming.IActiveBasicDeviceStatics, Windows.Media.Streaming.StreamingContract, 1.0)]
            runtimeclass ActiveBasicDevice
            {
                [default] interface Windows.Media.Streaming.IActiveBasicDevice;
                interface Windows.Media.Streaming.IBasicDevice;
            }

            [activatable(Windows.Media.Streaming.StreamingContract, 1.0)]
            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            runtimeclass BasicDevice
            {
                [default] interface Windows.Media.Streaming.IBasicDevice;
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            runtimeclass CreateMediaRendererOperation
            {
                [default] interface Windows.Foundation.IAsyncOperation<Windows.Media.Streaming.MediaRenderer*>;
            }

            [activatable(Windows.Media.Streaming.StreamingContract, 1.0)]
            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [threading(mta)]
            runtimeclass DeviceController
            {
                [default] interface Windows.Media.Streaming.IDeviceController;
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            runtimeclass DevicePair
            {
                [default] interface Windows.Media.Streaming.IDevicePair;
            }

            [activatable(Windows.Media.Streaming.StreamingContract, 1.0)]
            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [static(Windows.Media.Streaming.IMediaRendererFactory, Windows.Media.Streaming.StreamingContract, 1.0)]
            [threading(mta)]
            runtimeclass MediaRenderer
            {
                [default] interface Windows.Media.Streaming.IMediaRenderer;
                interface Windows.Media.Streaming.IBasicDevice;
            }

            [contract(Windows.Media.Streaming.StreamingContract, 1.0)]
            [static(Windows.Media.Streaming.IStreamSelectorStatics, Windows.Media.Streaming.StreamingContract, 1.0)]
            [threading(mta)]
            runtimeclass StreamSelector
            {
            }
        }
    }
}
