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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Media.Capture.idl";
import "Windows.Media.MediaProperties.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if !defined(__windows2Emedia2Ecapture_h__)")
cpp_quote("#include <Windows.Media.Capture.h>")
cpp_quote("#endif // !defined(__windows2Emedia2Ecapture_h__)")
cpp_quote("#if !defined(__windows2Emedia2Emediaproperties_h__)")
cpp_quote("#include <Windows.Media.MediaProperties.h>")
cpp_quote("#endif // !defined(__windows2Emedia2Emediaproperties_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Capture
        {
            typedef enum MediaStreamType MediaStreamType;

            typedef enum PowerlineFrequency PowerlineFrequency;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace MediaProperties
        {
            interface IMediaEncodingProperties;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Devices
        {
            typedef enum TelephonyKey TelephonyKey;

            typedef enum AudioDeviceRole AudioDeviceRole;

            delegate CallControlEventHandler;

            delegate DialRequestedEventHandler;

            delegate RedialRequestedEventHandler;

            delegate KeypadPressedEventHandler;

            interface IDialRequestedEventArgs;

            interface IRedialRequestedEventArgs;

            interface IKeypadPressedEventArgs;

            interface ICallControl;

            interface ICallControlStatics;

            interface IDefaultAudioDeviceChangedEventArgs;

            interface IMediaDeviceStatics;

            interface IMediaDeviceController;

            interface IAudioDeviceController;

            interface IVideoDeviceController;

            interface IMediaDeviceControl;

            interface IMediaDeviceControlCapabilities;

            interface IAdvancedVideoCaptureDeviceController;

            runtimeclass DialRequestedEventArgs;

            runtimeclass RedialRequestedEventArgs;

            runtimeclass KeypadPressedEventArgs;

            runtimeclass CallControl;

            runtimeclass DefaultAudioCaptureDeviceChangedEventArgs;

            runtimeclass DefaultAudioRenderDeviceChangedEventArgs;

            runtimeclass MediaDevice;

            runtimeclass AudioDeviceController;

            runtimeclass VideoDeviceController;

            runtimeclass MediaDeviceControl;

            runtimeclass MediaDeviceControlCapabilities;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Media
    {
        namespace Devices
        {
            declare
            {
                interface Windows.Foundation.TypedEventHandler<IInspectable*, Windows.Media.Devices.DefaultAudioCaptureDeviceChangedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<IInspectable*, Windows.Media.Devices.DefaultAudioRenderDeviceChangedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Media
    {
        namespace Devices
        {
            [version(0x06020000)]
            enum TelephonyKey
            {
                D0    = 0,
                D1    = 1,
                D2    = 2,
                D3    = 3,
                D4    = 4,
                D5    = 5,
                D6    = 6,
                D7    = 7,
                D8    = 8,
                D9    = 9,
                Star  = 10,
                Pound = 11,
                A     = 12,
                B     = 13,
                C     = 14,
                D     = 15
            };

            [version(0x06020000)]
            enum AudioDeviceRole
            {
                Default        = 0,
                Communications = 1
            };

            [uuid(596F759F-50DF-4454-BC63-4D3D01B61958)]
            [version(0x06020000)]
            delegate
                HRESULT CallControlEventHandler([in] Windows.Media.Devices.CallControl* sender);

            [uuid(5ABBFFDB-C21F-4BC4-891B-257E28C1B1A4)]
            [version(0x06020000)]
            delegate
                HRESULT DialRequestedEventHandler([in] Windows.Media.Devices.CallControl* sender, [in] Windows.Media.Devices.DialRequestedEventArgs* e);

            [uuid(BAF257D1-4EBD-4B84-9F47-6EC43D75D8B1)]
            [version(0x06020000)]
            delegate
                HRESULT RedialRequestedEventHandler([in] Windows.Media.Devices.CallControl* sender, [in] Windows.Media.Devices.RedialRequestedEventArgs* e);

            [uuid(E637A454-C527-422C-8926-C9AF83B559A0)]
            [version(0x06020000)]
            delegate
                HRESULT KeypadPressedEventHandler([in] Windows.Media.Devices.CallControl* sender, [in] Windows.Media.Devices.KeypadPressedEventArgs* e);

            [uuid(037B929E-953C-4286-8866-4F0F376C855A)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Devices.DialRequestedEventArgs)]
            interface IDialRequestedEventArgs : IInspectable
            {
                HRESULT Handled();
                [propget] HRESULT Contact([out] [retval] IInspectable** value);
            }

            [uuid(7EB55209-76AB-4C31-B40E-4B58379D580C)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Devices.RedialRequestedEventArgs)]
            interface IRedialRequestedEventArgs : IInspectable
            {
                HRESULT Handled();
            }

            [uuid(D3A43900-B4FA-49CD-9442-89AF6568F601)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Devices.KeypadPressedEventArgs)]
            interface IKeypadPressedEventArgs : IInspectable
            {
                [propget] HRESULT TelephonyKey([out] [retval] Windows.Media.Devices.TelephonyKey* telephonyKey);
            }

            [uuid(A520D0D6-AE8D-45DB-8011-CA49D3B3E578)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Devices.CallControl)]
            interface ICallControl : IInspectable
            {
                HRESULT IndicateNewIncomingCall([in] boolean enableRinger, [in] HSTRING callerId, [out] [retval] UINT64* callToken);
                HRESULT IndicateNewOutgoingCall([out] [retval] UINT64* callToken);
                HRESULT IndicateActiveCall([in] UINT64 callToken);
                HRESULT EndCall([in] UINT64 callToken);
                [propget] HRESULT HasRinger([out] [retval] boolean* value);
                [eventadd] HRESULT AnswerRequested([in] Windows.Media.Devices.CallControlEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT AnswerRequested([in] EventRegistrationToken token);
                [eventadd] HRESULT HangUpRequested([in] Windows.Media.Devices.CallControlEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT HangUpRequested([in] EventRegistrationToken token);
                [eventadd] HRESULT DialRequested([in] Windows.Media.Devices.DialRequestedEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DialRequested([in] EventRegistrationToken token);
                [eventadd] HRESULT RedialRequested([in] Windows.Media.Devices.RedialRequestedEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT RedialRequested([in] EventRegistrationToken token);
                [eventadd] HRESULT KeypadPressed([in] Windows.Media.Devices.KeypadPressedEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT KeypadPressed([in] EventRegistrationToken token);
                [eventadd] HRESULT AudioTransferRequested([in] Windows.Media.Devices.CallControlEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT AudioTransferRequested([in] EventRegistrationToken token);
            }

            [uuid(03945AD5-85AB-40E1-AF19-56C94303B019)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Devices.CallControl)]
            interface ICallControlStatics : IInspectable
            {
                HRESULT GetDefault([out] [retval] Windows.Media.Devices.CallControl** callControl);
                HRESULT FromId([in] HSTRING deviceInterfaceId, [out] [retval] Windows.Media.Devices.CallControl** callControl);
            }

            [uuid(110F882F-1C05-4657-A18E-47C9B69F07AB)]
            [version(0x06020000)]
            interface IDefaultAudioDeviceChangedEventArgs : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT Role([out] [retval] Windows.Media.Devices.AudioDeviceRole* value);
            }

            [uuid(AA2D9A40-909F-4BBA-BF8B-0C0D296F14F0)]
            [exclusiveto(Windows.Media.Devices.MediaDevice)]
            [version(0x06020000)]
            interface IMediaDeviceStatics : IInspectable
            {
                HRESULT GetAudioCaptureSelector([out] [retval] HSTRING* selector);
                HRESULT GetAudioRenderSelector([out] [retval] HSTRING* selector);
                HRESULT GetVideoCaptureSelector([out] [retval] HSTRING* selector);
                HRESULT GetDefaultAudioCaptureId([in] Windows.Media.Devices.AudioDeviceRole role, [out] [retval] HSTRING* deviceId);
                HRESULT GetDefaultAudioRenderId([in] Windows.Media.Devices.AudioDeviceRole role, [out] [retval] HSTRING* deviceId);
                [eventadd] HRESULT DefaultAudioCaptureDeviceChanged([in] Windows.Foundation.TypedEventHandler<IInspectable*, Windows.Media.Devices.DefaultAudioCaptureDeviceChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT DefaultAudioCaptureDeviceChanged([in] EventRegistrationToken cookie);
                [eventadd] HRESULT DefaultAudioRenderDeviceChanged([in] Windows.Foundation.TypedEventHandler<IInspectable*, Windows.Media.Devices.DefaultAudioRenderDeviceChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT DefaultAudioRenderDeviceChanged([in] EventRegistrationToken cookie);
            }

            [uuid(F6F8F5CE-209A-48FB-86FC-D44578F317E6)]
            [version(0x06020000)]
            interface IMediaDeviceController : IInspectable
            {
                HRESULT GetAvailableMediaStreamProperties([in] Windows.Media.Capture.MediaStreamType mediaStreamType, [out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Media.MediaProperties.IMediaEncodingProperties*>** value);
                HRESULT GetMediaStreamProperties([in] Windows.Media.Capture.MediaStreamType mediaStreamType, [out] [retval] Windows.Media.MediaProperties.IMediaEncodingProperties** value);
                HRESULT SetMediaStreamPropertiesAsync([in] Windows.Media.Capture.MediaStreamType mediaStreamType, [in] Windows.Media.MediaProperties.IMediaEncodingProperties* mediaEncodingProperties, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
            }

            [uuid(EDD4A388-79C7-4F7C-90E8-EF934B21580A)]
            [exclusiveto(Windows.Media.Devices.AudioDeviceController)]
            [version(0x06020000)]
            interface IAudioDeviceController : IInspectable
                requires
                    Windows.Media.Devices.IMediaDeviceController
            {
                [propput] HRESULT Muted([in] boolean value);
                [propget] HRESULT Muted([out] [retval] boolean* value);
                [propput] HRESULT VolumePercent([in] FLOAT value);
                [propget] HRESULT VolumePercent([out] [retval] FLOAT* value);
            }

            [uuid(99555575-2E2E-40B8-B6C7-F82D10013210)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Devices.VideoDeviceController)]
            interface IVideoDeviceController : IInspectable
                requires
                    Windows.Media.Devices.IMediaDeviceController
            {
                [propget] HRESULT Brightness([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT Contrast([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT Hue([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT WhiteBalance([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT BacklightCompensation([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT Pan([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT Tilt([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT Zoom([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT Roll([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT Exposure([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                [propget] HRESULT Focus([out] [retval] Windows.Media.Devices.MediaDeviceControl** value);
                HRESULT TrySetPowerlineFrequency([in] Windows.Media.Capture.PowerlineFrequency value, [out] [retval] boolean* succeeded);
                HRESULT TryGetPowerlineFrequency([out] Windows.Media.Capture.PowerlineFrequency* value, [out] [retval] boolean* succeeded);
            }

            [uuid(EFA8DFA9-6F75-4863-BA0B-583F3036B4DE)]
            [exclusiveto(Windows.Media.Devices.MediaDeviceControl)]
            [version(0x06020000)]
            interface IMediaDeviceControl : IInspectable
            {
                [propget] HRESULT Capabilities([out] [retval] Windows.Media.Devices.MediaDeviceControlCapabilities** value);
                HRESULT TryGetValue([out] DOUBLE* value, [out] [retval] boolean* succeeded);
                HRESULT TrySetValue([in] DOUBLE value, [out] [retval] boolean* succeeded);
                HRESULT TryGetAuto([out] boolean* value, [out] [retval] boolean* succeeded);
                HRESULT TrySetAuto([in] boolean value, [out] [retval] boolean* succeeded);
            }

            [uuid(23005816-EB85-43E2-B92B-8240D5EE70EC)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Devices.MediaDeviceControlCapabilities)]
            interface IMediaDeviceControlCapabilities : IInspectable
            {
                [propget] HRESULT Supported([out] [retval] boolean* value);
                [propget] HRESULT Min([out] [retval] DOUBLE* value);
                [propget] HRESULT Max([out] [retval] DOUBLE* value);
                [propget] HRESULT Step([out] [retval] DOUBLE* value);
                [propget] HRESULT Default([out] [retval] DOUBLE* value);
                [propget] HRESULT AutoModeSupported([out] [retval] boolean* value);
            }

            [uuid(DE6FF4D3-2B96-4583-80AB-B5B01DC6A8D7)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Devices.VideoDeviceController)]
            interface IAdvancedVideoCaptureDeviceController : IInspectable
            {
                HRESULT SetDeviceProperty([in] HSTRING propertyId, [in] IInspectable* propertyValue);
                HRESULT GetDeviceProperty([in] HSTRING propertyId, [out] [retval] IInspectable** propertyValue);
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DialRequestedEventArgs
            {
                [default] interface Windows.Media.Devices.IDialRequestedEventArgs;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass RedialRequestedEventArgs
            {
                [default] interface Windows.Media.Devices.IRedialRequestedEventArgs;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass KeypadPressedEventArgs
            {
                [default] interface Windows.Media.Devices.IKeypadPressedEventArgs;
            }

            [threading(both)]
            [version(0x06020000)]
            [marshaling_behavior(agile)]
            [static(Windows.Media.Devices.ICallControlStatics, 0x06020000)]
            runtimeclass CallControl
            {
                [default] interface Windows.Media.Devices.ICallControl;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DefaultAudioCaptureDeviceChangedEventArgs
            {
                [default] interface Windows.Media.Devices.IDefaultAudioDeviceChangedEventArgs;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass DefaultAudioRenderDeviceChangedEventArgs
            {
                [default] interface Windows.Media.Devices.IDefaultAudioDeviceChangedEventArgs;
            }

            [static(Windows.Media.Devices.IMediaDeviceStatics, 0x06020000)]
            [version(0x06020000)]
            [threading(mta)]
            [marshaling_behavior(agile)]
            runtimeclass MediaDevice
            {
            }

            [threading(mta)]
            [marshaling_behavior(standard)]
            [version(0x06020000)]
            runtimeclass AudioDeviceController
            {
                [default] interface Windows.Media.Devices.IAudioDeviceController;
                interface Windows.Media.Devices.IMediaDeviceController;
            }

            [version(0x06020000)]
            [threading(mta)]
            [marshaling_behavior(standard)]
            runtimeclass VideoDeviceController
            {
                [default] interface Windows.Media.Devices.IVideoDeviceController;
                interface Windows.Media.Devices.IMediaDeviceController;
                interface Windows.Media.Devices.IAdvancedVideoCaptureDeviceController;
            }

            [version(0x06020000)]
            [marshaling_behavior(standard)]
            [threading(mta)]
            runtimeclass MediaDeviceControl
            {
                [default] interface Windows.Media.Devices.IMediaDeviceControl;
            }

            [version(0x06020000)]
            [threading(mta)]
            [marshaling_behavior(standard)]
            runtimeclass MediaDeviceControlCapabilities
            {
                [default] interface Windows.Media.Devices.IMediaDeviceControlCapabilities;
            }
        }
    }
}
