// WARNING: Please don't edit this file. It was generated by Python/WinRT v3.2.1

#pragma once

#include "pybase.h"
static_assert(winrt::check_version(PYWINRT_VERSION, "3.2.1"), "Mismatched Py/WinRT headers.");
#include <winrt/Windows.Devices.Enumeration.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.Media.Capture.h>
#include <winrt/Windows.Media.Devices.Core.h>
#include <winrt/Windows.Media.Effects.h>
#include <winrt/Windows.Media.MediaProperties.h>
#include <winrt/Windows.Storage.Streams.h>

#include <winrt/Windows.Media.Devices.h>

namespace py::proj::Windows::Media::Devices
{
}

namespace py
{
    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::AdvancedPhotoMode> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::AudioDeviceRole> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::AutoFocusRange> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::CameraOcclusionKind> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::CameraStreamState> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::CaptureSceneMode> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::CaptureUse> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::ColorTemperaturePreset> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::DigitalWindowMode> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::FocusMode> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::FocusPreset> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::HdrVideoMode> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::InfraredTorchMode> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::IsoSpeedPreset> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::ManualFocusDistance> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::MediaCaptureFocusState> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::MediaCaptureOptimization> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::MediaCapturePauseBehavior> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::OpticalImageStabilizationMode> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::RegionOfInterestType> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::SendCommandStatus> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::TelephonyKey> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::VideoDeviceControllerGetDevicePropertyStatus> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::VideoDeviceControllerSetDevicePropertyStatus> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::VideoTemporalDenoisingMode> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Media::Devices::ZoomTransitionMode> = "i";


