//
// 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.idl";
import "Windows.Media.Devices.idl";
import "Windows.Media.MediaProperties.idl";
import "Windows.Storage.idl";
import "Windows.Storage.Streams.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(__windows2Emedia_h__)")
cpp_quote("#include <Windows.Media.h>")
cpp_quote("#endif // !defined(__windows2Emedia_h__)")
cpp_quote("#if !defined(__windows2Emedia2Edevices_h__)")
cpp_quote("#include <Windows.Media.Devices.h>")
cpp_quote("#endif // !defined(__windows2Emedia2Edevices_h__)")
cpp_quote("#if !defined(__windows2Emedia2Emediaproperties_h__)")
cpp_quote("#include <Windows.Media.MediaProperties.h>")
cpp_quote("#endif // !defined(__windows2Emedia2Emediaproperties_h__)")
cpp_quote("#if !defined(__windows2Estorage_h__)")
cpp_quote("#include <Windows.Storage.h>")
cpp_quote("#endif // !defined(__windows2Estorage_h__)")
cpp_quote("#if !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#include <Windows.Storage.Streams.h>")
cpp_quote("#endif // !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        namespace Collections
        {
            interface IPropertySet;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;

        typedef struct Size Size;
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Devices
        {
            runtimeclass AudioDeviceController;

            runtimeclass VideoDeviceController;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        interface IMediaExtension;
    }
}
namespace Windows
{
    namespace Media
    {
        namespace MediaProperties
        {
            runtimeclass ImageEncodingProperties;

            runtimeclass MediaEncodingProfile;
        }
    }
}
namespace Windows
{
    namespace Storage
    {
        interface IStorageFile;

        runtimeclass StorageFile;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IRandomAccessStream;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Capture
        {
            typedef enum CameraCaptureUIMode CameraCaptureUIMode;

            typedef enum CameraCaptureUIPhotoFormat CameraCaptureUIPhotoFormat;

            typedef enum CameraCaptureUIVideoFormat CameraCaptureUIVideoFormat;

            typedef enum CameraCaptureUIMaxVideoResolution CameraCaptureUIMaxVideoResolution;

            typedef enum CameraCaptureUIMaxPhotoResolution CameraCaptureUIMaxPhotoResolution;

            typedef enum MediaStreamType MediaStreamType;

            typedef enum StreamingCaptureMode StreamingCaptureMode;

            typedef enum VideoRotation VideoRotation;

            typedef enum PhotoCaptureSource PhotoCaptureSource;

            typedef enum VideoDeviceCharacteristic VideoDeviceCharacteristic;

            typedef enum PowerlineFrequency PowerlineFrequency;

            delegate MediaCaptureFailedEventHandler;

            delegate RecordLimitationExceededEventHandler;

            interface ICameraCaptureUIPhotoCaptureSettings;

            interface ICameraCaptureUIVideoCaptureSettings;

            interface ICameraCaptureUI;

            interface ICameraOptionsUIStatics;

            interface IMediaCaptureFailedEventArgs;

            interface IMediaCaptureInitializationSettings;

            interface IMediaCapture;

            interface IMediaCaptureVideoPreview;

            interface IMediaCaptureSettings;

            runtimeclass CameraCaptureUIPhotoCaptureSettings;

            runtimeclass CameraCaptureUIVideoCaptureSettings;

            runtimeclass CameraCaptureUI;

            runtimeclass CameraOptionsUI;

            runtimeclass MediaCaptureFailedEventArgs;

            runtimeclass MediaCapture;

            runtimeclass MediaCaptureInitializationSettings;

            runtimeclass MediaCaptureSettings;
        }
    }
}

// Generic instantiations

// Type definition
namespace Windows
{
    namespace Media
    {
        namespace Capture
        {
            [version(0x06020000)]
            enum CameraCaptureUIMode
            {
                PhotoOrVideo = 0,
                Photo        = 1,
                Video        = 2
            };

            [version(0x06020000)]
            enum CameraCaptureUIPhotoFormat
            {
                Jpeg   = 0,
                Png    = 1,
                JpegXR = 2
            };

            [version(0x06020000)]
            enum CameraCaptureUIVideoFormat
            {
                Mp4 = 0,
                Wmv = 1
            };

            [version(0x06020000)]
            enum CameraCaptureUIMaxVideoResolution
            {
                HighestAvailable   = 0,
                LowDefinition      = 1,
                StandardDefinition = 2,
                HighDefinition     = 3
            };

            [version(0x06020000)]
            enum CameraCaptureUIMaxPhotoResolution
            {
                HighestAvailable = 0,
                VerySmallQvga    = 1,
                SmallVga         = 2,
                MediumXga        = 3,
                Large3M          = 4,
                VeryLarge5M      = 5
            };

            [version(0x06020000)]
            enum MediaStreamType
            {
                VideoPreview = 0,
                VideoRecord  = 1,
                Audio        = 2,
                Photo        = 3
            };

            [version(0x06020000)]
            enum StreamingCaptureMode
            {
                AudioAndVideo = 0,
                Audio         = 1,
                Video         = 2
            };

            [version(0x06020000)]
            enum VideoRotation
            {
                None                = 0,
                Clockwise90Degrees  = 1,
                Clockwise180Degrees = 2,
                Clockwise270Degrees = 3
            };

            [version(0x06020000)]
            enum PhotoCaptureSource
            {
                Auto         = 0,
                VideoPreview = 1,
                Photo        = 2
            };

            [version(0x06020000)]
            enum VideoDeviceCharacteristic
            {
                AllStreamsIndependent         = 0,
                PreviewRecordStreamsIdentical = 1,
                PreviewPhotoStreamsIdentical  = 2,
                RecordPhotoStreamsIdentical   = 3,
                AllStreamsIdentical           = 4
            };

            [version(0x06020000)]
            enum PowerlineFrequency
            {
                Disabled   = 0,
                FiftyHertz = 1,
                SixtyHertz = 2
            };

            [uuid(2014EFFB-5CD8-4F08-A314-0D360DA59F14)]
            [version(0x06020000)]
            delegate
                HRESULT MediaCaptureFailedEventHandler([in] Windows.Media.Capture.MediaCapture* sender, [in] Windows.Media.Capture.MediaCaptureFailedEventArgs* errorEventArgs);

            [uuid(3FAE8F2E-4FE1-4FFD-AABA-E1F1337D4E53)]
            [version(0x06020000)]
            delegate
                HRESULT RecordLimitationExceededEventHandler([in] Windows.Media.Capture.MediaCapture* sender);

            [uuid(B9F5BE97-3472-46A8-8A9E-04CE42CCC97D)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Capture.CameraCaptureUIPhotoCaptureSettings)]
            interface ICameraCaptureUIPhotoCaptureSettings : IInspectable
            {
                [propget] HRESULT Format([out] [retval] Windows.Media.Capture.CameraCaptureUIPhotoFormat* value);
                [propput] HRESULT Format([in] Windows.Media.Capture.CameraCaptureUIPhotoFormat value);
                [propget] HRESULT MaxResolution([out] [retval] Windows.Media.Capture.CameraCaptureUIMaxPhotoResolution* value);
                [propput] HRESULT MaxResolution([in] Windows.Media.Capture.CameraCaptureUIMaxPhotoResolution value);
                [propget] HRESULT CroppedSizeInPixels([out] [retval] Windows.Foundation.Size* value);
                [propput] HRESULT CroppedSizeInPixels([in] Windows.Foundation.Size value);
                [propget] HRESULT CroppedAspectRatio([out] [retval] Windows.Foundation.Size* value);
                [propput] HRESULT CroppedAspectRatio([in] Windows.Foundation.Size value);
                [propget] HRESULT AllowCropping([out] [retval] boolean* value);
                [propput] HRESULT AllowCropping([in] boolean value);
            }

            [uuid(64E92D1F-A28D-425A-B84F-E568335FF24E)]
            [exclusiveto(Windows.Media.Capture.CameraCaptureUIVideoCaptureSettings)]
            [version(0x06020000)]
            interface ICameraCaptureUIVideoCaptureSettings : IInspectable
            {
                [propget] HRESULT Format([out] [retval] Windows.Media.Capture.CameraCaptureUIVideoFormat* value);
                [propput] HRESULT Format([in] Windows.Media.Capture.CameraCaptureUIVideoFormat value);
                [propget] HRESULT MaxResolution([out] [retval] Windows.Media.Capture.CameraCaptureUIMaxVideoResolution* value);
                [propput] HRESULT MaxResolution([in] Windows.Media.Capture.CameraCaptureUIMaxVideoResolution value);
                [propget] HRESULT MaxDurationInSeconds([out] [retval] FLOAT* value);
                [propput] HRESULT MaxDurationInSeconds([in] FLOAT value);
                [propget] HRESULT AllowTrimming([out] [retval] boolean* value);
                [propput] HRESULT AllowTrimming([in] boolean value);
            }

            [uuid(48587540-6F93-4BB4-B8F3-E89E48948C91)]
            [exclusiveto(Windows.Media.Capture.CameraCaptureUI)]
            [version(0x06020000)]
            interface ICameraCaptureUI : IInspectable
            {
                [propget] HRESULT PhotoSettings([out] [retval] Windows.Media.Capture.CameraCaptureUIPhotoCaptureSettings** value);
                [propget] HRESULT VideoSettings([out] [retval] Windows.Media.Capture.CameraCaptureUIVideoCaptureSettings** value);
                HRESULT CaptureFileAsync([in] Windows.Media.Capture.CameraCaptureUIMode mode, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile*>** asyncInfo);
            }

            [uuid(3B0D5E34-3906-4B7D-946C-7BDE844499AE)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Capture.CameraOptionsUI)]
            interface ICameraOptionsUIStatics : IInspectable
            {
                HRESULT Show([in] Windows.Media.Capture.MediaCapture* mediaCapture);
            }

            [uuid(80FDE3F4-54C4-42C0-8D19-CEA1A87CA18B)]
            [exclusiveto(Windows.Media.Capture.MediaCaptureFailedEventArgs)]
            [version(0x06020000)]
            interface IMediaCaptureFailedEventArgs : IInspectable
            {
                [propget] HRESULT Message([out] [retval] HSTRING* value);
                [propget] HRESULT Code([out] [retval] UINT32* value);
            }

            [uuid(9782BA70-EA65-4900-9356-8CA887726884)]
            [exclusiveto(Windows.Media.Capture.MediaCaptureInitializationSettings)]
            [version(0x06020000)]
            interface IMediaCaptureInitializationSettings : IInspectable
            {
                [propput] HRESULT AudioDeviceId([in] HSTRING value);
                [propget] HRESULT AudioDeviceId([out] [retval] HSTRING* value);
                [propput] HRESULT VideoDeviceId([in] HSTRING value);
                [propget] HRESULT VideoDeviceId([out] [retval] HSTRING* value);
                [propput] HRESULT StreamingCaptureMode([in] Windows.Media.Capture.StreamingCaptureMode value);
                [propget] HRESULT StreamingCaptureMode([out] [retval] Windows.Media.Capture.StreamingCaptureMode* value);
                [propput] HRESULT PhotoCaptureSource([in] Windows.Media.Capture.PhotoCaptureSource value);
                [propget] HRESULT PhotoCaptureSource([out] [retval] Windows.Media.Capture.PhotoCaptureSource* value);
            }

            [uuid(C61AFBB4-FB10-4A34-AC18-CA80D9C8E7EE)]
            [version(0x06020000)]
            [exclusiveto(Windows.Media.Capture.MediaCapture)]
            interface IMediaCapture : IInspectable
            {
                [overload("InitializeAsync")] HRESULT InitializeAsync([out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                [overload("InitializeAsync")] HRESULT InitializeWithSettingsAsync([in] Windows.Media.Capture.MediaCaptureInitializationSettings* mediaCaptureInitializationSettings, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                HRESULT StartRecordToStorageFileAsync([in] Windows.Media.MediaProperties.MediaEncodingProfile* encodingProfile, [in] Windows.Storage.IStorageFile* file, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                HRESULT StartRecordToStreamAsync([in] Windows.Media.MediaProperties.MediaEncodingProfile* encodingProfile, [in] Windows.Storage.Streams.IRandomAccessStream* stream, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                [overload("StartRecordToCustomSinkAsync")] HRESULT StartRecordToCustomSinkAsync([in] Windows.Media.MediaProperties.MediaEncodingProfile* encodingProfile, [in] Windows.Media.IMediaExtension* customMediaSink, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                [overload("StartRecordToCustomSinkAsync")] HRESULT StartRecordToCustomSinkIdAsync([in] Windows.Media.MediaProperties.MediaEncodingProfile* encodingProfile, [in] HSTRING customSinkActivationId, [in] Windows.Foundation.Collections.IPropertySet* customSinkSettings, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                HRESULT StopRecordAsync([out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                HRESULT CapturePhotoToStorageFileAsync([in] Windows.Media.MediaProperties.ImageEncodingProperties* type, [in] Windows.Storage.IStorageFile* file, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                HRESULT CapturePhotoToStreamAsync([in] Windows.Media.MediaProperties.ImageEncodingProperties* type, [in] Windows.Storage.Streams.IRandomAccessStream* stream, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                HRESULT AddEffectAsync([in] Windows.Media.Capture.MediaStreamType mediaStreamType, [in] HSTRING effectActivationID, [in] Windows.Foundation.Collections.IPropertySet* effectSettings, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                HRESULT ClearEffectsAsync([in] Windows.Media.Capture.MediaStreamType mediaStreamType, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                HRESULT SetEncoderProperty([in] Windows.Media.Capture.MediaStreamType mediaStreamType, [in] GUID propertyId, [in] IInspectable* propertyValue);
                HRESULT GetEncoderProperty([in] Windows.Media.Capture.MediaStreamType mediaStreamType, [in] GUID propertyId, [out] [retval] IInspectable** propertyValue);
                [eventadd] HRESULT Failed([in] Windows.Media.Capture.MediaCaptureFailedEventHandler* errorEventHandler, [out] [retval] EventRegistrationToken* eventCookie);
                [eventremove] HRESULT Failed([in] EventRegistrationToken eventCookie);
                [eventadd] HRESULT RecordLimitationExceeded([in] Windows.Media.Capture.RecordLimitationExceededEventHandler* recordLimitationExceededEventHandler, [out] [retval] EventRegistrationToken* eventCookie);
                [eventremove] HRESULT RecordLimitationExceeded([in] EventRegistrationToken eventCookie);
                [propget] HRESULT MediaCaptureSettings([out] [retval] Windows.Media.Capture.MediaCaptureSettings** value);
                [propget] HRESULT AudioDeviceController([out] [retval] Windows.Media.Devices.AudioDeviceController** value);
                [propget] HRESULT VideoDeviceController([out] [retval] Windows.Media.Devices.VideoDeviceController** value);
                HRESULT SetPreviewMirroring([in] boolean value);
                HRESULT GetPreviewMirroring([out] [retval] boolean* value);
                HRESULT SetPreviewRotation([in] Windows.Media.Capture.VideoRotation value);
                HRESULT GetPreviewRotation([out] [retval] Windows.Media.Capture.VideoRotation* value);
                HRESULT SetRecordRotation([in] Windows.Media.Capture.VideoRotation value);
                HRESULT GetRecordRotation([out] [retval] Windows.Media.Capture.VideoRotation* value);
            }

            [uuid(27727073-549E-447F-A20A-4F03C479D8C0)]
            [exclusiveto(Windows.Media.Capture.MediaCapture)]
            [version(0x06020000)]
            interface IMediaCaptureVideoPreview : IInspectable
            {
                HRESULT StartPreviewAsync([out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                [overload("StartPreviewToCustomSinkAsync")] HRESULT StartPreviewToCustomSinkAsync([in] Windows.Media.MediaProperties.MediaEncodingProfile* encodingProfile, [in] Windows.Media.IMediaExtension* customMediaSink, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                [overload("StartPreviewToCustomSinkAsync")] HRESULT StartPreviewToCustomSinkIdAsync([in] Windows.Media.MediaProperties.MediaEncodingProfile* encodingProfile, [in] HSTRING customSinkActivationId, [in] Windows.Foundation.Collections.IPropertySet* customSinkSettings, [out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
                HRESULT StopPreviewAsync([out] [retval] Windows.Foundation.IAsyncAction** asyncInfo);
            }

            [uuid(1D83AAFE-6D45-4477-8DC4-AC5BC01C4091)]
            [exclusiveto(Windows.Media.Capture.MediaCaptureSettings)]
            [version(0x06020000)]
            interface IMediaCaptureSettings : IInspectable
            {
                [propget] HRESULT AudioDeviceId([out] [retval] HSTRING* value);
                [propget] HRESULT VideoDeviceId([out] [retval] HSTRING* value);
                [propget] HRESULT StreamingCaptureMode([out] [retval] Windows.Media.Capture.StreamingCaptureMode* value);
                [propget] HRESULT PhotoCaptureSource([out] [retval] Windows.Media.Capture.PhotoCaptureSource* value);
                [propget] HRESULT VideoDeviceCharacteristic([out] [retval] Windows.Media.Capture.VideoDeviceCharacteristic* value);
            }

            [threading(both)]
            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass CameraCaptureUIPhotoCaptureSettings
            {
                [default] interface Windows.Media.Capture.ICameraCaptureUIPhotoCaptureSettings;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x06020000)]
            runtimeclass CameraCaptureUIVideoCaptureSettings
            {
                [default] interface Windows.Media.Capture.ICameraCaptureUIVideoCaptureSettings;
            }

            [marshaling_behavior(none)]
            [version(0x06020000)]
            [activatable(0x06020000)]
            [threading(sta)]
            runtimeclass CameraCaptureUI
            {
                [default] interface Windows.Media.Capture.ICameraCaptureUI;
            }

            [threading(mta)]
            [version(0x06020000)]
            [static(Windows.Media.Capture.ICameraOptionsUIStatics, 0x06020000)]
            runtimeclass CameraOptionsUI
            {
            }

            [marshaling_behavior(standard)]
            [version(0x06020000)]
            [threading(mta)]
            runtimeclass MediaCaptureFailedEventArgs
            {
                [default] interface Windows.Media.Capture.IMediaCaptureFailedEventArgs;
            }

            [version(0x06020000)]
            [marshaling_behavior(standard)]
            [threading(mta)]
            [activatable(0x06020000)]
            runtimeclass MediaCapture
            {
                [default] interface Windows.Media.Capture.IMediaCapture;
                interface Windows.Media.Capture.IMediaCaptureVideoPreview;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            [threading(both)]
            [activatable(0x06020000)]
            runtimeclass MediaCaptureInitializationSettings
            {
                [default] interface Windows.Media.Capture.IMediaCaptureInitializationSettings;
            }

            [marshaling_behavior(standard)]
            [version(0x06020000)]
            [threading(mta)]
            runtimeclass MediaCaptureSettings
            {
                [default] interface Windows.Media.Capture.IMediaCaptureSettings;
            }
        }
    }
}