    template<>
    struct py_type<winrt::Windows::Media::Devices::AdvancedPhotoMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.AdvancedPhotoMode";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "AdvancedPhotoMode";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::AudioDeviceRole>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.AudioDeviceRole";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "AudioDeviceRole";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::AutoFocusRange>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.AutoFocusRange";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "AutoFocusRange";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::CameraOcclusionKind>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.CameraOcclusionKind";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "CameraOcclusionKind";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::CameraStreamState>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.CameraStreamState";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "CameraStreamState";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::CaptureSceneMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.CaptureSceneMode";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "CaptureSceneMode";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::CaptureUse>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.CaptureUse";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "CaptureUse";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::ColorTemperaturePreset>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.ColorTemperaturePreset";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "ColorTemperaturePreset";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::DigitalWindowMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.DigitalWindowMode";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "DigitalWindowMode";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::FocusMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.FocusMode";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "FocusMode";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::FocusPreset>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.FocusPreset";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "FocusPreset";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::HdrVideoMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.HdrVideoMode";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "HdrVideoMode";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::InfraredTorchMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.InfraredTorchMode";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "InfraredTorchMode";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::IsoSpeedPreset>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.IsoSpeedPreset";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "IsoSpeedPreset";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::ManualFocusDistance>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.ManualFocusDistance";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "ManualFocusDistance";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::MediaCaptureFocusState>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.MediaCaptureFocusState";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "MediaCaptureFocusState";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::MediaCaptureOptimization>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.MediaCaptureOptimization";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "MediaCaptureOptimization";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::MediaCapturePauseBehavior>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.MediaCapturePauseBehavior";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "MediaCapturePauseBehavior";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::OpticalImageStabilizationMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.OpticalImageStabilizationMode";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "OpticalImageStabilizationMode";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::RegionOfInterestType>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.RegionOfInterestType";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "RegionOfInterestType";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::SendCommandStatus>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.SendCommandStatus";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "SendCommandStatus";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::TelephonyKey>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.TelephonyKey";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "TelephonyKey";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::VideoDeviceControllerGetDevicePropertyStatus>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.VideoDeviceControllerGetDevicePropertyStatus";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "VideoDeviceControllerGetDevicePropertyStatus";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::VideoDeviceControllerSetDevicePropertyStatus>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.VideoDeviceControllerSetDevicePropertyStatus";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "VideoDeviceControllerSetDevicePropertyStatus";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::VideoTemporalDenoisingMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.VideoTemporalDenoisingMode";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "VideoTemporalDenoisingMode";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::ZoomTransitionMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.ZoomTransitionMode";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "ZoomTransitionMode";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::AdvancedPhotoCaptureSettings>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.AdvancedPhotoCaptureSettings";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "AdvancedPhotoCaptureSettings";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::AdvancedPhotoControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.AdvancedPhotoControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "AdvancedPhotoControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::AudioDeviceController>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.AudioDeviceController";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "AudioDeviceController";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::AudioDeviceModule>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.AudioDeviceModule";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "AudioDeviceModule";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::AudioDeviceModuleNotificationEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.AudioDeviceModuleNotificationEventArgs";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "AudioDeviceModuleNotificationEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::AudioDeviceModulesManager>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.AudioDeviceModulesManager";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "AudioDeviceModulesManager";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::CallControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.CallControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "CallControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::CameraOcclusionInfo>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.CameraOcclusionInfo";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "CameraOcclusionInfo";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::CameraOcclusionState>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.CameraOcclusionState";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "CameraOcclusionState";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::CameraOcclusionStateChangedEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.CameraOcclusionStateChangedEventArgs";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "CameraOcclusionStateChangedEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::DefaultAudioCaptureDeviceChangedEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.DefaultAudioCaptureDeviceChangedEventArgs";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "DefaultAudioCaptureDeviceChangedEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::DefaultAudioRenderDeviceChangedEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.DefaultAudioRenderDeviceChangedEventArgs";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "DefaultAudioRenderDeviceChangedEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::DialRequestedEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.DialRequestedEventArgs";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "DialRequestedEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::DigitalWindowBounds>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.DigitalWindowBounds";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "DigitalWindowBounds";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::DigitalWindowCapability>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.DigitalWindowCapability";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "DigitalWindowCapability";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::DigitalWindowControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.DigitalWindowControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "DigitalWindowControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::ExposureCompensationControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.ExposureCompensationControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "ExposureCompensationControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::ExposureControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.ExposureControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "ExposureControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::ExposurePriorityVideoControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.ExposurePriorityVideoControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "ExposurePriorityVideoControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::FlashControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.FlashControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "FlashControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::FocusControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.FocusControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "FocusControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::FocusSettings>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.FocusSettings";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "FocusSettings";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::HdrVideoControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.HdrVideoControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "HdrVideoControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::InfraredTorchControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.InfraredTorchControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "InfraredTorchControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::IsoSpeedControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.IsoSpeedControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "IsoSpeedControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::KeypadPressedEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.KeypadPressedEventArgs";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "KeypadPressedEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::LowLagPhotoControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.LowLagPhotoControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "LowLagPhotoControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::LowLagPhotoSequenceControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.LowLagPhotoSequenceControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "LowLagPhotoSequenceControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::MediaDevice>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.MediaDevice";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "MediaDevice";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::MediaDeviceControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.MediaDeviceControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "MediaDeviceControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::MediaDeviceControlCapabilities>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.MediaDeviceControlCapabilities";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "MediaDeviceControlCapabilities";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::ModuleCommandResult>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.ModuleCommandResult";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "ModuleCommandResult";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::OpticalImageStabilizationControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.OpticalImageStabilizationControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "OpticalImageStabilizationControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::PanelBasedOptimizationControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.PanelBasedOptimizationControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "PanelBasedOptimizationControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::PhotoConfirmationControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.PhotoConfirmationControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "PhotoConfirmationControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::RedialRequestedEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.RedialRequestedEventArgs";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "RedialRequestedEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::RegionOfInterest>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.RegionOfInterest";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "RegionOfInterest";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::RegionsOfInterestControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.RegionsOfInterestControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "RegionsOfInterestControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::SceneModeControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.SceneModeControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "SceneModeControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::TorchControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.TorchControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "TorchControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::VideoDeviceController>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.VideoDeviceController";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "VideoDeviceController";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::VideoDeviceControllerGetDevicePropertyResult>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.VideoDeviceControllerGetDevicePropertyResult";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "VideoDeviceControllerGetDevicePropertyResult";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::VideoTemporalDenoisingControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.VideoTemporalDenoisingControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "VideoTemporalDenoisingControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::WhiteBalanceControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.WhiteBalanceControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "WhiteBalanceControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::ZoomControl>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.ZoomControl";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "ZoomControl";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::ZoomSettings>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices.ZoomSettings";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "ZoomSettings";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::IDefaultAudioDeviceChangedEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices._IDefaultAudioDeviceChangedEventArgs";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "_IDefaultAudioDeviceChangedEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Media::Devices::IMediaDeviceController>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.media.devices._IMediaDeviceController";
        static constexpr const char* module_name = "winrt.windows.media.devices";
        static constexpr const char* type_name = "_IMediaDeviceController";
    };
}

#if __has_include("py.Windows.Devices.Enumeration.h")
#include "py.Windows.Devices.Enumeration.h"
#endif

#if __has_include("py.Windows.Foundation.h")
#include "py.Windows.Foundation.h"
#endif

#if __has_include("py.Windows.Foundation.Collections.h")
#include "py.Windows.Foundation.Collections.h"
#endif

#if __has_include("py.Windows.Media.Capture.h")
#include "py.Windows.Media.Capture.h"
#endif

#if __has_include("py.Windows.Media.Devices.Core.h")
#include "py.Windows.Media.Devices.Core.h"
#endif

#if __has_include("py.Windows.Media.Effects.h")
#include "py.Windows.Media.Effects.h"
#endif

#if __has_include("py.Windows.Media.MediaProperties.h")
#include "py.Windows.Media.MediaProperties.h"
#endif

#if __has_include("py.Windows.Storage.Streams.h")
#include "py.Windows.Storage.Streams.h"
#endif

namespace py::impl::Windows::Media::Devices
{
    struct CallControlEventHandler
    {
        static winrt::Windows::Media::Devices::CallControlEventHandler get(PyObject* callable)
        {
            py::delegate_callable _delegate{ callable };

            return [delegate = std::move(_delegate)](winrt::Windows::Media::Devices::CallControl const& param0)
            {
                auto gil = py::ensure_gil();

                try
                {
                    py::pyobj_handle py_param0{py::convert(param0)};
                    if (!py_param0)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle return_value{PyObject_CallOneArg(delegate.callable(), py_param0.get())};
                    if (!return_value)
                    {
                        throw python_exception();
                    }
                }
                catch (python_exception)
                {
                    py::write_unraisable_and_throw();
                }
            };
        };
    };

    struct DialRequestedEventHandler
    {
        static winrt::Windows::Media::Devices::DialRequestedEventHandler get(PyObject* callable)
        {
            py::delegate_callable _delegate{ callable };

            return [delegate = std::move(_delegate)](winrt::Windows::Media::Devices::CallControl const& param0, winrt::Windows::Media::Devices::DialRequestedEventArgs const& param1)
            {
                auto gil = py::ensure_gil();

                try
                {
                    py::pyobj_handle py_param0{py::convert(param0)};
                    if (!py_param0)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle py_param1{py::convert(param1)};
                    if (!py_param1)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle args{PyTuple_Pack(2, py_param0.get(), py_param1.get())};
                    if (!args)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle return_value{PyObject_CallObject(delegate.callable(), args.get())};
                    if (!return_value)
                    {
                        throw python_exception();
                    }
                }
                catch (python_exception)
                {
                    py::write_unraisable_and_throw();
                }
            };
        };
    };

    struct KeypadPressedEventHandler
    {
        static winrt::Windows::Media::Devices::KeypadPressedEventHandler get(PyObject* callable)
        {
            py::delegate_callable _delegate{ callable };

            return [delegate = std::move(_delegate)](winrt::Windows::Media::Devices::CallControl const& param0, winrt::Windows::Media::Devices::KeypadPressedEventArgs const& param1)
            {
                auto gil = py::ensure_gil();

                try
                {
                    py::pyobj_handle py_param0{py::convert(param0)};
                    if (!py_param0)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle py_param1{py::convert(param1)};
                    if (!py_param1)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle args{PyTuple_Pack(2, py_param0.get(), py_param1.get())};
                    if (!args)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle return_value{PyObject_CallObject(delegate.callable(), args.get())};
                    if (!return_value)
                    {
                        throw python_exception();
                    }
                }
                catch (python_exception)
                {
                    py::write_unraisable_and_throw();
                }
            };
        };
    };

    struct RedialRequestedEventHandler
    {
        static winrt::Windows::Media::Devices::RedialRequestedEventHandler get(PyObject* callable)
        {
            py::delegate_callable _delegate{ callable };

            return [delegate = std::move(_delegate)](winrt::Windows::Media::Devices::CallControl const& param0, winrt::Windows::Media::Devices::RedialRequestedEventArgs const& param1)
            {
                auto gil = py::ensure_gil();

                try
                {
                    py::pyobj_handle py_param0{py::convert(param0)};
                    if (!py_param0)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle py_param1{py::convert(param1)};
                    if (!py_param1)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle args{PyTuple_Pack(2, py_param0.get(), py_param1.get())};
                    if (!args)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle return_value{PyObject_CallObject(delegate.callable(), args.get())};
                    if (!return_value)
                    {
                        throw python_exception();
                    }
                }
                catch (python_exception)
                {
                    py::write_unraisable_and_throw();
                }
            };
        };
    };
}

namespace py::wrapper::Windows::Media::Devices
{
    using AdvancedPhotoCaptureSettings = py::winrt_wrapper<winrt::Windows::Media::Devices::AdvancedPhotoCaptureSettings>;
    using AdvancedPhotoControl = py::winrt_wrapper<winrt::Windows::Media::Devices::AdvancedPhotoControl>;
    using AudioDeviceController = py::winrt_wrapper<winrt::Windows::Media::Devices::AudioDeviceController>;
    using AudioDeviceModule = py::winrt_wrapper<winrt::Windows::Media::Devices::AudioDeviceModule>;
    using AudioDeviceModuleNotificationEventArgs = py::winrt_wrapper<winrt::Windows::Media::Devices::AudioDeviceModuleNotificationEventArgs>;
    using AudioDeviceModulesManager = py::winrt_wrapper<winrt::Windows::Media::Devices::AudioDeviceModulesManager>;
    using CallControl = py::winrt_wrapper<winrt::Windows::Media::Devices::CallControl>;
    using CameraOcclusionInfo = py::winrt_wrapper<winrt::Windows::Media::Devices::CameraOcclusionInfo>;
    using CameraOcclusionState = py::winrt_wrapper<winrt::Windows::Media::Devices::CameraOcclusionState>;
    using CameraOcclusionStateChangedEventArgs = py::winrt_wrapper<winrt::Windows::Media::Devices::CameraOcclusionStateChangedEventArgs>;
    using DefaultAudioCaptureDeviceChangedEventArgs = py::winrt_wrapper<winrt::Windows::Media::Devices::DefaultAudioCaptureDeviceChangedEventArgs>;
    using DefaultAudioRenderDeviceChangedEventArgs = py::winrt_wrapper<winrt::Windows::Media::Devices::DefaultAudioRenderDeviceChangedEventArgs>;
    using DialRequestedEventArgs = py::winrt_wrapper<winrt::Windows::Media::Devices::DialRequestedEventArgs>;
    using DigitalWindowBounds = py::winrt_wrapper<winrt::Windows::Media::Devices::DigitalWindowBounds>;
    using DigitalWindowCapability = py::winrt_wrapper<winrt::Windows::Media::Devices::DigitalWindowCapability>;
    using DigitalWindowControl = py::winrt_wrapper<winrt::Windows::Media::Devices::DigitalWindowControl>;
    using ExposureCompensationControl = py::winrt_wrapper<winrt::Windows::Media::Devices::ExposureCompensationControl>;
    using ExposureControl = py::winrt_wrapper<winrt::Windows::Media::Devices::ExposureControl>;
    using ExposurePriorityVideoControl = py::winrt_wrapper<winrt::Windows::Media::Devices::ExposurePriorityVideoControl>;
    using FlashControl = py::winrt_wrapper<winrt::Windows::Media::Devices::FlashControl>;
    using FocusControl = py::winrt_wrapper<winrt::Windows::Media::Devices::FocusControl>;
    using FocusSettings = py::winrt_wrapper<winrt::Windows::Media::Devices::FocusSettings>;
    using HdrVideoControl = py::winrt_wrapper<winrt::Windows::Media::Devices::HdrVideoControl>;
    using InfraredTorchControl = py::winrt_wrapper<winrt::Windows::Media::Devices::InfraredTorchControl>;
    using IsoSpeedControl = py::winrt_wrapper<winrt::Windows::Media::Devices::IsoSpeedControl>;
    using KeypadPressedEventArgs = py::winrt_wrapper<winrt::Windows::Media::Devices::KeypadPressedEventArgs>;
    using LowLagPhotoControl = py::winrt_wrapper<winrt::Windows::Media::Devices::LowLagPhotoControl>;
    using LowLagPhotoSequenceControl = py::winrt_wrapper<winrt::Windows::Media::Devices::LowLagPhotoSequenceControl>;
    using MediaDevice = py::winrt_wrapper<winrt::Windows::Media::Devices::MediaDevice>;
    using MediaDeviceControl = py::winrt_wrapper<winrt::Windows::Media::Devices::MediaDeviceControl>;
    using MediaDeviceControlCapabilities = py::winrt_wrapper<winrt::Windows::Media::Devices::MediaDeviceControlCapabilities>;
    using ModuleCommandResult = py::winrt_wrapper<winrt::Windows::Media::Devices::ModuleCommandResult>;
    using OpticalImageStabilizationControl = py::winrt_wrapper<winrt::Windows::Media::Devices::OpticalImageStabilizationControl>;
    using PanelBasedOptimizationControl = py::winrt_wrapper<winrt::Windows::Media::Devices::PanelBasedOptimizationControl>;
    using PhotoConfirmationControl = py::winrt_wrapper<winrt::Windows::Media::Devices::PhotoConfirmationControl>;
    using RedialRequestedEventArgs = py::winrt_wrapper<winrt::Windows::Media::Devices::RedialRequestedEventArgs>;
    using RegionOfInterest = py::winrt_wrapper<winrt::Windows::Media::Devices::RegionOfInterest>;
    using RegionsOfInterestControl = py::winrt_wrapper<winrt::Windows::Media::Devices::RegionsOfInterestControl>;
    using SceneModeControl = py::winrt_wrapper<winrt::Windows::Media::Devices::SceneModeControl>;
    using TorchControl = py::winrt_wrapper<winrt::Windows::Media::Devices::TorchControl>;
    using VideoDeviceController = py::winrt_wrapper<winrt::Windows::Media::Devices::VideoDeviceController>;
    using VideoDeviceControllerGetDevicePropertyResult = py::winrt_wrapper<winrt::Windows::Media::Devices::VideoDeviceControllerGetDevicePropertyResult>;
    using VideoTemporalDenoisingControl = py::winrt_wrapper<winrt::Windows::Media::Devices::VideoTemporalDenoisingControl>;
    using WhiteBalanceControl = py::winrt_wrapper<winrt::Windows::Media::Devices::WhiteBalanceControl>;
    using ZoomControl = py::winrt_wrapper<winrt::Windows::Media::Devices::ZoomControl>;
    using ZoomSettings = py::winrt_wrapper<winrt::Windows::Media::Devices::ZoomSettings>;
    using IDefaultAudioDeviceChangedEventArgs = py::winrt_wrapper<winrt::Windows::Media::Devices::IDefaultAudioDeviceChangedEventArgs>;
    using IMediaDeviceController = py::winrt_wrapper<winrt::Windows::Media::Devices::IMediaDeviceController>;
}

namespace py
{
    template <>
    struct delegate_python_type<winrt::Windows::Media::Devices::CallControlEventHandler>
    {
        using type = py::impl::Windows::Media::Devices::CallControlEventHandler;
    };

    template <>
    struct delegate_python_type<winrt::Windows::Media::Devices::DialRequestedEventHandler>
    {
        using type = py::impl::Windows::Media::Devices::DialRequestedEventHandler;
    };

    template <>
    struct delegate_python_type<winrt::Windows::Media::Devices::KeypadPressedEventHandler>
    {
        using type = py::impl::Windows::Media::Devices::KeypadPressedEventHandler;
    };

    template <>
    struct delegate_python_type<winrt::Windows::Media::Devices::RedialRequestedEventHandler>
    {
        using type = py::impl::Windows::Media::Devices::RedialRequestedEventHandler;
    };

}
