//! NOTE: this file is autogenerated, DO NOT MODIFY
//--------------------------------------------------------------------------------
// Section: Constants (1007)
//--------------------------------------------------------------------------------
pub const EC_SND_DEVICE_ERROR_BASE = @as(u32, 512);
pub const EC_SNDDEV_IN_ERROR = @as(u32, 512);
pub const EC_SNDDEV_OUT_ERROR = @as(u32, 513);
pub const EC_SYSTEMBASE = @as(u32, 0);
pub const EC_USER = @as(u32, 32768);
pub const EC_COMPLETE = @as(u32, 1);
pub const EC_USERABORT = @as(u32, 2);
pub const EC_ERRORABORT = @as(u32, 3);
pub const EC_TIME = @as(u32, 4);
pub const EC_REPAINT = @as(u32, 5);
pub const EC_STREAM_ERROR_STOPPED = @as(u32, 6);
pub const EC_STREAM_ERROR_STILLPLAYING = @as(u32, 7);
pub const EC_ERROR_STILLPLAYING = @as(u32, 8);
pub const EC_PALETTE_CHANGED = @as(u32, 9);
pub const EC_VIDEO_SIZE_CHANGED = @as(u32, 10);
pub const EC_QUALITY_CHANGE = @as(u32, 11);
pub const EC_SHUTTING_DOWN = @as(u32, 12);
pub const EC_CLOCK_CHANGED = @as(u32, 13);
pub const EC_PAUSED = @as(u32, 14);
pub const EC_OPENING_FILE = @as(u32, 16);
pub const EC_BUFFERING_DATA = @as(u32, 17);
pub const EC_FULLSCREEN_LOST = @as(u32, 18);
pub const EC_ACTIVATE = @as(u32, 19);
pub const EC_NEED_RESTART = @as(u32, 20);
pub const EC_WINDOW_DESTROYED = @as(u32, 21);
pub const EC_DISPLAY_CHANGED = @as(u32, 22);
pub const EC_STARVATION = @as(u32, 23);
pub const EC_OLE_EVENT = @as(u32, 24);
pub const EC_NOTIFY_WINDOW = @as(u32, 25);
pub const EC_STREAM_CONTROL_STOPPED = @as(u32, 26);
pub const EC_STREAM_CONTROL_STARTED = @as(u32, 27);
pub const EC_END_OF_SEGMENT = @as(u32, 28);
pub const EC_SEGMENT_STARTED = @as(u32, 29);
pub const EC_LENGTH_CHANGED = @as(u32, 30);
pub const EC_DEVICE_LOST = @as(u32, 31);
pub const EC_SAMPLE_NEEDED = @as(u32, 32);
pub const EC_PROCESSING_LATENCY = @as(u32, 33);
pub const EC_SAMPLE_LATENCY = @as(u32, 34);
pub const EC_SCRUB_TIME = @as(u32, 35);
pub const EC_STEP_COMPLETE = @as(u32, 36);
pub const EC_TIMECODE_AVAILABLE = @as(u32, 48);
pub const EC_EXTDEVICE_MODE_CHANGE = @as(u32, 49);
pub const EC_STATE_CHANGE = @as(u32, 50);
pub const EC_GRAPH_CHANGED = @as(u32, 80);
pub const EC_CLOCK_UNSET = @as(u32, 81);
pub const EC_VMR_RENDERDEVICE_SET = @as(u32, 83);
pub const VMR_RENDER_DEVICE_OVERLAY = @as(u32, 1);
pub const VMR_RENDER_DEVICE_VIDMEM = @as(u32, 2);
pub const VMR_RENDER_DEVICE_SYSMEM = @as(u32, 4);
pub const EC_VMR_SURFACE_FLIPPED = @as(u32, 84);
pub const EC_VMR_RECONNECTION_FAILED = @as(u32, 85);
pub const EC_PREPROCESS_COMPLETE = @as(u32, 86);
pub const EC_CODECAPI_EVENT = @as(u32, 87);
pub const EC_WMT_EVENT_BASE = @as(u32, 593);
pub const EC_WMT_INDEX_EVENT = @as(u32, 593);
pub const EC_WMT_EVENT = @as(u32, 594);
pub const EC_BUILT = @as(u32, 768);
pub const EC_UNBUILT = @as(u32, 769);
pub const EC_SKIP_FRAMES = @as(u32, 37);
pub const EC_PLEASE_REOPEN = @as(u32, 64);
pub const EC_STATUS = @as(u32, 65);
pub const EC_MARKER_HIT = @as(u32, 66);
pub const EC_LOADSTATUS = @as(u32, 67);
pub const EC_FILE_CLOSED = @as(u32, 68);
pub const EC_ERRORABORTEX = @as(u32, 69);
pub const AM_LOADSTATUS_CLOSED = @as(u32, 0);
pub const AM_LOADSTATUS_LOADINGDESCR = @as(u32, 1);
pub const AM_LOADSTATUS_LOADINGMCAST = @as(u32, 2);
pub const AM_LOADSTATUS_LOCATING = @as(u32, 3);
pub const AM_LOADSTATUS_CONNECTING = @as(u32, 4);
pub const AM_LOADSTATUS_OPENING = @as(u32, 5);
pub const AM_LOADSTATUS_OPEN = @as(u32, 6);
pub const EC_NEW_PIN = @as(u32, 32);
pub const EC_RENDER_FINISHED = @as(u32, 33);
pub const EC_EOS_SOON = @as(u32, 70);
pub const EC_CONTENTPROPERTY_CHANGED = @as(u32, 71);
pub const AM_CONTENTPROPERTY_TITLE = @as(u32, 1);
pub const AM_CONTENTPROPERTY_AUTHOR = @as(u32, 2);
pub const AM_CONTENTPROPERTY_COPYRIGHT = @as(u32, 4);
pub const AM_CONTENTPROPERTY_DESCRIPTION = @as(u32, 8);
pub const EC_BANDWIDTHCHANGE = @as(u32, 72);
pub const EC_VIDEOFRAMEREADY = @as(u32, 73);
pub const EC_DVDBASE = @as(u32, 256);
pub const EC_DVD_DOMAIN_CHANGE = @as(u32, 257);
pub const EC_DVD_TITLE_CHANGE = @as(u32, 258);
pub const EC_DVD_CHAPTER_START = @as(u32, 259);
pub const EC_DVD_AUDIO_STREAM_CHANGE = @as(u32, 260);
pub const EC_DVD_SUBPICTURE_STREAM_CHANGE = @as(u32, 261);
pub const EC_DVD_ANGLE_CHANGE = @as(u32, 262);
pub const EC_DVD_BUTTON_CHANGE = @as(u32, 263);
pub const EC_DVD_VALID_UOPS_CHANGE = @as(u32, 264);
pub const EC_DVD_STILL_ON = @as(u32, 265);
pub const EC_DVD_STILL_OFF = @as(u32, 266);
pub const EC_DVD_CURRENT_TIME = @as(u32, 267);
pub const EC_DVD_ERROR = @as(u32, 268);
pub const EC_DVD_WARNING = @as(u32, 269);
pub const EC_DVD_CHAPTER_AUTOSTOP = @as(u32, 270);
pub const EC_DVD_NO_FP_PGC = @as(u32, 271);
pub const EC_DVD_PLAYBACK_RATE_CHANGE = @as(u32, 272);
pub const EC_DVD_PARENTAL_LEVEL_CHANGE = @as(u32, 273);
pub const EC_DVD_PLAYBACK_STOPPED = @as(u32, 274);
pub const EC_DVD_ANGLES_AVAILABLE = @as(u32, 275);
pub const EC_DVD_PLAYPERIOD_AUTOSTOP = @as(u32, 276);
pub const EC_DVD_BUTTON_AUTO_ACTIVATED = @as(u32, 277);
pub const EC_DVD_CMD_START = @as(u32, 278);
pub const EC_DVD_CMD_END = @as(u32, 279);
pub const EC_DVD_DISC_EJECTED = @as(u32, 280);
pub const EC_DVD_DISC_INSERTED = @as(u32, 281);
pub const EC_DVD_CURRENT_HMSF_TIME = @as(u32, 282);
pub const EC_DVD_KARAOKE_MODE = @as(u32, 283);
pub const EC_DVD_PROGRAM_CELL_CHANGE = @as(u32, 284);
pub const EC_DVD_TITLE_SET_CHANGE = @as(u32, 285);
pub const EC_DVD_PROGRAM_CHAIN_CHANGE = @as(u32, 286);
pub const EC_DVD_VOBU_Offset = @as(u32, 287);
pub const EC_DVD_VOBU_Timestamp = @as(u32, 288);
pub const EC_DVD_GPRM_Change = @as(u32, 289);
pub const EC_DVD_SPRM_Change = @as(u32, 290);
pub const EC_DVD_BeginNavigationCommands = @as(u32, 291);
pub const EC_DVD_NavigationCommand = @as(u32, 292);
pub const AM_AC3_ALTERNATE_AUDIO_1 = @as(u32, 1);
pub const AM_AC3_ALTERNATE_AUDIO_2 = @as(u32, 2);
pub const AM_AC3_ALTERNATE_AUDIO_BOTH = @as(u32, 3);
pub const AM_AC3_SERVICE_MAIN_AUDIO = @as(u32, 0);
pub const AM_AC3_SERVICE_NO_DIALOG = @as(u32, 1);
pub const AM_AC3_SERVICE_VISUALLY_IMPAIRED = @as(u32, 2);
pub const AM_AC3_SERVICE_HEARING_IMPAIRED = @as(u32, 3);
pub const AM_AC3_SERVICE_DIALOG_ONLY = @as(u32, 4);
pub const AM_AC3_SERVICE_COMMENTARY = @as(u32, 5);
pub const AM_AC3_SERVICE_EMERGENCY_FLASH = @as(u32, 6);
pub const AM_AC3_SERVICE_VOICE_OVER = @as(u32, 7);
pub const AM_UseNewCSSKey = @as(u32, 1);
pub const AM_ReverseBlockStart = @as(u32, 2);
pub const AM_ReverseBlockEnd = @as(u32, 4);
pub const AM_DVD_CGMS_RESERVED_MASK = @as(u32, 120);
pub const AM_DVD_CGMS_COPY_PROTECT_MASK = @as(u32, 24);
pub const AM_DVD_CGMS_COPY_PERMITTED = @as(u32, 0);
pub const AM_DVD_CGMS_COPY_ONCE = @as(u32, 16);
pub const AM_DVD_CGMS_NO_COPY = @as(u32, 24);
pub const AM_DVD_COPYRIGHT_MASK = @as(u32, 64);
pub const AM_DVD_NOT_COPYRIGHTED = @as(u32, 0);
pub const AM_DVD_COPYRIGHTED = @as(u32, 64);
pub const AM_DVD_SECTOR_PROTECT_MASK = @as(u32, 32);
pub const AM_DVD_SECTOR_NOT_PROTECTED = @as(u32, 0);
pub const AM_DVD_SECTOR_PROTECTED = @as(u32, 32);
pub const AMINTERLACE_IsInterlaced = @as(u32, 1);
pub const AMINTERLACE_1FieldPerSample = @as(u32, 2);
pub const AMINTERLACE_Field1First = @as(u32, 4);
pub const AMINTERLACE_UNUSED = @as(u32, 8);
pub const AMINTERLACE_FieldPatternMask = @as(u32, 48);
pub const AMINTERLACE_FieldPatField1Only = @as(u32, 0);
pub const AMINTERLACE_FieldPatField2Only = @as(u32, 16);
pub const AMINTERLACE_FieldPatBothRegular = @as(u32, 32);
pub const AMINTERLACE_FieldPatBothIrregular = @as(u32, 48);
pub const AMINTERLACE_DisplayModeMask = @as(u32, 192);
pub const AMINTERLACE_DisplayModeBobOnly = @as(u32, 0);
pub const AMINTERLACE_DisplayModeWeaveOnly = @as(u32, 64);
pub const AMINTERLACE_DisplayModeBobOrWeave = @as(u32, 128);
pub const AMCOPYPROTECT_RestrictDuplication = @as(u32, 1);
pub const AMCONTROL_USED = @as(u32, 1);
pub const AMCONTROL_PAD_TO_4x3 = @as(u32, 2);
pub const AMCONTROL_PAD_TO_16x9 = @as(u32, 4);
pub const AMCONTROL_COLORINFO_PRESENT = @as(u32, 128);
pub const AM_VIDEO_FLAG_FIELD_MASK = @as(i32, 3);
pub const AM_VIDEO_FLAG_INTERLEAVED_FRAME = @as(i32, 0);
pub const AM_VIDEO_FLAG_FIELD1 = @as(i32, 1);
pub const AM_VIDEO_FLAG_FIELD2 = @as(i32, 2);
pub const AM_VIDEO_FLAG_FIELD1FIRST = @as(i32, 4);
pub const AM_VIDEO_FLAG_WEAVE = @as(i32, 8);
pub const AM_VIDEO_FLAG_IPB_MASK = @as(i32, 48);
pub const AM_VIDEO_FLAG_I_SAMPLE = @as(i32, 0);
pub const AM_VIDEO_FLAG_P_SAMPLE = @as(i32, 16);
pub const AM_VIDEO_FLAG_B_SAMPLE = @as(i32, 32);
pub const AM_VIDEO_FLAG_REPEAT_FIELD = @as(i32, 64);
pub const AVIF_HASINDEX = @as(u32, 16);
pub const AVIF_MUSTUSEINDEX = @as(u32, 32);
pub const AVIF_ISINTERLEAVED = @as(u32, 256);
pub const AVIF_TRUSTCKTYPE = @as(u32, 2048);
pub const AVIF_WASCAPTUREFILE = @as(u32, 65536);
pub const AVIF_COPYRIGHTED = @as(u32, 131072);
pub const AVI_HEADERSIZE = @as(u32, 2048);
pub const AVISF_DISABLED = @as(u32, 1);
pub const AVISF_VIDEO_PALCHANGES = @as(u32, 65536);
pub const AVIIF_LIST = @as(i32, 1);
pub const AVIIF_KEYFRAME = @as(i32, 16);
pub const AVIIF_FIRSTPART = @as(i32, 32);
pub const AVIIF_LASTPART = @as(i32, 64);
pub const AVIIF_NOTIME = @as(i32, 256);
pub const AVIIF_COMPUSE = @as(i32, 268369920);
pub const AVIIF_NO_TIME = @as(u32, 256);
pub const AVIIF_COMPRESSOR = @as(u32, 268369920);
pub const TIMECODE_RATE_30DROP = @as(u32, 0);
pub const TIMECODE_SMPTE_BINARY_GROUP = @as(u32, 7);
pub const TIMECODE_SMPTE_COLOR_FRAME = @as(u32, 8);
pub const AVI_INDEX_OF_INDEXES = @as(u32, 0);
pub const AVI_INDEX_OF_CHUNKS = @as(u32, 1);
pub const AVI_INDEX_OF_TIMED_CHUNKS = @as(u32, 2);
pub const AVI_INDEX_OF_SUB_2FIELD = @as(u32, 3);
pub const AVI_INDEX_IS_DATA = @as(u32, 128);
pub const AVI_INDEX_SUB_DEFAULT = @as(u32, 0);
pub const AVI_INDEX_SUB_2FIELD = @as(u32, 1);
pub const STDINDEXSIZE = @as(u32, 16384);
pub const AVISTDINDEX_DELTAFRAME = @as(u32, 2147483648);
pub const AMVA_TYPEINDEX_OUTPUTFRAME = @as(u32, 4294967295);
pub const AMVA_QUERYRENDERSTATUSF_READ = @as(u32, 1);
pub const MIN_DIMENSION = @as(u32, 1);
pub const BDA_PLP_ID_NOT_SET = @as(i32, -1);
pub const CDEF_CLASS_DEFAULT = @as(u32, 1);
pub const CDEF_BYPASS_CLASS_MANAGER = @as(u32, 2);
pub const CDEF_MERIT_ABOVE_DO_NOT_USE = @as(u32, 8);
pub const CDEF_DEVMON_CMGR_DEVICE = @as(u32, 16);
pub const CDEF_DEVMON_DMO = @as(u32, 32);
pub const CDEF_DEVMON_PNP_DEVICE = @as(u32, 64);
pub const CDEF_DEVMON_FILTER = @as(u32, 128);
pub const CDEF_DEVMON_SELECTIVE_MASK = @as(u32, 240);
pub const CHARS_IN_GUID = @as(u32, 39);
pub const MAX_PIN_NAME = @as(u32, 128);
pub const MAX_FILTER_NAME = @as(u32, 128);
pub const AM_GBF_PREVFRAMESKIPPED = @as(u32, 1);
pub const AM_GBF_NOTASYNCPOINT = @as(u32, 2);
pub const AM_GBF_NOWAIT = @as(u32, 4);
pub const AM_GBF_NODDSURFACELOCK = @as(u32, 8);
pub const AMF_AUTOMATICGAIN = @as(f64, -1);
pub const AnalogVideo_NTSC_Mask = @as(u32, 7);
pub const AnalogVideo_PAL_Mask = @as(u32, 1052656);
pub const AnalogVideo_SECAM_Mask = @as(u32, 1044480);
pub const MPEG2_PROGRAM_STREAM_MAP = @as(u32, 0);
pub const MPEG2_PROGRAM_ELEMENTARY_STREAM = @as(u32, 1);
pub const MPEG2_PROGRAM_DIRECTORY_PES_PACKET = @as(u32, 2);
pub const MPEG2_PROGRAM_PACK_HEADER = @as(u32, 3);
pub const MPEG2_PROGRAM_PES_STREAM = @as(u32, 4);
pub const MPEG2_PROGRAM_SYSTEM_HEADER = @as(u32, 5);
pub const SUBSTREAM_FILTER_VAL_NONE = @as(u32, 268435456);
pub const AM_GETDECODERCAP_QUERY_VMR_SUPPORT = @as(u32, 1);
pub const VMR_NOTSUPPORTED = @as(u32, 0);
pub const VMR_SUPPORTED = @as(u32, 1);
pub const AM_QUERY_DECODER_VMR_SUPPORT = @as(u32, 1);
pub const AM_QUERY_DECODER_DXVA_1_SUPPORT = @as(u32, 2);
pub const AM_QUERY_DECODER_DVD_SUPPORT = @as(u32, 3);
pub const AM_QUERY_DECODER_ATSC_SD_SUPPORT = @as(u32, 4);
pub const AM_QUERY_DECODER_ATSC_HD_SUPPORT = @as(u32, 5);
pub const AM_GETDECODERCAP_QUERY_VMR9_SUPPORT = @as(u32, 6);
pub const AM_GETDECODERCAP_QUERY_EVR_SUPPORT = @as(u32, 7);
pub const DECODER_CAP_NOTSUPPORTED = @as(u32, 0);
pub const DECODER_CAP_SUPPORTED = @as(u32, 1);
pub const VMRBITMAP_DISABLE = @as(u32, 1);
pub const VMRBITMAP_HDC = @as(u32, 2);
pub const VMRBITMAP_ENTIREDDS = @as(u32, 4);
pub const VMRBITMAP_SRCCOLORKEY = @as(u32, 8);
pub const VMRBITMAP_SRCRECT = @as(u32, 16);
pub const DVD_TITLE_MENU = @as(u32, 0);
pub const DVD_STREAM_DATA_CURRENT = @as(u32, 2048);
pub const DVD_STREAM_DATA_VMGM = @as(u32, 1024);
pub const DVD_STREAM_DATA_VTSM = @as(u32, 1025);
pub const DVD_DEFAULT_AUDIO_STREAM = @as(u32, 15);
pub const DVD_AUDIO_CAPS_AC3 = @as(u32, 1);
pub const DVD_AUDIO_CAPS_MPEG2 = @as(u32, 2);
pub const DVD_AUDIO_CAPS_LPCM = @as(u32, 4);
pub const DVD_AUDIO_CAPS_DTS = @as(u32, 8);
pub const DVD_AUDIO_CAPS_SDDS = @as(u32, 16);
pub const MEDIATYPE_MPEG2_PACK = Guid.initString("36523b13-8ee5-11d1-8ca3-0060b057664a");
pub const PBDA_AUX_CONNECTOR_TYPE_SVideo = Guid.initString("a0e905f4-24c9-4a54-b761-213355efc13a");
pub const PBDA_AUX_CONNECTOR_TYPE_Composite = Guid.initString("f6298b4c-c725-4d42-849b-410bbb14ea62");
pub const CLSID_PBDA_AUX_DATA_TYPE = Guid.initString("fd456373-3323-4090-adca-8ed45f55cf10");
pub const CLSID_PBDA_Encoder_DATA_TYPE = Guid.initString("728fd6bc-5546-4716-b103-f899f5a1fa68");
pub const PBDA_Encoder_Audio_AlgorithmType_MPEG1LayerII = @as(u32, 0);
pub const PBDA_Encoder_Audio_AlgorithmType_AC3 = @as(u32, 1);
pub const PBDA_Encoder_Video_MPEG2PartII = @as(u32, 0);
pub const PBDA_Encoder_Video_MPEG4Part10 = @as(u32, 1);
pub const PBDA_Encoder_Video_AVC = @as(u32, 1);
pub const PBDA_Encoder_Video_H264 = @as(u32, 1);
pub const PBDA_Encoder_BitrateMode_Constant = @as(u32, 1);
pub const PBDA_Encoder_BitrateMode_Variable = @as(u32, 2);
pub const PBDA_Encoder_BitrateMode_Average = @as(u32, 3);
pub const CLSID_PBDA_FDC_DATA_TYPE = Guid.initString("e7dbf9a0-22ab-4047-8e67-ef9ad504e729");
pub const CLSID_PBDA_GDDS_DATA_TYPE = Guid.initString("c80c0df3-6052-4c16-9f56-c44c21f73c45");
pub const LIBID_QuartzNetTypeLib = Guid.initString("56a868b1-0ad4-11ce-b03a-0020af0ba770");
pub const LIBID_QuartzTypeLib = Guid.initString("56a868b0-0ad4-11ce-b03a-0020af0ba770");
pub const CLSID_AMMultiMediaStream = Guid.initString("49c47ce5-9ba4-11d0-8212-00c04fc32c45");
pub const CLSID_AMDirectDrawStream = Guid.initString("49c47ce4-9ba4-11d0-8212-00c04fc32c45");
pub const CLSID_AMAudioStream = Guid.initString("8496e040-af4c-11d0-8212-00c04fc32c45");
pub const CLSID_AMAudioData = Guid.initString("f2468580-af8a-11d0-8212-00c04fc32c45");
pub const CLSID_AMMediaTypeStream = Guid.initString("cf0f2f7c-f7bf-11d0-900d-00c04fd9189d");
pub const AMDDS_NONE = @as(u32, 0);
pub const AMDDS_DCIPS = @as(u32, 1);
pub const AMDDS_PS = @as(u32, 2);
pub const AMDDS_RGBOVR = @as(u32, 4);
pub const AMDDS_YUVOVR = @as(u32, 8);
pub const AMDDS_RGBOFF = @as(u32, 16);
pub const AMDDS_YUVOFF = @as(u32, 32);
pub const AMDDS_RGBFLP = @as(u32, 64);
pub const AMDDS_YUVFLP = @as(u32, 128);
pub const AMDDS_ALL = @as(u32, 255);
pub const AMDDS_DEFAULT = @as(u32, 255);
pub const MAX_SIZE_MPEG1_SEQUENCE_INFO = @as(u32, 140);
pub const CLSID_DMOWrapperFilter = Guid.initString("94297043-bd82-4dfd-b0de-8177739c6d20");
pub const CLSID_DMOFilterCategory = Guid.initString("bcd5796c-bd52-4d30-ab76-70f975b89199");
pub const AM_MPEG_AUDIO_DUAL_MERGE = @as(u32, 0);
pub const AM_MPEG_AUDIO_DUAL_LEFT = @as(u32, 1);
pub const AM_MPEG_AUDIO_DUAL_RIGHT = @as(u32, 2);
pub const VFW_FIRST_CODE = @as(u32, 512);
pub const MAX_ERROR_TEXT_LEN = @as(u32, 160);
pub const MPBOOL_TRUE = @as(u32, 1);
pub const MPBOOL_FALSE = @as(u32, 0);
pub const DWORD_ALLPARAMS = @as(i32, -1);
pub const GUID_TIME_REFERENCE = Guid.initString("93ad712b-daa0-4ffe-bc81-b0ce500fcdd9");
pub const GUID_TIME_MUSIC = Guid.initString("0574c49d-5b04-4b15-a542-ae282030117b");
pub const GUID_TIME_SAMPLES = Guid.initString("a8593d05-0c43-4984-9a63-97af9e02c4c0");
pub const MPF_ENVLP_STANDARD = @as(u32, 0);
pub const MPF_ENVLP_BEGIN_CURRENTVAL = @as(u32, 1);
pub const MPF_ENVLP_BEGIN_NEUTRALVAL = @as(u32, 2);
pub const MPF_PUNCHIN_REFTIME = @as(u32, 0);
pub const MPF_PUNCHIN_NOW = @as(u32, 1);
pub const MPF_PUNCHIN_STOPPED = @as(u32, 2);
pub const MSPID_PrimaryVideo = Guid.initString("a35ff56a-9fda-11d0-8fdf-00c04fd9189d");
pub const MSPID_PrimaryAudio = Guid.initString("a35ff56b-9fda-11d0-8fdf-00c04fd9189d");
pub const VFW_E_INVALIDMEDIATYPE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220992));
pub const VFW_E_INVALIDSUBTYPE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220991));
pub const VFW_E_NEED_OWNER = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220990));
pub const VFW_E_ENUM_OUT_OF_SYNC = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220989));
pub const VFW_E_ALREADY_CONNECTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220988));
pub const VFW_E_FILTER_ACTIVE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220987));
pub const VFW_E_NO_TYPES = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220986));
pub const VFW_E_NO_ACCEPTABLE_TYPES = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220985));
pub const VFW_E_INVALID_DIRECTION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220984));
pub const VFW_E_NOT_CONNECTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220983));
pub const VFW_E_NO_ALLOCATOR = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220982));
pub const VFW_E_RUNTIME_ERROR = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220981));
pub const VFW_E_BUFFER_NOTSET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220980));
pub const VFW_E_BUFFER_OVERFLOW = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220979));
pub const VFW_E_BADALIGN = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220978));
pub const VFW_E_ALREADY_COMMITTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220977));
pub const VFW_E_BUFFERS_OUTSTANDING = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220976));
pub const VFW_E_NOT_COMMITTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220975));
pub const VFW_E_SIZENOTSET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220974));
pub const VFW_E_NO_CLOCK = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220973));
pub const VFW_E_NO_SINK = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220972));
pub const VFW_E_NO_INTERFACE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220971));
pub const VFW_E_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220970));
pub const VFW_E_CANNOT_CONNECT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220969));
pub const VFW_E_CANNOT_RENDER = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220968));
pub const VFW_E_CHANGING_FORMAT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220967));
pub const VFW_E_NO_COLOR_KEY_SET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220966));
pub const VFW_E_NOT_OVERLAY_CONNECTION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220965));
pub const VFW_E_NOT_SAMPLE_CONNECTION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220964));
pub const VFW_E_PALETTE_SET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220963));
pub const VFW_E_COLOR_KEY_SET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220962));
pub const VFW_E_NO_COLOR_KEY_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220961));
pub const VFW_E_NO_PALETTE_AVAILABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220960));
pub const VFW_E_NO_DISPLAY_PALETTE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220959));
pub const VFW_E_TOO_MANY_COLORS = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220958));
pub const VFW_E_STATE_CHANGED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220957));
pub const VFW_E_NOT_STOPPED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220956));
pub const VFW_E_NOT_PAUSED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220955));
pub const VFW_E_NOT_RUNNING = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220954));
pub const VFW_E_WRONG_STATE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220953));
pub const VFW_E_START_TIME_AFTER_END = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220952));
pub const VFW_E_INVALID_RECT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220951));
pub const VFW_E_TYPE_NOT_ACCEPTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220950));
pub const VFW_E_SAMPLE_REJECTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220949));
pub const VFW_E_SAMPLE_REJECTED_EOS = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220948));
pub const VFW_E_DUPLICATE_NAME = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220947));
pub const VFW_S_DUPLICATE_NAME = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262701));
pub const VFW_E_TIMEOUT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220946));
pub const VFW_E_INVALID_FILE_FORMAT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220945));
pub const VFW_E_ENUM_OUT_OF_RANGE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220944));
pub const VFW_E_CIRCULAR_GRAPH = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220943));
pub const VFW_E_NOT_ALLOWED_TO_SAVE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220942));
pub const VFW_E_TIME_ALREADY_PASSED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220941));
pub const VFW_E_ALREADY_CANCELLED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220940));
pub const VFW_E_CORRUPT_GRAPH_FILE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220939));
pub const VFW_E_ADVISE_ALREADY_SET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220938));
pub const VFW_S_STATE_INTERMEDIATE = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262711));
pub const VFW_E_NO_MODEX_AVAILABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220936));
pub const VFW_E_NO_ADVISE_SET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220935));
pub const VFW_E_NO_FULLSCREEN = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220934));
pub const VFW_E_IN_FULLSCREEN_MODE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220933));
pub const VFW_E_UNKNOWN_FILE_TYPE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220928));
pub const VFW_E_CANNOT_LOAD_SOURCE_FILTER = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220927));
pub const VFW_S_PARTIAL_RENDER = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262722));
pub const VFW_E_FILE_TOO_SHORT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220925));
pub const VFW_E_INVALID_FILE_VERSION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220924));
pub const VFW_S_SOME_DATA_IGNORED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262725));
pub const VFW_S_CONNECTIONS_DEFERRED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262726));
pub const VFW_E_INVALID_CLSID = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220921));
pub const VFW_E_INVALID_MEDIA_TYPE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220920));
pub const VFW_E_BAD_KEY = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220494));
pub const VFW_S_NO_MORE_ITEMS = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262403));
pub const VFW_E_SAMPLE_TIME_NOT_SET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220919));
pub const VFW_S_RESOURCE_NOT_NEEDED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262736));
pub const VFW_E_MEDIA_TIME_NOT_SET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220911));
pub const VFW_E_NO_TIME_FORMAT_SET = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220910));
pub const VFW_E_MONO_AUDIO_HW = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220909));
pub const VFW_S_MEDIA_TYPE_IGNORED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262740));
pub const VFW_E_NO_DECOMPRESSOR = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220907));
pub const VFW_E_NO_AUDIO_HARDWARE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220906));
pub const VFW_S_VIDEO_NOT_RENDERED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262743));
pub const VFW_S_AUDIO_NOT_RENDERED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262744));
pub const VFW_E_RPZA = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220903));
pub const VFW_S_RPZA = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262746));
pub const VFW_E_PROCESSOR_NOT_SUITABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220901));
pub const VFW_E_UNSUPPORTED_AUDIO = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220900));
pub const VFW_E_UNSUPPORTED_VIDEO = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220899));
pub const VFW_E_MPEG_NOT_CONSTRAINED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220898));
pub const VFW_E_NOT_IN_GRAPH = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220897));
pub const VFW_S_ESTIMATED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262752));
pub const VFW_E_NO_TIME_FORMAT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220895));
pub const VFW_E_READ_ONLY = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220894));
pub const VFW_S_RESERVED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262755));
pub const VFW_E_BUFFER_UNDERFLOW = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220892));
pub const VFW_E_UNSUPPORTED_STREAM = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220891));
pub const VFW_E_NO_TRANSPORT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220890));
pub const VFW_S_STREAM_OFF = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262759));
pub const VFW_S_CANT_CUE = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262760));
pub const VFW_E_BAD_VIDEOCD = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220887));
pub const VFW_S_NO_STOP_TIME = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262768));
pub const VFW_E_OUT_OF_VIDEO_MEMORY = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220879));
pub const VFW_E_VP_NEGOTIATION_FAILED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220878));
pub const VFW_E_DDRAW_CAPS_NOT_SUITABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220877));
pub const VFW_E_NO_VP_HARDWARE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220876));
pub const VFW_E_NO_CAPTURE_HARDWARE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220875));
pub const VFW_E_DVD_OPERATION_INHIBITED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220874));
pub const VFW_E_DVD_INVALIDDOMAIN = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220873));
pub const VFW_E_DVD_NO_BUTTON = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220872));
pub const VFW_E_DVD_GRAPHNOTREADY = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220871));
pub const VFW_E_DVD_RENDERFAIL = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220870));
pub const VFW_E_DVD_DECNOTENOUGH = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220869));
pub const VFW_E_DDRAW_VERSION_NOT_SUITABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220868));
pub const VFW_E_COPYPROT_FAILED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220867));
pub const VFW_S_NOPREVIEWPIN = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262782));
pub const VFW_E_TIME_EXPIRED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220865));
pub const VFW_S_DVD_NON_ONE_SEQUENTIAL = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262784));
pub const VFW_E_DVD_WRONG_SPEED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220863));
pub const VFW_E_DVD_MENU_DOES_NOT_EXIST = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220862));
pub const VFW_E_DVD_CMD_CANCELLED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220861));
pub const VFW_E_DVD_STATE_WRONG_VERSION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220860));
pub const VFW_E_DVD_STATE_CORRUPT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220859));
pub const VFW_E_DVD_STATE_WRONG_DISC = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220858));
pub const VFW_E_DVD_INCOMPATIBLE_REGION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220857));
pub const VFW_E_DVD_NO_ATTRIBUTES = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220856));
pub const VFW_E_DVD_NO_GOUP_PGC = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220855));
pub const VFW_E_DVD_LOW_PARENTAL_LEVEL = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220854));
pub const VFW_E_DVD_NOT_IN_KARAOKE_MODE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220853));
pub const VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262796));
pub const VFW_S_DVD_NOT_ACCURATE = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262797));
pub const VFW_E_FRAME_STEP_UNSUPPORTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220850));
pub const VFW_E_DVD_STREAM_DISABLED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220849));
pub const VFW_E_DVD_TITLE_UNKNOWN = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220848));
pub const VFW_E_DVD_INVALID_DISC = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220847));
pub const VFW_E_DVD_NO_RESUME_INFORMATION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220846));
pub const VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220845));
pub const VFW_E_PIN_ALREADY_BLOCKED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220844));
pub const VFW_E_CERTIFICATION_FAILURE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220843));
pub const VFW_E_VMR_NOT_IN_MIXER_MODE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220842));
pub const VFW_E_VMR_NO_AP_SUPPLIED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220841));
pub const VFW_E_VMR_NO_DEINTERLACE_HW = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220840));
pub const VFW_E_VMR_NO_PROCAMP_HW = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220839));
pub const VFW_E_DVD_VMR9_INCOMPATIBLEDEC = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220838));
pub const VFW_E_NO_COPP_HW = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220837));
pub const VFW_E_DVD_NONBLOCKING = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220836));
pub const VFW_E_DVD_TOO_MANY_RENDERERS_IN_FILTER_GRAPH = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220835));
pub const VFW_E_DVD_NON_EVR_RENDERER_IN_FILTER_GRAPH = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220834));
pub const VFW_E_DVD_RESOLUTION_ERROR = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220833));
pub const E_PROP_SET_UNSUPPORTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147023726));
pub const E_PROP_ID_UNSUPPORTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147023728));
pub const VFW_E_CODECAPI_LINEAR_RANGE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220720));
pub const VFW_E_CODECAPI_ENUMERATED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220719));
pub const VFW_E_CODECAPI_NO_DEFAULT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220717));
pub const VFW_E_CODECAPI_NO_CURRENT_VALUE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220716));
pub const VFW_E_DVD_CHAPTER_DOES_NOT_EXIST = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220715));
pub const VFW_S_DVD_RENDER_STATUS = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262944));
pub const DXVA_ModeNone = Guid.initString("1b81be00-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH261_A = Guid.initString("1b81be01-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH261_B = Guid.initString("1b81be02-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH263_A = Guid.initString("1b81be03-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH263_B = Guid.initString("1b81be04-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH263_C = Guid.initString("1b81be05-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH263_D = Guid.initString("1b81be06-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH263_E = Guid.initString("1b81be07-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH263_F = Guid.initString("1b81be08-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeMPEG1_A = Guid.initString("1b81be09-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeMPEG1_VLD = Guid.initString("6f3ec719-3735-42cc-8063-65cc3cb36616");
pub const DXVA_ModeMPEG2_A = Guid.initString("1b81be0a-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeMPEG2_B = Guid.initString("1b81be0b-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeMPEG2_C = Guid.initString("1b81be0c-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeMPEG2_D = Guid.initString("1b81be0d-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeMPEG2and1_VLD = Guid.initString("86695f12-340e-4f04-9fd3-9253dd327460");
pub const DXVA_ModeH264_A = Guid.initString("1b81be64-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH264_B = Guid.initString("1b81be65-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH264_C = Guid.initString("1b81be66-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH264_D = Guid.initString("1b81be67-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH264_E = Guid.initString("1b81be68-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH264_F = Guid.initString("1b81be69-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeH264_VLD_WithFMOASO_NoFGT = Guid.initString("d5f04ff9-3418-45d8-9561-32a76aae2ddd");
pub const DXVA_ModeH264_VLD_Stereo_Progressive_NoFGT = Guid.initString("d79be8da-0cf1-4c81-b82a-69a4e236f43d");
pub const DXVA_ModeH264_VLD_Stereo_NoFGT = Guid.initString("f9aaccbb-c2b6-4cfc-8779-5707b1760552");
pub const DXVA_ModeH264_VLD_Multiview_NoFGT = Guid.initString("705b9d82-76cf-49d6-b7e6-ac8872db013c");
pub const DXVA_ModeWMV8_A = Guid.initString("1b81be80-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeWMV8_B = Guid.initString("1b81be81-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeWMV9_A = Guid.initString("1b81be90-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeWMV9_B = Guid.initString("1b81be91-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeWMV9_C = Guid.initString("1b81be94-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeVC1_A = Guid.initString("1b81bea0-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeVC1_B = Guid.initString("1b81bea1-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeVC1_C = Guid.initString("1b81bea2-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeVC1_D = Guid.initString("1b81bea3-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeVC1_D2010 = Guid.initString("1b81bea4-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_ModeMPEG4pt2_VLD_Simple = Guid.initString("efd64d74-c9e8-41d7-a5e9-e9b0e39fa319");
pub const DXVA_ModeMPEG4pt2_VLD_AdvSimple_NoGMC = Guid.initString("ed418a9f-010d-4eda-9ae3-9a65358d8d2e");
pub const DXVA_ModeMPEG4pt2_VLD_AdvSimple_GMC = Guid.initString("ab998b5b-4258-44a9-9feb-94e597a6baae");
pub const DXVA_ModeHEVC_VLD_Main = Guid.initString("5b11d51b-2f4c-4452-bcc3-09f2a1160cc0");
pub const DXVA_ModeHEVC_VLD_Main10 = Guid.initString("107af0e0-ef1a-4d19-aba8-67a163073d13");
pub const DXVA_ModeVP9_VLD_Profile0 = Guid.initString("463707f8-a1d0-4585-876d-83aa6d60b89e");
pub const DXVA_ModeVP9_VLD_10bit_Profile2 = Guid.initString("a4c749ef-6ecf-48aa-8448-50a7a1165ff7");
pub const DXVA_ModeVP8_VLD = Guid.initString("90b899ea-3a62-4705-88b3-8df04b2744e7");
pub const DXVA_ModeAV1_VLD_Profile0 = Guid.initString("b8be4ccb-cf53-46ba-8d59-d6b8a6da5d2a");
pub const DXVA_ModeAV1_VLD_Profile1 = Guid.initString("6936ff0f-45b1-4163-9cc1-646ef6946108");
pub const DXVA_ModeAV1_VLD_Profile2 = Guid.initString("0c5f2aa1-e541-4089-bb7b-98110a19d7c8");
pub const DXVA_ModeAV1_VLD_12bit_Profile2 = Guid.initString("17127009-a00f-4ce1-994e-bf4081f6f3f0");
pub const DXVA_ModeAV1_VLD_12bit_Profile2_420 = Guid.initString("2d80bed6-9cac-4835-9e91-327bbc4f9ee8");
pub const DXVA_NoEncrypt = Guid.initString("1b81bed0-a0c7-11d3-b984-00c04f2e73c5");
pub const DXVA_RESTRICTED_MODE_UNRESTRICTED = @as(u32, 65535);
pub const DXVA_RESTRICTED_MODE_H261_A = @as(u32, 1);
pub const DXVA_RESTRICTED_MODE_H261_B = @as(u32, 2);
pub const DXVA_RESTRICTED_MODE_H263_A = @as(u32, 3);
pub const DXVA_RESTRICTED_MODE_H263_B = @as(u32, 4);
pub const DXVA_RESTRICTED_MODE_H263_C = @as(u32, 5);
pub const DXVA_RESTRICTED_MODE_H263_D = @as(u32, 6);
pub const DXVA_RESTRICTED_MODE_H263_E = @as(u32, 7);
pub const DXVA_RESTRICTED_MODE_H263_F = @as(u32, 8);
pub const DXVA_RESTRICTED_MODE_MPEG1_A = @as(u32, 9);
pub const DXVA_RESTRICTED_MODE_MPEG2_A = @as(u32, 10);
pub const DXVA_RESTRICTED_MODE_MPEG2_B = @as(u32, 11);
pub const DXVA_RESTRICTED_MODE_MPEG2_C = @as(u32, 12);
pub const DXVA_RESTRICTED_MODE_MPEG2_D = @as(u32, 13);
pub const DXVA_RESTRICTED_MODE_MPEG1_VLD = @as(u32, 16);
pub const DXVA_RESTRICTED_MODE_MPEG2and1_VLD = @as(u32, 17);
pub const DXVA_RESTRICTED_MODE_H264_A = @as(u32, 100);
pub const DXVA_RESTRICTED_MODE_H264_B = @as(u32, 101);
pub const DXVA_RESTRICTED_MODE_H264_C = @as(u32, 102);
pub const DXVA_RESTRICTED_MODE_H264_D = @as(u32, 103);
pub const DXVA_RESTRICTED_MODE_H264_E = @as(u32, 104);
pub const DXVA_RESTRICTED_MODE_H264_F = @as(u32, 105);
pub const DXVA_RESTRICTED_MODE_H264_VLD_WITHFMOASO_NOFGT = @as(u32, 112);
pub const DXVA_RESTRICTED_MODE_H264_VLD_STEREO_PROGRESSIVE_NOFGT = @as(u32, 113);
pub const DXVA_RESTRICTED_MODE_H264_VLD_STEREO_NOFGT = @as(u32, 114);
pub const DXVA_RESTRICTED_MODE_H264_VLD_MULTIVIEW_NOFGT = @as(u32, 115);
pub const DXVA_RESTRICTED_MODE_WMV8_A = @as(u32, 128);
pub const DXVA_RESTRICTED_MODE_WMV8_B = @as(u32, 129);
pub const DXVA_RESTRICTED_MODE_WMV9_A = @as(u32, 144);
pub const DXVA_RESTRICTED_MODE_WMV9_B = @as(u32, 145);
pub const DXVA_RESTRICTED_MODE_WMV9_C = @as(u32, 148);
pub const DXVA_RESTRICTED_MODE_VC1_A = @as(u32, 160);
pub const DXVA_RESTRICTED_MODE_VC1_B = @as(u32, 161);
pub const DXVA_RESTRICTED_MODE_VC1_C = @as(u32, 162);
pub const DXVA_RESTRICTED_MODE_VC1_D = @as(u32, 163);
pub const DXVA_RESTRICTED_MODE_VC1_D2010 = @as(u32, 164);
pub const DXVA_RESTRICTED_MODE_MPEG4PT2_VLD_SIMPLE = @as(u32, 176);
pub const DXVA_RESTRICTED_MODE_MPEG4PT2_VLD_ADV_SIMPLE_NOGMC = @as(u32, 177);
pub const DXVA_RESTRICTED_MODE_MPEG4PT2_VLD_ADV_SIMPLE_GMC = @as(u32, 178);
pub const DXVA_RESTRICTED_MODE_WMV8_POSTPROC = @as(u32, 128);
pub const DXVA_RESTRICTED_MODE_WMV8_MOCOMP = @as(u32, 129);
pub const DXVA_RESTRICTED_MODE_WMV9_POSTPROC = @as(u32, 144);
pub const DXVA_RESTRICTED_MODE_WMV9_MOCOMP = @as(u32, 145);
pub const DXVA_RESTRICTED_MODE_WMV9_IDCT = @as(u32, 148);
pub const DXVA_RESTRICTED_MODE_VC1_POSTPROC = @as(u32, 160);
pub const DXVA_RESTRICTED_MODE_VC1_MOCOMP = @as(u32, 161);
pub const DXVA_RESTRICTED_MODE_VC1_IDCT = @as(u32, 162);
pub const DXVA_RESTRICTED_MODE_VC1_VLD = @as(u32, 163);
pub const DXVA_RESTRICTED_MODE_H264_MOCOMP_NOFGT = @as(u32, 100);
pub const DXVA_RESTRICTED_MODE_H264_MOCOMP_FGT = @as(u32, 101);
pub const DXVA_RESTRICTED_MODE_H264_IDCT_NOFGT = @as(u32, 102);
pub const DXVA_RESTRICTED_MODE_H264_IDCT_FGT = @as(u32, 103);
pub const DXVA_RESTRICTED_MODE_H264_VLD_NOFGT = @as(u32, 104);
pub const DXVA_RESTRICTED_MODE_H264_VLD_FGT = @as(u32, 105);
pub const DXVA_COMPBUFFER_TYPE_THAT_IS_NOT_USED = @as(u32, 0);
pub const DXVA_PICTURE_DECODE_BUFFER = @as(u32, 1);
pub const DXVA_MACROBLOCK_CONTROL_BUFFER = @as(u32, 2);
pub const DXVA_RESIDUAL_DIFFERENCE_BUFFER = @as(u32, 3);
pub const DXVA_DEBLOCKING_CONTROL_BUFFER = @as(u32, 4);
pub const DXVA_INVERSE_QUANTIZATION_MATRIX_BUFFER = @as(u32, 5);
pub const DXVA_SLICE_CONTROL_BUFFER = @as(u32, 6);
pub const DXVA_BITSTREAM_DATA_BUFFER = @as(u32, 7);
pub const DXVA_AYUV_BUFFER = @as(u32, 8);
pub const DXVA_IA44_SURFACE_BUFFER = @as(u32, 9);
pub const DXVA_DPXD_SURFACE_BUFFER = @as(u32, 10);
pub const DXVA_HIGHLIGHT_BUFFER = @as(u32, 11);
pub const DXVA_DCCMD_SURFACE_BUFFER = @as(u32, 12);
pub const DXVA_ALPHA_BLEND_COMBINATION_BUFFER = @as(u32, 13);
pub const DXVA_PICTURE_RESAMPLE_BUFFER = @as(u32, 14);
pub const DXVA_READ_BACK_BUFFER = @as(u32, 15);
pub const DXVA_MOTION_VECTOR_BUFFER = @as(u32, 16);
pub const DXVA_FILM_GRAIN_BUFFER = @as(u32, 17);
pub const DXVA_NUM_TYPES_COMP_BUFFERS = @as(u32, 18);
pub const DXVA_PICTURE_DECODING_FUNCTION = @as(u32, 1);
pub const DXVA_ALPHA_BLEND_DATA_LOAD_FUNCTION = @as(u32, 2);
pub const DXVA_ALPHA_BLEND_COMBINATION_FUNCTION = @as(u32, 3);
pub const DXVA_PICTURE_RESAMPLE_FUNCTION = @as(u32, 4);
pub const DXVA_DEBLOCKING_FILTER_FUNCTION = @as(u32, 5);
pub const DXVA_FILM_GRAIN_SYNTHESIS_FUNCTION = @as(u32, 6);
pub const DXVA_STATUS_REPORTING_FUNCTION = @as(u32, 7);
pub const DXVA_EXECUTE_RETURN_OK = @as(u32, 0);
pub const DXVA_EXECUTE_RETURN_DATA_ERROR_MINOR = @as(u32, 1);
pub const DXVA_EXECUTE_RETURN_DATA_ERROR_SIGNIF = @as(u32, 2);
pub const DXVA_EXECUTE_RETURN_DATA_ERROR_SEVERE = @as(u32, 3);
pub const DXVA_EXECUTE_RETURN_OTHER_ERROR_SEVERE = @as(u32, 4);
pub const DXVA_QUERYORREPLYFUNCFLAG_DECODER_PROBE_QUERY = @as(u32, 16777201);
pub const DXVA_QUERYORREPLYFUNCFLAG_DECODER_LOCK_QUERY = @as(u32, 16777205);
pub const DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_OK_COPY = @as(u32, 16777208);
pub const DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_OK_PLUS = @as(u32, 16777209);
pub const DXVA_QUERYORREPLYFUNCFLAG_ACCEL_LOCK_OK_COPY = @as(u32, 16777212);
pub const DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_FALSE_PLUS = @as(u32, 16777211);
pub const DXVA_QUERYORREPLYFUNCFLAG_ACCEL_LOCK_FALSE_PLUS = @as(u32, 16777215);
pub const DXVA_ENCRYPTPROTOCOLFUNCFLAG_HOST = @as(u32, 16776960);
pub const DXVA_ENCRYPTPROTOCOLFUNCFLAG_ACCEL = @as(u32, 16776968);
pub const DXVA_CHROMA_FORMAT_420 = @as(u32, 1);
pub const DXVA_CHROMA_FORMAT_422 = @as(u32, 2);
pub const DXVA_CHROMA_FORMAT_444 = @as(u32, 3);
pub const DXVA_PICTURE_STRUCTURE_TOP_FIELD = @as(u32, 1);
pub const DXVA_PICTURE_STRUCTURE_BOTTOM_FIELD = @as(u32, 2);
pub const DXVA_PICTURE_STRUCTURE_FRAME = @as(u32, 3);
pub const DXVA_BIDIRECTIONAL_AVERAGING_MPEG2_ROUND = @as(u32, 0);
pub const DXVA_BIDIRECTIONAL_AVERAGING_H263_TRUNC = @as(u32, 1);
pub const DXVA_MV_PRECISION_AND_CHROMA_RELATION_MPEG2 = @as(u32, 0);
pub const DXVA_MV_PRECISION_AND_CHROMA_RELATION_H263 = @as(u32, 1);
pub const DXVA_MV_PRECISION_AND_CHROMA_RELATION_H261 = @as(u32, 2);
pub const DXVA_SCAN_METHOD_ZIG_ZAG = @as(u32, 0);
pub const DXVA_SCAN_METHOD_ALTERNATE_VERTICAL = @as(u32, 1);
pub const DXVA_SCAN_METHOD_ALTERNATE_HORIZONTAL = @as(u32, 2);
pub const DXVA_SCAN_METHOD_ARBITRARY = @as(u32, 3);
pub const DXVA_BITSTREAM_CONCEALMENT_NEED_UNLIKELY = @as(u32, 0);
pub const DXVA_BITSTREAM_CONCEALMENT_NEED_MILD = @as(u32, 1);
pub const DXVA_BITSTREAM_CONCEALMENT_NEED_LIKELY = @as(u32, 2);
pub const DXVA_BITSTREAM_CONCEALMENT_NEED_SEVERE = @as(u32, 3);
pub const DXVA_BITSTREAM_CONCEALMENT_METHOD_UNSPECIFIED = @as(u32, 0);
pub const DXVA_BITSTREAM_CONCEALMENT_METHOD_INTRA = @as(u32, 1);
pub const DXVA_BITSTREAM_CONCEALMENT_METHOD_FORWARD = @as(u32, 2);
pub const DXVA_BITSTREAM_CONCEALMENT_METHOD_BACKWARD = @as(u32, 3);
pub const DXVA_USUAL_BLOCK_WIDTH = @as(u32, 8);
pub const DXVA_USUAL_BLOCK_HEIGHT = @as(u32, 8);
pub const DXVA_NumMV_OBMC_off_BinPBwith4MV_off = @as(u32, 4);
pub const DXVA_NumMV_OBMC_off_BinPBwith4MV_on = @as(u32, 5);
pub const DXVA_NumMV_OBMC_on__BinPB_off = @as(u32, 10);
pub const DXVA_NumMV_OBMC_on__BinPB_on = @as(u32, 11);
pub const DXVA_CONFIG_DATA_TYPE_IA44 = @as(u32, 0);
pub const DXVA_CONFIG_DATA_TYPE_AI44 = @as(u32, 1);
pub const DXVA_CONFIG_DATA_TYPE_DPXD = @as(u32, 2);
pub const DXVA_CONFIG_DATA_TYPE_AYUV = @as(u32, 3);
pub const DXVA_CONFIG_BLEND_TYPE_FRONT_BUFFER = @as(u32, 0);
pub const DXVA_CONFIG_BLEND_TYPE_BACK_HARDWARE = @as(u32, 1);
pub const DXVA_ExtColorData_ShiftBase = @as(u32, 8);
pub const DXVA_DeinterlaceBobDevice = Guid.initString("335aa36e-7884-43a4-9c91-7f87faf3e37e");
pub const DXVA_DeinterlaceContainerDevice = Guid.initString("0e85cb93-3046-4ff0-aecc-d58cb5f035fd");
pub const MAX_DEINTERLACE_SURFACES = @as(u32, 32);
pub const DXVA_DeinterlaceBltFnCode = @as(u32, 1);
pub const DXVA_DeinterlaceBltExFnCode = @as(u32, 2);
pub const MAX_DEINTERLACE_DEVICE_GUIDS = @as(u32, 32);
pub const DXVA_DeinterlaceQueryAvailableModesFnCode = @as(u32, 1);
pub const DXVA_DeinterlaceQueryModeCapsFnCode = @as(u32, 2);
pub const DXVA_ProcAmpControlDevice = Guid.initString("9f200913-2ffd-4056-9f1e-e1b508f22dcf");
pub const DXVA_ProcAmpControlQueryCapsFnCode = @as(u32, 3);
pub const DXVA_ProcAmpControlQueryRangeFnCode = @as(u32, 4);
pub const DXVA_ProcAmpControlBltFnCode = @as(u32, 1);
pub const DXVA_COPPDevice = Guid.initString("d2457add-8999-45ed-8a8a-d1aa047ba4d5");
pub const DXVA_COPPGetCertificateLengthFnCode = @as(u32, 1);
pub const DXVA_COPPKeyExchangeFnCode = @as(u32, 2);
pub const DXVA_COPPSequenceStartFnCode = @as(u32, 3);
pub const DXVA_COPPCommandFnCode = @as(u32, 4);
pub const DXVA_COPPSetProtectionLevel = Guid.initString("9bb9327c-4eb5-4727-9f00-b42b0919c0da");
pub const COPP_NoProtectionLevelAvailable = @as(i32, -1);
pub const COPP_DefaultProtectionLevel = @as(u32, 0);
pub const DXVA_COPPSetSignaling = Guid.initString("09a631a5-d684-4c60-8e4d-d3bb0f0be3ee");
pub const COPP_ImageAspectRatio_EN300294_Mask = @as(u32, 7);
pub const DXVA_COPPQueryStatusFnCode = @as(u32, 5);
pub const DXVA_COPPQueryConnectorType = Guid.initString("81d0bfd5-6afe-48c2-99c0-95a08f97c5da");
pub const DXVA_COPPQueryProtectionType = Guid.initString("38f2a801-9a6c-48bb-9107-b6696e6f1797");
pub const DXVA_COPPQueryLocalProtectionLevel = Guid.initString("b2075857-3eda-4d5d-88db-748f8c1a0549");
pub const DXVA_COPPQueryGlobalProtectionLevel = Guid.initString("1957210a-7766-452a-b99a-d27aed54f03a");
pub const DXVA_COPPQueryDisplayData = Guid.initString("d7bf1ba3-ad13-4f8e-af98-0dcb3ca204cc");
pub const DXVA_COPPQueryHDCPKeyData = Guid.initString("0db59d74-a992-492e-a0bd-c23fda564e00");
pub const DXVA_COPPQueryBusData = Guid.initString("c6f4d673-6174-4184-8e35-f6db5200bcba");
pub const DXVA_COPPQuerySignaling = Guid.initString("6629a591-3b79-4cf3-924a-11e8e7811671");
pub const DXVA2Trace_Control = Guid.initString("a0386e75-f70c-464c-a9ce-33c44e091623");
pub const DXVA2Trace_DecodeDevCreated = Guid.initString("b4de17a1-c5b2-44fe-86d5-d97a648114ff");
pub const DXVA2Trace_DecodeDevDestroyed = Guid.initString("853ebdf2-4160-421d-8893-63dcea4f18bb");
pub const DXVA2Trace_DecodeDevBeginFrame = Guid.initString("9fd1acf6-44cb-4637-bc62-2c11a9608f90");
pub const DXVA2Trace_DecodeDevExecute = Guid.initString("850aeb4c-d19a-4609-b3b4-bcbf0e22121e");
pub const DXVA2Trace_DecodeDevGetBuffer = Guid.initString("57b128fb-72cb-4137-a575-d91fa3160897");
pub const DXVA2Trace_DecodeDevEndFrame = Guid.initString("9fb3cb33-47dc-4899-98c8-c0c6cd7cd3cb");
pub const DXVA2Trace_VideoProcessDevCreated = Guid.initString("895508c6-540d-4c87-98f8-8dcbf2dabb2a");
pub const DXVA2Trace_VideoProcessDevDestroyed = Guid.initString("f97f30b1-fb49-42c7-8ee8-88bdfa92d4e2");
pub const DXVA2Trace_VideoProcessBlt = Guid.initString("69089cc0-71ab-42d0-953a-2887bf05a8af");
pub const DTV_CardStatus_Inserted = @as(u32, 0);
pub const DTV_CardStatus_Removed = @as(u32, 1);
pub const DTV_CardStatus_Error = @as(u32, 2);
pub const DTV_CardStatus_FirmwareDownload = @as(u32, 3);
pub const OCUR_PAIRING_PROTOCOL_VERSION = @as(u32, 2);
pub const PBDA_PAIRING_PROTOCOL_VERSION = @as(u32, 3);
pub const DTV_MMIMessage_Open = @as(u32, 0);
pub const DTV_MMIMessage_Close = @as(u32, 1);
pub const DTV_Entitlement_CanDecrypt = @as(u32, 0);
pub const DTV_Entitlement_NotEntitled = @as(u32, 1);
pub const DTV_Entitlement_TechnicalFailure = @as(u32, 2);
pub const AudioType_Standard = @as(u32, 0);
pub const AudioType_Music_And_Effects = @as(u32, 1);
pub const AudioType_Visually_Impaired = @as(u32, 2);
pub const AudioType_Hearing_Impaired = @as(u32, 3);
pub const AudioType_Dialogue = @as(u32, 4);
pub const AudioType_Commentary = @as(u32, 5);
pub const AudioType_Emergency = @as(u32, 6);
pub const AudioType_Voiceover = @as(u32, 7);
pub const AudioType_Reserved = @as(i32, -1);
pub const MAX_COUNTRY_CODE_STRING = @as(u32, 3);
pub const PARENTAL_CONTROL_TIME_RANGE = @as(u32, 1);
pub const REQUIRED_PARENTAL_CONTROL_TIME_RANGE = @as(u32, 2);
pub const PARENTAL_CONTROL_CONTENT_RATING = @as(u32, 256);
pub const PARENTAL_CONTROL_ATTRIB_VIOLENCE = @as(u32, 512);
pub const PARENTAL_CONTROL_ATTRIB_LANGUAGE = @as(u32, 513);
pub const PARENTAL_CONTROL_ATTRIB_SEXUAL = @as(u32, 514);
pub const PARENTAL_CONTROL_ATTRIB_DIALOGUE = @as(u32, 515);
pub const PARENTAL_CONTROL_ATTRIB_FANTASY = @as(u32, 516);
pub const PARENTAL_CONTROL_VALUE_UNDEFINED = @as(u32, 0);
pub const MPEG2_FILTER_VERSION_1_SIZE = @as(u32, 124);
pub const MPEG2_FILTER_VERSION_2_SIZE = @as(u32, 133);
pub const SID_MSVidCtl_CurrentAudioEndpoint = Guid.initString("cf9a88f4-abcf-4ed8-9b74-7db33445459e");
pub const STREAMBUFFER_EC_BASE = @as(u32, 806);
pub const EVENTID_SBE2RecControlStarted = Guid.initString("8966a89e-f83e-4c0e-bc3b-bfa7649e04cb");
pub const EVENTID_SBE2RecControlStopped = Guid.initString("454b1ec8-0c9b-4caa-b1a1-1e7a2666f6c3");
pub const SBE2_STREAM_DESC_EVENT = Guid.initString("2313a4ed-bf2d-454f-ad8a-d95ba7f91fee");
pub const SBE2_V1_STREAMS_CREATION_EVENT = Guid.initString("000fcf09-97f5-46ac-9769-7a83b35384fb");
pub const SBE2_V2_STREAMS_CREATION_EVENT = Guid.initString("a72530a3-0344-4cab-a2d0-fe937dbdcab3");
pub const SBE2_STREAM_DESC_VERSION = @as(u32, 1);
pub const SID_DRMSecureServiceChannel = Guid.initString("c4c4c4c4-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_ETFilterEncProperties = Guid.initString("c4c4c481-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_ETFilterTagProperties = Guid.initString("c4c4c491-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_PTFilter = Guid.initString("9cd31617-b303-4f96-8330-2eb173ea4dc6");
pub const CLSID_DTFilterEncProperties = Guid.initString("c4c4c482-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_DTFilterTagProperties = Guid.initString("c4c4c492-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_XDSCodecProperties = Guid.initString("c4c4c483-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_XDSCodecTagProperties = Guid.initString("c4c4c493-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_CPCAFiltersCategory = Guid.initString("c4c4c4fc-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_XDSCodecNewXDSRating = Guid.initString("c4c4c4e0-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_XDSCodecDuplicateXDSRating = Guid.initString("c4c4c4df-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_XDSCodecNewXDSPacket = Guid.initString("c4c4c4e1-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_DTFilterRatingChange = Guid.initString("c4c4c4e2-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_DTFilterRatingsBlock = Guid.initString("c4c4c4e3-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_DTFilterRatingsUnblock = Guid.initString("c4c4c4e4-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_DTFilterXDSPacket = Guid.initString("c4c4c4e5-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_ETFilterEncryptionOn = Guid.initString("c4c4c4e6-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_ETFilterEncryptionOff = Guid.initString("c4c4c4e7-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_DTFilterCOPPUnblock = Guid.initString("c4c4c4e8-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_EncDecFilterError = Guid.initString("c4c4c4e9-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_DTFilterCOPPBlock = Guid.initString("c4c4c4ea-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_ETFilterCopyOnce = Guid.initString("c4c4c4eb-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_ETFilterCopyNever = Guid.initString("c4c4c4f0-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_DTFilterDataFormatOK = Guid.initString("c4c4c4ec-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_DTFilterDataFormatFailure = Guid.initString("c4c4c4ed-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_ETDTFilterLicenseOK = Guid.initString("c4c4c4ee-0049-4e2b-98fb-9537f6ce516d");
pub const EVENTID_ETDTFilterLicenseFailure = Guid.initString("c4c4c4ef-0049-4e2b-98fb-9537f6ce516d");
pub const MEDIASUBTYPE_ETDTFilter_Tagged = Guid.initString("c4c4c4d0-0049-4e2b-98fb-9537f6ce516d");
pub const FORMATTYPE_ETDTFilter_Tagged = Guid.initString("c4c4c4d1-0049-4e2b-98fb-9537f6ce516d");
pub const MEDIASUBTYPE_CPFilters_Processed = Guid.initString("46adbd28-6fd0-4796-93b2-155c51dc048d");
pub const FORMATTYPE_CPFilters_Processed = Guid.initString("6739b36f-1d5f-4ac2-8192-28bb0e73d16a");
pub const EVENTID_EncDecFilterEvent = Guid.initString("4a1b465b-0fb9-4159-afbd-e33006a0f9f4");
pub const EVENTID_FormatNotSupportedEvent = Guid.initString("24b2280a-b2aa-4777-bf65-63f35e7b024a");
pub const EVENTID_DemultiplexerFilterDiscontinuity = Guid.initString("16155770-aed5-475c-bb98-95a33070df0c");
pub const DSATTRIB_WMDRMProtectionInfo = Guid.initString("40749583-6b9d-4eec-b43c-67a1801e1a9b");
pub const DSATTRIB_BadSampleInfo = Guid.initString("e4846dda-5838-42b4-b897-6f7e5faa2f2f");
pub const MPEG_PAT_PID = @as(u32, 0);
pub const MPEG_PAT_TID = @as(u32, 0);
pub const MPEG_CAT_PID = @as(u32, 1);
pub const MPEG_CAT_TID = @as(u32, 1);
pub const MPEG_PMT_TID = @as(u32, 2);
pub const MPEG_TSDT_PID = @as(u32, 2);
pub const MPEG_TSDT_TID = @as(u32, 3);
pub const ATSC_MGT_PID = @as(u32, 8187);
pub const ATSC_MGT_TID = @as(u32, 199);
pub const ATSC_VCT_PID = @as(u32, 8187);
pub const ATSC_VCT_TERR_TID = @as(u32, 200);
pub const ATSC_VCT_CABL_TID = @as(u32, 201);
pub const ATSC_EIT_TID = @as(u32, 203);
pub const ATSC_ETT_TID = @as(u32, 204);
pub const ATSC_RRT_TID = @as(u32, 202);
pub const ATSC_RRT_PID = @as(u32, 8187);
pub const ATSC_STT_PID = @as(u32, 8187);
pub const ATSC_STT_TID = @as(u32, 205);
pub const ATSC_PIT_TID = @as(u32, 208);
pub const DVB_NIT_PID = @as(u32, 16);
pub const DVB_NIT_ACTUAL_TID = @as(u32, 64);
pub const DVB_NIT_OTHER_TID = @as(u32, 65);
pub const DVB_SDT_PID = @as(u32, 17);
pub const DVB_SDT_ACTUAL_TID = @as(u32, 66);
pub const DVB_SDT_OTHER_TID = @as(u32, 70);
pub const DVB_BAT_PID = @as(u32, 17);
pub const DVB_BAT_TID = @as(u32, 74);
pub const DVB_EIT_PID = @as(u32, 18);
pub const DVB_EIT_ACTUAL_TID = @as(u32, 78);
pub const DVB_EIT_OTHER_TID = @as(u32, 79);
pub const DVB_RST_PID = @as(u32, 19);
pub const DVB_RST_TID = @as(u32, 113);
pub const DVB_TDT_PID = @as(u32, 20);
pub const DVB_TDT_TID = @as(u32, 112);
pub const DVB_ST_PID_16 = @as(u32, 16);
pub const DVB_ST_PID_17 = @as(u32, 17);
pub const DVB_ST_PID_18 = @as(u32, 18);
pub const DVB_ST_PID_19 = @as(u32, 19);
pub const DVB_ST_PID_20 = @as(u32, 20);
pub const DVB_ST_TID = @as(u32, 114);
pub const ISDB_ST_TID = @as(u32, 114);
pub const DVB_TOT_PID = @as(u32, 20);
pub const DVB_TOT_TID = @as(u32, 115);
pub const DVB_DIT_PID = @as(u32, 30);
pub const DVB_DIT_TID = @as(u32, 126);
pub const DVB_SIT_PID = @as(u32, 31);
pub const DVB_SIT_TID = @as(u32, 127);
pub const ISDB_EMM_TID = @as(u32, 133);
pub const ISDB_BIT_PID = @as(u32, 36);
pub const ISDB_BIT_TID = @as(u32, 196);
pub const ISDB_NBIT_PID = @as(u32, 37);
pub const ISDB_NBIT_MSG_TID = @as(u32, 197);
pub const ISDB_NBIT_REF_TID = @as(u32, 198);
pub const ISDB_LDT_PID = @as(u32, 37);
pub const ISDB_LDT_TID = @as(u32, 199);
pub const ISDB_SDTT_PID = @as(u32, 35);
pub const ISDB_SDTT_ALT_PID = @as(u32, 40);
pub const ISDB_SDTT_TID = @as(u32, 195);
pub const ISDB_CDT_PID = @as(u32, 41);
pub const ISDB_CDT_TID = @as(u32, 200);
pub const SCTE_EAS_TID = @as(u32, 216);
pub const SCTE_EAS_IB_PID = @as(u32, 8187);
pub const SCTE_EAS_OOB_PID = @as(u32, 8188);
pub const CLSID_Mpeg2TableFilter = Guid.initString("752845f1-758f-4c83-a043-4270c593308e");
pub const ATSC_ETM_LOCATION_NOT_PRESENT = @as(u32, 0);
pub const ATSC_ETM_LOCATION_IN_PTC_FOR_PSIP = @as(u32, 1);
pub const ATSC_ETM_LOCATION_IN_PTC_FOR_EVENT = @as(u32, 2);
pub const ATSC_ETM_LOCATION_RESERVED = @as(u32, 3);
pub const SAMPLE_SEQ_SEQUENCE_HEADER = @as(u32, 1);
pub const SAMPLE_SEQ_GOP_HEADER = @as(u32, 2);
pub const SAMPLE_SEQ_PICTURE_HEADER = @as(u32, 3);
pub const SAMPLE_SEQ_SEQUENCE_START = @as(u32, 1);
pub const SAMPLE_SEQ_SEEK_POINT = @as(u32, 2);
pub const SAMPLE_SEQ_FRAME_START = @as(u32, 3);
pub const SAMPLE_SEQ_CONTENT_UNKNOWN = @as(u32, 0);
pub const SAMPLE_SEQ_CONTENT_I_FRAME = @as(u32, 1);
pub const SAMPLE_SEQ_CONTENT_P_FRAME = @as(u32, 2);
pub const SAMPLE_SEQ_CONTENT_B_FRAME = @as(u32, 3);
pub const SAMPLE_SEQ_CONTENT_STANDALONE_FRAME = @as(u32, 1);
pub const SAMPLE_SEQ_CONTENT_REF_FRAME = @as(u32, 2);
pub const SAMPLE_SEQ_CONTENT_NONREF_FRAME = @as(u32, 3);
pub const COMPONENT_TAG_CAPTION_MIN = @as(u32, 48);
pub const COMPONENT_TAG_CAPTION_MAX = @as(u32, 55);
pub const COMPONENT_TAG_SUPERIMPOSE_MIN = @as(u32, 56);
pub const COMPONENT_TAG_SUPERIMPOSE_MAX = @as(u32, 63);
pub const DVBS_SCAN_TABLE_MAX_SIZE = @as(u32, 400);
pub const g_wszExcludeScriptStreamDeliverySynchronization = "ExcludeScriptStreamDeliverySynchronization";
pub const MPEG2_BASE = @as(u32, 512);
pub const MPEG2_S_MORE_DATA_AVAILABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262656));
pub const MPEG2_S_NO_MORE_DATA_AVAILABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262657));
pub const MPEG2_S_SG_INFO_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262658));
pub const MPEG2_S_SG_INFO_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262659));
pub const MPEG2_S_MPE_INFO_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262660));
pub const MPEG2_S_MPE_INFO_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262661));
pub const MPEG2_S_NEW_MODULE_VERSION = @import("../zig.zig").typedConst(HRESULT, @as(i32, 262662));
pub const MPEG2_E_UNINITIALIZED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220992));
pub const MPEG2_E_ALREADY_INITIALIZED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220991));
pub const MPEG2_E_OUT_OF_BOUNDS = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220990));
pub const MPEG2_E_MALFORMED_TABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220989));
pub const MPEG2_E_UNDEFINED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220988));
pub const MPEG2_E_NOT_PRESENT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220987));
pub const MPEG2_E_SECTION_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220986));
pub const MPEG2_E_TX_STREAM_UNAVAILABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220985));
pub const MPEG2_E_SERVICE_ID_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220984));
pub const MPEG2_E_SERVICE_PMT_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220983));
pub const MPEG2_E_DSI_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220982));
pub const MPEG2_E_SERVER_UNAVAILABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220981));
pub const MPEG2_E_INVALID_CAROUSEL_ID = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220980));
pub const MPEG2_E_MALFORMED_DSMCC_MESSAGE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220979));
pub const MPEG2_E_INVALID_SG_OBJECT_KIND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220978));
pub const MPEG2_E_OBJECT_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220977));
pub const MPEG2_E_OBJECT_KIND_NOT_A_DIRECTORY = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220976));
pub const MPEG2_E_OBJECT_KIND_NOT_A_FILE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220975));
pub const MPEG2_E_FILE_OFFSET_TOO_BIG = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220974));
pub const MPEG2_E_STREAM_STOPPED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220973));
pub const MPEG2_E_REGISTRY_ACCESS_FAILED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220972));
pub const MPEG2_E_INVALID_UDP_PORT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220971));
pub const MPEG2_E_DATA_SOURCE_FAILED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220970));
pub const MPEG2_E_DII_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220969));
pub const MPEG2_E_DSHOW_PIN_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220968));
pub const MPEG2_E_BUFFER_TOO_SMALL = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220967));
pub const MPEG2_E_MISSING_SECTIONS = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220966));
pub const MPEG2_E_TOO_MANY_SECTIONS = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220965));
pub const MPEG2_E_NEXT_TABLE_OPS_NOT_AVAILABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220964));
pub const MPEG2_E_INCORRECT_DESCRIPTOR_TAG = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147220963));
pub const MSDRI_S_MMI_PENDING = @import("../zig.zig").typedConst(HRESULT, @as(i32, 2));
pub const MSDRI_S_PENDING = @import("../zig.zig").typedConst(HRESULT, @as(i32, 1));
pub const BDA_E_FAILURE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479679));
pub const BDA_E_NOT_IMPLEMENTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479678));
pub const BDA_E_NO_SUCH_COMMAND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479677));
pub const BDA_E_OUT_OF_BOUNDS = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479676));
pub const BDA_E_INVALID_SCHEMA = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479675));
pub const BDA_E_INVALID_HANDLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479674));
pub const BDA_E_INVALID_TYPE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479673));
pub const BDA_E_READ_ONLY = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479672));
pub const BDA_E_ACCESS_DENIED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479671));
pub const BDA_E_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479670));
pub const BDA_E_BUFFER_TOO_SMALL = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479669));
pub const BDA_E_OUT_OF_RESOURCES = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479668));
pub const BDA_E_OUT_OF_MEMORY = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479667));
pub const BDA_E_DISABLED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479666));
pub const BDA_E_NO_HANDLER = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479665));
pub const BDA_E_INVALID_LANGUAGE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479664));
pub const BDA_E_TIMEOUT_ELAPSED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073479663));
pub const BDA_E_NO_MORE_EVENTS = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073475583));
pub const BDA_E_NO_MORE_DATA = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073475582));
pub const BDA_E_TUNER_INITIALIZING = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073467391));
pub const BDA_E_TUNER_REQUIRED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073467390));
pub const BDA_E_TUNER_CONFLICT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073467389));
pub const BDA_E_INVALID_TUNE_REQUEST = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073467388));
pub const BDA_E_INVALID_ENTITLEMENT_TOKEN = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073463295));
pub const BDA_E_INVALID_CAPTURE_TOKEN = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073463294));
pub const BDA_E_WOULD_DISRUPT_STREAMING = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073463293));
pub const BDA_E_INVALID_PURCHASE_TOKEN = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073463292));
pub const BDA_E_IPNETWORK_ERROR = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073459199));
pub const BDA_E_IPNETWORK_ADDRESS_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073459198));
pub const BDA_E_IPNETWORK_TIMEOUT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073459197));
pub const BDA_E_IPNETWORK_UNAVAILABLE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073459196));
pub const BDA_E_TUNE_FAILED_SDV01 = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073455103));
pub const BDA_E_TUNE_FAILED_SDV02 = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073455102));
pub const BDA_E_TUNE_FAILED_SDV03 = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073455101));
pub const BDA_E_TUNE_FAILED_SDV04 = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073455100));
pub const BDA_E_TUNE_FAILED_SDV05 = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073455099));
pub const BDA_E_TUNE_FAILED_SDV06 = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073455098));
pub const BDA_E_TUNE_FAILED_SDV07 = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073455097));
pub const BDA_E_TUNE_FAILED_SDV08 = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073455096));
pub const BDA_E_TUNE_FAILED_SDVFF = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073454849));
pub const BDA_E_WMDRM_INVALID_SIGNATURE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073418239));
pub const BDA_E_WMDRM_INVALID_CERTIFICATE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073418238));
pub const BDA_E_WMDRM_INVALID_VERSION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073418236));
pub const BDA_E_WMDRM_INVALID_DATE = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073418235));
pub const BDA_E_WMDRM_INVALID_PROXIMITY = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073418234));
pub const BDA_E_WMDRM_KEY_ID_NOT_FOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -1073418232));
pub const SPECIFYPAGES_STATISTICS = Guid.initString("4c437b92-6e9e-11d1-a704-006097c4e476");
pub const g_wszStreamBufferRecordingDuration = "Duration";
pub const g_wszStreamBufferRecordingBitrate = "Bitrate";
pub const g_wszStreamBufferRecordingSeekable = "Seekable";
pub const g_wszStreamBufferRecordingStridable = "Stridable";
pub const g_wszStreamBufferRecordingBroadcast = "Broadcast";
pub const g_wszStreamBufferRecordingProtected = "Is_Protected";
pub const g_wszStreamBufferRecordingTrusted = "Is_Trusted";
pub const g_wszStreamBufferRecordingSignature_Name = "Signature_Name";
pub const g_wszStreamBufferRecordingHasAudio = "HasAudio";
pub const g_wszStreamBufferRecordingHasImage = "HasImage";
pub const g_wszStreamBufferRecordingHasScript = "HasScript";
pub const g_wszStreamBufferRecordingHasVideo = "HasVideo";
pub const g_wszStreamBufferRecordingCurrentBitrate = "CurrentBitrate";
pub const g_wszStreamBufferRecordingOptimalBitrate = "OptimalBitrate";
pub const g_wszStreamBufferRecordingHasAttachedImages = "HasAttachedImages";
pub const g_wszStreamBufferRecordingSkipBackward = "Can_Skip_Backward";
pub const g_wszStreamBufferRecordingSkipForward = "Can_Skip_Forward";
pub const g_wszStreamBufferRecordingNumberOfFrames = "NumberOfFrames";
pub const g_wszStreamBufferRecordingFileSize = "FileSize";
pub const g_wszStreamBufferRecordingHasArbitraryDataStream = "HasArbitraryDataStream";
pub const g_wszStreamBufferRecordingHasFileTransferStream = "HasFileTransferStream";
pub const g_wszStreamBufferRecordingTitle = "Title";
pub const g_wszStreamBufferRecordingAuthor = "Author";
pub const g_wszStreamBufferRecordingDescription = "Description";
pub const g_wszStreamBufferRecordingRating = "Rating";
pub const g_wszStreamBufferRecordingCopyright = "Copyright";
pub const g_wszStreamBufferRecordingUse_DRM = "Use_DRM";
pub const g_wszStreamBufferRecordingDRM_Flags = "DRM_Flags";
pub const g_wszStreamBufferRecordingDRM_Level = "DRM_Level";
pub const g_wszStreamBufferRecordingAlbumTitle = "WM/AlbumTitle";
pub const g_wszStreamBufferRecordingTrack = "WM/Track";
pub const g_wszStreamBufferRecordingPromotionURL = "WM/PromotionURL";
pub const g_wszStreamBufferRecordingAlbumCoverURL = "WM/AlbumCoverURL";
pub const g_wszStreamBufferRecordingGenre = "WM/Genre";
pub const g_wszStreamBufferRecordingYear = "WM/Year";
pub const g_wszStreamBufferRecordingGenreID = "WM/GenreID";
pub const g_wszStreamBufferRecordingMCDI = "WM/MCDI";
pub const g_wszStreamBufferRecordingComposer = "WM/Composer";
pub const g_wszStreamBufferRecordingLyrics = "WM/Lyrics";
pub const g_wszStreamBufferRecordingTrackNumber = "WM/TrackNumber";
pub const g_wszStreamBufferRecordingToolName = "WM/ToolName";
pub const g_wszStreamBufferRecordingToolVersion = "WM/ToolVersion";
pub const g_wszStreamBufferRecordingIsVBR = "IsVBR";
pub const g_wszStreamBufferRecordingAlbumArtist = "WM/AlbumArtist";
pub const g_wszStreamBufferRecordingBannerImageType = "BannerImageType";
pub const g_wszStreamBufferRecordingBannerImageData = "BannerImageData";
pub const g_wszStreamBufferRecordingBannerImageURL = "BannerImageURL";
pub const g_wszStreamBufferRecordingCopyrightURL = "CopyrightURL";
pub const g_wszStreamBufferRecordingAspectRatioX = "AspectRatioX";
pub const g_wszStreamBufferRecordingAspectRatioY = "AspectRatioY";
pub const g_wszStreamBufferRecordingNSCName = "NSC_Name";
pub const g_wszStreamBufferRecordingNSCAddress = "NSC_Address";
pub const g_wszStreamBufferRecordingNSCPhone = "NSC_Phone";
pub const g_wszStreamBufferRecordingNSCEmail = "NSC_Email";
pub const g_wszStreamBufferRecordingNSCDescription = "NSC_Description";
pub const STREAMBUFFER_EC_TIMEHOLE = @as(i32, 806);
pub const STREAMBUFFER_EC_STALE_DATA_READ = @as(i32, 807);
pub const STREAMBUFFER_EC_STALE_FILE_DELETED = @as(i32, 808);
pub const STREAMBUFFER_EC_CONTENT_BECOMING_STALE = @as(i32, 809);
pub const STREAMBUFFER_EC_WRITE_FAILURE = @as(i32, 810);
pub const STREAMBUFFER_EC_WRITE_FAILURE_CLEAR = @as(i32, 811);
pub const STREAMBUFFER_EC_READ_FAILURE = @as(i32, 812);
pub const STREAMBUFFER_EC_RATE_CHANGED = @as(i32, 813);
pub const STREAMBUFFER_EC_PRIMARY_AUDIO = @as(i32, 814);
pub const STREAMBUFFER_EC_RATE_CHANGING_FOR_SETPOSITIONS = @as(i32, 815);
pub const STREAMBUFFER_EC_SETPOSITIONS_EVENTS_DONE = @as(i32, 816);

//--------------------------------------------------------------------------------
// Section: Types (1474)
//--------------------------------------------------------------------------------
pub const OA_BOOL = enum(i32) {
    TRUE = -1,
    FALSE = 0,
};
pub const OATRUE = OA_BOOL.TRUE;
pub const OAFALSE = OA_BOOL.FALSE;

pub const MPEG2VIDEOINFO_FLAGS = enum(u32) {
    DoPanScan = 1,
    DVDLine21Field1 = 2,
    DVDLine21Field2 = 4,
    SourceIsLetterboxed = 8,
    FilmCameraMode = 16,
    LetterboxAnalogOut = 32,
    DSS_UserData = 64,
    DVB_UserData = 128,
    @"27MhzTimebase" = 256,
    WidescreenAnalogOut = 512,
    _,
    pub fn initFlags(o: struct {
        DoPanScan: u1 = 0,
        DVDLine21Field1: u1 = 0,
        DVDLine21Field2: u1 = 0,
        SourceIsLetterboxed: u1 = 0,
        FilmCameraMode: u1 = 0,
        LetterboxAnalogOut: u1 = 0,
        DSS_UserData: u1 = 0,
        DVB_UserData: u1 = 0,
        @"27MhzTimebase": u1 = 0,
        WidescreenAnalogOut: u1 = 0,
    }) MPEG2VIDEOINFO_FLAGS {
        return @as(MPEG2VIDEOINFO_FLAGS, @enumFromInt((if (o.DoPanScan == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.DoPanScan) else 0) | (if (o.DVDLine21Field1 == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.DVDLine21Field1) else 0) | (if (o.DVDLine21Field2 == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.DVDLine21Field2) else 0) | (if (o.SourceIsLetterboxed == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.SourceIsLetterboxed) else 0) | (if (o.FilmCameraMode == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.FilmCameraMode) else 0) | (if (o.LetterboxAnalogOut == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.LetterboxAnalogOut) else 0) | (if (o.DSS_UserData == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.DSS_UserData) else 0) | (if (o.DVB_UserData == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.DVB_UserData) else 0) | (if (o.@"27MhzTimebase" == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.@"27MhzTimebase") else 0) | (if (o.WidescreenAnalogOut == 1) @intFromEnum(MPEG2VIDEOINFO_FLAGS.WidescreenAnalogOut) else 0)));
    }
};
pub const AMMPEG2_DoPanScan = MPEG2VIDEOINFO_FLAGS.DoPanScan;
pub const AMMPEG2_DVDLine21Field1 = MPEG2VIDEOINFO_FLAGS.DVDLine21Field1;
pub const AMMPEG2_DVDLine21Field2 = MPEG2VIDEOINFO_FLAGS.DVDLine21Field2;
pub const AMMPEG2_SourceIsLetterboxed = MPEG2VIDEOINFO_FLAGS.SourceIsLetterboxed;
pub const AMMPEG2_FilmCameraMode = MPEG2VIDEOINFO_FLAGS.FilmCameraMode;
pub const AMMPEG2_LetterboxAnalogOut = MPEG2VIDEOINFO_FLAGS.LetterboxAnalogOut;
pub const AMMPEG2_DSS_UserData = MPEG2VIDEOINFO_FLAGS.DSS_UserData;
pub const AMMPEG2_DVB_UserData = MPEG2VIDEOINFO_FLAGS.DVB_UserData;
pub const AMMPEG2_27MhzTimebase = MPEG2VIDEOINFO_FLAGS.@"27MhzTimebase";
pub const AMMPEG2_WidescreenAnalogOut = MPEG2VIDEOINFO_FLAGS.WidescreenAnalogOut;

pub const MPEGLAYER3WAVEFORMAT_FLAGS = enum(u32) {
    ISO = 0,
    ON = 1,
    OFF = 2,
};
pub const MPEGLAYER3_FLAG_PADDING_ISO = MPEGLAYER3WAVEFORMAT_FLAGS.ISO;
pub const MPEGLAYER3_FLAG_PADDING_ON = MPEGLAYER3WAVEFORMAT_FLAGS.ON;
pub const MPEGLAYER3_FLAG_PADDING_OFF = MPEGLAYER3WAVEFORMAT_FLAGS.OFF;

pub const AMVP_SELECT_FORMAT_BY = enum(i32) {
    DO_NOT_CARE = 0,
    BEST_BANDWIDTH = 1,
    INPUT_SAME_AS_OUTPUT = 2,
};
pub const AMVP_DO_NOT_CARE = AMVP_SELECT_FORMAT_BY.DO_NOT_CARE;
pub const AMVP_BEST_BANDWIDTH = AMVP_SELECT_FORMAT_BY.BEST_BANDWIDTH;
pub const AMVP_INPUT_SAME_AS_OUTPUT = AMVP_SELECT_FORMAT_BY.INPUT_SAME_AS_OUTPUT;

pub const AMVP_MODE = enum(i32) {
    WEAVE = 0,
    BOBINTERLEAVED = 1,
    BOBNONINTERLEAVED = 2,
    SKIPEVEN = 3,
    SKIPODD = 4,
};
pub const AMVP_MODE_WEAVE = AMVP_MODE.WEAVE;
pub const AMVP_MODE_BOBINTERLEAVED = AMVP_MODE.BOBINTERLEAVED;
pub const AMVP_MODE_BOBNONINTERLEAVED = AMVP_MODE.BOBNONINTERLEAVED;
pub const AMVP_MODE_SKIPEVEN = AMVP_MODE.SKIPEVEN;
pub const AMVP_MODE_SKIPODD = AMVP_MODE.SKIPODD;

pub const AMVPSIZE = extern struct {
    dwWidth: u32,
    dwHeight: u32,
};

pub const AMVPDIMINFO = extern struct {
    dwFieldWidth: u32,
    dwFieldHeight: u32,
    dwVBIWidth: u32,
    dwVBIHeight: u32,
    rcValidRegion: RECT,
};

pub const AMVPDATAINFO = extern struct {
    dwSize: u32,
    dwMicrosecondsPerField: u32,
    amvpDimInfo: AMVPDIMINFO,
    dwPictAspectRatioX: u32,
    dwPictAspectRatioY: u32,
    bEnableDoubleClock: BOOL,
    bEnableVACT: BOOL,
    bDataIsInterlaced: BOOL,
    lHalfLinesOdd: i32,
    bFieldPolarityInverted: BOOL,
    dwNumLinesInVREF: u32,
    lHalfLinesEven: i32,
    dwReserved1: u32,
};

// TODO: this type is limited to platform 'windows5.0'
const IID_ICreateDevEnum_Value = Guid.initString("29840822-5b84-11d0-bd3b-00a0c911ce86");
pub const IID_ICreateDevEnum = &IID_ICreateDevEnum_Value;
pub const ICreateDevEnum = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateClassEnumerator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICreateDevEnum,
                clsidDeviceClass: ?*const Guid,
                ppEnumMoniker: ?*?*IEnumMoniker,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICreateDevEnum,
                clsidDeviceClass: ?*const Guid,
                ppEnumMoniker: ?*?*IEnumMoniker,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICreateDevEnum_CreateClassEnumerator(self: *const T, clsidDeviceClass: ?*const Guid, ppEnumMoniker: ?*?*IEnumMoniker, dwFlags: u32) HRESULT {
                return @as(*const ICreateDevEnum.VTable, @ptrCast(self.vtable)).CreateClassEnumerator(@as(*const ICreateDevEnum, @ptrCast(self)), clsidDeviceClass, ppEnumMoniker, dwFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_MEDIA_TYPE = extern struct {
    majortype: Guid,
    subtype: Guid,
    bFixedSizeSamples: BOOL,
    bTemporalCompression: BOOL,
    lSampleSize: u32,
    formattype: Guid,
    pUnk: ?*IUnknown,
    cbFormat: u32,
    pbFormat: ?*u8,
};

pub const PIN_DIRECTION = enum(i32) {
    INPUT = 0,
    OUTPUT = 1,
};
pub const PINDIR_INPUT = PIN_DIRECTION.INPUT;
pub const PINDIR_OUTPUT = PIN_DIRECTION.OUTPUT;

pub const ALLOCATOR_PROPERTIES = extern struct {
    cBuffers: i32,
    cbBuffer: i32,
    cbAlign: i32,
    cbPrefix: i32,
};

pub const PIN_INFO = extern struct {
    pFilter: ?*IBaseFilter,
    dir: PIN_DIRECTION,
    achName: [128]u16,
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IPin_Value = Guid.initString("56a86891-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IPin = &IID_IPin_Value;
pub const IPin = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Connect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                pReceivePin: ?*IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                pReceivePin: ?*IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReceiveConnection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                pConnector: ?*IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                pConnector: ?*IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Disconnect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConnectedTo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                pPin: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                pPin: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConnectionMediaType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                pmt: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                pmt: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryPinInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                pInfo: ?*PIN_INFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                pInfo: ?*PIN_INFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryDirection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                pPinDir: ?*PIN_DIRECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                pPinDir: ?*PIN_DIRECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                Id: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                Id: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryAccept: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumMediaTypes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                ppEnum: ?*?*IEnumMediaTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                ppEnum: ?*?*IEnumMediaTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryInternalConnections: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                apPin: ?[*]?*IPin,
                nPin: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                apPin: ?[*]?*IPin,
                nPin: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EndOfStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        BeginFlush: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EndFlush: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NewSegment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPin,
                tStart: i64,
                tStop: i64,
                dRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPin,
                tStart: i64,
                tStop: i64,
                dRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_Connect(self: *const T, pReceivePin: ?*IPin, pmt: ?*const AM_MEDIA_TYPE) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).Connect(@as(*const IPin, @ptrCast(self)), pReceivePin, pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_ReceiveConnection(self: *const T, pConnector: ?*IPin, pmt: ?*const AM_MEDIA_TYPE) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).ReceiveConnection(@as(*const IPin, @ptrCast(self)), pConnector, pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_Disconnect(self: *const T) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).Disconnect(@as(*const IPin, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_ConnectedTo(self: *const T, pPin: ?*?*IPin) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).ConnectedTo(@as(*const IPin, @ptrCast(self)), pPin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_ConnectionMediaType(self: *const T, pmt: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).ConnectionMediaType(@as(*const IPin, @ptrCast(self)), pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_QueryPinInfo(self: *const T, pInfo: ?*PIN_INFO) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).QueryPinInfo(@as(*const IPin, @ptrCast(self)), pInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_QueryDirection(self: *const T, pPinDir: ?*PIN_DIRECTION) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).QueryDirection(@as(*const IPin, @ptrCast(self)), pPinDir);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_QueryId(self: *const T, Id: ?*?PWSTR) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).QueryId(@as(*const IPin, @ptrCast(self)), Id);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_QueryAccept(self: *const T, pmt: ?*const AM_MEDIA_TYPE) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).QueryAccept(@as(*const IPin, @ptrCast(self)), pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_EnumMediaTypes(self: *const T, ppEnum: ?*?*IEnumMediaTypes) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).EnumMediaTypes(@as(*const IPin, @ptrCast(self)), ppEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_QueryInternalConnections(self: *const T, apPin: ?[*]?*IPin, nPin: ?*u32) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).QueryInternalConnections(@as(*const IPin, @ptrCast(self)), apPin, nPin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_EndOfStream(self: *const T) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).EndOfStream(@as(*const IPin, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_BeginFlush(self: *const T) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).BeginFlush(@as(*const IPin, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_EndFlush(self: *const T) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).EndFlush(@as(*const IPin, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPin_NewSegment(self: *const T, tStart: i64, tStop: i64, dRate: f64) HRESULT {
                return @as(*const IPin.VTable, @ptrCast(self.vtable)).NewSegment(@as(*const IPin, @ptrCast(self)), tStart, tStop, dRate);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IEnumPins_Value = Guid.initString("56a86892-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IEnumPins = &IID_IEnumPins_Value;
pub const IEnumPins = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumPins,
                cPins: u32,
                ppPins: [*]?*IPin,
                pcFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumPins,
                cPins: u32,
                ppPins: [*]?*IPin,
                pcFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumPins,
                cPins: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumPins,
                cPins: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumPins,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumPins,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumPins,
                ppEnum: ?*?*IEnumPins,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumPins,
                ppEnum: ?*?*IEnumPins,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumPins_Next(self: *const T, cPins: u32, ppPins: [*]?*IPin, pcFetched: ?*u32) HRESULT {
                return @as(*const IEnumPins.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumPins, @ptrCast(self)), cPins, ppPins, pcFetched);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumPins_Skip(self: *const T, cPins: u32) HRESULT {
                return @as(*const IEnumPins.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumPins, @ptrCast(self)), cPins);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumPins_Reset(self: *const T) HRESULT {
                return @as(*const IEnumPins.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumPins, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumPins_Clone(self: *const T, ppEnum: ?*?*IEnumPins) HRESULT {
                return @as(*const IEnumPins.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumPins, @ptrCast(self)), ppEnum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IEnumMediaTypes_Value = Guid.initString("89c31040-846b-11ce-97d3-00aa0055595a");
pub const IID_IEnumMediaTypes = &IID_IEnumMediaTypes_Value;
pub const IEnumMediaTypes = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumMediaTypes,
                cMediaTypes: u32,
                ppMediaTypes: [*]?*AM_MEDIA_TYPE,
                pcFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumMediaTypes,
                cMediaTypes: u32,
                ppMediaTypes: [*]?*AM_MEDIA_TYPE,
                pcFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumMediaTypes,
                cMediaTypes: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumMediaTypes,
                cMediaTypes: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumMediaTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumMediaTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumMediaTypes,
                ppEnum: ?*?*IEnumMediaTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumMediaTypes,
                ppEnum: ?*?*IEnumMediaTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumMediaTypes_Next(self: *const T, cMediaTypes: u32, ppMediaTypes: [*]?*AM_MEDIA_TYPE, pcFetched: ?*u32) HRESULT {
                return @as(*const IEnumMediaTypes.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumMediaTypes, @ptrCast(self)), cMediaTypes, ppMediaTypes, pcFetched);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumMediaTypes_Skip(self: *const T, cMediaTypes: u32) HRESULT {
                return @as(*const IEnumMediaTypes.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumMediaTypes, @ptrCast(self)), cMediaTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumMediaTypes_Reset(self: *const T) HRESULT {
                return @as(*const IEnumMediaTypes.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumMediaTypes, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumMediaTypes_Clone(self: *const T, ppEnum: ?*?*IEnumMediaTypes) HRESULT {
                return @as(*const IEnumMediaTypes.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumMediaTypes, @ptrCast(self)), ppEnum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IFilterGraph_Value = Guid.initString("56a8689f-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IFilterGraph = &IID_IFilterGraph_Value;
pub const IFilterGraph = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AddFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph,
                pFilter: ?*IBaseFilter,
                pName: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph,
                pFilter: ?*IBaseFilter,
                pName: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph,
                pFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph,
                pFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumFilters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph,
                ppEnum: ?*?*IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph,
                ppEnum: ?*?*IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindFilterByName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph,
                pName: ?[*:0]const u16,
                ppFilter: ?*?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph,
                pName: ?[*:0]const u16,
                ppFilter: ?*?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConnectDirect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph,
                ppinOut: ?*IPin,
                ppinIn: ?*IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph,
                ppinOut: ?*IPin,
                ppinIn: ?*IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reconnect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph,
                ppin: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph,
                ppin: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Disconnect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph,
                ppin: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph,
                ppin: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDefaultSyncSource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph_AddFilter(self: *const T, pFilter: ?*IBaseFilter, pName: ?[*:0]const u16) HRESULT {
                return @as(*const IFilterGraph.VTable, @ptrCast(self.vtable)).AddFilter(@as(*const IFilterGraph, @ptrCast(self)), pFilter, pName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph_RemoveFilter(self: *const T, pFilter: ?*IBaseFilter) HRESULT {
                return @as(*const IFilterGraph.VTable, @ptrCast(self.vtable)).RemoveFilter(@as(*const IFilterGraph, @ptrCast(self)), pFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph_EnumFilters(self: *const T, ppEnum: ?*?*IEnumFilters) HRESULT {
                return @as(*const IFilterGraph.VTable, @ptrCast(self.vtable)).EnumFilters(@as(*const IFilterGraph, @ptrCast(self)), ppEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph_FindFilterByName(self: *const T, pName: ?[*:0]const u16, ppFilter: ?*?*IBaseFilter) HRESULT {
                return @as(*const IFilterGraph.VTable, @ptrCast(self.vtable)).FindFilterByName(@as(*const IFilterGraph, @ptrCast(self)), pName, ppFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph_ConnectDirect(self: *const T, ppinOut: ?*IPin, ppinIn: ?*IPin, pmt: ?*const AM_MEDIA_TYPE) HRESULT {
                return @as(*const IFilterGraph.VTable, @ptrCast(self.vtable)).ConnectDirect(@as(*const IFilterGraph, @ptrCast(self)), ppinOut, ppinIn, pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph_Reconnect(self: *const T, ppin: ?*IPin) HRESULT {
                return @as(*const IFilterGraph.VTable, @ptrCast(self.vtable)).Reconnect(@as(*const IFilterGraph, @ptrCast(self)), ppin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph_Disconnect(self: *const T, ppin: ?*IPin) HRESULT {
                return @as(*const IFilterGraph.VTable, @ptrCast(self.vtable)).Disconnect(@as(*const IFilterGraph, @ptrCast(self)), ppin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph_SetDefaultSyncSource(self: *const T) HRESULT {
                return @as(*const IFilterGraph.VTable, @ptrCast(self.vtable)).SetDefaultSyncSource(@as(*const IFilterGraph, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IEnumFilters_Value = Guid.initString("56a86893-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IEnumFilters = &IID_IEnumFilters_Value;
pub const IEnumFilters = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumFilters,
                cFilters: u32,
                ppFilter: [*]?*IBaseFilter,
                pcFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumFilters,
                cFilters: u32,
                ppFilter: [*]?*IBaseFilter,
                pcFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumFilters,
                cFilters: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumFilters,
                cFilters: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumFilters,
                ppEnum: ?*?*IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumFilters,
                ppEnum: ?*?*IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumFilters_Next(self: *const T, cFilters: u32, ppFilter: [*]?*IBaseFilter, pcFetched: ?*u32) HRESULT {
                return @as(*const IEnumFilters.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumFilters, @ptrCast(self)), cFilters, ppFilter, pcFetched);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumFilters_Skip(self: *const T, cFilters: u32) HRESULT {
                return @as(*const IEnumFilters.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumFilters, @ptrCast(self)), cFilters);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumFilters_Reset(self: *const T) HRESULT {
                return @as(*const IEnumFilters.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumFilters, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumFilters_Clone(self: *const T, ppEnum: ?*?*IEnumFilters) HRESULT {
                return @as(*const IEnumFilters.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumFilters, @ptrCast(self)), ppEnum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const FILTER_STATE = enum(i32) {
    Stopped = 0,
    Paused = 1,
    Running = 2,
};
pub const State_Stopped = FILTER_STATE.Stopped;
pub const State_Paused = FILTER_STATE.Paused;
pub const State_Running = FILTER_STATE.Running;

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaFilter_Value = Guid.initString("56a86899-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMediaFilter = &IID_IMediaFilter_Value;
pub const IMediaFilter = extern struct {
    pub const VTable = extern struct {
        base: IPersist.VTable,
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Pause: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Run: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaFilter,
                tStart: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaFilter,
                tStart: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaFilter,
                dwMilliSecsTimeout: u32,
                State: ?*FILTER_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaFilter,
                dwMilliSecsTimeout: u32,
                State: ?*FILTER_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSyncSource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaFilter,
                pClock: ?*IReferenceClock,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaFilter,
                pClock: ?*IReferenceClock,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSyncSource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaFilter,
                pClock: ?*?*IReferenceClock,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaFilter,
                pClock: ?*?*IReferenceClock,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IPersist.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaFilter_Stop(self: *const T) HRESULT {
                return @as(*const IMediaFilter.VTable, @ptrCast(self.vtable)).Stop(@as(*const IMediaFilter, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaFilter_Pause(self: *const T) HRESULT {
                return @as(*const IMediaFilter.VTable, @ptrCast(self.vtable)).Pause(@as(*const IMediaFilter, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaFilter_Run(self: *const T, tStart: i64) HRESULT {
                return @as(*const IMediaFilter.VTable, @ptrCast(self.vtable)).Run(@as(*const IMediaFilter, @ptrCast(self)), tStart);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaFilter_GetState(self: *const T, dwMilliSecsTimeout: u32, State: ?*FILTER_STATE) HRESULT {
                return @as(*const IMediaFilter.VTable, @ptrCast(self.vtable)).GetState(@as(*const IMediaFilter, @ptrCast(self)), dwMilliSecsTimeout, State);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaFilter_SetSyncSource(self: *const T, pClock: ?*IReferenceClock) HRESULT {
                return @as(*const IMediaFilter.VTable, @ptrCast(self.vtable)).SetSyncSource(@as(*const IMediaFilter, @ptrCast(self)), pClock);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaFilter_GetSyncSource(self: *const T, pClock: ?*?*IReferenceClock) HRESULT {
                return @as(*const IMediaFilter.VTable, @ptrCast(self.vtable)).GetSyncSource(@as(*const IMediaFilter, @ptrCast(self)), pClock);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const FILTER_INFO = extern struct {
    achName: [128]u16,
    pGraph: ?*IFilterGraph,
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IBaseFilter_Value = Guid.initString("56a86895-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IBaseFilter = &IID_IBaseFilter_Value;
pub const IBaseFilter = extern struct {
    pub const VTable = extern struct {
        base: IMediaFilter.VTable,
        EnumPins: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseFilter,
                ppEnum: ?*?*IEnumPins,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseFilter,
                ppEnum: ?*?*IEnumPins,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseFilter,
                Id: ?[*:0]const u16,
                ppPin: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseFilter,
                Id: ?[*:0]const u16,
                ppPin: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryFilterInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseFilter,
                pInfo: ?*FILTER_INFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseFilter,
                pInfo: ?*FILTER_INFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        JoinFilterGraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseFilter,
                pGraph: ?*IFilterGraph,
                pName: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseFilter,
                pGraph: ?*IFilterGraph,
                pName: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryVendorInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseFilter,
                pVendorInfo: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseFilter,
                pVendorInfo: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMediaFilter.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseFilter_EnumPins(self: *const T, ppEnum: ?*?*IEnumPins) HRESULT {
                return @as(*const IBaseFilter.VTable, @ptrCast(self.vtable)).EnumPins(@as(*const IBaseFilter, @ptrCast(self)), ppEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseFilter_FindPin(self: *const T, Id: ?[*:0]const u16, ppPin: ?*?*IPin) HRESULT {
                return @as(*const IBaseFilter.VTable, @ptrCast(self.vtable)).FindPin(@as(*const IBaseFilter, @ptrCast(self)), Id, ppPin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseFilter_QueryFilterInfo(self: *const T, pInfo: ?*FILTER_INFO) HRESULT {
                return @as(*const IBaseFilter.VTable, @ptrCast(self.vtable)).QueryFilterInfo(@as(*const IBaseFilter, @ptrCast(self)), pInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseFilter_JoinFilterGraph(self: *const T, pGraph: ?*IFilterGraph, pName: ?[*:0]const u16) HRESULT {
                return @as(*const IBaseFilter.VTable, @ptrCast(self.vtable)).JoinFilterGraph(@as(*const IBaseFilter, @ptrCast(self)), pGraph, pName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseFilter_QueryVendorInfo(self: *const T, pVendorInfo: ?*?PWSTR) HRESULT {
                return @as(*const IBaseFilter.VTable, @ptrCast(self.vtable)).QueryVendorInfo(@as(*const IBaseFilter, @ptrCast(self)), pVendorInfo);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaSample_Value = Guid.initString("56a8689a-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMediaSample = &IID_IMediaSample_Value;
pub const IMediaSample = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetPointer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                ppBuffer: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                ppBuffer: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) i32,
            else => *const fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) i32,
        },
        GetTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsSyncPoint: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSyncPoint: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                bIsSyncPoint: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                bIsSyncPoint: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsPreroll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetPreroll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                bIsPreroll: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                bIsPreroll: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetActualDataLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) i32,
            else => *const fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) i32,
        },
        SetActualDataLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                __MIDL__IMediaSample0000: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                __MIDL__IMediaSample0000: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMediaType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                ppMediaType: ?*?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                ppMediaType: ?*?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMediaType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsDiscontinuity: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDiscontinuity: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                bDiscontinuity: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                bDiscontinuity: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMediaTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMediaTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_GetPointer(self: *const T, ppBuffer: ?*?*u8) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).GetPointer(@as(*const IMediaSample, @ptrCast(self)), ppBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_GetSize(self: *const T) i32 {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).GetSize(@as(*const IMediaSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_GetTime(self: *const T, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).GetTime(@as(*const IMediaSample, @ptrCast(self)), pTimeStart, pTimeEnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_SetTime(self: *const T, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).SetTime(@as(*const IMediaSample, @ptrCast(self)), pTimeStart, pTimeEnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_IsSyncPoint(self: *const T) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).IsSyncPoint(@as(*const IMediaSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_SetSyncPoint(self: *const T, bIsSyncPoint: BOOL) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).SetSyncPoint(@as(*const IMediaSample, @ptrCast(self)), bIsSyncPoint);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_IsPreroll(self: *const T) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).IsPreroll(@as(*const IMediaSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_SetPreroll(self: *const T, bIsPreroll: BOOL) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).SetPreroll(@as(*const IMediaSample, @ptrCast(self)), bIsPreroll);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_GetActualDataLength(self: *const T) i32 {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).GetActualDataLength(@as(*const IMediaSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_SetActualDataLength(self: *const T, __MIDL__IMediaSample0000: i32) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).SetActualDataLength(@as(*const IMediaSample, @ptrCast(self)), __MIDL__IMediaSample0000);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_GetMediaType(self: *const T, ppMediaType: ?*?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).GetMediaType(@as(*const IMediaSample, @ptrCast(self)), ppMediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_SetMediaType(self: *const T, pMediaType: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).SetMediaType(@as(*const IMediaSample, @ptrCast(self)), pMediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_IsDiscontinuity(self: *const T) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).IsDiscontinuity(@as(*const IMediaSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_SetDiscontinuity(self: *const T, bDiscontinuity: BOOL) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).SetDiscontinuity(@as(*const IMediaSample, @ptrCast(self)), bDiscontinuity);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_GetMediaTime(self: *const T, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).GetMediaTime(@as(*const IMediaSample, @ptrCast(self)), pTimeStart, pTimeEnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample_SetMediaTime(self: *const T, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IMediaSample.VTable, @ptrCast(self.vtable)).SetMediaTime(@as(*const IMediaSample, @ptrCast(self)), pTimeStart, pTimeEnd);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_SAMPLE_PROPERTY_FLAGS = enum(i32) {
    AMPLE_SPLICEPOINT = 1,
    AMPLE_PREROLL = 2,
    AMPLE_DATADISCONTINUITY = 4,
    AMPLE_TYPECHANGED = 8,
    AMPLE_TIMEVALID = 16,
    AMPLE_TIMEDISCONTINUITY = 64,
    AMPLE_FLUSH_ON_PAUSE = 128,
    AMPLE_STOPVALID = 256,
    AMPLE_ENDOFSTREAM = 512,
    TREAM_MEDIA = 0,
    // TREAM_CONTROL = 1, this enum value conflicts with AMPLE_SPLICEPOINT
};
pub const AM_SAMPLE_SPLICEPOINT = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_SPLICEPOINT;
pub const AM_SAMPLE_PREROLL = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_PREROLL;
pub const AM_SAMPLE_DATADISCONTINUITY = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_DATADISCONTINUITY;
pub const AM_SAMPLE_TYPECHANGED = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_TYPECHANGED;
pub const AM_SAMPLE_TIMEVALID = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_TIMEVALID;
pub const AM_SAMPLE_TIMEDISCONTINUITY = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_TIMEDISCONTINUITY;
pub const AM_SAMPLE_FLUSH_ON_PAUSE = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_FLUSH_ON_PAUSE;
pub const AM_SAMPLE_STOPVALID = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_STOPVALID;
pub const AM_SAMPLE_ENDOFSTREAM = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_ENDOFSTREAM;
pub const AM_STREAM_MEDIA = AM_SAMPLE_PROPERTY_FLAGS.TREAM_MEDIA;
pub const AM_STREAM_CONTROL = AM_SAMPLE_PROPERTY_FLAGS.AMPLE_SPLICEPOINT;

pub const AM_SAMPLE2_PROPERTIES = extern struct {
    cbData: u32,
    dwTypeSpecificFlags: u32,
    dwSampleFlags: u32,
    lActual: i32,
    tStart: i64,
    tStop: i64,
    dwStreamId: u32,
    pMediaType: ?*AM_MEDIA_TYPE,
    pbBuffer: ?*u8,
    cbBuffer: i32,
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaSample2_Value = Guid.initString("36b73884-c2c8-11cf-8b46-00805f6cef60");
pub const IID_IMediaSample2 = &IID_IMediaSample2_Value;
pub const IMediaSample2 = extern struct {
    pub const VTable = extern struct {
        base: IMediaSample.VTable,
        GetProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample2,
                cbProperties: u32,
                // TODO: what to do with BytesParamIndex 0?
                pbProperties: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample2,
                cbProperties: u32,
                // TODO: what to do with BytesParamIndex 0?
                pbProperties: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample2,
                cbProperties: u32,
                // TODO: what to do with BytesParamIndex 0?
                pbProperties: ?*const u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample2,
                cbProperties: u32,
                // TODO: what to do with BytesParamIndex 0?
                pbProperties: ?*const u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMediaSample.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample2_GetProperties(self: *const T, cbProperties: u32, pbProperties: ?*u8) HRESULT {
                return @as(*const IMediaSample2.VTable, @ptrCast(self.vtable)).GetProperties(@as(*const IMediaSample2, @ptrCast(self)), cbProperties, pbProperties);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample2_SetProperties(self: *const T, cbProperties: u32, pbProperties: ?*const u8) HRESULT {
                return @as(*const IMediaSample2.VTable, @ptrCast(self.vtable)).SetProperties(@as(*const IMediaSample2, @ptrCast(self)), cbProperties, pbProperties);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IMediaSample2Config_Value = Guid.initString("68961e68-832b-41ea-bc91-63593f3e70e3");
pub const IID_IMediaSample2Config = &IID_IMediaSample2Config_Value;
pub const IMediaSample2Config = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSample2Config,
                ppDirect3DSurface9: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSample2Config,
                ppDirect3DSurface9: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSample2Config_GetSurface(self: *const T, ppDirect3DSurface9: ?*?*IUnknown) HRESULT {
                return @as(*const IMediaSample2Config.VTable, @ptrCast(self.vtable)).GetSurface(@as(*const IMediaSample2Config, @ptrCast(self)), ppDirect3DSurface9);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMemAllocator_Value = Guid.initString("56a8689c-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMemAllocator = &IID_IMemAllocator_Value;
pub const IMemAllocator = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemAllocator,
                pRequest: ?*ALLOCATOR_PROPERTIES,
                pActual: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemAllocator,
                pRequest: ?*ALLOCATOR_PROPERTIES,
                pActual: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemAllocator,
                pProps: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemAllocator,
                pProps: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Commit: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Decommit: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBuffer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemAllocator,
                ppBuffer: ?*?*IMediaSample,
                pStartTime: ?*i64,
                pEndTime: ?*i64,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemAllocator,
                ppBuffer: ?*?*IMediaSample,
                pStartTime: ?*i64,
                pEndTime: ?*i64,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleaseBuffer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemAllocator,
                pBuffer: ?*IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemAllocator,
                pBuffer: ?*IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemAllocator_SetProperties(self: *const T, pRequest: ?*ALLOCATOR_PROPERTIES, pActual: ?*ALLOCATOR_PROPERTIES) HRESULT {
                return @as(*const IMemAllocator.VTable, @ptrCast(self.vtable)).SetProperties(@as(*const IMemAllocator, @ptrCast(self)), pRequest, pActual);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemAllocator_GetProperties(self: *const T, pProps: ?*ALLOCATOR_PROPERTIES) HRESULT {
                return @as(*const IMemAllocator.VTable, @ptrCast(self.vtable)).GetProperties(@as(*const IMemAllocator, @ptrCast(self)), pProps);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemAllocator_Commit(self: *const T) HRESULT {
                return @as(*const IMemAllocator.VTable, @ptrCast(self.vtable)).Commit(@as(*const IMemAllocator, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemAllocator_Decommit(self: *const T) HRESULT {
                return @as(*const IMemAllocator.VTable, @ptrCast(self.vtable)).Decommit(@as(*const IMemAllocator, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemAllocator_GetBuffer(self: *const T, ppBuffer: ?*?*IMediaSample, pStartTime: ?*i64, pEndTime: ?*i64, dwFlags: u32) HRESULT {
                return @as(*const IMemAllocator.VTable, @ptrCast(self.vtable)).GetBuffer(@as(*const IMemAllocator, @ptrCast(self)), ppBuffer, pStartTime, pEndTime, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemAllocator_ReleaseBuffer(self: *const T, pBuffer: ?*IMediaSample) HRESULT {
                return @as(*const IMemAllocator.VTable, @ptrCast(self.vtable)).ReleaseBuffer(@as(*const IMemAllocator, @ptrCast(self)), pBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMemAllocatorCallbackTemp_Value = Guid.initString("379a0cf0-c1de-11d2-abf5-00a0c905f375");
pub const IID_IMemAllocatorCallbackTemp = &IID_IMemAllocatorCallbackTemp_Value;
pub const IMemAllocatorCallbackTemp = extern struct {
    pub const VTable = extern struct {
        base: IMemAllocator.VTable,
        SetNotify: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemAllocatorCallbackTemp,
                pNotify: ?*IMemAllocatorNotifyCallbackTemp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemAllocatorCallbackTemp,
                pNotify: ?*IMemAllocatorNotifyCallbackTemp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFreeCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemAllocatorCallbackTemp,
                plBuffersFree: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemAllocatorCallbackTemp,
                plBuffersFree: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMemAllocator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemAllocatorCallbackTemp_SetNotify(self: *const T, pNotify: ?*IMemAllocatorNotifyCallbackTemp) HRESULT {
                return @as(*const IMemAllocatorCallbackTemp.VTable, @ptrCast(self.vtable)).SetNotify(@as(*const IMemAllocatorCallbackTemp, @ptrCast(self)), pNotify);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemAllocatorCallbackTemp_GetFreeCount(self: *const T, plBuffersFree: ?*i32) HRESULT {
                return @as(*const IMemAllocatorCallbackTemp.VTable, @ptrCast(self.vtable)).GetFreeCount(@as(*const IMemAllocatorCallbackTemp, @ptrCast(self)), plBuffersFree);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMemAllocatorNotifyCallbackTemp_Value = Guid.initString("92980b30-c1de-11d2-abf5-00a0c905f375");
pub const IID_IMemAllocatorNotifyCallbackTemp = &IID_IMemAllocatorNotifyCallbackTemp_Value;
pub const IMemAllocatorNotifyCallbackTemp = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        NotifyRelease: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemAllocatorNotifyCallbackTemp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemAllocatorNotifyCallbackTemp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemAllocatorNotifyCallbackTemp_NotifyRelease(self: *const T) HRESULT {
                return @as(*const IMemAllocatorNotifyCallbackTemp.VTable, @ptrCast(self.vtable)).NotifyRelease(@as(*const IMemAllocatorNotifyCallbackTemp, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMemInputPin_Value = Guid.initString("56a8689d-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMemInputPin = &IID_IMemInputPin_Value;
pub const IMemInputPin = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetAllocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemInputPin,
                ppAllocator: ?*?*IMemAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemInputPin,
                ppAllocator: ?*?*IMemAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NotifyAllocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemInputPin,
                pAllocator: ?*IMemAllocator,
                bReadOnly: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemInputPin,
                pAllocator: ?*IMemAllocator,
                bReadOnly: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAllocatorRequirements: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemInputPin,
                pProps: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemInputPin,
                pProps: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Receive: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemInputPin,
                pSample: ?*IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemInputPin,
                pSample: ?*IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReceiveMultiple: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemInputPin,
                pSamples: [*]?*IMediaSample,
                nSamples: i32,
                nSamplesProcessed: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemInputPin,
                pSamples: [*]?*IMediaSample,
                nSamples: i32,
                nSamplesProcessed: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReceiveCanBlock: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemInputPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemInputPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemInputPin_GetAllocator(self: *const T, ppAllocator: ?*?*IMemAllocator) HRESULT {
                return @as(*const IMemInputPin.VTable, @ptrCast(self.vtable)).GetAllocator(@as(*const IMemInputPin, @ptrCast(self)), ppAllocator);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemInputPin_NotifyAllocator(self: *const T, pAllocator: ?*IMemAllocator, bReadOnly: BOOL) HRESULT {
                return @as(*const IMemInputPin.VTable, @ptrCast(self.vtable)).NotifyAllocator(@as(*const IMemInputPin, @ptrCast(self)), pAllocator, bReadOnly);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemInputPin_GetAllocatorRequirements(self: *const T, pProps: ?*ALLOCATOR_PROPERTIES) HRESULT {
                return @as(*const IMemInputPin.VTable, @ptrCast(self.vtable)).GetAllocatorRequirements(@as(*const IMemInputPin, @ptrCast(self)), pProps);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemInputPin_Receive(self: *const T, pSample: ?*IMediaSample) HRESULT {
                return @as(*const IMemInputPin.VTable, @ptrCast(self.vtable)).Receive(@as(*const IMemInputPin, @ptrCast(self)), pSample);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemInputPin_ReceiveMultiple(self: *const T, pSamples: [*]?*IMediaSample, nSamples: i32, nSamplesProcessed: ?*i32) HRESULT {
                return @as(*const IMemInputPin.VTable, @ptrCast(self.vtable)).ReceiveMultiple(@as(*const IMemInputPin, @ptrCast(self)), pSamples, nSamples, nSamplesProcessed);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemInputPin_ReceiveCanBlock(self: *const T) HRESULT {
                return @as(*const IMemInputPin.VTable, @ptrCast(self.vtable)).ReceiveCanBlock(@as(*const IMemInputPin, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMovieSetup_Value = Guid.initString("a3d8cec0-7e5a-11cf-bbc5-00805f6cef20");
pub const IID_IAMovieSetup = &IID_IAMovieSetup_Value;
pub const IAMovieSetup = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Register: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMovieSetup,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMovieSetup,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unregister: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMovieSetup,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMovieSetup,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMovieSetup_Register(self: *const T) HRESULT {
                return @as(*const IAMovieSetup.VTable, @ptrCast(self.vtable)).Register(@as(*const IAMovieSetup, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMovieSetup_Unregister(self: *const T) HRESULT {
                return @as(*const IAMovieSetup.VTable, @ptrCast(self.vtable)).Unregister(@as(*const IAMovieSetup, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_SEEKING_SeekingFlags = enum(i32) {
    NoPositioning = 0,
    AbsolutePositioning = 1,
    RelativePositioning = 2,
    IncrementalPositioning = 3,
    // PositioningBitsMask = 3, this enum value conflicts with IncrementalPositioning
    SeekToKeyFrame = 4,
    ReturnTime = 8,
    Segment = 16,
    NoFlush = 32,
};
pub const AM_SEEKING_NoPositioning = AM_SEEKING_SeekingFlags.NoPositioning;
pub const AM_SEEKING_AbsolutePositioning = AM_SEEKING_SeekingFlags.AbsolutePositioning;
pub const AM_SEEKING_RelativePositioning = AM_SEEKING_SeekingFlags.RelativePositioning;
pub const AM_SEEKING_IncrementalPositioning = AM_SEEKING_SeekingFlags.IncrementalPositioning;
pub const AM_SEEKING_PositioningBitsMask = AM_SEEKING_SeekingFlags.IncrementalPositioning;
pub const AM_SEEKING_SeekToKeyFrame = AM_SEEKING_SeekingFlags.SeekToKeyFrame;
pub const AM_SEEKING_ReturnTime = AM_SEEKING_SeekingFlags.ReturnTime;
pub const AM_SEEKING_Segment = AM_SEEKING_SeekingFlags.Segment;
pub const AM_SEEKING_NoFlush = AM_SEEKING_SeekingFlags.NoFlush;

pub const AM_SEEKING_SEEKING_CAPABILITIES = enum(i32) {
    CanSeekAbsolute = 1,
    CanSeekForwards = 2,
    CanSeekBackwards = 4,
    CanGetCurrentPos = 8,
    CanGetStopPos = 16,
    CanGetDuration = 32,
    CanPlayBackwards = 64,
    CanDoSegments = 128,
    Source = 256,
};
pub const AM_SEEKING_CanSeekAbsolute = AM_SEEKING_SEEKING_CAPABILITIES.CanSeekAbsolute;
pub const AM_SEEKING_CanSeekForwards = AM_SEEKING_SEEKING_CAPABILITIES.CanSeekForwards;
pub const AM_SEEKING_CanSeekBackwards = AM_SEEKING_SEEKING_CAPABILITIES.CanSeekBackwards;
pub const AM_SEEKING_CanGetCurrentPos = AM_SEEKING_SEEKING_CAPABILITIES.CanGetCurrentPos;
pub const AM_SEEKING_CanGetStopPos = AM_SEEKING_SEEKING_CAPABILITIES.CanGetStopPos;
pub const AM_SEEKING_CanGetDuration = AM_SEEKING_SEEKING_CAPABILITIES.CanGetDuration;
pub const AM_SEEKING_CanPlayBackwards = AM_SEEKING_SEEKING_CAPABILITIES.CanPlayBackwards;
pub const AM_SEEKING_CanDoSegments = AM_SEEKING_SEEKING_CAPABILITIES.CanDoSegments;
pub const AM_SEEKING_Source = AM_SEEKING_SEEKING_CAPABILITIES.Source;

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaSeeking_Value = Guid.initString("36b73880-c2c8-11cf-8b46-00805f6cef60");
pub const IID_IMediaSeeking = &IID_IMediaSeeking_Value;
pub const IMediaSeeking = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCapabilities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pCapabilities: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pCapabilities: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CheckCapabilities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pCapabilities: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pCapabilities: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsFormatSupported: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pFormat: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pFormat: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryPreferredFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pFormat: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pFormat: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTimeFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pFormat: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pFormat: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsUsingTimeFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pFormat: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pFormat: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTimeFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pFormat: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pFormat: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pDuration: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pDuration: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStopPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pStop: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pStop: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pCurrent: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pCurrent: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertTimeFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pTarget: ?*i64,
                pTargetFormat: ?*const Guid,
                Source: i64,
                pSourceFormat: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pTarget: ?*i64,
                pTargetFormat: ?*const Guid,
                Source: i64,
                pSourceFormat: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetPositions: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pCurrent: ?*i64,
                dwCurrentFlags: u32,
                pStop: ?*i64,
                dwStopFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pCurrent: ?*i64,
                dwCurrentFlags: u32,
                pStop: ?*i64,
                dwStopFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPositions: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pCurrent: ?*i64,
                pStop: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pCurrent: ?*i64,
                pStop: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAvailable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pEarliest: ?*i64,
                pLatest: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pEarliest: ?*i64,
                pLatest: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                dRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                dRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pdRate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pdRate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPreroll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaSeeking,
                pllPreroll: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaSeeking,
                pllPreroll: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_GetCapabilities(self: *const T, pCapabilities: ?*u32) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).GetCapabilities(@as(*const IMediaSeeking, @ptrCast(self)), pCapabilities);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_CheckCapabilities(self: *const T, pCapabilities: ?*u32) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).CheckCapabilities(@as(*const IMediaSeeking, @ptrCast(self)), pCapabilities);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_IsFormatSupported(self: *const T, pFormat: ?*const Guid) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).IsFormatSupported(@as(*const IMediaSeeking, @ptrCast(self)), pFormat);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_QueryPreferredFormat(self: *const T, pFormat: ?*Guid) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).QueryPreferredFormat(@as(*const IMediaSeeking, @ptrCast(self)), pFormat);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_GetTimeFormat(self: *const T, pFormat: ?*Guid) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).GetTimeFormat(@as(*const IMediaSeeking, @ptrCast(self)), pFormat);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_IsUsingTimeFormat(self: *const T, pFormat: ?*const Guid) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).IsUsingTimeFormat(@as(*const IMediaSeeking, @ptrCast(self)), pFormat);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_SetTimeFormat(self: *const T, pFormat: ?*const Guid) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).SetTimeFormat(@as(*const IMediaSeeking, @ptrCast(self)), pFormat);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_GetDuration(self: *const T, pDuration: ?*i64) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).GetDuration(@as(*const IMediaSeeking, @ptrCast(self)), pDuration);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_GetStopPosition(self: *const T, pStop: ?*i64) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).GetStopPosition(@as(*const IMediaSeeking, @ptrCast(self)), pStop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_GetCurrentPosition(self: *const T, pCurrent: ?*i64) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).GetCurrentPosition(@as(*const IMediaSeeking, @ptrCast(self)), pCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_ConvertTimeFormat(self: *const T, pTarget: ?*i64, pTargetFormat: ?*const Guid, Source: i64, pSourceFormat: ?*const Guid) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).ConvertTimeFormat(@as(*const IMediaSeeking, @ptrCast(self)), pTarget, pTargetFormat, Source, pSourceFormat);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_SetPositions(self: *const T, pCurrent: ?*i64, dwCurrentFlags: u32, pStop: ?*i64, dwStopFlags: u32) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).SetPositions(@as(*const IMediaSeeking, @ptrCast(self)), pCurrent, dwCurrentFlags, pStop, dwStopFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_GetPositions(self: *const T, pCurrent: ?*i64, pStop: ?*i64) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).GetPositions(@as(*const IMediaSeeking, @ptrCast(self)), pCurrent, pStop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_GetAvailable(self: *const T, pEarliest: ?*i64, pLatest: ?*i64) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).GetAvailable(@as(*const IMediaSeeking, @ptrCast(self)), pEarliest, pLatest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_SetRate(self: *const T, dRate: f64) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).SetRate(@as(*const IMediaSeeking, @ptrCast(self)), dRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_GetRate(self: *const T, pdRate: ?*f64) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).GetRate(@as(*const IMediaSeeking, @ptrCast(self)), pdRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaSeeking_GetPreroll(self: *const T, pllPreroll: ?*i64) HRESULT {
                return @as(*const IMediaSeeking.VTable, @ptrCast(self.vtable)).GetPreroll(@as(*const IMediaSeeking, @ptrCast(self)), pllPreroll);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_MEDIAEVENT_FLAGS = enum(i32) {
    Y = 1,
};
pub const AM_MEDIAEVENT_NONOTIFY = AM_MEDIAEVENT_FLAGS.Y;

pub const REGFILTER = extern struct {
    Clsid: Guid,
    Name: ?PWSTR,
};

const IID_IEnumRegFilters_Value = Guid.initString("56a868a4-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IEnumRegFilters = &IID_IEnumRegFilters_Value;
pub const IEnumRegFilters = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumRegFilters,
                cFilters: u32,
                apRegFilter: [*]?*REGFILTER,
                pcFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumRegFilters,
                cFilters: u32,
                apRegFilter: [*]?*REGFILTER,
                pcFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumRegFilters,
                cFilters: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumRegFilters,
                cFilters: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumRegFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumRegFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumRegFilters,
                ppEnum: ?*?*IEnumRegFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumRegFilters,
                ppEnum: ?*?*IEnumRegFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumRegFilters_Next(self: *const T, cFilters: u32, apRegFilter: [*]?*REGFILTER, pcFetched: ?*u32) HRESULT {
                return @as(*const IEnumRegFilters.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumRegFilters, @ptrCast(self)), cFilters, apRegFilter, pcFetched);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumRegFilters_Skip(self: *const T, cFilters: u32) HRESULT {
                return @as(*const IEnumRegFilters.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumRegFilters, @ptrCast(self)), cFilters);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumRegFilters_Reset(self: *const T) HRESULT {
                return @as(*const IEnumRegFilters.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumRegFilters, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumRegFilters_Clone(self: *const T, ppEnum: ?*?*IEnumRegFilters) HRESULT {
                return @as(*const IEnumRegFilters.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumRegFilters, @ptrCast(self)), ppEnum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const IFILTERMAPPER_MERIT = enum(i32) {
    PREFERRED = 8388608,
    NORMAL = 6291456,
    UNLIKELY = 4194304,
    DO_NOT_USE = 2097152,
    SW_COMPRESSOR = 1048576,
    HW_COMPRESSOR = 1048656,
};
pub const MERIT_PREFERRED = IFILTERMAPPER_MERIT.PREFERRED;
pub const MERIT_NORMAL = IFILTERMAPPER_MERIT.NORMAL;
pub const MERIT_UNLIKELY = IFILTERMAPPER_MERIT.UNLIKELY;
pub const MERIT_DO_NOT_USE = IFILTERMAPPER_MERIT.DO_NOT_USE;
pub const MERIT_SW_COMPRESSOR = IFILTERMAPPER_MERIT.SW_COMPRESSOR;
pub const MERIT_HW_COMPRESSOR = IFILTERMAPPER_MERIT.HW_COMPRESSOR;

const IID_IFilterMapper_Value = Guid.initString("56a868a3-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IFilterMapper = &IID_IFilterMapper_Value;
pub const IFilterMapper = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        RegisterFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper,
                clsid: Guid,
                Name: ?[*:0]const u16,
                dwMerit: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper,
                clsid: Guid,
                Name: ?[*:0]const u16,
                dwMerit: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterFilterInstance: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper,
                clsid: Guid,
                Name: ?[*:0]const u16,
                MRId: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper,
                clsid: Guid,
                Name: ?[*:0]const u16,
                MRId: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper,
                Filter: Guid,
                Name: ?[*:0]const u16,
                bRendered: BOOL,
                bOutput: BOOL,
                bZero: BOOL,
                bMany: BOOL,
                ConnectsToFilter: Guid,
                ConnectsToPin: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper,
                Filter: Guid,
                Name: ?[*:0]const u16,
                bRendered: BOOL,
                bOutput: BOOL,
                bZero: BOOL,
                bMany: BOOL,
                ConnectsToFilter: Guid,
                ConnectsToPin: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterPinType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper,
                clsFilter: Guid,
                strName: ?[*:0]const u16,
                clsMajorType: Guid,
                clsSubType: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper,
                clsFilter: Guid,
                strName: ?[*:0]const u16,
                clsMajorType: Guid,
                clsSubType: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnregisterFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper,
                Filter: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper,
                Filter: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnregisterFilterInstance: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper,
                MRId: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper,
                MRId: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnregisterPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper,
                Filter: Guid,
                Name: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper,
                Filter: Guid,
                Name: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumMatchingFilters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper,
                ppEnum: ?*?*IEnumRegFilters,
                dwMerit: u32,
                bInputNeeded: BOOL,
                clsInMaj: Guid,
                clsInSub: Guid,
                bRender: BOOL,
                bOututNeeded: BOOL,
                clsOutMaj: Guid,
                clsOutSub: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper,
                ppEnum: ?*?*IEnumRegFilters,
                dwMerit: u32,
                bInputNeeded: BOOL,
                clsInMaj: Guid,
                clsInSub: Guid,
                bRender: BOOL,
                bOututNeeded: BOOL,
                clsOutMaj: Guid,
                clsOutSub: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper_RegisterFilter(self: *const T, clsid: Guid, Name: ?[*:0]const u16, dwMerit: u32) HRESULT {
                return @as(*const IFilterMapper.VTable, @ptrCast(self.vtable)).RegisterFilter(@as(*const IFilterMapper, @ptrCast(self)), clsid, Name, dwMerit);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper_RegisterFilterInstance(self: *const T, clsid: Guid, Name: ?[*:0]const u16, MRId: ?*Guid) HRESULT {
                return @as(*const IFilterMapper.VTable, @ptrCast(self.vtable)).RegisterFilterInstance(@as(*const IFilterMapper, @ptrCast(self)), clsid, Name, MRId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper_RegisterPin(self: *const T, Filter: Guid, Name: ?[*:0]const u16, bRendered: BOOL, bOutput: BOOL, bZero: BOOL, bMany: BOOL, ConnectsToFilter: Guid, ConnectsToPin: ?[*:0]const u16) HRESULT {
                return @as(*const IFilterMapper.VTable, @ptrCast(self.vtable)).RegisterPin(@as(*const IFilterMapper, @ptrCast(self)), Filter, Name, bRendered, bOutput, bZero, bMany, ConnectsToFilter, ConnectsToPin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper_RegisterPinType(self: *const T, clsFilter: Guid, strName: ?[*:0]const u16, clsMajorType: Guid, clsSubType: Guid) HRESULT {
                return @as(*const IFilterMapper.VTable, @ptrCast(self.vtable)).RegisterPinType(@as(*const IFilterMapper, @ptrCast(self)), clsFilter, strName, clsMajorType, clsSubType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper_UnregisterFilter(self: *const T, Filter: Guid) HRESULT {
                return @as(*const IFilterMapper.VTable, @ptrCast(self.vtable)).UnregisterFilter(@as(*const IFilterMapper, @ptrCast(self)), Filter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper_UnregisterFilterInstance(self: *const T, MRId: Guid) HRESULT {
                return @as(*const IFilterMapper.VTable, @ptrCast(self.vtable)).UnregisterFilterInstance(@as(*const IFilterMapper, @ptrCast(self)), MRId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper_UnregisterPin(self: *const T, Filter: Guid, Name: ?[*:0]const u16) HRESULT {
                return @as(*const IFilterMapper.VTable, @ptrCast(self.vtable)).UnregisterPin(@as(*const IFilterMapper, @ptrCast(self)), Filter, Name);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper_EnumMatchingFilters(self: *const T, ppEnum: ?*?*IEnumRegFilters, dwMerit: u32, bInputNeeded: BOOL, clsInMaj: Guid, clsInSub: Guid, bRender: BOOL, bOututNeeded: BOOL, clsOutMaj: Guid, clsOutSub: Guid) HRESULT {
                return @as(*const IFilterMapper.VTable, @ptrCast(self.vtable)).EnumMatchingFilters(@as(*const IFilterMapper, @ptrCast(self)), ppEnum, dwMerit, bInputNeeded, clsInMaj, clsInSub, bRender, bOututNeeded, clsOutMaj, clsOutSub);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const REGPINTYPES = extern struct {
    clsMajorType: ?*const Guid,
    clsMinorType: ?*const Guid,
};

pub const REGFILTERPINS = extern struct {
    strName: ?PWSTR,
    bRendered: BOOL,
    bOutput: BOOL,
    bZero: BOOL,
    bMany: BOOL,
    clsConnectsToFilter: ?*const Guid,
    strConnectsToPin: ?[*:0]const u16,
    nMediaTypes: u32,
    lpMediaType: ?*const REGPINTYPES,
};

pub const REGPINMEDIUM = extern struct {
    clsMedium: Guid,
    dw1: u32,
    dw2: u32,
};

pub const REG_PINFLAG = enum(u32) {
    ZERO = 1,
    RENDERER = 2,
    MANY = 4,
    OUTPUT = 8,
    _,
    pub fn initFlags(o: struct {
        ZERO: u1 = 0,
        RENDERER: u1 = 0,
        MANY: u1 = 0,
        OUTPUT: u1 = 0,
    }) REG_PINFLAG {
        return @as(REG_PINFLAG, @enumFromInt((if (o.ZERO == 1) @intFromEnum(REG_PINFLAG.ZERO) else 0) | (if (o.RENDERER == 1) @intFromEnum(REG_PINFLAG.RENDERER) else 0) | (if (o.MANY == 1) @intFromEnum(REG_PINFLAG.MANY) else 0) | (if (o.OUTPUT == 1) @intFromEnum(REG_PINFLAG.OUTPUT) else 0)));
    }
};
pub const REG_PINFLAG_B_ZERO = REG_PINFLAG.ZERO;
pub const REG_PINFLAG_B_RENDERER = REG_PINFLAG.RENDERER;
pub const REG_PINFLAG_B_MANY = REG_PINFLAG.MANY;
pub const REG_PINFLAG_B_OUTPUT = REG_PINFLAG.OUTPUT;

pub const REGFILTERPINS2 = extern struct {
    dwFlags: u32,
    cInstances: u32,
    nMediaTypes: u32,
    lpMediaType: ?*const REGPINTYPES,
    nMediums: u32,
    lpMedium: ?*const REGPINMEDIUM,
    clsPinCategory: ?*const Guid,
};

pub const REGFILTER2 = extern struct {
    dwVersion: u32,
    dwMerit: u32,
    Anonymous: extern union {
        Anonymous1: extern struct {
            cPins: u32,
            rgPins: ?*const REGFILTERPINS,
        },
        Anonymous2: extern struct {
            cPins2: u32,
            rgPins2: ?*const REGFILTERPINS2,
        },
    },
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IFilterMapper2_Value = Guid.initString("b79bb0b0-33c1-11d1-abe1-00a0c905f375");
pub const IID_IFilterMapper2 = &IID_IFilterMapper2_Value;
pub const IFilterMapper2 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateCategory: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper2,
                clsidCategory: ?*const Guid,
                dwCategoryMerit: u32,
                Description: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper2,
                clsidCategory: ?*const Guid,
                dwCategoryMerit: u32,
                Description: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnregisterFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper2,
                pclsidCategory: ?*const Guid,
                szInstance: ?[*:0]const u16,
                Filter: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper2,
                pclsidCategory: ?*const Guid,
                szInstance: ?[*:0]const u16,
                Filter: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper2,
                clsidFilter: ?*const Guid,
                Name: ?[*:0]const u16,
                ppMoniker: ?*?*IMoniker,
                pclsidCategory: ?*const Guid,
                szInstance: ?[*:0]const u16,
                prf2: ?*const REGFILTER2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper2,
                clsidFilter: ?*const Guid,
                Name: ?[*:0]const u16,
                ppMoniker: ?*?*IMoniker,
                pclsidCategory: ?*const Guid,
                szInstance: ?[*:0]const u16,
                prf2: ?*const REGFILTER2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumMatchingFilters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper2,
                ppEnum: ?*?*IEnumMoniker,
                dwFlags: u32,
                bExactMatch: BOOL,
                dwMerit: u32,
                bInputNeeded: BOOL,
                cInputTypes: u32,
                pInputTypes: ?*const Guid,
                pMedIn: ?*const REGPINMEDIUM,
                pPinCategoryIn: ?*const Guid,
                bRender: BOOL,
                bOutputNeeded: BOOL,
                cOutputTypes: u32,
                pOutputTypes: ?*const Guid,
                pMedOut: ?*const REGPINMEDIUM,
                pPinCategoryOut: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper2,
                ppEnum: ?*?*IEnumMoniker,
                dwFlags: u32,
                bExactMatch: BOOL,
                dwMerit: u32,
                bInputNeeded: BOOL,
                cInputTypes: u32,
                pInputTypes: ?*const Guid,
                pMedIn: ?*const REGPINMEDIUM,
                pPinCategoryIn: ?*const Guid,
                bRender: BOOL,
                bOutputNeeded: BOOL,
                cOutputTypes: u32,
                pOutputTypes: ?*const Guid,
                pMedOut: ?*const REGPINMEDIUM,
                pPinCategoryOut: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper2_CreateCategory(self: *const T, clsidCategory: ?*const Guid, dwCategoryMerit: u32, Description: ?[*:0]const u16) HRESULT {
                return @as(*const IFilterMapper2.VTable, @ptrCast(self.vtable)).CreateCategory(@as(*const IFilterMapper2, @ptrCast(self)), clsidCategory, dwCategoryMerit, Description);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper2_UnregisterFilter(self: *const T, pclsidCategory: ?*const Guid, szInstance: ?[*:0]const u16, Filter: ?*const Guid) HRESULT {
                return @as(*const IFilterMapper2.VTable, @ptrCast(self.vtable)).UnregisterFilter(@as(*const IFilterMapper2, @ptrCast(self)), pclsidCategory, szInstance, Filter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper2_RegisterFilter(self: *const T, clsidFilter: ?*const Guid, Name: ?[*:0]const u16, ppMoniker: ?*?*IMoniker, pclsidCategory: ?*const Guid, szInstance: ?[*:0]const u16, prf2: ?*const REGFILTER2) HRESULT {
                return @as(*const IFilterMapper2.VTable, @ptrCast(self.vtable)).RegisterFilter(@as(*const IFilterMapper2, @ptrCast(self)), clsidFilter, Name, ppMoniker, pclsidCategory, szInstance, prf2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper2_EnumMatchingFilters(self: *const T, ppEnum: ?*?*IEnumMoniker, dwFlags: u32, bExactMatch: BOOL, dwMerit: u32, bInputNeeded: BOOL, cInputTypes: u32, pInputTypes: ?*const Guid, pMedIn: ?*const REGPINMEDIUM, pPinCategoryIn: ?*const Guid, bRender: BOOL, bOutputNeeded: BOOL, cOutputTypes: u32, pOutputTypes: ?*const Guid, pMedOut: ?*const REGPINMEDIUM, pPinCategoryOut: ?*const Guid) HRESULT {
                return @as(*const IFilterMapper2.VTable, @ptrCast(self.vtable)).EnumMatchingFilters(@as(*const IFilterMapper2, @ptrCast(self)), ppEnum, dwFlags, bExactMatch, dwMerit, bInputNeeded, cInputTypes, pInputTypes, pMedIn, pPinCategoryIn, bRender, bOutputNeeded, cOutputTypes, pOutputTypes, pMedOut, pPinCategoryOut);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IFilterMapper3_Value = Guid.initString("b79bb0b1-33c1-11d1-abe1-00a0c905f375");
pub const IID_IFilterMapper3 = &IID_IFilterMapper3_Value;
pub const IFilterMapper3 = extern struct {
    pub const VTable = extern struct {
        base: IFilterMapper2.VTable,
        GetICreateDevEnum: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterMapper3,
                ppEnum: ?*?*ICreateDevEnum,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterMapper3,
                ppEnum: ?*?*ICreateDevEnum,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IFilterMapper2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterMapper3_GetICreateDevEnum(self: *const T, ppEnum: ?*?*ICreateDevEnum) HRESULT {
                return @as(*const IFilterMapper3.VTable, @ptrCast(self.vtable)).GetICreateDevEnum(@as(*const IFilterMapper3, @ptrCast(self)), ppEnum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const QualityMessageType = enum(i32) {
    amine = 0,
    lood = 1,
};
pub const Famine = QualityMessageType.amine;
pub const Flood = QualityMessageType.lood;

pub const Quality = extern struct {
    Type: QualityMessageType,
    Proportion: i32,
    Late: i64,
    TimeStamp: i64,
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IQualityControl_Value = Guid.initString("56a868a5-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IQualityControl = &IID_IQualityControl_Value;
pub const IQualityControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Notify: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IQualityControl,
                pSelf: ?*IBaseFilter,
                q: Quality,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IQualityControl,
                pSelf: ?*IBaseFilter,
                q: Quality,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSink: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IQualityControl,
                piqc: ?*IQualityControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IQualityControl,
                piqc: ?*IQualityControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQualityControl_Notify(self: *const T, pSelf: ?*IBaseFilter, q: Quality) HRESULT {
                return @as(*const IQualityControl.VTable, @ptrCast(self.vtable)).Notify(@as(*const IQualityControl, @ptrCast(self)), pSelf, q);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQualityControl_SetSink(self: *const T, piqc: ?*IQualityControl) HRESULT {
                return @as(*const IQualityControl.VTable, @ptrCast(self.vtable)).SetSink(@as(*const IQualityControl, @ptrCast(self)), piqc);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const COLORKEY_TYPE = enum(i32) {
    NOCOLORKEY = 0,
    INDEX = 1,
    RGB = 2,
};
pub const CK_NOCOLORKEY = COLORKEY_TYPE.NOCOLORKEY;
pub const CK_INDEX = COLORKEY_TYPE.INDEX;
pub const CK_RGB = COLORKEY_TYPE.RGB;

pub const COLORKEY = extern struct {
    KeyType: u32,
    PaletteIndex: u32,
    LowColorValue: u32,
    HighColorValue: u32,
};

pub const ADVISE_TYPE = enum(u32) {
    NONE = 0,
    CLIPPING = 1,
    PALETTE = 2,
    COLORKEY = 4,
    POSITION = 8,
    DISPLAY_CHANGE = 16,
    _,
    pub fn initFlags(o: struct {
        NONE: u1 = 0,
        CLIPPING: u1 = 0,
        PALETTE: u1 = 0,
        COLORKEY: u1 = 0,
        POSITION: u1 = 0,
        DISPLAY_CHANGE: u1 = 0,
    }) ADVISE_TYPE {
        return @as(ADVISE_TYPE, @enumFromInt((if (o.NONE == 1) @intFromEnum(ADVISE_TYPE.NONE) else 0) | (if (o.CLIPPING == 1) @intFromEnum(ADVISE_TYPE.CLIPPING) else 0) | (if (o.PALETTE == 1) @intFromEnum(ADVISE_TYPE.PALETTE) else 0) | (if (o.COLORKEY == 1) @intFromEnum(ADVISE_TYPE.COLORKEY) else 0) | (if (o.POSITION == 1) @intFromEnum(ADVISE_TYPE.POSITION) else 0) | (if (o.DISPLAY_CHANGE == 1) @intFromEnum(ADVISE_TYPE.DISPLAY_CHANGE) else 0)));
    }
};
pub const ADVISE_NONE = ADVISE_TYPE.NONE;
pub const ADVISE_CLIPPING = ADVISE_TYPE.CLIPPING;
pub const ADVISE_PALETTE = ADVISE_TYPE.PALETTE;
pub const ADVISE_COLORKEY = ADVISE_TYPE.COLORKEY;
pub const ADVISE_POSITION = ADVISE_TYPE.POSITION;
pub const ADVISE_DISPLAY_CHANGE = ADVISE_TYPE.DISPLAY_CHANGE;

// TODO: this type is limited to platform 'windows5.0'
const IID_IOverlayNotify_Value = Guid.initString("56a868a0-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IOverlayNotify = &IID_IOverlayNotify_Value;
pub const IOverlayNotify = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        OnPaletteChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlayNotify,
                dwColors: u32,
                pPalette: ?*const PALETTEENTRY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlayNotify,
                dwColors: u32,
                pPalette: ?*const PALETTEENTRY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OnClipChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlayNotify,
                pSourceRect: ?*const RECT,
                pDestinationRect: ?*const RECT,
                pRgnData: ?*const RGNDATA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlayNotify,
                pSourceRect: ?*const RECT,
                pDestinationRect: ?*const RECT,
                pRgnData: ?*const RGNDATA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OnColorKeyChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlayNotify,
                pColorKey: ?*const COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlayNotify,
                pColorKey: ?*const COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OnPositionChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlayNotify,
                pSourceRect: ?*const RECT,
                pDestinationRect: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlayNotify,
                pSourceRect: ?*const RECT,
                pDestinationRect: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlayNotify_OnPaletteChange(self: *const T, dwColors: u32, pPalette: ?*const PALETTEENTRY) HRESULT {
                return @as(*const IOverlayNotify.VTable, @ptrCast(self.vtable)).OnPaletteChange(@as(*const IOverlayNotify, @ptrCast(self)), dwColors, pPalette);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlayNotify_OnClipChange(self: *const T, pSourceRect: ?*const RECT, pDestinationRect: ?*const RECT, pRgnData: ?*const RGNDATA) HRESULT {
                return @as(*const IOverlayNotify.VTable, @ptrCast(self.vtable)).OnClipChange(@as(*const IOverlayNotify, @ptrCast(self)), pSourceRect, pDestinationRect, pRgnData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlayNotify_OnColorKeyChange(self: *const T, pColorKey: ?*const COLORKEY) HRESULT {
                return @as(*const IOverlayNotify.VTable, @ptrCast(self.vtable)).OnColorKeyChange(@as(*const IOverlayNotify, @ptrCast(self)), pColorKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlayNotify_OnPositionChange(self: *const T, pSourceRect: ?*const RECT, pDestinationRect: ?*const RECT) HRESULT {
                return @as(*const IOverlayNotify.VTable, @ptrCast(self.vtable)).OnPositionChange(@as(*const IOverlayNotify, @ptrCast(self)), pSourceRect, pDestinationRect);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IOverlayNotify2_Value = Guid.initString("680efa10-d535-11d1-87c8-00a0c9223196");
pub const IID_IOverlayNotify2 = &IID_IOverlayNotify2_Value;
pub const IOverlayNotify2 = extern struct {
    pub const VTable = extern struct {
        base: IOverlayNotify.VTable,
        OnDisplayChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlayNotify2,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlayNotify2,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IOverlayNotify.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlayNotify2_OnDisplayChange(self: *const T, hMonitor: ?HMONITOR) HRESULT {
                return @as(*const IOverlayNotify2.VTable, @ptrCast(self.vtable)).OnDisplayChange(@as(*const IOverlayNotify2, @ptrCast(self)), hMonitor);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IOverlay_Value = Guid.initString("56a868a1-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IOverlay = &IID_IOverlay_Value;
pub const IOverlay = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetPalette: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
                pdwColors: ?*u32,
                ppPalette: [*]?*PALETTEENTRY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
                pdwColors: ?*u32,
                ppPalette: [*]?*PALETTEENTRY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetPalette: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
                dwColors: u32,
                pPalette: [*]PALETTEENTRY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
                dwColors: u32,
                pPalette: [*]PALETTEENTRY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDefaultColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
                pColorKey: ?*COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
                pColorKey: ?*COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
                pColorKey: ?*COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
                pColorKey: ?*COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
                pColorKey: ?*COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
                pColorKey: ?*COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetWindowHandle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
                pHwnd: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
                pHwnd: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetClipList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
                pSourceRect: ?*RECT,
                pDestinationRect: ?*RECT,
                ppRgnData: ?*?*RGNDATA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
                pSourceRect: ?*RECT,
                pDestinationRect: ?*RECT,
                ppRgnData: ?*?*RGNDATA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVideoPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
                pSourceRect: ?*RECT,
                pDestinationRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
                pSourceRect: ?*RECT,
                pDestinationRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Advise: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
                pOverlayNotify: ?*IOverlayNotify,
                dwInterests: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
                pOverlayNotify: ?*IOverlayNotify,
                dwInterests: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unadvise: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IOverlay,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IOverlay,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_GetPalette(self: *const T, pdwColors: ?*u32, ppPalette: [*]?*PALETTEENTRY) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).GetPalette(@as(*const IOverlay, @ptrCast(self)), pdwColors, ppPalette);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_SetPalette(self: *const T, dwColors: u32, pPalette: [*]PALETTEENTRY) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).SetPalette(@as(*const IOverlay, @ptrCast(self)), dwColors, pPalette);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_GetDefaultColorKey(self: *const T, pColorKey: ?*COLORKEY) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).GetDefaultColorKey(@as(*const IOverlay, @ptrCast(self)), pColorKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_GetColorKey(self: *const T, pColorKey: ?*COLORKEY) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).GetColorKey(@as(*const IOverlay, @ptrCast(self)), pColorKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_SetColorKey(self: *const T, pColorKey: ?*COLORKEY) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).SetColorKey(@as(*const IOverlay, @ptrCast(self)), pColorKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_GetWindowHandle(self: *const T, pHwnd: ?*?HWND) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).GetWindowHandle(@as(*const IOverlay, @ptrCast(self)), pHwnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_GetClipList(self: *const T, pSourceRect: ?*RECT, pDestinationRect: ?*RECT, ppRgnData: ?*?*RGNDATA) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).GetClipList(@as(*const IOverlay, @ptrCast(self)), pSourceRect, pDestinationRect, ppRgnData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_GetVideoPosition(self: *const T, pSourceRect: ?*RECT, pDestinationRect: ?*RECT) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).GetVideoPosition(@as(*const IOverlay, @ptrCast(self)), pSourceRect, pDestinationRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_Advise(self: *const T, pOverlayNotify: ?*IOverlayNotify, dwInterests: u32) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).Advise(@as(*const IOverlay, @ptrCast(self)), pOverlayNotify, dwInterests);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IOverlay_Unadvise(self: *const T) HRESULT {
                return @as(*const IOverlay.VTable, @ptrCast(self.vtable)).Unadvise(@as(*const IOverlay, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaEventSink_Value = Guid.initString("56a868a2-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMediaEventSink = &IID_IMediaEventSink_Value;
pub const IMediaEventSink = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Notify: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEventSink,
                EventCode: i32,
                EventParam1: isize,
                EventParam2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEventSink,
                EventCode: i32,
                EventParam1: isize,
                EventParam2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEventSink_Notify(self: *const T, EventCode: i32, EventParam1: isize, EventParam2: isize) HRESULT {
                return @as(*const IMediaEventSink.VTable, @ptrCast(self.vtable)).Notify(@as(*const IMediaEventSink, @ptrCast(self)), EventCode, EventParam1, EventParam2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IFileSourceFilter_Value = Guid.initString("56a868a6-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IFileSourceFilter = &IID_IFileSourceFilter_Value;
pub const IFileSourceFilter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Load: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFileSourceFilter,
                pszFileName: ?[*:0]const u16,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFileSourceFilter,
                pszFileName: ?[*:0]const u16,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFileSourceFilter,
                ppszFileName: ?*?PWSTR,
                pmt: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFileSourceFilter,
                ppszFileName: ?*?PWSTR,
                pmt: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFileSourceFilter_Load(self: *const T, pszFileName: ?[*:0]const u16, pmt: ?*const AM_MEDIA_TYPE) HRESULT {
                return @as(*const IFileSourceFilter.VTable, @ptrCast(self.vtable)).Load(@as(*const IFileSourceFilter, @ptrCast(self)), pszFileName, pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFileSourceFilter_GetCurFile(self: *const T, ppszFileName: ?*?PWSTR, pmt: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IFileSourceFilter.VTable, @ptrCast(self.vtable)).GetCurFile(@as(*const IFileSourceFilter, @ptrCast(self)), ppszFileName, pmt);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IFileSinkFilter_Value = Guid.initString("a2104830-7c70-11cf-8bce-00aa00a3f1a6");
pub const IID_IFileSinkFilter = &IID_IFileSinkFilter_Value;
pub const IFileSinkFilter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetFileName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFileSinkFilter,
                pszFileName: ?[*:0]const u16,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFileSinkFilter,
                pszFileName: ?[*:0]const u16,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFileSinkFilter,
                ppszFileName: ?*?PWSTR,
                pmt: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFileSinkFilter,
                ppszFileName: ?*?PWSTR,
                pmt: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFileSinkFilter_SetFileName(self: *const T, pszFileName: ?[*:0]const u16, pmt: ?*const AM_MEDIA_TYPE) HRESULT {
                return @as(*const IFileSinkFilter.VTable, @ptrCast(self.vtable)).SetFileName(@as(*const IFileSinkFilter, @ptrCast(self)), pszFileName, pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFileSinkFilter_GetCurFile(self: *const T, ppszFileName: ?*?PWSTR, pmt: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IFileSinkFilter.VTable, @ptrCast(self.vtable)).GetCurFile(@as(*const IFileSinkFilter, @ptrCast(self)), ppszFileName, pmt);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IFileSinkFilter2_Value = Guid.initString("00855b90-ce1b-11d0-bd4f-00a0c911ce86");
pub const IID_IFileSinkFilter2 = &IID_IFileSinkFilter2_Value;
pub const IFileSinkFilter2 = extern struct {
    pub const VTable = extern struct {
        base: IFileSinkFilter.VTable,
        SetMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFileSinkFilter2,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFileSinkFilter2,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFileSinkFilter2,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFileSinkFilter2,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IFileSinkFilter.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFileSinkFilter2_SetMode(self: *const T, dwFlags: u32) HRESULT {
                return @as(*const IFileSinkFilter2.VTable, @ptrCast(self.vtable)).SetMode(@as(*const IFileSinkFilter2, @ptrCast(self)), dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFileSinkFilter2_GetMode(self: *const T, pdwFlags: ?*u32) HRESULT {
                return @as(*const IFileSinkFilter2.VTable, @ptrCast(self.vtable)).GetMode(@as(*const IFileSinkFilter2, @ptrCast(self)), pdwFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_FILESINK_FLAGS = enum(i32) {
    E = 1,
};
pub const AM_FILE_OVERWRITE = AM_FILESINK_FLAGS.E;

// TODO: this type is limited to platform 'windows5.0'
const IID_IGraphBuilder_Value = Guid.initString("56a868a9-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IGraphBuilder = &IID_IGraphBuilder_Value;
pub const IGraphBuilder = extern struct {
    pub const VTable = extern struct {
        base: IFilterGraph.VTable,
        Connect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphBuilder,
                ppinOut: ?*IPin,
                ppinIn: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphBuilder,
                ppinOut: ?*IPin,
                ppinIn: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Render: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphBuilder,
                ppinOut: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphBuilder,
                ppinOut: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RenderFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphBuilder,
                lpcwstrFile: ?[*:0]const u16,
                lpcwstrPlayList: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphBuilder,
                lpcwstrFile: ?[*:0]const u16,
                lpcwstrPlayList: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddSourceFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphBuilder,
                lpcwstrFileName: ?[*:0]const u16,
                lpcwstrFilterName: ?[*:0]const u16,
                ppFilter: ?*?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphBuilder,
                lpcwstrFileName: ?[*:0]const u16,
                lpcwstrFilterName: ?[*:0]const u16,
                ppFilter: ?*?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetLogFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphBuilder,
                hFile: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphBuilder,
                hFile: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Abort: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ShouldOperationContinue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IFilterGraph.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphBuilder_Connect(self: *const T, ppinOut: ?*IPin, ppinIn: ?*IPin) HRESULT {
                return @as(*const IGraphBuilder.VTable, @ptrCast(self.vtable)).Connect(@as(*const IGraphBuilder, @ptrCast(self)), ppinOut, ppinIn);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphBuilder_Render(self: *const T, ppinOut: ?*IPin) HRESULT {
                return @as(*const IGraphBuilder.VTable, @ptrCast(self.vtable)).Render(@as(*const IGraphBuilder, @ptrCast(self)), ppinOut);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphBuilder_RenderFile(self: *const T, lpcwstrFile: ?[*:0]const u16, lpcwstrPlayList: ?[*:0]const u16) HRESULT {
                return @as(*const IGraphBuilder.VTable, @ptrCast(self.vtable)).RenderFile(@as(*const IGraphBuilder, @ptrCast(self)), lpcwstrFile, lpcwstrPlayList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphBuilder_AddSourceFilter(self: *const T, lpcwstrFileName: ?[*:0]const u16, lpcwstrFilterName: ?[*:0]const u16, ppFilter: ?*?*IBaseFilter) HRESULT {
                return @as(*const IGraphBuilder.VTable, @ptrCast(self.vtable)).AddSourceFilter(@as(*const IGraphBuilder, @ptrCast(self)), lpcwstrFileName, lpcwstrFilterName, ppFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphBuilder_SetLogFile(self: *const T, hFile: usize) HRESULT {
                return @as(*const IGraphBuilder.VTable, @ptrCast(self.vtable)).SetLogFile(@as(*const IGraphBuilder, @ptrCast(self)), hFile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphBuilder_Abort(self: *const T) HRESULT {
                return @as(*const IGraphBuilder.VTable, @ptrCast(self.vtable)).Abort(@as(*const IGraphBuilder, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphBuilder_ShouldOperationContinue(self: *const T) HRESULT {
                return @as(*const IGraphBuilder.VTable, @ptrCast(self.vtable)).ShouldOperationContinue(@as(*const IGraphBuilder, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ICaptureGraphBuilder_Value = Guid.initString("bf87b6e0-8c27-11d0-b3f0-00aa003761c5");
pub const IID_ICaptureGraphBuilder = &IID_ICaptureGraphBuilder_Value;
pub const ICaptureGraphBuilder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetFiltergraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder,
                pfg: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder,
                pfg: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFiltergraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder,
                ppfg: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder,
                ppfg: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOutputFileName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder,
                pType: ?*const Guid,
                lpstrFile: ?[*:0]const u16,
                ppf: ?*?*IBaseFilter,
                ppSink: ?*?*IFileSinkFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder,
                pType: ?*const Guid,
                lpstrFile: ?[*:0]const u16,
                ppf: ?*?*IBaseFilter,
                ppSink: ?*?*IFileSinkFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder,
                pCategory: ?*const Guid,
                pf: ?*IBaseFilter,
                riid: ?*const Guid,
                ppint: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder,
                pCategory: ?*const Guid,
                pf: ?*IBaseFilter,
                riid: ?*const Guid,
                ppint: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RenderStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder,
                pCategory: ?*const Guid,
                pSource: ?*IUnknown,
                pfCompressor: ?*IBaseFilter,
                pfRenderer: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder,
                pCategory: ?*const Guid,
                pSource: ?*IUnknown,
                pfCompressor: ?*IBaseFilter,
                pfRenderer: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ControlStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder,
                pCategory: ?*const Guid,
                pFilter: ?*IBaseFilter,
                pstart: ?*i64,
                pstop: ?*i64,
                wStartCookie: u16,
                wStopCookie: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder,
                pCategory: ?*const Guid,
                pFilter: ?*IBaseFilter,
                pstart: ?*i64,
                pstop: ?*i64,
                wStartCookie: u16,
                wStopCookie: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AllocCapFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder,
                lpstr: ?[*:0]const u16,
                dwlSize: u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder,
                lpstr: ?[*:0]const u16,
                dwlSize: u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CopyCaptureFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder,
                lpwstrOld: ?PWSTR,
                lpwstrNew: ?PWSTR,
                fAllowEscAbort: i32,
                pCallback: ?*IAMCopyCaptureFileProgress,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder,
                lpwstrOld: ?PWSTR,
                lpwstrNew: ?PWSTR,
                fAllowEscAbort: i32,
                pCallback: ?*IAMCopyCaptureFileProgress,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder_SetFiltergraph(self: *const T, pfg: ?*IGraphBuilder) HRESULT {
                return @as(*const ICaptureGraphBuilder.VTable, @ptrCast(self.vtable)).SetFiltergraph(@as(*const ICaptureGraphBuilder, @ptrCast(self)), pfg);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder_GetFiltergraph(self: *const T, ppfg: ?*?*IGraphBuilder) HRESULT {
                return @as(*const ICaptureGraphBuilder.VTable, @ptrCast(self.vtable)).GetFiltergraph(@as(*const ICaptureGraphBuilder, @ptrCast(self)), ppfg);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder_SetOutputFileName(self: *const T, pType: ?*const Guid, lpstrFile: ?[*:0]const u16, ppf: ?*?*IBaseFilter, ppSink: ?*?*IFileSinkFilter) HRESULT {
                return @as(*const ICaptureGraphBuilder.VTable, @ptrCast(self.vtable)).SetOutputFileName(@as(*const ICaptureGraphBuilder, @ptrCast(self)), pType, lpstrFile, ppf, ppSink);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder_FindInterface(self: *const T, pCategory: ?*const Guid, pf: ?*IBaseFilter, riid: ?*const Guid, ppint: ?*?*anyopaque) HRESULT {
                return @as(*const ICaptureGraphBuilder.VTable, @ptrCast(self.vtable)).FindInterface(@as(*const ICaptureGraphBuilder, @ptrCast(self)), pCategory, pf, riid, ppint);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder_RenderStream(self: *const T, pCategory: ?*const Guid, pSource: ?*IUnknown, pfCompressor: ?*IBaseFilter, pfRenderer: ?*IBaseFilter) HRESULT {
                return @as(*const ICaptureGraphBuilder.VTable, @ptrCast(self.vtable)).RenderStream(@as(*const ICaptureGraphBuilder, @ptrCast(self)), pCategory, pSource, pfCompressor, pfRenderer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder_ControlStream(self: *const T, pCategory: ?*const Guid, pFilter: ?*IBaseFilter, pstart: ?*i64, pstop: ?*i64, wStartCookie: u16, wStopCookie: u16) HRESULT {
                return @as(*const ICaptureGraphBuilder.VTable, @ptrCast(self.vtable)).ControlStream(@as(*const ICaptureGraphBuilder, @ptrCast(self)), pCategory, pFilter, pstart, pstop, wStartCookie, wStopCookie);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder_AllocCapFile(self: *const T, lpstr: ?[*:0]const u16, dwlSize: u64) HRESULT {
                return @as(*const ICaptureGraphBuilder.VTable, @ptrCast(self.vtable)).AllocCapFile(@as(*const ICaptureGraphBuilder, @ptrCast(self)), lpstr, dwlSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder_CopyCaptureFile(self: *const T, lpwstrOld: ?PWSTR, lpwstrNew: ?PWSTR, fAllowEscAbort: i32, pCallback: ?*IAMCopyCaptureFileProgress) HRESULT {
                return @as(*const ICaptureGraphBuilder.VTable, @ptrCast(self.vtable)).CopyCaptureFile(@as(*const ICaptureGraphBuilder, @ptrCast(self)), lpwstrOld, lpwstrNew, fAllowEscAbort, pCallback);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMCopyCaptureFileProgress_Value = Guid.initString("670d1d20-a068-11d0-b3f0-00aa003761c5");
pub const IID_IAMCopyCaptureFileProgress = &IID_IAMCopyCaptureFileProgress_Value;
pub const IAMCopyCaptureFileProgress = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Progress: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCopyCaptureFileProgress,
                iProgress: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCopyCaptureFileProgress,
                iProgress: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCopyCaptureFileProgress_Progress(self: *const T, iProgress: i32) HRESULT {
                return @as(*const IAMCopyCaptureFileProgress.VTable, @ptrCast(self.vtable)).Progress(@as(*const IAMCopyCaptureFileProgress, @ptrCast(self)), iProgress);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_ICaptureGraphBuilder2_Value = Guid.initString("93e5a4e0-2d50-11d2-abfa-00a0c9c6e38d");
pub const IID_ICaptureGraphBuilder2 = &IID_ICaptureGraphBuilder2_Value;
pub const ICaptureGraphBuilder2 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetFiltergraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder2,
                pfg: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder2,
                pfg: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFiltergraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder2,
                ppfg: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder2,
                ppfg: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOutputFileName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder2,
                pType: ?*const Guid,
                lpstrFile: ?[*:0]const u16,
                ppf: ?*?*IBaseFilter,
                ppSink: ?*?*IFileSinkFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder2,
                pType: ?*const Guid,
                lpstrFile: ?[*:0]const u16,
                ppf: ?*?*IBaseFilter,
                ppSink: ?*?*IFileSinkFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder2,
                pCategory: ?*const Guid,
                pType: ?*const Guid,
                pf: ?*IBaseFilter,
                riid: ?*const Guid,
                ppint: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder2,
                pCategory: ?*const Guid,
                pType: ?*const Guid,
                pf: ?*IBaseFilter,
                riid: ?*const Guid,
                ppint: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RenderStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder2,
                pCategory: ?*const Guid,
                pType: ?*const Guid,
                pSource: ?*IUnknown,
                pfCompressor: ?*IBaseFilter,
                pfRenderer: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder2,
                pCategory: ?*const Guid,
                pType: ?*const Guid,
                pSource: ?*IUnknown,
                pfCompressor: ?*IBaseFilter,
                pfRenderer: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ControlStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder2,
                pCategory: ?*const Guid,
                pType: ?*const Guid,
                pFilter: ?*IBaseFilter,
                pstart: ?*i64,
                pstop: ?*i64,
                wStartCookie: u16,
                wStopCookie: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder2,
                pCategory: ?*const Guid,
                pType: ?*const Guid,
                pFilter: ?*IBaseFilter,
                pstart: ?*i64,
                pstop: ?*i64,
                wStartCookie: u16,
                wStopCookie: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AllocCapFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder2,
                lpstr: ?[*:0]const u16,
                dwlSize: u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder2,
                lpstr: ?[*:0]const u16,
                dwlSize: u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CopyCaptureFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder2,
                lpwstrOld: ?PWSTR,
                lpwstrNew: ?PWSTR,
                fAllowEscAbort: i32,
                pCallback: ?*IAMCopyCaptureFileProgress,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder2,
                lpwstrOld: ?PWSTR,
                lpwstrNew: ?PWSTR,
                fAllowEscAbort: i32,
                pCallback: ?*IAMCopyCaptureFileProgress,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptureGraphBuilder2,
                pSource: ?*IUnknown,
                pindir: PIN_DIRECTION,
                pCategory: ?*const Guid,
                pType: ?*const Guid,
                fUnconnected: BOOL,
                num: i32,
                ppPin: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptureGraphBuilder2,
                pSource: ?*IUnknown,
                pindir: PIN_DIRECTION,
                pCategory: ?*const Guid,
                pType: ?*const Guid,
                fUnconnected: BOOL,
                num: i32,
                ppPin: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder2_SetFiltergraph(self: *const T, pfg: ?*IGraphBuilder) HRESULT {
                return @as(*const ICaptureGraphBuilder2.VTable, @ptrCast(self.vtable)).SetFiltergraph(@as(*const ICaptureGraphBuilder2, @ptrCast(self)), pfg);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder2_GetFiltergraph(self: *const T, ppfg: ?*?*IGraphBuilder) HRESULT {
                return @as(*const ICaptureGraphBuilder2.VTable, @ptrCast(self.vtable)).GetFiltergraph(@as(*const ICaptureGraphBuilder2, @ptrCast(self)), ppfg);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder2_SetOutputFileName(self: *const T, pType: ?*const Guid, lpstrFile: ?[*:0]const u16, ppf: ?*?*IBaseFilter, ppSink: ?*?*IFileSinkFilter) HRESULT {
                return @as(*const ICaptureGraphBuilder2.VTable, @ptrCast(self.vtable)).SetOutputFileName(@as(*const ICaptureGraphBuilder2, @ptrCast(self)), pType, lpstrFile, ppf, ppSink);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder2_FindInterface(self: *const T, pCategory: ?*const Guid, pType: ?*const Guid, pf: ?*IBaseFilter, riid: ?*const Guid, ppint: ?*?*anyopaque) HRESULT {
                return @as(*const ICaptureGraphBuilder2.VTable, @ptrCast(self.vtable)).FindInterface(@as(*const ICaptureGraphBuilder2, @ptrCast(self)), pCategory, pType, pf, riid, ppint);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder2_RenderStream(self: *const T, pCategory: ?*const Guid, pType: ?*const Guid, pSource: ?*IUnknown, pfCompressor: ?*IBaseFilter, pfRenderer: ?*IBaseFilter) HRESULT {
                return @as(*const ICaptureGraphBuilder2.VTable, @ptrCast(self.vtable)).RenderStream(@as(*const ICaptureGraphBuilder2, @ptrCast(self)), pCategory, pType, pSource, pfCompressor, pfRenderer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder2_ControlStream(self: *const T, pCategory: ?*const Guid, pType: ?*const Guid, pFilter: ?*IBaseFilter, pstart: ?*i64, pstop: ?*i64, wStartCookie: u16, wStopCookie: u16) HRESULT {
                return @as(*const ICaptureGraphBuilder2.VTable, @ptrCast(self.vtable)).ControlStream(@as(*const ICaptureGraphBuilder2, @ptrCast(self)), pCategory, pType, pFilter, pstart, pstop, wStartCookie, wStopCookie);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder2_AllocCapFile(self: *const T, lpstr: ?[*:0]const u16, dwlSize: u64) HRESULT {
                return @as(*const ICaptureGraphBuilder2.VTable, @ptrCast(self.vtable)).AllocCapFile(@as(*const ICaptureGraphBuilder2, @ptrCast(self)), lpstr, dwlSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder2_CopyCaptureFile(self: *const T, lpwstrOld: ?PWSTR, lpwstrNew: ?PWSTR, fAllowEscAbort: i32, pCallback: ?*IAMCopyCaptureFileProgress) HRESULT {
                return @as(*const ICaptureGraphBuilder2.VTable, @ptrCast(self.vtable)).CopyCaptureFile(@as(*const ICaptureGraphBuilder2, @ptrCast(self)), lpwstrOld, lpwstrNew, fAllowEscAbort, pCallback);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptureGraphBuilder2_FindPin(self: *const T, pSource: ?*IUnknown, pindir: PIN_DIRECTION, pCategory: ?*const Guid, pType: ?*const Guid, fUnconnected: BOOL, num: i32, ppPin: ?*?*IPin) HRESULT {
                return @as(*const ICaptureGraphBuilder2.VTable, @ptrCast(self.vtable)).FindPin(@as(*const ICaptureGraphBuilder2, @ptrCast(self)), pSource, pindir, pCategory, pType, fUnconnected, num, ppPin);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _AM_RENSDEREXFLAGS = enum(i32) {
    S = 1,
};
pub const AM_RENDEREX_RENDERTOEXISTINGRENDERERS = _AM_RENSDEREXFLAGS.S;

// TODO: this type is limited to platform 'windows5.0'
const IID_IFilterGraph2_Value = Guid.initString("36b73882-c2c8-11cf-8b46-00805f6cef60");
pub const IID_IFilterGraph2 = &IID_IFilterGraph2_Value;
pub const IFilterGraph2 = extern struct {
    pub const VTable = extern struct {
        base: IGraphBuilder.VTable,
        AddSourceFilterForMoniker: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph2,
                pMoniker: ?*IMoniker,
                pCtx: ?*IBindCtx,
                lpcwstrFilterName: ?[*:0]const u16,
                ppFilter: ?*?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph2,
                pMoniker: ?*IMoniker,
                pCtx: ?*IBindCtx,
                lpcwstrFilterName: ?[*:0]const u16,
                ppFilter: ?*?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReconnectEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph2,
                ppin: ?*IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph2,
                ppin: ?*IPin,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RenderEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph2,
                pPinOut: ?*IPin,
                dwFlags: u32,
                pvContext: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph2,
                pPinOut: ?*IPin,
                dwFlags: u32,
                pvContext: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IGraphBuilder.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph2_AddSourceFilterForMoniker(self: *const T, pMoniker: ?*IMoniker, pCtx: ?*IBindCtx, lpcwstrFilterName: ?[*:0]const u16, ppFilter: ?*?*IBaseFilter) HRESULT {
                return @as(*const IFilterGraph2.VTable, @ptrCast(self.vtable)).AddSourceFilterForMoniker(@as(*const IFilterGraph2, @ptrCast(self)), pMoniker, pCtx, lpcwstrFilterName, ppFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph2_ReconnectEx(self: *const T, ppin: ?*IPin, pmt: ?*const AM_MEDIA_TYPE) HRESULT {
                return @as(*const IFilterGraph2.VTable, @ptrCast(self.vtable)).ReconnectEx(@as(*const IFilterGraph2, @ptrCast(self)), ppin, pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph2_RenderEx(self: *const T, pPinOut: ?*IPin, dwFlags: u32, pvContext: ?*u32) HRESULT {
                return @as(*const IFilterGraph2.VTable, @ptrCast(self.vtable)).RenderEx(@as(*const IFilterGraph2, @ptrCast(self)), pPinOut, dwFlags, pvContext);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IFilterGraph3_Value = Guid.initString("aaf38154-b80b-422f-91e6-b66467509a07");
pub const IID_IFilterGraph3 = &IID_IFilterGraph3_Value;
pub const IFilterGraph3 = extern struct {
    pub const VTable = extern struct {
        base: IFilterGraph2.VTable,
        SetSyncSourceEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterGraph3,
                pClockForMostOfFilterGraph: ?*IReferenceClock,
                pClockForFilter: ?*IReferenceClock,
                pFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterGraph3,
                pClockForMostOfFilterGraph: ?*IReferenceClock,
                pClockForFilter: ?*IReferenceClock,
                pFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IFilterGraph2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterGraph3_SetSyncSourceEx(self: *const T, pClockForMostOfFilterGraph: ?*IReferenceClock, pClockForFilter: ?*IReferenceClock, pFilter: ?*IBaseFilter) HRESULT {
                return @as(*const IFilterGraph3.VTable, @ptrCast(self.vtable)).SetSyncSourceEx(@as(*const IFilterGraph3, @ptrCast(self)), pClockForMostOfFilterGraph, pClockForFilter, pFilter);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IStreamBuilder_Value = Guid.initString("56a868bf-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IStreamBuilder = &IID_IStreamBuilder_Value;
pub const IStreamBuilder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Render: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBuilder,
                ppinOut: ?*IPin,
                pGraph: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBuilder,
                ppinOut: ?*IPin,
                pGraph: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Backout: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBuilder,
                ppinOut: ?*IPin,
                pGraph: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBuilder,
                ppinOut: ?*IPin,
                pGraph: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBuilder_Render(self: *const T, ppinOut: ?*IPin, pGraph: ?*IGraphBuilder) HRESULT {
                return @as(*const IStreamBuilder.VTable, @ptrCast(self.vtable)).Render(@as(*const IStreamBuilder, @ptrCast(self)), ppinOut, pGraph);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBuilder_Backout(self: *const T, ppinOut: ?*IPin, pGraph: ?*IGraphBuilder) HRESULT {
                return @as(*const IStreamBuilder.VTable, @ptrCast(self.vtable)).Backout(@as(*const IStreamBuilder, @ptrCast(self)), ppinOut, pGraph);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAsyncReader_Value = Guid.initString("56a868aa-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IAsyncReader = &IID_IAsyncReader_Value;
pub const IAsyncReader = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        RequestAllocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAsyncReader,
                pPreferred: ?*IMemAllocator,
                pProps: ?*ALLOCATOR_PROPERTIES,
                ppActual: ?*?*IMemAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAsyncReader,
                pPreferred: ?*IMemAllocator,
                pProps: ?*ALLOCATOR_PROPERTIES,
                ppActual: ?*?*IMemAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Request: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAsyncReader,
                pSample: ?*IMediaSample,
                dwUser: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAsyncReader,
                pSample: ?*IMediaSample,
                dwUser: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WaitForNext: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAsyncReader,
                dwTimeout: u32,
                ppSample: ?*?*IMediaSample,
                pdwUser: ?*usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAsyncReader,
                dwTimeout: u32,
                ppSample: ?*?*IMediaSample,
                pdwUser: ?*usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SyncReadAligned: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAsyncReader,
                pSample: ?*IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAsyncReader,
                pSample: ?*IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SyncRead: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAsyncReader,
                llPosition: i64,
                lLength: i32,
                // TODO: what to do with BytesParamIndex 1?
                pBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAsyncReader,
                llPosition: i64,
                lLength: i32,
                // TODO: what to do with BytesParamIndex 1?
                pBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Length: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAsyncReader,
                pTotal: ?*i64,
                pAvailable: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAsyncReader,
                pTotal: ?*i64,
                pAvailable: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        BeginFlush: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAsyncReader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAsyncReader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EndFlush: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAsyncReader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAsyncReader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAsyncReader_RequestAllocator(self: *const T, pPreferred: ?*IMemAllocator, pProps: ?*ALLOCATOR_PROPERTIES, ppActual: ?*?*IMemAllocator) HRESULT {
                return @as(*const IAsyncReader.VTable, @ptrCast(self.vtable)).RequestAllocator(@as(*const IAsyncReader, @ptrCast(self)), pPreferred, pProps, ppActual);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAsyncReader_Request(self: *const T, pSample: ?*IMediaSample, dwUser: usize) HRESULT {
                return @as(*const IAsyncReader.VTable, @ptrCast(self.vtable)).Request(@as(*const IAsyncReader, @ptrCast(self)), pSample, dwUser);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAsyncReader_WaitForNext(self: *const T, dwTimeout: u32, ppSample: ?*?*IMediaSample, pdwUser: ?*usize) HRESULT {
                return @as(*const IAsyncReader.VTable, @ptrCast(self.vtable)).WaitForNext(@as(*const IAsyncReader, @ptrCast(self)), dwTimeout, ppSample, pdwUser);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAsyncReader_SyncReadAligned(self: *const T, pSample: ?*IMediaSample) HRESULT {
                return @as(*const IAsyncReader.VTable, @ptrCast(self.vtable)).SyncReadAligned(@as(*const IAsyncReader, @ptrCast(self)), pSample);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAsyncReader_SyncRead(self: *const T, llPosition: i64, lLength: i32, pBuffer: ?*u8) HRESULT {
                return @as(*const IAsyncReader.VTable, @ptrCast(self.vtable)).SyncRead(@as(*const IAsyncReader, @ptrCast(self)), llPosition, lLength, pBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAsyncReader_Length(self: *const T, pTotal: ?*i64, pAvailable: ?*i64) HRESULT {
                return @as(*const IAsyncReader.VTable, @ptrCast(self.vtable)).Length(@as(*const IAsyncReader, @ptrCast(self)), pTotal, pAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAsyncReader_BeginFlush(self: *const T) HRESULT {
                return @as(*const IAsyncReader.VTable, @ptrCast(self.vtable)).BeginFlush(@as(*const IAsyncReader, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAsyncReader_EndFlush(self: *const T) HRESULT {
                return @as(*const IAsyncReader.VTable, @ptrCast(self.vtable)).EndFlush(@as(*const IAsyncReader, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IGraphVersion_Value = Guid.initString("56a868ab-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IGraphVersion = &IID_IGraphVersion_Value;
pub const IGraphVersion = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        QueryVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphVersion,
                pVersion: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphVersion,
                pVersion: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphVersion_QueryVersion(self: *const T, pVersion: ?*i32) HRESULT {
                return @as(*const IGraphVersion.VTable, @ptrCast(self.vtable)).QueryVersion(@as(*const IGraphVersion, @ptrCast(self)), pVersion);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IResourceConsumer_Value = Guid.initString("56a868ad-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IResourceConsumer = &IID_IResourceConsumer_Value;
pub const IResourceConsumer = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AcquireResource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceConsumer,
                idResource: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceConsumer,
                idResource: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleaseResource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceConsumer,
                idResource: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceConsumer,
                idResource: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceConsumer_AcquireResource(self: *const T, idResource: i32) HRESULT {
                return @as(*const IResourceConsumer.VTable, @ptrCast(self.vtable)).AcquireResource(@as(*const IResourceConsumer, @ptrCast(self)), idResource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceConsumer_ReleaseResource(self: *const T, idResource: i32) HRESULT {
                return @as(*const IResourceConsumer.VTable, @ptrCast(self.vtable)).ReleaseResource(@as(*const IResourceConsumer, @ptrCast(self)), idResource);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IResourceManager_Value = Guid.initString("56a868ac-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IResourceManager = &IID_IResourceManager_Value;
pub const IResourceManager = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Register: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceManager,
                pName: ?[*:0]const u16,
                cResource: i32,
                plToken: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceManager,
                pName: ?[*:0]const u16,
                cResource: i32,
                plToken: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterGroup: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceManager,
                pName: ?[*:0]const u16,
                cResource: i32,
                palTokens: [*]i32,
                plToken: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceManager,
                pName: ?[*:0]const u16,
                cResource: i32,
                palTokens: [*]i32,
                plToken: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RequestResource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceManager,
                idResource: i32,
                pFocusObject: ?*IUnknown,
                pConsumer: ?*IResourceConsumer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceManager,
                idResource: i32,
                pFocusObject: ?*IUnknown,
                pConsumer: ?*IResourceConsumer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NotifyAcquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceManager,
                idResource: i32,
                pConsumer: ?*IResourceConsumer,
                hr: HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceManager,
                idResource: i32,
                pConsumer: ?*IResourceConsumer,
                hr: HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NotifyRelease: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceManager,
                idResource: i32,
                pConsumer: ?*IResourceConsumer,
                bStillWant: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceManager,
                idResource: i32,
                pConsumer: ?*IResourceConsumer,
                bStillWant: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CancelRequest: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceManager,
                idResource: i32,
                pConsumer: ?*IResourceConsumer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceManager,
                idResource: i32,
                pConsumer: ?*IResourceConsumer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFocus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceManager,
                pFocusObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceManager,
                pFocusObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleaseFocus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IResourceManager,
                pFocusObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IResourceManager,
                pFocusObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceManager_Register(self: *const T, pName: ?[*:0]const u16, cResource: i32, plToken: ?*i32) HRESULT {
                return @as(*const IResourceManager.VTable, @ptrCast(self.vtable)).Register(@as(*const IResourceManager, @ptrCast(self)), pName, cResource, plToken);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceManager_RegisterGroup(self: *const T, pName: ?[*:0]const u16, cResource: i32, palTokens: [*]i32, plToken: ?*i32) HRESULT {
                return @as(*const IResourceManager.VTable, @ptrCast(self.vtable)).RegisterGroup(@as(*const IResourceManager, @ptrCast(self)), pName, cResource, palTokens, plToken);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceManager_RequestResource(self: *const T, idResource: i32, pFocusObject: ?*IUnknown, pConsumer: ?*IResourceConsumer) HRESULT {
                return @as(*const IResourceManager.VTable, @ptrCast(self.vtable)).RequestResource(@as(*const IResourceManager, @ptrCast(self)), idResource, pFocusObject, pConsumer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceManager_NotifyAcquire(self: *const T, idResource: i32, pConsumer: ?*IResourceConsumer, hr: HRESULT) HRESULT {
                return @as(*const IResourceManager.VTable, @ptrCast(self.vtable)).NotifyAcquire(@as(*const IResourceManager, @ptrCast(self)), idResource, pConsumer, hr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceManager_NotifyRelease(self: *const T, idResource: i32, pConsumer: ?*IResourceConsumer, bStillWant: BOOL) HRESULT {
                return @as(*const IResourceManager.VTable, @ptrCast(self.vtable)).NotifyRelease(@as(*const IResourceManager, @ptrCast(self)), idResource, pConsumer, bStillWant);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceManager_CancelRequest(self: *const T, idResource: i32, pConsumer: ?*IResourceConsumer) HRESULT {
                return @as(*const IResourceManager.VTable, @ptrCast(self.vtable)).CancelRequest(@as(*const IResourceManager, @ptrCast(self)), idResource, pConsumer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceManager_SetFocus(self: *const T, pFocusObject: ?*IUnknown) HRESULT {
                return @as(*const IResourceManager.VTable, @ptrCast(self.vtable)).SetFocus(@as(*const IResourceManager, @ptrCast(self)), pFocusObject);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IResourceManager_ReleaseFocus(self: *const T, pFocusObject: ?*IUnknown) HRESULT {
                return @as(*const IResourceManager.VTable, @ptrCast(self.vtable)).ReleaseFocus(@as(*const IResourceManager, @ptrCast(self)), pFocusObject);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IDistributorNotify_Value = Guid.initString("56a868af-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IDistributorNotify = &IID_IDistributorNotify_Value;
pub const IDistributorNotify = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDistributorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDistributorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Pause: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDistributorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDistributorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Run: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDistributorNotify,
                tStart: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDistributorNotify,
                tStart: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSyncSource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDistributorNotify,
                pClock: ?*IReferenceClock,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDistributorNotify,
                pClock: ?*IReferenceClock,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NotifyGraphChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDistributorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDistributorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDistributorNotify_Stop(self: *const T) HRESULT {
                return @as(*const IDistributorNotify.VTable, @ptrCast(self.vtable)).Stop(@as(*const IDistributorNotify, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDistributorNotify_Pause(self: *const T) HRESULT {
                return @as(*const IDistributorNotify.VTable, @ptrCast(self.vtable)).Pause(@as(*const IDistributorNotify, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDistributorNotify_Run(self: *const T, tStart: i64) HRESULT {
                return @as(*const IDistributorNotify.VTable, @ptrCast(self.vtable)).Run(@as(*const IDistributorNotify, @ptrCast(self)), tStart);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDistributorNotify_SetSyncSource(self: *const T, pClock: ?*IReferenceClock) HRESULT {
                return @as(*const IDistributorNotify.VTable, @ptrCast(self.vtable)).SetSyncSource(@as(*const IDistributorNotify, @ptrCast(self)), pClock);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDistributorNotify_NotifyGraphChange(self: *const T) HRESULT {
                return @as(*const IDistributorNotify.VTable, @ptrCast(self.vtable)).NotifyGraphChange(@as(*const IDistributorNotify, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_STREAM_INFO_FLAGS = enum(i32) {
    START_DEFINED = 1,
    STOP_DEFINED = 2,
    DISCARDING = 4,
    STOP_SEND_EXTRA = 16,
};
pub const AM_STREAM_INFO_START_DEFINED = AM_STREAM_INFO_FLAGS.START_DEFINED;
pub const AM_STREAM_INFO_STOP_DEFINED = AM_STREAM_INFO_FLAGS.STOP_DEFINED;
pub const AM_STREAM_INFO_DISCARDING = AM_STREAM_INFO_FLAGS.DISCARDING;
pub const AM_STREAM_INFO_STOP_SEND_EXTRA = AM_STREAM_INFO_FLAGS.STOP_SEND_EXTRA;

pub const AM_STREAM_INFO = extern struct {
    tStart: i64,
    tStop: i64,
    dwStartCookie: u32,
    dwStopCookie: u32,
    dwFlags: u32,
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMStreamControl_Value = Guid.initString("36b73881-c2c8-11cf-8b46-00805f6cef60");
pub const IID_IAMStreamControl = &IID_IAMStreamControl_Value;
pub const IAMStreamControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        StartAt: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamControl,
                ptStart: ?*const i64,
                dwCookie: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamControl,
                ptStart: ?*const i64,
                dwCookie: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StopAt: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamControl,
                ptStop: ?*const i64,
                bSendExtra: BOOL,
                dwCookie: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamControl,
                ptStop: ?*const i64,
                bSendExtra: BOOL,
                dwCookie: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamControl,
                pInfo: ?*AM_STREAM_INFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamControl,
                pInfo: ?*AM_STREAM_INFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamControl_StartAt(self: *const T, ptStart: ?*const i64, dwCookie: u32) HRESULT {
                return @as(*const IAMStreamControl.VTable, @ptrCast(self.vtable)).StartAt(@as(*const IAMStreamControl, @ptrCast(self)), ptStart, dwCookie);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamControl_StopAt(self: *const T, ptStop: ?*const i64, bSendExtra: BOOL, dwCookie: u32) HRESULT {
                return @as(*const IAMStreamControl.VTable, @ptrCast(self.vtable)).StopAt(@as(*const IAMStreamControl, @ptrCast(self)), ptStop, bSendExtra, dwCookie);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamControl_GetInfo(self: *const T, pInfo: ?*AM_STREAM_INFO) HRESULT {
                return @as(*const IAMStreamControl.VTable, @ptrCast(self.vtable)).GetInfo(@as(*const IAMStreamControl, @ptrCast(self)), pInfo);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_ISeekingPassThru_Value = Guid.initString("36b73883-c2c8-11cf-8b46-00805f6cef60");
pub const IID_ISeekingPassThru = &IID_ISeekingPassThru_Value;
pub const ISeekingPassThru = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Init: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISeekingPassThru,
                bSupportRendering: BOOL,
                pPin: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISeekingPassThru,
                bSupportRendering: BOOL,
                pPin: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISeekingPassThru_Init(self: *const T, bSupportRendering: BOOL, pPin: ?*IPin) HRESULT {
                return @as(*const ISeekingPassThru.VTable, @ptrCast(self.vtable)).Init(@as(*const ISeekingPassThru, @ptrCast(self)), bSupportRendering, pPin);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VIDEO_STREAM_CONFIG_CAPS = extern struct {
    guid: Guid,
    VideoStandard: u32,
    InputSize: SIZE,
    MinCroppingSize: SIZE,
    MaxCroppingSize: SIZE,
    CropGranularityX: i32,
    CropGranularityY: i32,
    CropAlignX: i32,
    CropAlignY: i32,
    MinOutputSize: SIZE,
    MaxOutputSize: SIZE,
    OutputGranularityX: i32,
    OutputGranularityY: i32,
    StretchTapsX: i32,
    StretchTapsY: i32,
    ShrinkTapsX: i32,
    ShrinkTapsY: i32,
    MinFrameInterval: i64,
    MaxFrameInterval: i64,
    MinBitsPerSecond: i32,
    MaxBitsPerSecond: i32,
};

pub const AUDIO_STREAM_CONFIG_CAPS = extern struct {
    guid: Guid,
    MinimumChannels: u32,
    MaximumChannels: u32,
    ChannelsGranularity: u32,
    MinimumBitsPerSample: u32,
    MaximumBitsPerSample: u32,
    BitsPerSampleGranularity: u32,
    MinimumSampleFrequency: u32,
    MaximumSampleFrequency: u32,
    SampleFrequencyGranularity: u32,
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMStreamConfig_Value = Guid.initString("c6e13340-30ac-11d0-a18c-00a0c9118956");
pub const IID_IAMStreamConfig = &IID_IAMStreamConfig_Value;
pub const IAMStreamConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamConfig,
                pmt: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamConfig,
                pmt: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamConfig,
                ppmt: ?*?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamConfig,
                ppmt: ?*?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumberOfCapabilities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamConfig,
                piCount: ?*i32,
                piSize: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamConfig,
                piCount: ?*i32,
                piSize: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamCaps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamConfig,
                iIndex: i32,
                ppmt: ?*?*AM_MEDIA_TYPE,
                pSCC: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamConfig,
                iIndex: i32,
                ppmt: ?*?*AM_MEDIA_TYPE,
                pSCC: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamConfig_SetFormat(self: *const T, pmt: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IAMStreamConfig.VTable, @ptrCast(self.vtable)).SetFormat(@as(*const IAMStreamConfig, @ptrCast(self)), pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamConfig_GetFormat(self: *const T, ppmt: ?*?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IAMStreamConfig.VTable, @ptrCast(self.vtable)).GetFormat(@as(*const IAMStreamConfig, @ptrCast(self)), ppmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamConfig_GetNumberOfCapabilities(self: *const T, piCount: ?*i32, piSize: ?*i32) HRESULT {
                return @as(*const IAMStreamConfig.VTable, @ptrCast(self.vtable)).GetNumberOfCapabilities(@as(*const IAMStreamConfig, @ptrCast(self)), piCount, piSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamConfig_GetStreamCaps(self: *const T, iIndex: i32, ppmt: ?*?*AM_MEDIA_TYPE, pSCC: ?*u8) HRESULT {
                return @as(*const IAMStreamConfig.VTable, @ptrCast(self.vtable)).GetStreamCaps(@as(*const IAMStreamConfig, @ptrCast(self)), iIndex, ppmt, pSCC);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const InterleavingMode = enum(i32) {
    NONE = 0,
    CAPTURE = 1,
    FULL = 2,
    NONE_BUFFERED = 3,
};
pub const INTERLEAVE_NONE = InterleavingMode.NONE;
pub const INTERLEAVE_CAPTURE = InterleavingMode.CAPTURE;
pub const INTERLEAVE_FULL = InterleavingMode.FULL;
pub const INTERLEAVE_NONE_BUFFERED = InterleavingMode.NONE_BUFFERED;

// TODO: this type is limited to platform 'windows5.0'
const IID_IConfigInterleaving_Value = Guid.initString("bee3d220-157b-11d0-bd23-00a0c911ce86");
pub const IID_IConfigInterleaving = &IID_IConfigInterleaving_Value;
pub const IConfigInterleaving = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Mode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IConfigInterleaving,
                mode: InterleavingMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IConfigInterleaving,
                mode: InterleavingMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Mode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IConfigInterleaving,
                pMode: ?*InterleavingMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IConfigInterleaving,
                pMode: ?*InterleavingMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Interleaving: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IConfigInterleaving,
                prtInterleave: ?*const i64,
                prtPreroll: ?*const i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IConfigInterleaving,
                prtInterleave: ?*const i64,
                prtPreroll: ?*const i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Interleaving: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IConfigInterleaving,
                prtInterleave: ?*i64,
                prtPreroll: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IConfigInterleaving,
                prtInterleave: ?*i64,
                prtPreroll: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigInterleaving_put_Mode(self: *const T, mode: InterleavingMode) HRESULT {
                return @as(*const IConfigInterleaving.VTable, @ptrCast(self.vtable)).put_Mode(@as(*const IConfigInterleaving, @ptrCast(self)), mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigInterleaving_get_Mode(self: *const T, pMode: ?*InterleavingMode) HRESULT {
                return @as(*const IConfigInterleaving.VTable, @ptrCast(self.vtable)).get_Mode(@as(*const IConfigInterleaving, @ptrCast(self)), pMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigInterleaving_put_Interleaving(self: *const T, prtInterleave: ?*const i64, prtPreroll: ?*const i64) HRESULT {
                return @as(*const IConfigInterleaving.VTable, @ptrCast(self.vtable)).put_Interleaving(@as(*const IConfigInterleaving, @ptrCast(self)), prtInterleave, prtPreroll);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigInterleaving_get_Interleaving(self: *const T, prtInterleave: ?*i64, prtPreroll: ?*i64) HRESULT {
                return @as(*const IConfigInterleaving.VTable, @ptrCast(self.vtable)).get_Interleaving(@as(*const IConfigInterleaving, @ptrCast(self)), prtInterleave, prtPreroll);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IConfigAviMux_Value = Guid.initString("5acd6aa0-f482-11ce-8b67-00aa00a3f1a6");
pub const IID_IConfigAviMux = &IID_IConfigAviMux_Value;
pub const IConfigAviMux = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetMasterStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAviMux,
                iStream: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAviMux,
                iStream: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMasterStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAviMux,
                pStream: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAviMux,
                pStream: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOutputCompatibilityIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAviMux,
                fOldIndex: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAviMux,
                fOldIndex: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOutputCompatibilityIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAviMux,
                pfOldIndex: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAviMux,
                pfOldIndex: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAviMux_SetMasterStream(self: *const T, iStream: i32) HRESULT {
                return @as(*const IConfigAviMux.VTable, @ptrCast(self.vtable)).SetMasterStream(@as(*const IConfigAviMux, @ptrCast(self)), iStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAviMux_GetMasterStream(self: *const T, pStream: ?*i32) HRESULT {
                return @as(*const IConfigAviMux.VTable, @ptrCast(self.vtable)).GetMasterStream(@as(*const IConfigAviMux, @ptrCast(self)), pStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAviMux_SetOutputCompatibilityIndex(self: *const T, fOldIndex: BOOL) HRESULT {
                return @as(*const IConfigAviMux.VTable, @ptrCast(self.vtable)).SetOutputCompatibilityIndex(@as(*const IConfigAviMux, @ptrCast(self)), fOldIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAviMux_GetOutputCompatibilityIndex(self: *const T, pfOldIndex: ?*BOOL) HRESULT {
                return @as(*const IConfigAviMux.VTable, @ptrCast(self.vtable)).GetOutputCompatibilityIndex(@as(*const IConfigAviMux, @ptrCast(self)), pfOldIndex);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const CompressionCaps = enum(i32) {
    Quality = 1,
    Crunch = 2,
    KeyFrame = 4,
    BFrame = 8,
    Window = 16,
};
pub const CompressionCaps_CanQuality = CompressionCaps.Quality;
pub const CompressionCaps_CanCrunch = CompressionCaps.Crunch;
pub const CompressionCaps_CanKeyFrame = CompressionCaps.KeyFrame;
pub const CompressionCaps_CanBFrame = CompressionCaps.BFrame;
pub const CompressionCaps_CanWindow = CompressionCaps.Window;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMVideoCompression_Value = Guid.initString("c6e13343-30ac-11d0-a18c-00a0c9118956");
pub const IID_IAMVideoCompression = &IID_IAMVideoCompression_Value;
pub const IAMVideoCompression = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_KeyFrameRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMVideoCompression,
                KeyFrameRate: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMVideoCompression,
                KeyFrameRate: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_KeyFrameRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMVideoCompression,
                pKeyFrameRate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMVideoCompression,
                pKeyFrameRate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PFramesPerKeyFrame: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMVideoCompression,
                PFramesPerKeyFrame: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMVideoCompression,
                PFramesPerKeyFrame: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PFramesPerKeyFrame: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMVideoCompression,
                pPFramesPerKeyFrame: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMVideoCompression,
                pPFramesPerKeyFrame: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Quality: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMVideoCompression,
                Quality: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMVideoCompression,
                Quality: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Quality: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMVideoCompression,
                pQuality: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMVideoCompression,
                pQuality: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_WindowSize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMVideoCompression,
                WindowSize: u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMVideoCompression,
                WindowSize: u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WindowSize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMVideoCompression,
                pWindowSize: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMVideoCompression,
                pWindowSize: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoCompression,
                // TODO: what to do with BytesParamIndex 1?
                pszVersion: ?PWSTR,
                pcbVersion: ?*i32,
                // TODO: what to do with BytesParamIndex 3?
                pszDescription: ?PWSTR,
                pcbDescription: ?*i32,
                pDefaultKeyFrameRate: ?*i32,
                pDefaultPFramesPerKey: ?*i32,
                pDefaultQuality: ?*f64,
                pCapabilities: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoCompression,
                // TODO: what to do with BytesParamIndex 1?
                pszVersion: ?PWSTR,
                pcbVersion: ?*i32,
                // TODO: what to do with BytesParamIndex 3?
                pszDescription: ?PWSTR,
                pcbDescription: ?*i32,
                pDefaultKeyFrameRate: ?*i32,
                pDefaultPFramesPerKey: ?*i32,
                pDefaultQuality: ?*f64,
                pCapabilities: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OverrideKeyFrame: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoCompression,
                FrameNumber: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoCompression,
                FrameNumber: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OverrideFrameSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoCompression,
                FrameNumber: i32,
                Size: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoCompression,
                FrameNumber: i32,
                Size: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_put_KeyFrameRate(self: *const T, KeyFrameRate: i32) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).put_KeyFrameRate(@as(*const IAMVideoCompression, @ptrCast(self)), KeyFrameRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_get_KeyFrameRate(self: *const T, pKeyFrameRate: ?*i32) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).get_KeyFrameRate(@as(*const IAMVideoCompression, @ptrCast(self)), pKeyFrameRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_put_PFramesPerKeyFrame(self: *const T, PFramesPerKeyFrame: i32) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).put_PFramesPerKeyFrame(@as(*const IAMVideoCompression, @ptrCast(self)), PFramesPerKeyFrame);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_get_PFramesPerKeyFrame(self: *const T, pPFramesPerKeyFrame: ?*i32) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).get_PFramesPerKeyFrame(@as(*const IAMVideoCompression, @ptrCast(self)), pPFramesPerKeyFrame);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_put_Quality(self: *const T, _param_Quality: f64) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).put_Quality(@as(*const IAMVideoCompression, @ptrCast(self)), _param_Quality);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_get_Quality(self: *const T, pQuality: ?*f64) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).get_Quality(@as(*const IAMVideoCompression, @ptrCast(self)), pQuality);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_put_WindowSize(self: *const T, WindowSize: u64) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).put_WindowSize(@as(*const IAMVideoCompression, @ptrCast(self)), WindowSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_get_WindowSize(self: *const T, pWindowSize: ?*u64) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).get_WindowSize(@as(*const IAMVideoCompression, @ptrCast(self)), pWindowSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_GetInfo(self: *const T, pszVersion: ?PWSTR, pcbVersion: ?*i32, pszDescription: ?PWSTR, pcbDescription: ?*i32, pDefaultKeyFrameRate: ?*i32, pDefaultPFramesPerKey: ?*i32, pDefaultQuality: ?*f64, pCapabilities: ?*i32) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).GetInfo(@as(*const IAMVideoCompression, @ptrCast(self)), pszVersion, pcbVersion, pszDescription, pcbDescription, pDefaultKeyFrameRate, pDefaultPFramesPerKey, pDefaultQuality, pCapabilities);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_OverrideKeyFrame(self: *const T, FrameNumber: i32) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).OverrideKeyFrame(@as(*const IAMVideoCompression, @ptrCast(self)), FrameNumber);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoCompression_OverrideFrameSize(self: *const T, FrameNumber: i32, Size: i32) HRESULT {
                return @as(*const IAMVideoCompression.VTable, @ptrCast(self.vtable)).OverrideFrameSize(@as(*const IAMVideoCompression, @ptrCast(self)), FrameNumber, Size);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VfwCaptureDialogs = enum(i32) {
    Source = 1,
    Format = 2,
    Display = 4,
};
pub const VfwCaptureDialog_Source = VfwCaptureDialogs.Source;
pub const VfwCaptureDialog_Format = VfwCaptureDialogs.Format;
pub const VfwCaptureDialog_Display = VfwCaptureDialogs.Display;

pub const VfwCompressDialogs = enum(i32) {
    Config = 1,
    About = 2,
    QueryConfig = 4,
    QueryAbout = 8,
};
pub const VfwCompressDialog_Config = VfwCompressDialogs.Config;
pub const VfwCompressDialog_About = VfwCompressDialogs.About;
pub const VfwCompressDialog_QueryConfig = VfwCompressDialogs.QueryConfig;
pub const VfwCompressDialog_QueryAbout = VfwCompressDialogs.QueryAbout;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMVfwCaptureDialogs_Value = Guid.initString("d8d715a0-6e5e-11d0-b3f0-00aa003761c5");
pub const IID_IAMVfwCaptureDialogs = &IID_IAMVfwCaptureDialogs_Value;
pub const IAMVfwCaptureDialogs = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        HasDialog: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVfwCaptureDialogs,
                iDialog: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVfwCaptureDialogs,
                iDialog: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ShowDialog: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVfwCaptureDialogs,
                iDialog: i32,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVfwCaptureDialogs,
                iDialog: i32,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendDriverMessage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVfwCaptureDialogs,
                iDialog: i32,
                uMsg: i32,
                dw1: i32,
                dw2: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVfwCaptureDialogs,
                iDialog: i32,
                uMsg: i32,
                dw1: i32,
                dw2: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVfwCaptureDialogs_HasDialog(self: *const T, iDialog: i32) HRESULT {
                return @as(*const IAMVfwCaptureDialogs.VTable, @ptrCast(self.vtable)).HasDialog(@as(*const IAMVfwCaptureDialogs, @ptrCast(self)), iDialog);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVfwCaptureDialogs_ShowDialog(self: *const T, iDialog: i32, hwnd: ?HWND) HRESULT {
                return @as(*const IAMVfwCaptureDialogs.VTable, @ptrCast(self.vtable)).ShowDialog(@as(*const IAMVfwCaptureDialogs, @ptrCast(self)), iDialog, hwnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVfwCaptureDialogs_SendDriverMessage(self: *const T, iDialog: i32, uMsg: i32, dw1: i32, dw2: i32) HRESULT {
                return @as(*const IAMVfwCaptureDialogs.VTable, @ptrCast(self.vtable)).SendDriverMessage(@as(*const IAMVfwCaptureDialogs, @ptrCast(self)), iDialog, uMsg, dw1, dw2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMVfwCompressDialogs_Value = Guid.initString("d8d715a3-6e5e-11d0-b3f0-00aa003761c5");
pub const IID_IAMVfwCompressDialogs = &IID_IAMVfwCompressDialogs_Value;
pub const IAMVfwCompressDialogs = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        ShowDialog: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVfwCompressDialogs,
                iDialog: i32,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVfwCompressDialogs,
                iDialog: i32,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVfwCompressDialogs,
                // TODO: what to do with BytesParamIndex 1?
                pState: ?*anyopaque,
                pcbState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVfwCompressDialogs,
                // TODO: what to do with BytesParamIndex 1?
                pState: ?*anyopaque,
                pcbState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVfwCompressDialogs,
                // TODO: what to do with BytesParamIndex 1?
                pState: ?*anyopaque,
                cbState: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVfwCompressDialogs,
                // TODO: what to do with BytesParamIndex 1?
                pState: ?*anyopaque,
                cbState: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendDriverMessage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVfwCompressDialogs,
                uMsg: i32,
                dw1: i32,
                dw2: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVfwCompressDialogs,
                uMsg: i32,
                dw1: i32,
                dw2: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVfwCompressDialogs_ShowDialog(self: *const T, iDialog: i32, hwnd: ?HWND) HRESULT {
                return @as(*const IAMVfwCompressDialogs.VTable, @ptrCast(self.vtable)).ShowDialog(@as(*const IAMVfwCompressDialogs, @ptrCast(self)), iDialog, hwnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVfwCompressDialogs_GetState(self: *const T, pState: ?*anyopaque, pcbState: ?*i32) HRESULT {
                return @as(*const IAMVfwCompressDialogs.VTable, @ptrCast(self.vtable)).GetState(@as(*const IAMVfwCompressDialogs, @ptrCast(self)), pState, pcbState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVfwCompressDialogs_SetState(self: *const T, pState: ?*anyopaque, cbState: i32) HRESULT {
                return @as(*const IAMVfwCompressDialogs.VTable, @ptrCast(self.vtable)).SetState(@as(*const IAMVfwCompressDialogs, @ptrCast(self)), pState, cbState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVfwCompressDialogs_SendDriverMessage(self: *const T, uMsg: i32, dw1: i32, dw2: i32) HRESULT {
                return @as(*const IAMVfwCompressDialogs.VTable, @ptrCast(self.vtable)).SendDriverMessage(@as(*const IAMVfwCompressDialogs, @ptrCast(self)), uMsg, dw1, dw2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMDroppedFrames_Value = Guid.initString("c6e13344-30ac-11d0-a18c-00a0c9118956");
pub const IID_IAMDroppedFrames = &IID_IAMDroppedFrames_Value;
pub const IAMDroppedFrames = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetNumDropped: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDroppedFrames,
                plDropped: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDroppedFrames,
                plDropped: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumNotDropped: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDroppedFrames,
                plNotDropped: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDroppedFrames,
                plNotDropped: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDroppedInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDroppedFrames,
                lSize: i32,
                plArray: ?*i32,
                plNumCopied: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDroppedFrames,
                lSize: i32,
                plArray: ?*i32,
                plNumCopied: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAverageFrameSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDroppedFrames,
                plAverageSize: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDroppedFrames,
                plAverageSize: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDroppedFrames_GetNumDropped(self: *const T, plDropped: ?*i32) HRESULT {
                return @as(*const IAMDroppedFrames.VTable, @ptrCast(self.vtable)).GetNumDropped(@as(*const IAMDroppedFrames, @ptrCast(self)), plDropped);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDroppedFrames_GetNumNotDropped(self: *const T, plNotDropped: ?*i32) HRESULT {
                return @as(*const IAMDroppedFrames.VTable, @ptrCast(self.vtable)).GetNumNotDropped(@as(*const IAMDroppedFrames, @ptrCast(self)), plNotDropped);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDroppedFrames_GetDroppedInfo(self: *const T, lSize: i32, plArray: ?*i32, plNumCopied: ?*i32) HRESULT {
                return @as(*const IAMDroppedFrames.VTable, @ptrCast(self.vtable)).GetDroppedInfo(@as(*const IAMDroppedFrames, @ptrCast(self)), lSize, plArray, plNumCopied);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDroppedFrames_GetAverageFrameSize(self: *const T, plAverageSize: ?*i32) HRESULT {
                return @as(*const IAMDroppedFrames.VTable, @ptrCast(self.vtable)).GetAverageFrameSize(@as(*const IAMDroppedFrames, @ptrCast(self)), plAverageSize);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMAudioInputMixer_Value = Guid.initString("54c39221-8380-11d0-b3f0-00aa003761c5");
pub const IID_IAMAudioInputMixer = &IID_IAMAudioInputMixer_Value;
pub const IAMAudioInputMixer = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Enable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                fEnable: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                fEnable: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Enable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                pfEnable: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                pfEnable: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Mono: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                fMono: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                fMono: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Mono: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                pfMono: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                pfMono: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MixLevel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                Level: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                Level: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MixLevel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                pLevel: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                pLevel: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Pan: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                Pan: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                Pan: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Pan: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                pPan: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                pPan: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Loudness: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                fLoudness: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                fLoudness: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Loudness: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                pfLoudness: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                pfLoudness: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Treble: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                Treble: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                Treble: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Treble: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                pTreble: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                pTreble: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TrebleRange: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                pRange: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                pRange: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Bass: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                Bass: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                Bass: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Bass: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                pBass: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                pBass: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BassRange: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAudioInputMixer,
                pRange: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAudioInputMixer,
                pRange: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_put_Enable(self: *const T, fEnable: BOOL) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).put_Enable(@as(*const IAMAudioInputMixer, @ptrCast(self)), fEnable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_get_Enable(self: *const T, pfEnable: ?*BOOL) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).get_Enable(@as(*const IAMAudioInputMixer, @ptrCast(self)), pfEnable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_put_Mono(self: *const T, fMono: BOOL) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).put_Mono(@as(*const IAMAudioInputMixer, @ptrCast(self)), fMono);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_get_Mono(self: *const T, pfMono: ?*BOOL) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).get_Mono(@as(*const IAMAudioInputMixer, @ptrCast(self)), pfMono);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_put_MixLevel(self: *const T, Level: f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).put_MixLevel(@as(*const IAMAudioInputMixer, @ptrCast(self)), Level);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_get_MixLevel(self: *const T, pLevel: ?*f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).get_MixLevel(@as(*const IAMAudioInputMixer, @ptrCast(self)), pLevel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_put_Pan(self: *const T, Pan: f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).put_Pan(@as(*const IAMAudioInputMixer, @ptrCast(self)), Pan);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_get_Pan(self: *const T, pPan: ?*f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).get_Pan(@as(*const IAMAudioInputMixer, @ptrCast(self)), pPan);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_put_Loudness(self: *const T, fLoudness: BOOL) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).put_Loudness(@as(*const IAMAudioInputMixer, @ptrCast(self)), fLoudness);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_get_Loudness(self: *const T, pfLoudness: ?*BOOL) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).get_Loudness(@as(*const IAMAudioInputMixer, @ptrCast(self)), pfLoudness);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_put_Treble(self: *const T, Treble: f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).put_Treble(@as(*const IAMAudioInputMixer, @ptrCast(self)), Treble);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_get_Treble(self: *const T, pTreble: ?*f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).get_Treble(@as(*const IAMAudioInputMixer, @ptrCast(self)), pTreble);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_get_TrebleRange(self: *const T, pRange: ?*f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).get_TrebleRange(@as(*const IAMAudioInputMixer, @ptrCast(self)), pRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_put_Bass(self: *const T, Bass: f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).put_Bass(@as(*const IAMAudioInputMixer, @ptrCast(self)), Bass);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_get_Bass(self: *const T, pBass: ?*f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).get_Bass(@as(*const IAMAudioInputMixer, @ptrCast(self)), pBass);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioInputMixer_get_BassRange(self: *const T, pRange: ?*f64) HRESULT {
                return @as(*const IAMAudioInputMixer.VTable, @ptrCast(self.vtable)).get_BassRange(@as(*const IAMAudioInputMixer, @ptrCast(self)), pRange);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMBufferNegotiation_Value = Guid.initString("56ed71a0-af5f-11d0-b3f0-00aa003761c5");
pub const IID_IAMBufferNegotiation = &IID_IAMBufferNegotiation_Value;
pub const IAMBufferNegotiation = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SuggestAllocatorProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMBufferNegotiation,
                pprop: ?*const ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMBufferNegotiation,
                pprop: ?*const ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAllocatorProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMBufferNegotiation,
                pprop: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMBufferNegotiation,
                pprop: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMBufferNegotiation_SuggestAllocatorProperties(self: *const T, pprop: ?*const ALLOCATOR_PROPERTIES) HRESULT {
                return @as(*const IAMBufferNegotiation.VTable, @ptrCast(self.vtable)).SuggestAllocatorProperties(@as(*const IAMBufferNegotiation, @ptrCast(self)), pprop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMBufferNegotiation_GetAllocatorProperties(self: *const T, pprop: ?*ALLOCATOR_PROPERTIES) HRESULT {
                return @as(*const IAMBufferNegotiation.VTable, @ptrCast(self.vtable)).GetAllocatorProperties(@as(*const IAMBufferNegotiation, @ptrCast(self)), pprop);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AnalogVideoStandard = enum(i32) {
    _None = 0,
    _NTSC_M = 1,
    _NTSC_M_J = 2,
    _NTSC_433 = 4,
    _PAL_B = 16,
    _PAL_D = 32,
    _PAL_G = 64,
    _PAL_H = 128,
    _PAL_I = 256,
    _PAL_M = 512,
    _PAL_N = 1024,
    _PAL_60 = 2048,
    _SECAM_B = 4096,
    _SECAM_D = 8192,
    _SECAM_G = 16384,
    _SECAM_H = 32768,
    _SECAM_K = 65536,
    _SECAM_K1 = 131072,
    _SECAM_L = 262144,
    _SECAM_L1 = 524288,
    _PAL_N_COMBO = 1048576,
    Mask_MCE_NTSC = 1052167,
    Mask_MCE_PAL = 496,
    Mask_MCE_SECAM = 1044480,
};
pub const AnalogVideo_None = AnalogVideoStandard._None;
pub const AnalogVideo_NTSC_M = AnalogVideoStandard._NTSC_M;
pub const AnalogVideo_NTSC_M_J = AnalogVideoStandard._NTSC_M_J;
pub const AnalogVideo_NTSC_433 = AnalogVideoStandard._NTSC_433;
pub const AnalogVideo_PAL_B = AnalogVideoStandard._PAL_B;
pub const AnalogVideo_PAL_D = AnalogVideoStandard._PAL_D;
pub const AnalogVideo_PAL_G = AnalogVideoStandard._PAL_G;
pub const AnalogVideo_PAL_H = AnalogVideoStandard._PAL_H;
pub const AnalogVideo_PAL_I = AnalogVideoStandard._PAL_I;
pub const AnalogVideo_PAL_M = AnalogVideoStandard._PAL_M;
pub const AnalogVideo_PAL_N = AnalogVideoStandard._PAL_N;
pub const AnalogVideo_PAL_60 = AnalogVideoStandard._PAL_60;
pub const AnalogVideo_SECAM_B = AnalogVideoStandard._SECAM_B;
pub const AnalogVideo_SECAM_D = AnalogVideoStandard._SECAM_D;
pub const AnalogVideo_SECAM_G = AnalogVideoStandard._SECAM_G;
pub const AnalogVideo_SECAM_H = AnalogVideoStandard._SECAM_H;
pub const AnalogVideo_SECAM_K = AnalogVideoStandard._SECAM_K;
pub const AnalogVideo_SECAM_K1 = AnalogVideoStandard._SECAM_K1;
pub const AnalogVideo_SECAM_L = AnalogVideoStandard._SECAM_L;
pub const AnalogVideo_SECAM_L1 = AnalogVideoStandard._SECAM_L1;
pub const AnalogVideo_PAL_N_COMBO = AnalogVideoStandard._PAL_N_COMBO;
pub const AnalogVideoMask_MCE_NTSC = AnalogVideoStandard.Mask_MCE_NTSC;
pub const AnalogVideoMask_MCE_PAL = AnalogVideoStandard.Mask_MCE_PAL;
pub const AnalogVideoMask_MCE_SECAM = AnalogVideoStandard.Mask_MCE_SECAM;

pub const TunerInputType = enum(i32) {
    Cable = 0,
    Antenna = 1,
};
pub const TunerInputCable = TunerInputType.Cable;
pub const TunerInputAntenna = TunerInputType.Antenna;

pub const VideoCopyProtectionType = enum(i32) {
    Basic = 0,
    CBI = 1,
};
pub const VideoCopyProtectionMacrovisionBasic = VideoCopyProtectionType.Basic;
pub const VideoCopyProtectionMacrovisionCBI = VideoCopyProtectionType.CBI;

pub const PhysicalConnectorType = enum(i32) {
    Video_Tuner = 1,
    Video_Composite = 2,
    Video_SVideo = 3,
    Video_RGB = 4,
    Video_YRYBY = 5,
    Video_SerialDigital = 6,
    Video_ParallelDigital = 7,
    Video_SCSI = 8,
    Video_AUX = 9,
    Video_1394 = 10,
    Video_USB = 11,
    Video_VideoDecoder = 12,
    Video_VideoEncoder = 13,
    Video_SCART = 14,
    Video_Black = 15,
    Audio_Tuner = 4096,
    Audio_Line = 4097,
    Audio_Mic = 4098,
    Audio_AESDigital = 4099,
    Audio_SPDIFDigital = 4100,
    Audio_SCSI = 4101,
    Audio_AUX = 4102,
    Audio_1394 = 4103,
    Audio_USB = 4104,
    Audio_AudioDecoder = 4105,
};
pub const PhysConn_Video_Tuner = PhysicalConnectorType.Video_Tuner;
pub const PhysConn_Video_Composite = PhysicalConnectorType.Video_Composite;
pub const PhysConn_Video_SVideo = PhysicalConnectorType.Video_SVideo;
pub const PhysConn_Video_RGB = PhysicalConnectorType.Video_RGB;
pub const PhysConn_Video_YRYBY = PhysicalConnectorType.Video_YRYBY;
pub const PhysConn_Video_SerialDigital = PhysicalConnectorType.Video_SerialDigital;
pub const PhysConn_Video_ParallelDigital = PhysicalConnectorType.Video_ParallelDigital;
pub const PhysConn_Video_SCSI = PhysicalConnectorType.Video_SCSI;
pub const PhysConn_Video_AUX = PhysicalConnectorType.Video_AUX;
pub const PhysConn_Video_1394 = PhysicalConnectorType.Video_1394;
pub const PhysConn_Video_USB = PhysicalConnectorType.Video_USB;
pub const PhysConn_Video_VideoDecoder = PhysicalConnectorType.Video_VideoDecoder;
pub const PhysConn_Video_VideoEncoder = PhysicalConnectorType.Video_VideoEncoder;
pub const PhysConn_Video_SCART = PhysicalConnectorType.Video_SCART;
pub const PhysConn_Video_Black = PhysicalConnectorType.Video_Black;
pub const PhysConn_Audio_Tuner = PhysicalConnectorType.Audio_Tuner;
pub const PhysConn_Audio_Line = PhysicalConnectorType.Audio_Line;
pub const PhysConn_Audio_Mic = PhysicalConnectorType.Audio_Mic;
pub const PhysConn_Audio_AESDigital = PhysicalConnectorType.Audio_AESDigital;
pub const PhysConn_Audio_SPDIFDigital = PhysicalConnectorType.Audio_SPDIFDigital;
pub const PhysConn_Audio_SCSI = PhysicalConnectorType.Audio_SCSI;
pub const PhysConn_Audio_AUX = PhysicalConnectorType.Audio_AUX;
pub const PhysConn_Audio_1394 = PhysicalConnectorType.Audio_1394;
pub const PhysConn_Audio_USB = PhysicalConnectorType.Audio_USB;
pub const PhysConn_Audio_AudioDecoder = PhysicalConnectorType.Audio_AudioDecoder;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMAnalogVideoDecoder_Value = Guid.initString("c6e13350-30ac-11d0-a18c-00a0c9118956");
pub const IID_IAMAnalogVideoDecoder = &IID_IAMAnalogVideoDecoder_Value;
pub const IAMAnalogVideoDecoder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AvailableTVFormats: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoDecoder,
                lAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoDecoder,
                lAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TVFormat: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoDecoder,
                lAnalogVideoStandard: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoDecoder,
                lAnalogVideoStandard: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TVFormat: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoDecoder,
                plAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoDecoder,
                plAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_HorizontalLocked: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoDecoder,
                plLocked: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoDecoder,
                plLocked: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_VCRHorizontalLocking: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoDecoder,
                lVCRHorizontalLocking: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoDecoder,
                lVCRHorizontalLocking: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VCRHorizontalLocking: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoDecoder,
                plVCRHorizontalLocking: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoDecoder,
                plVCRHorizontalLocking: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NumberOfLines: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoDecoder,
                plNumberOfLines: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoDecoder,
                plNumberOfLines: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_OutputEnable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoDecoder,
                lOutputEnable: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoDecoder,
                lOutputEnable: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OutputEnable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoDecoder,
                plOutputEnable: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoDecoder,
                plOutputEnable: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoDecoder_get_AvailableTVFormats(self: *const T, lAnalogVideoStandard: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoDecoder.VTable, @ptrCast(self.vtable)).get_AvailableTVFormats(@as(*const IAMAnalogVideoDecoder, @ptrCast(self)), lAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoDecoder_put_TVFormat(self: *const T, lAnalogVideoStandard: i32) HRESULT {
                return @as(*const IAMAnalogVideoDecoder.VTable, @ptrCast(self.vtable)).put_TVFormat(@as(*const IAMAnalogVideoDecoder, @ptrCast(self)), lAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoDecoder_get_TVFormat(self: *const T, plAnalogVideoStandard: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoDecoder.VTable, @ptrCast(self.vtable)).get_TVFormat(@as(*const IAMAnalogVideoDecoder, @ptrCast(self)), plAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoDecoder_get_HorizontalLocked(self: *const T, plLocked: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoDecoder.VTable, @ptrCast(self.vtable)).get_HorizontalLocked(@as(*const IAMAnalogVideoDecoder, @ptrCast(self)), plLocked);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoDecoder_put_VCRHorizontalLocking(self: *const T, lVCRHorizontalLocking: i32) HRESULT {
                return @as(*const IAMAnalogVideoDecoder.VTable, @ptrCast(self.vtable)).put_VCRHorizontalLocking(@as(*const IAMAnalogVideoDecoder, @ptrCast(self)), lVCRHorizontalLocking);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoDecoder_get_VCRHorizontalLocking(self: *const T, plVCRHorizontalLocking: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoDecoder.VTable, @ptrCast(self.vtable)).get_VCRHorizontalLocking(@as(*const IAMAnalogVideoDecoder, @ptrCast(self)), plVCRHorizontalLocking);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoDecoder_get_NumberOfLines(self: *const T, plNumberOfLines: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoDecoder.VTable, @ptrCast(self.vtable)).get_NumberOfLines(@as(*const IAMAnalogVideoDecoder, @ptrCast(self)), plNumberOfLines);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoDecoder_put_OutputEnable(self: *const T, lOutputEnable: i32) HRESULT {
                return @as(*const IAMAnalogVideoDecoder.VTable, @ptrCast(self.vtable)).put_OutputEnable(@as(*const IAMAnalogVideoDecoder, @ptrCast(self)), lOutputEnable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoDecoder_get_OutputEnable(self: *const T, plOutputEnable: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoDecoder.VTable, @ptrCast(self.vtable)).get_OutputEnable(@as(*const IAMAnalogVideoDecoder, @ptrCast(self)), plOutputEnable);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VideoProcAmpProperty = enum(i32) {
    Brightness = 0,
    Contrast = 1,
    Hue = 2,
    Saturation = 3,
    Sharpness = 4,
    Gamma = 5,
    ColorEnable = 6,
    WhiteBalance = 7,
    BacklightCompensation = 8,
    Gain = 9,
};
pub const VideoProcAmp_Brightness = VideoProcAmpProperty.Brightness;
pub const VideoProcAmp_Contrast = VideoProcAmpProperty.Contrast;
pub const VideoProcAmp_Hue = VideoProcAmpProperty.Hue;
pub const VideoProcAmp_Saturation = VideoProcAmpProperty.Saturation;
pub const VideoProcAmp_Sharpness = VideoProcAmpProperty.Sharpness;
pub const VideoProcAmp_Gamma = VideoProcAmpProperty.Gamma;
pub const VideoProcAmp_ColorEnable = VideoProcAmpProperty.ColorEnable;
pub const VideoProcAmp_WhiteBalance = VideoProcAmpProperty.WhiteBalance;
pub const VideoProcAmp_BacklightCompensation = VideoProcAmpProperty.BacklightCompensation;
pub const VideoProcAmp_Gain = VideoProcAmpProperty.Gain;

pub const VideoProcAmpFlags = enum(i32) {
    Auto = 1,
    Manual = 2,
};
pub const VideoProcAmp_Flags_Auto = VideoProcAmpFlags.Auto;
pub const VideoProcAmp_Flags_Manual = VideoProcAmpFlags.Manual;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMVideoProcAmp_Value = Guid.initString("c6e13360-30ac-11d0-a18c-00a0c9118956");
pub const IID_IAMVideoProcAmp = &IID_IAMVideoProcAmp_Value;
pub const IAMVideoProcAmp = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetRange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoProcAmp,
                Property: i32,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoProcAmp,
                Property: i32,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Set: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoProcAmp,
                Property: i32,
                lValue: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoProcAmp,
                Property: i32,
                lValue: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Get: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoProcAmp,
                Property: i32,
                lValue: ?*i32,
                Flags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoProcAmp,
                Property: i32,
                lValue: ?*i32,
                Flags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoProcAmp_GetRange(self: *const T, Property: i32, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlags: ?*i32) HRESULT {
                return @as(*const IAMVideoProcAmp.VTable, @ptrCast(self.vtable)).GetRange(@as(*const IAMVideoProcAmp, @ptrCast(self)), Property, pMin, pMax, pSteppingDelta, pDefault, pCapsFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoProcAmp_Set(self: *const T, Property: i32, lValue: i32, Flags: i32) HRESULT {
                return @as(*const IAMVideoProcAmp.VTable, @ptrCast(self.vtable)).Set(@as(*const IAMVideoProcAmp, @ptrCast(self)), Property, lValue, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoProcAmp_Get(self: *const T, Property: i32, lValue: ?*i32, Flags: ?*i32) HRESULT {
                return @as(*const IAMVideoProcAmp.VTable, @ptrCast(self.vtable)).Get(@as(*const IAMVideoProcAmp, @ptrCast(self)), Property, lValue, Flags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const CameraControlProperty = enum(i32) {
    Pan = 0,
    Tilt = 1,
    Roll = 2,
    Zoom = 3,
    Exposure = 4,
    Iris = 5,
    Focus = 6,
};
pub const CameraControl_Pan = CameraControlProperty.Pan;
pub const CameraControl_Tilt = CameraControlProperty.Tilt;
pub const CameraControl_Roll = CameraControlProperty.Roll;
pub const CameraControl_Zoom = CameraControlProperty.Zoom;
pub const CameraControl_Exposure = CameraControlProperty.Exposure;
pub const CameraControl_Iris = CameraControlProperty.Iris;
pub const CameraControl_Focus = CameraControlProperty.Focus;

pub const CameraControlFlags = enum(i32) {
    Auto = 1,
    Manual = 2,
};
pub const CameraControl_Flags_Auto = CameraControlFlags.Auto;
pub const CameraControl_Flags_Manual = CameraControlFlags.Manual;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMCameraControl_Value = Guid.initString("c6e13370-30ac-11d0-a18c-00a0c9118956");
pub const IID_IAMCameraControl = &IID_IAMCameraControl_Value;
pub const IAMCameraControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetRange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCameraControl,
                Property: i32,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCameraControl,
                Property: i32,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Set: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCameraControl,
                Property: i32,
                lValue: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCameraControl,
                Property: i32,
                lValue: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Get: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCameraControl,
                Property: i32,
                lValue: ?*i32,
                Flags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCameraControl,
                Property: i32,
                lValue: ?*i32,
                Flags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCameraControl_GetRange(self: *const T, Property: i32, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlags: ?*i32) HRESULT {
                return @as(*const IAMCameraControl.VTable, @ptrCast(self.vtable)).GetRange(@as(*const IAMCameraControl, @ptrCast(self)), Property, pMin, pMax, pSteppingDelta, pDefault, pCapsFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCameraControl_Set(self: *const T, Property: i32, lValue: i32, Flags: i32) HRESULT {
                return @as(*const IAMCameraControl.VTable, @ptrCast(self.vtable)).Set(@as(*const IAMCameraControl, @ptrCast(self)), Property, lValue, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCameraControl_Get(self: *const T, Property: i32, lValue: ?*i32, Flags: ?*i32) HRESULT {
                return @as(*const IAMCameraControl.VTable, @ptrCast(self.vtable)).Get(@as(*const IAMCameraControl, @ptrCast(self)), Property, lValue, Flags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VideoControlFlags = enum(i32) {
    FlipHorizontal = 1,
    FlipVertical = 2,
    ExternalTriggerEnable = 4,
    Trigger = 8,
};
pub const VideoControlFlag_FlipHorizontal = VideoControlFlags.FlipHorizontal;
pub const VideoControlFlag_FlipVertical = VideoControlFlags.FlipVertical;
pub const VideoControlFlag_ExternalTriggerEnable = VideoControlFlags.ExternalTriggerEnable;
pub const VideoControlFlag_Trigger = VideoControlFlags.Trigger;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMVideoControl_Value = Guid.initString("6a2e0670-28e4-11d0-a18c-00a0c9118956");
pub const IID_IAMVideoControl = &IID_IAMVideoControl_Value;
pub const IAMVideoControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCaps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                pCapsFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                pCapsFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                Mode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                Mode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                Mode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                Mode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentActualFrameRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                ActualFrameRate: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                ActualFrameRate: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMaxAvailableFrameRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                iIndex: i32,
                Dimensions: SIZE,
                MaxAvailableFrameRate: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                iIndex: i32,
                Dimensions: SIZE,
                MaxAvailableFrameRate: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFrameRateList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                iIndex: i32,
                Dimensions: SIZE,
                ListSize: ?*i32,
                FrameRates: ?*?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoControl,
                pPin: ?*IPin,
                iIndex: i32,
                Dimensions: SIZE,
                ListSize: ?*i32,
                FrameRates: ?*?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoControl_GetCaps(self: *const T, pPin: ?*IPin, pCapsFlags: ?*i32) HRESULT {
                return @as(*const IAMVideoControl.VTable, @ptrCast(self.vtable)).GetCaps(@as(*const IAMVideoControl, @ptrCast(self)), pPin, pCapsFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoControl_SetMode(self: *const T, pPin: ?*IPin, Mode: i32) HRESULT {
                return @as(*const IAMVideoControl.VTable, @ptrCast(self.vtable)).SetMode(@as(*const IAMVideoControl, @ptrCast(self)), pPin, Mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoControl_GetMode(self: *const T, pPin: ?*IPin, Mode: ?*i32) HRESULT {
                return @as(*const IAMVideoControl.VTable, @ptrCast(self.vtable)).GetMode(@as(*const IAMVideoControl, @ptrCast(self)), pPin, Mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoControl_GetCurrentActualFrameRate(self: *const T, pPin: ?*IPin, ActualFrameRate: ?*i64) HRESULT {
                return @as(*const IAMVideoControl.VTable, @ptrCast(self.vtable)).GetCurrentActualFrameRate(@as(*const IAMVideoControl, @ptrCast(self)), pPin, ActualFrameRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoControl_GetMaxAvailableFrameRate(self: *const T, pPin: ?*IPin, iIndex: i32, Dimensions: SIZE, MaxAvailableFrameRate: ?*i64) HRESULT {
                return @as(*const IAMVideoControl.VTable, @ptrCast(self.vtable)).GetMaxAvailableFrameRate(@as(*const IAMVideoControl, @ptrCast(self)), pPin, iIndex, Dimensions, MaxAvailableFrameRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoControl_GetFrameRateList(self: *const T, pPin: ?*IPin, iIndex: i32, Dimensions: SIZE, ListSize: ?*i32, FrameRates: ?*?*i64) HRESULT {
                return @as(*const IAMVideoControl.VTable, @ptrCast(self.vtable)).GetFrameRateList(@as(*const IAMVideoControl, @ptrCast(self)), pPin, iIndex, Dimensions, ListSize, FrameRates);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMCrossbar_Value = Guid.initString("c6e13380-30ac-11d0-a18c-00a0c9118956");
pub const IID_IAMCrossbar = &IID_IAMCrossbar_Value;
pub const IAMCrossbar = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PinCounts: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMCrossbar,
                OutputPinCount: ?*i32,
                InputPinCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMCrossbar,
                OutputPinCount: ?*i32,
                InputPinCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CanRoute: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCrossbar,
                OutputPinIndex: i32,
                InputPinIndex: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCrossbar,
                OutputPinIndex: i32,
                InputPinIndex: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Route: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCrossbar,
                OutputPinIndex: i32,
                InputPinIndex: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCrossbar,
                OutputPinIndex: i32,
                InputPinIndex: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_IsRoutedTo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMCrossbar,
                OutputPinIndex: i32,
                InputPinIndex: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMCrossbar,
                OutputPinIndex: i32,
                InputPinIndex: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CrossbarPinInfo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMCrossbar,
                IsInputPin: BOOL,
                PinIndex: i32,
                PinIndexRelated: ?*i32,
                PhysicalType: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMCrossbar,
                IsInputPin: BOOL,
                PinIndex: i32,
                PinIndexRelated: ?*i32,
                PhysicalType: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCrossbar_get_PinCounts(self: *const T, OutputPinCount: ?*i32, InputPinCount: ?*i32) HRESULT {
                return @as(*const IAMCrossbar.VTable, @ptrCast(self.vtable)).get_PinCounts(@as(*const IAMCrossbar, @ptrCast(self)), OutputPinCount, InputPinCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCrossbar_CanRoute(self: *const T, OutputPinIndex: i32, InputPinIndex: i32) HRESULT {
                return @as(*const IAMCrossbar.VTable, @ptrCast(self.vtable)).CanRoute(@as(*const IAMCrossbar, @ptrCast(self)), OutputPinIndex, InputPinIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCrossbar_Route(self: *const T, OutputPinIndex: i32, InputPinIndex: i32) HRESULT {
                return @as(*const IAMCrossbar.VTable, @ptrCast(self.vtable)).Route(@as(*const IAMCrossbar, @ptrCast(self)), OutputPinIndex, InputPinIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCrossbar_get_IsRoutedTo(self: *const T, OutputPinIndex: i32, InputPinIndex: ?*i32) HRESULT {
                return @as(*const IAMCrossbar.VTable, @ptrCast(self.vtable)).get_IsRoutedTo(@as(*const IAMCrossbar, @ptrCast(self)), OutputPinIndex, InputPinIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCrossbar_get_CrossbarPinInfo(self: *const T, IsInputPin: BOOL, PinIndex: i32, PinIndexRelated: ?*i32, PhysicalType: ?*i32) HRESULT {
                return @as(*const IAMCrossbar.VTable, @ptrCast(self.vtable)).get_CrossbarPinInfo(@as(*const IAMCrossbar, @ptrCast(self)), IsInputPin, PinIndex, PinIndexRelated, PhysicalType);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AMTunerSubChannel = enum(i32) {
    NO_TUNE = -2,
    DEFAULT = -1,
};
pub const AMTUNER_SUBCHAN_NO_TUNE = AMTunerSubChannel.NO_TUNE;
pub const AMTUNER_SUBCHAN_DEFAULT = AMTunerSubChannel.DEFAULT;

pub const AMTunerSignalStrength = enum(i32) {
    HASNOSIGNALSTRENGTH = -1,
    NOSIGNAL = 0,
    SIGNALPRESENT = 1,
};
pub const AMTUNER_HASNOSIGNALSTRENGTH = AMTunerSignalStrength.HASNOSIGNALSTRENGTH;
pub const AMTUNER_NOSIGNAL = AMTunerSignalStrength.NOSIGNAL;
pub const AMTUNER_SIGNALPRESENT = AMTunerSignalStrength.SIGNALPRESENT;

pub const AMTunerModeType = enum(i32) {
    DEFAULT = 0,
    TV = 1,
    FM_RADIO = 2,
    AM_RADIO = 4,
    DSS = 8,
};
pub const AMTUNER_MODE_DEFAULT = AMTunerModeType.DEFAULT;
pub const AMTUNER_MODE_TV = AMTunerModeType.TV;
pub const AMTUNER_MODE_FM_RADIO = AMTunerModeType.FM_RADIO;
pub const AMTUNER_MODE_AM_RADIO = AMTunerModeType.AM_RADIO;
pub const AMTUNER_MODE_DSS = AMTunerModeType.DSS;

pub const AMTunerEventType = enum(i32) {
    D = 1,
};
pub const AMTUNER_EVENT_CHANGED = AMTunerEventType.D;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMTuner_Value = Guid.initString("211a8761-03ac-11d1-8d13-00aa00bd8339");
pub const IID_IAMTuner = &IID_IAMTuner_Value;
pub const IAMTuner = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Channel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTuner,
                lChannel: i32,
                lVideoSubChannel: i32,
                lAudioSubChannel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTuner,
                lChannel: i32,
                lVideoSubChannel: i32,
                lAudioSubChannel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Channel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTuner,
                plChannel: ?*i32,
                plVideoSubChannel: ?*i32,
                plAudioSubChannel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTuner,
                plChannel: ?*i32,
                plVideoSubChannel: ?*i32,
                plAudioSubChannel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChannelMinMax: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTuner,
                lChannelMin: ?*i32,
                lChannelMax: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTuner,
                lChannelMin: ?*i32,
                lChannelMax: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTuner,
                lCountryCode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTuner,
                lCountryCode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTuner,
                plCountryCode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTuner,
                plCountryCode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TuningSpace: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTuner,
                lTuningSpace: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTuner,
                lTuningSpace: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TuningSpace: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTuner,
                plTuningSpace: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTuner,
                plTuningSpace: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Logon: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTuner,
                hCurrentUser: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTuner,
                hCurrentUser: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Logout: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SignalPresent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTuner,
                plSignalStrength: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTuner,
                plSignalStrength: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Mode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTuner,
                lMode: AMTunerModeType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTuner,
                lMode: AMTunerModeType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Mode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTuner,
                plMode: ?*AMTunerModeType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTuner,
                plMode: ?*AMTunerModeType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAvailableModes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTuner,
                plModes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTuner,
                plModes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterNotificationCallBack: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTuner,
                pNotify: ?*IAMTunerNotification,
                lEvents: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTuner,
                pNotify: ?*IAMTunerNotification,
                lEvents: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnRegisterNotificationCallBack: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTuner,
                pNotify: ?*IAMTunerNotification,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTuner,
                pNotify: ?*IAMTunerNotification,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_put_Channel(self: *const T, lChannel: i32, lVideoSubChannel: i32, lAudioSubChannel: i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).put_Channel(@as(*const IAMTuner, @ptrCast(self)), lChannel, lVideoSubChannel, lAudioSubChannel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_get_Channel(self: *const T, plChannel: ?*i32, plVideoSubChannel: ?*i32, plAudioSubChannel: ?*i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).get_Channel(@as(*const IAMTuner, @ptrCast(self)), plChannel, plVideoSubChannel, plAudioSubChannel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_ChannelMinMax(self: *const T, lChannelMin: ?*i32, lChannelMax: ?*i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).ChannelMinMax(@as(*const IAMTuner, @ptrCast(self)), lChannelMin, lChannelMax);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_put_CountryCode(self: *const T, lCountryCode: i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).put_CountryCode(@as(*const IAMTuner, @ptrCast(self)), lCountryCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_get_CountryCode(self: *const T, plCountryCode: ?*i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).get_CountryCode(@as(*const IAMTuner, @ptrCast(self)), plCountryCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_put_TuningSpace(self: *const T, lTuningSpace: i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).put_TuningSpace(@as(*const IAMTuner, @ptrCast(self)), lTuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_get_TuningSpace(self: *const T, plTuningSpace: ?*i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).get_TuningSpace(@as(*const IAMTuner, @ptrCast(self)), plTuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_Logon(self: *const T, hCurrentUser: ?HANDLE) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).Logon(@as(*const IAMTuner, @ptrCast(self)), hCurrentUser);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_Logout(self: *const T) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).Logout(@as(*const IAMTuner, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_SignalPresent(self: *const T, plSignalStrength: ?*i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).SignalPresent(@as(*const IAMTuner, @ptrCast(self)), plSignalStrength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_put_Mode(self: *const T, lMode: AMTunerModeType) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).put_Mode(@as(*const IAMTuner, @ptrCast(self)), lMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_get_Mode(self: *const T, plMode: ?*AMTunerModeType) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).get_Mode(@as(*const IAMTuner, @ptrCast(self)), plMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_GetAvailableModes(self: *const T, plModes: ?*i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).GetAvailableModes(@as(*const IAMTuner, @ptrCast(self)), plModes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_RegisterNotificationCallBack(self: *const T, pNotify: ?*IAMTunerNotification, lEvents: i32) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).RegisterNotificationCallBack(@as(*const IAMTuner, @ptrCast(self)), pNotify, lEvents);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTuner_UnRegisterNotificationCallBack(self: *const T, pNotify: ?*IAMTunerNotification) HRESULT {
                return @as(*const IAMTuner.VTable, @ptrCast(self.vtable)).UnRegisterNotificationCallBack(@as(*const IAMTuner, @ptrCast(self)), pNotify);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMTunerNotification_Value = Guid.initString("211a8760-03ac-11d1-8d13-00aa00bd8339");
pub const IID_IAMTunerNotification = &IID_IAMTunerNotification_Value;
pub const IAMTunerNotification = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        OnEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTunerNotification,
                Event: AMTunerEventType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTunerNotification,
                Event: AMTunerEventType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTunerNotification_OnEvent(self: *const T, Event: AMTunerEventType) HRESULT {
                return @as(*const IAMTunerNotification.VTable, @ptrCast(self.vtable)).OnEvent(@as(*const IAMTunerNotification, @ptrCast(self)), Event);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMTVTuner_Value = Guid.initString("211a8766-03ac-11d1-8d13-00aa00bd8339");
pub const IID_IAMTVTuner = &IID_IAMTVTuner_Value;
pub const IAMTVTuner = extern struct {
    pub const VTable = extern struct {
        base: IAMTuner.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AvailableTVFormats: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVTuner,
                lAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVTuner,
                lAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TVFormat: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVTuner,
                plAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVTuner,
                plAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AutoTune: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTVTuner,
                lChannel: i32,
                plFoundSignal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTVTuner,
                lChannel: i32,
                plFoundSignal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StoreAutoTune: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTVTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTVTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NumInputConnections: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVTuner,
                plNumInputConnections: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVTuner,
                plNumInputConnections: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_InputType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVTuner,
                lIndex: i32,
                InputType: TunerInputType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVTuner,
                lIndex: i32,
                InputType: TunerInputType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_InputType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVTuner,
                lIndex: i32,
                pInputType: ?*TunerInputType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVTuner,
                lIndex: i32,
                pInputType: ?*TunerInputType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ConnectInput: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVTuner,
                lIndex: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVTuner,
                lIndex: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ConnectInput: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVTuner,
                plIndex: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVTuner,
                plIndex: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVTuner,
                lFreq: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVTuner,
                lFreq: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVTuner,
                lFreq: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVTuner,
                lFreq: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IAMTuner.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_get_AvailableTVFormats(self: *const T, lAnalogVideoStandard: ?*i32) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).get_AvailableTVFormats(@as(*const IAMTVTuner, @ptrCast(self)), lAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_get_TVFormat(self: *const T, plAnalogVideoStandard: ?*i32) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).get_TVFormat(@as(*const IAMTVTuner, @ptrCast(self)), plAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_AutoTune(self: *const T, lChannel: i32, plFoundSignal: ?*i32) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).AutoTune(@as(*const IAMTVTuner, @ptrCast(self)), lChannel, plFoundSignal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_StoreAutoTune(self: *const T) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).StoreAutoTune(@as(*const IAMTVTuner, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_get_NumInputConnections(self: *const T, plNumInputConnections: ?*i32) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).get_NumInputConnections(@as(*const IAMTVTuner, @ptrCast(self)), plNumInputConnections);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_put_InputType(self: *const T, lIndex: i32, InputType: TunerInputType) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).put_InputType(@as(*const IAMTVTuner, @ptrCast(self)), lIndex, InputType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_get_InputType(self: *const T, lIndex: i32, pInputType: ?*TunerInputType) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).get_InputType(@as(*const IAMTVTuner, @ptrCast(self)), lIndex, pInputType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_put_ConnectInput(self: *const T, lIndex: i32) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).put_ConnectInput(@as(*const IAMTVTuner, @ptrCast(self)), lIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_get_ConnectInput(self: *const T, plIndex: ?*i32) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).get_ConnectInput(@as(*const IAMTVTuner, @ptrCast(self)), plIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_get_VideoFrequency(self: *const T, lFreq: ?*i32) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).get_VideoFrequency(@as(*const IAMTVTuner, @ptrCast(self)), lFreq);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVTuner_get_AudioFrequency(self: *const T, lFreq: ?*i32) HRESULT {
                return @as(*const IAMTVTuner.VTable, @ptrCast(self.vtable)).get_AudioFrequency(@as(*const IAMTVTuner, @ptrCast(self)), lFreq);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBPCSatelliteTuner_Value = Guid.initString("211a8765-03ac-11d1-8d13-00aa00bd8339");
pub const IID_IBPCSatelliteTuner = &IID_IBPCSatelliteTuner_Value;
pub const IBPCSatelliteTuner = extern struct {
    pub const VTable = extern struct {
        base: IAMTuner.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultSubChannelTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBPCSatelliteTuner,
                plDefaultVideoType: ?*i32,
                plDefaultAudioType: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBPCSatelliteTuner,
                plDefaultVideoType: ?*i32,
                plDefaultAudioType: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DefaultSubChannelTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBPCSatelliteTuner,
                lDefaultVideoType: i32,
                lDefaultAudioType: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBPCSatelliteTuner,
                lDefaultVideoType: i32,
                lDefaultAudioType: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsTapingPermitted: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBPCSatelliteTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBPCSatelliteTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IAMTuner.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBPCSatelliteTuner_get_DefaultSubChannelTypes(self: *const T, plDefaultVideoType: ?*i32, plDefaultAudioType: ?*i32) HRESULT {
                return @as(*const IBPCSatelliteTuner.VTable, @ptrCast(self.vtable)).get_DefaultSubChannelTypes(@as(*const IBPCSatelliteTuner, @ptrCast(self)), plDefaultVideoType, plDefaultAudioType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBPCSatelliteTuner_put_DefaultSubChannelTypes(self: *const T, lDefaultVideoType: i32, lDefaultAudioType: i32) HRESULT {
                return @as(*const IBPCSatelliteTuner.VTable, @ptrCast(self.vtable)).put_DefaultSubChannelTypes(@as(*const IBPCSatelliteTuner, @ptrCast(self)), lDefaultVideoType, lDefaultAudioType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBPCSatelliteTuner_IsTapingPermitted(self: *const T) HRESULT {
                return @as(*const IBPCSatelliteTuner.VTable, @ptrCast(self.vtable)).IsTapingPermitted(@as(*const IBPCSatelliteTuner, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const TVAudioMode = enum(i32) {
    MODE_MONO = 1,
    MODE_STEREO = 2,
    MODE_LANG_A = 16,
    MODE_LANG_B = 32,
    MODE_LANG_C = 64,
    PRESET_STEREO = 512,
    PRESET_LANG_A = 4096,
    PRESET_LANG_B = 8192,
    PRESET_LANG_C = 16384,
};
pub const AMTVAUDIO_MODE_MONO = TVAudioMode.MODE_MONO;
pub const AMTVAUDIO_MODE_STEREO = TVAudioMode.MODE_STEREO;
pub const AMTVAUDIO_MODE_LANG_A = TVAudioMode.MODE_LANG_A;
pub const AMTVAUDIO_MODE_LANG_B = TVAudioMode.MODE_LANG_B;
pub const AMTVAUDIO_MODE_LANG_C = TVAudioMode.MODE_LANG_C;
pub const AMTVAUDIO_PRESET_STEREO = TVAudioMode.PRESET_STEREO;
pub const AMTVAUDIO_PRESET_LANG_A = TVAudioMode.PRESET_LANG_A;
pub const AMTVAUDIO_PRESET_LANG_B = TVAudioMode.PRESET_LANG_B;
pub const AMTVAUDIO_PRESET_LANG_C = TVAudioMode.PRESET_LANG_C;

pub const AMTVAudioEventType = enum(i32) {
    D = 1,
};
pub const AMTVAUDIO_EVENT_CHANGED = AMTVAudioEventType.D;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMTVAudio_Value = Guid.initString("83ec1c30-23d1-11d1-99e6-00a0c9560266");
pub const IID_IAMTVAudio = &IID_IAMTVAudio_Value;
pub const IAMTVAudio = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetHardwareSupportedTVAudioModes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTVAudio,
                plModes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTVAudio,
                plModes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAvailableTVAudioModes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTVAudio,
                plModes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTVAudio,
                plModes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TVAudioMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVAudio,
                plMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVAudio,
                plMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TVAudioMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTVAudio,
                lMode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTVAudio,
                lMode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterNotificationCallBack: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTVAudio,
                pNotify: ?*IAMTunerNotification,
                lEvents: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTVAudio,
                pNotify: ?*IAMTunerNotification,
                lEvents: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnRegisterNotificationCallBack: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTVAudio,
                pNotify: ?*IAMTunerNotification,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTVAudio,
                pNotify: ?*IAMTunerNotification,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVAudio_GetHardwareSupportedTVAudioModes(self: *const T, plModes: ?*i32) HRESULT {
                return @as(*const IAMTVAudio.VTable, @ptrCast(self.vtable)).GetHardwareSupportedTVAudioModes(@as(*const IAMTVAudio, @ptrCast(self)), plModes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVAudio_GetAvailableTVAudioModes(self: *const T, plModes: ?*i32) HRESULT {
                return @as(*const IAMTVAudio.VTable, @ptrCast(self.vtable)).GetAvailableTVAudioModes(@as(*const IAMTVAudio, @ptrCast(self)), plModes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVAudio_get_TVAudioMode(self: *const T, plMode: ?*i32) HRESULT {
                return @as(*const IAMTVAudio.VTable, @ptrCast(self.vtable)).get_TVAudioMode(@as(*const IAMTVAudio, @ptrCast(self)), plMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVAudio_put_TVAudioMode(self: *const T, lMode: i32) HRESULT {
                return @as(*const IAMTVAudio.VTable, @ptrCast(self.vtable)).put_TVAudioMode(@as(*const IAMTVAudio, @ptrCast(self)), lMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVAudio_RegisterNotificationCallBack(self: *const T, pNotify: ?*IAMTunerNotification, lEvents: i32) HRESULT {
                return @as(*const IAMTVAudio.VTable, @ptrCast(self.vtable)).RegisterNotificationCallBack(@as(*const IAMTVAudio, @ptrCast(self)), pNotify, lEvents);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVAudio_UnRegisterNotificationCallBack(self: *const T, pNotify: ?*IAMTunerNotification) HRESULT {
                return @as(*const IAMTVAudio.VTable, @ptrCast(self.vtable)).UnRegisterNotificationCallBack(@as(*const IAMTVAudio, @ptrCast(self)), pNotify);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMTVAudioNotification_Value = Guid.initString("83ec1c33-23d1-11d1-99e6-00a0c9560266");
pub const IID_IAMTVAudioNotification = &IID_IAMTVAudioNotification_Value;
pub const IAMTVAudioNotification = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        OnEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTVAudioNotification,
                Event: AMTVAudioEventType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTVAudioNotification,
                Event: AMTVAudioEventType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTVAudioNotification_OnEvent(self: *const T, Event: AMTVAudioEventType) HRESULT {
                return @as(*const IAMTVAudioNotification.VTable, @ptrCast(self.vtable)).OnEvent(@as(*const IAMTVAudioNotification, @ptrCast(self)), Event);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMAnalogVideoEncoder_Value = Guid.initString("c6e133b0-30ac-11d0-a18c-00a0c9118956");
pub const IID_IAMAnalogVideoEncoder = &IID_IAMAnalogVideoEncoder_Value;
pub const IAMAnalogVideoEncoder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AvailableTVFormats: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoEncoder,
                lAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoEncoder,
                lAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TVFormat: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoEncoder,
                lAnalogVideoStandard: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoEncoder,
                lAnalogVideoStandard: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TVFormat: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoEncoder,
                plAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoEncoder,
                plAnalogVideoStandard: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CopyProtection: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoEncoder,
                lVideoCopyProtection: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoEncoder,
                lVideoCopyProtection: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CopyProtection: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoEncoder,
                lVideoCopyProtection: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoEncoder,
                lVideoCopyProtection: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CCEnable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoEncoder,
                lCCEnable: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoEncoder,
                lCCEnable: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CCEnable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMAnalogVideoEncoder,
                lCCEnable: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMAnalogVideoEncoder,
                lCCEnable: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoEncoder_get_AvailableTVFormats(self: *const T, lAnalogVideoStandard: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoEncoder.VTable, @ptrCast(self.vtable)).get_AvailableTVFormats(@as(*const IAMAnalogVideoEncoder, @ptrCast(self)), lAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoEncoder_put_TVFormat(self: *const T, lAnalogVideoStandard: i32) HRESULT {
                return @as(*const IAMAnalogVideoEncoder.VTable, @ptrCast(self.vtable)).put_TVFormat(@as(*const IAMAnalogVideoEncoder, @ptrCast(self)), lAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoEncoder_get_TVFormat(self: *const T, plAnalogVideoStandard: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoEncoder.VTable, @ptrCast(self.vtable)).get_TVFormat(@as(*const IAMAnalogVideoEncoder, @ptrCast(self)), plAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoEncoder_put_CopyProtection(self: *const T, lVideoCopyProtection: i32) HRESULT {
                return @as(*const IAMAnalogVideoEncoder.VTable, @ptrCast(self.vtable)).put_CopyProtection(@as(*const IAMAnalogVideoEncoder, @ptrCast(self)), lVideoCopyProtection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoEncoder_get_CopyProtection(self: *const T, lVideoCopyProtection: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoEncoder.VTable, @ptrCast(self.vtable)).get_CopyProtection(@as(*const IAMAnalogVideoEncoder, @ptrCast(self)), lVideoCopyProtection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoEncoder_put_CCEnable(self: *const T, lCCEnable: i32) HRESULT {
                return @as(*const IAMAnalogVideoEncoder.VTable, @ptrCast(self.vtable)).put_CCEnable(@as(*const IAMAnalogVideoEncoder, @ptrCast(self)), lCCEnable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAnalogVideoEncoder_get_CCEnable(self: *const T, lCCEnable: ?*i32) HRESULT {
                return @as(*const IAMAnalogVideoEncoder.VTable, @ptrCast(self.vtable)).get_CCEnable(@as(*const IAMAnalogVideoEncoder, @ptrCast(self)), lCCEnable);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AMPROPERTY_PIN = enum(i32) {
    CATEGORY = 0,
    MEDIUM = 1,
};
pub const AMPROPERTY_PIN_CATEGORY = AMPROPERTY_PIN.CATEGORY;
pub const AMPROPERTY_PIN_MEDIUM = AMPROPERTY_PIN.MEDIUM;

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaPropertyBag_Value = Guid.initString("6025a880-c0d5-11d0-bd4e-00a0c911ce86");
pub const IID_IMediaPropertyBag = &IID_IMediaPropertyBag_Value;
pub const IMediaPropertyBag = extern struct {
    pub const VTable = extern struct {
        base: IPropertyBag.VTable,
        EnumProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaPropertyBag,
                iProperty: u32,
                pvarPropertyName: ?*VARIANT,
                pvarPropertyValue: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaPropertyBag,
                iProperty: u32,
                pvarPropertyName: ?*VARIANT,
                pvarPropertyValue: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IPropertyBag.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPropertyBag_EnumProperty(self: *const T, iProperty: u32, pvarPropertyName: ?*VARIANT, pvarPropertyValue: ?*VARIANT) HRESULT {
                return @as(*const IMediaPropertyBag.VTable, @ptrCast(self.vtable)).EnumProperty(@as(*const IMediaPropertyBag, @ptrCast(self)), iProperty, pvarPropertyName, pvarPropertyValue);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IPersistMediaPropertyBag_Value = Guid.initString("5738e040-b67f-11d0-bd4d-00a0c911ce86");
pub const IID_IPersistMediaPropertyBag = &IID_IPersistMediaPropertyBag_Value;
pub const IPersistMediaPropertyBag = extern struct {
    pub const VTable = extern struct {
        base: IPersist.VTable,
        InitNew: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPersistMediaPropertyBag,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPersistMediaPropertyBag,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Load: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPersistMediaPropertyBag,
                pPropBag: ?*IMediaPropertyBag,
                pErrorLog: ?*IErrorLog,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPersistMediaPropertyBag,
                pPropBag: ?*IMediaPropertyBag,
                pErrorLog: ?*IErrorLog,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Save: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPersistMediaPropertyBag,
                pPropBag: ?*IMediaPropertyBag,
                fClearDirty: BOOL,
                fSaveAllProperties: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPersistMediaPropertyBag,
                pPropBag: ?*IMediaPropertyBag,
                fClearDirty: BOOL,
                fSaveAllProperties: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IPersist.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPersistMediaPropertyBag_InitNew(self: *const T) HRESULT {
                return @as(*const IPersistMediaPropertyBag.VTable, @ptrCast(self.vtable)).InitNew(@as(*const IPersistMediaPropertyBag, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPersistMediaPropertyBag_Load(self: *const T, pPropBag: ?*IMediaPropertyBag, pErrorLog: ?*IErrorLog) HRESULT {
                return @as(*const IPersistMediaPropertyBag.VTable, @ptrCast(self.vtable)).Load(@as(*const IPersistMediaPropertyBag, @ptrCast(self)), pPropBag, pErrorLog);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPersistMediaPropertyBag_Save(self: *const T, pPropBag: ?*IMediaPropertyBag, fClearDirty: BOOL, fSaveAllProperties: BOOL) HRESULT {
                return @as(*const IPersistMediaPropertyBag.VTable, @ptrCast(self.vtable)).Save(@as(*const IPersistMediaPropertyBag, @ptrCast(self)), pPropBag, fClearDirty, fSaveAllProperties);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMPhysicalPinInfo_Value = Guid.initString("f938c991-3029-11cf-8c44-00aa006b6814");
pub const IID_IAMPhysicalPinInfo = &IID_IAMPhysicalPinInfo_Value;
pub const IAMPhysicalPinInfo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetPhysicalType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPhysicalPinInfo,
                pType: ?*i32,
                ppszType: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPhysicalPinInfo,
                pType: ?*i32,
                ppszType: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPhysicalPinInfo_GetPhysicalType(self: *const T, pType: ?*i32, ppszType: ?*?PWSTR) HRESULT {
                return @as(*const IAMPhysicalPinInfo.VTable, @ptrCast(self.vtable)).GetPhysicalType(@as(*const IAMPhysicalPinInfo, @ptrCast(self)), pType, ppszType);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMExtDevice_Value = Guid.initString("b5730a90-1a2c-11cf-8c23-00aa006b6814");
pub const IID_IAMExtDevice = &IID_IAMExtDevice_Value;
pub const IAMExtDevice = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCapability: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtDevice,
                Capability: i32,
                pValue: ?*i32,
                pdblValue: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtDevice,
                Capability: i32,
                pValue: ?*i32,
                pdblValue: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ExternalDeviceID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtDevice,
                ppszData: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtDevice,
                ppszData: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ExternalDeviceVersion: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtDevice,
                ppszData: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtDevice,
                ppszData: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DevicePower: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtDevice,
                PowerMode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtDevice,
                PowerMode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DevicePower: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtDevice,
                pPowerMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtDevice,
                pPowerMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Calibrate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtDevice,
                hEvent: usize,
                Mode: i32,
                pStatus: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtDevice,
                hEvent: usize,
                Mode: i32,
                pStatus: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DevicePort: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtDevice,
                DevicePort: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtDevice,
                DevicePort: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DevicePort: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtDevice,
                pDevicePort: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtDevice,
                pDevicePort: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtDevice_GetCapability(self: *const T, Capability: i32, pValue: ?*i32, pdblValue: ?*f64) HRESULT {
                return @as(*const IAMExtDevice.VTable, @ptrCast(self.vtable)).GetCapability(@as(*const IAMExtDevice, @ptrCast(self)), Capability, pValue, pdblValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtDevice_get_ExternalDeviceID(self: *const T, ppszData: ?*?PWSTR) HRESULT {
                return @as(*const IAMExtDevice.VTable, @ptrCast(self.vtable)).get_ExternalDeviceID(@as(*const IAMExtDevice, @ptrCast(self)), ppszData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtDevice_get_ExternalDeviceVersion(self: *const T, ppszData: ?*?PWSTR) HRESULT {
                return @as(*const IAMExtDevice.VTable, @ptrCast(self.vtable)).get_ExternalDeviceVersion(@as(*const IAMExtDevice, @ptrCast(self)), ppszData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtDevice_put_DevicePower(self: *const T, PowerMode: i32) HRESULT {
                return @as(*const IAMExtDevice.VTable, @ptrCast(self.vtable)).put_DevicePower(@as(*const IAMExtDevice, @ptrCast(self)), PowerMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtDevice_get_DevicePower(self: *const T, pPowerMode: ?*i32) HRESULT {
                return @as(*const IAMExtDevice.VTable, @ptrCast(self.vtable)).get_DevicePower(@as(*const IAMExtDevice, @ptrCast(self)), pPowerMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtDevice_Calibrate(self: *const T, hEvent: usize, Mode: i32, pStatus: ?*i32) HRESULT {
                return @as(*const IAMExtDevice.VTable, @ptrCast(self.vtable)).Calibrate(@as(*const IAMExtDevice, @ptrCast(self)), hEvent, Mode, pStatus);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtDevice_put_DevicePort(self: *const T, DevicePort: i32) HRESULT {
                return @as(*const IAMExtDevice.VTable, @ptrCast(self.vtable)).put_DevicePort(@as(*const IAMExtDevice, @ptrCast(self)), DevicePort);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtDevice_get_DevicePort(self: *const T, pDevicePort: ?*i32) HRESULT {
                return @as(*const IAMExtDevice.VTable, @ptrCast(self.vtable)).get_DevicePort(@as(*const IAMExtDevice, @ptrCast(self)), pDevicePort);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMExtTransport_Value = Guid.initString("a03cd5f0-3045-11cf-8c44-00aa006b6814");
pub const IID_IAMExtTransport = &IID_IAMExtTransport_Value;
pub const IAMExtTransport = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCapability: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                Capability: i32,
                pValue: ?*i32,
                pdblValue: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                Capability: i32,
                pValue: ?*i32,
                pdblValue: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MediaState: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                State: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                State: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MediaState: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                pState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                pState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LocalControl: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                State: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                State: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LocalControl: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                pState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                pState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                StatusItem: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                StatusItem: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransportBasicParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                Param: i32,
                pValue: ?*i32,
                ppszData: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                Param: i32,
                pValue: ?*i32,
                ppszData: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTransportBasicParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                Param: i32,
                Value: i32,
                pszData: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                Param: i32,
                Value: i32,
                pszData: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransportVideoParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTransportVideoParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransportAudioParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTransportAudioParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Mode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                Mode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                Mode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Mode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                pMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                pMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Rate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                dblRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                dblRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Rate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                pdblRate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                pdblRate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetChase: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                pEnabled: ?*i32,
                pOffset: ?*i32,
                phEvent: ?*usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                pEnabled: ?*i32,
                pOffset: ?*i32,
                phEvent: ?*usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetChase: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                Enable: i32,
                Offset: i32,
                hEvent: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                Enable: i32,
                Offset: i32,
                hEvent: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBump: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                pSpeed: ?*i32,
                pDuration: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                pSpeed: ?*i32,
                pDuration: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBump: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                Speed: i32,
                Duration: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                Speed: i32,
                Duration: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AntiClogControl: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                pEnabled: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                pEnabled: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_AntiClogControl: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                Enable: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                Enable: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEditPropertySet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                EditID: i32,
                pState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                EditID: i32,
                pState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetEditPropertySet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                pEditID: ?*i32,
                State: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                pEditID: ?*i32,
                State: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEditProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                EditID: i32,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                EditID: i32,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetEditProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtTransport,
                EditID: i32,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtTransport,
                EditID: i32,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EditStart: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_EditStart: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtTransport,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtTransport,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_GetCapability(self: *const T, Capability: i32, pValue: ?*i32, pdblValue: ?*f64) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).GetCapability(@as(*const IAMExtTransport, @ptrCast(self)), Capability, pValue, pdblValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_put_MediaState(self: *const T, State: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).put_MediaState(@as(*const IAMExtTransport, @ptrCast(self)), State);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_get_MediaState(self: *const T, pState: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).get_MediaState(@as(*const IAMExtTransport, @ptrCast(self)), pState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_put_LocalControl(self: *const T, State: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).put_LocalControl(@as(*const IAMExtTransport, @ptrCast(self)), State);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_get_LocalControl(self: *const T, pState: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).get_LocalControl(@as(*const IAMExtTransport, @ptrCast(self)), pState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_GetStatus(self: *const T, StatusItem: i32, pValue: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).GetStatus(@as(*const IAMExtTransport, @ptrCast(self)), StatusItem, pValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_GetTransportBasicParameters(self: *const T, Param: i32, pValue: ?*i32, ppszData: ?*?PWSTR) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).GetTransportBasicParameters(@as(*const IAMExtTransport, @ptrCast(self)), Param, pValue, ppszData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_SetTransportBasicParameters(self: *const T, Param: i32, Value: i32, pszData: ?[*:0]const u16) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).SetTransportBasicParameters(@as(*const IAMExtTransport, @ptrCast(self)), Param, Value, pszData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_GetTransportVideoParameters(self: *const T, Param: i32, pValue: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).GetTransportVideoParameters(@as(*const IAMExtTransport, @ptrCast(self)), Param, pValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_SetTransportVideoParameters(self: *const T, Param: i32, Value: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).SetTransportVideoParameters(@as(*const IAMExtTransport, @ptrCast(self)), Param, Value);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_GetTransportAudioParameters(self: *const T, Param: i32, pValue: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).GetTransportAudioParameters(@as(*const IAMExtTransport, @ptrCast(self)), Param, pValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_SetTransportAudioParameters(self: *const T, Param: i32, Value: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).SetTransportAudioParameters(@as(*const IAMExtTransport, @ptrCast(self)), Param, Value);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_put_Mode(self: *const T, Mode: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).put_Mode(@as(*const IAMExtTransport, @ptrCast(self)), Mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_get_Mode(self: *const T, pMode: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).get_Mode(@as(*const IAMExtTransport, @ptrCast(self)), pMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_put_Rate(self: *const T, dblRate: f64) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).put_Rate(@as(*const IAMExtTransport, @ptrCast(self)), dblRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_get_Rate(self: *const T, pdblRate: ?*f64) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).get_Rate(@as(*const IAMExtTransport, @ptrCast(self)), pdblRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_GetChase(self: *const T, pEnabled: ?*i32, pOffset: ?*i32, phEvent: ?*usize) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).GetChase(@as(*const IAMExtTransport, @ptrCast(self)), pEnabled, pOffset, phEvent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_SetChase(self: *const T, Enable: i32, Offset: i32, hEvent: usize) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).SetChase(@as(*const IAMExtTransport, @ptrCast(self)), Enable, Offset, hEvent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_GetBump(self: *const T, pSpeed: ?*i32, pDuration: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).GetBump(@as(*const IAMExtTransport, @ptrCast(self)), pSpeed, pDuration);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_SetBump(self: *const T, Speed: i32, Duration: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).SetBump(@as(*const IAMExtTransport, @ptrCast(self)), Speed, Duration);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_get_AntiClogControl(self: *const T, pEnabled: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).get_AntiClogControl(@as(*const IAMExtTransport, @ptrCast(self)), pEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_put_AntiClogControl(self: *const T, Enable: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).put_AntiClogControl(@as(*const IAMExtTransport, @ptrCast(self)), Enable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_GetEditPropertySet(self: *const T, EditID: i32, pState: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).GetEditPropertySet(@as(*const IAMExtTransport, @ptrCast(self)), EditID, pState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_SetEditPropertySet(self: *const T, pEditID: ?*i32, State: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).SetEditPropertySet(@as(*const IAMExtTransport, @ptrCast(self)), pEditID, State);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_GetEditProperty(self: *const T, EditID: i32, Param: i32, pValue: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).GetEditProperty(@as(*const IAMExtTransport, @ptrCast(self)), EditID, Param, pValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_SetEditProperty(self: *const T, EditID: i32, Param: i32, Value: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).SetEditProperty(@as(*const IAMExtTransport, @ptrCast(self)), EditID, Param, Value);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_get_EditStart(self: *const T, pValue: ?*i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).get_EditStart(@as(*const IAMExtTransport, @ptrCast(self)), pValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtTransport_put_EditStart(self: *const T, Value: i32) HRESULT {
                return @as(*const IAMExtTransport.VTable, @ptrCast(self.vtable)).put_EditStart(@as(*const IAMExtTransport, @ptrCast(self)), Value);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMTimecodeReader_Value = Guid.initString("9b496ce1-811b-11cf-8c77-00aa006b6814");
pub const IID_IAMTimecodeReader = &IID_IAMTimecodeReader_Value;
pub const IAMTimecodeReader = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTCRMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeReader,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeReader,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTCRMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeReader,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeReader,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_VITCLine: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTimecodeReader,
                Line: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTimecodeReader,
                Line: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VITCLine: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTimecodeReader,
                pLine: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTimecodeReader,
                pLine: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTimecode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeReader,
                pTimecodeSample: ?*TIMECODE_SAMPLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeReader,
                pTimecodeSample: ?*TIMECODE_SAMPLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeReader_GetTCRMode(self: *const T, Param: i32, pValue: ?*i32) HRESULT {
                return @as(*const IAMTimecodeReader.VTable, @ptrCast(self.vtable)).GetTCRMode(@as(*const IAMTimecodeReader, @ptrCast(self)), Param, pValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeReader_SetTCRMode(self: *const T, Param: i32, Value: i32) HRESULT {
                return @as(*const IAMTimecodeReader.VTable, @ptrCast(self.vtable)).SetTCRMode(@as(*const IAMTimecodeReader, @ptrCast(self)), Param, Value);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeReader_put_VITCLine(self: *const T, Line: i32) HRESULT {
                return @as(*const IAMTimecodeReader.VTable, @ptrCast(self.vtable)).put_VITCLine(@as(*const IAMTimecodeReader, @ptrCast(self)), Line);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeReader_get_VITCLine(self: *const T, pLine: ?*i32) HRESULT {
                return @as(*const IAMTimecodeReader.VTable, @ptrCast(self.vtable)).get_VITCLine(@as(*const IAMTimecodeReader, @ptrCast(self)), pLine);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeReader_GetTimecode(self: *const T, pTimecodeSample: ?*TIMECODE_SAMPLE) HRESULT {
                return @as(*const IAMTimecodeReader.VTable, @ptrCast(self.vtable)).GetTimecode(@as(*const IAMTimecodeReader, @ptrCast(self)), pTimecodeSample);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMTimecodeGenerator_Value = Guid.initString("9b496ce0-811b-11cf-8c77-00aa006b6814");
pub const IID_IAMTimecodeGenerator = &IID_IAMTimecodeGenerator_Value;
pub const IAMTimecodeGenerator = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTCGMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeGenerator,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeGenerator,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTCGMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeGenerator,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeGenerator,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_VITCLine: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTimecodeGenerator,
                Line: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTimecodeGenerator,
                Line: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VITCLine: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMTimecodeGenerator,
                pLine: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMTimecodeGenerator,
                pLine: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTimecode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeGenerator,
                pTimecodeSample: ?*TIMECODE_SAMPLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeGenerator,
                pTimecodeSample: ?*TIMECODE_SAMPLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTimecode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeGenerator,
                pTimecodeSample: ?*TIMECODE_SAMPLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeGenerator,
                pTimecodeSample: ?*TIMECODE_SAMPLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeGenerator_GetTCGMode(self: *const T, Param: i32, pValue: ?*i32) HRESULT {
                return @as(*const IAMTimecodeGenerator.VTable, @ptrCast(self.vtable)).GetTCGMode(@as(*const IAMTimecodeGenerator, @ptrCast(self)), Param, pValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeGenerator_SetTCGMode(self: *const T, Param: i32, Value: i32) HRESULT {
                return @as(*const IAMTimecodeGenerator.VTable, @ptrCast(self.vtable)).SetTCGMode(@as(*const IAMTimecodeGenerator, @ptrCast(self)), Param, Value);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeGenerator_put_VITCLine(self: *const T, Line: i32) HRESULT {
                return @as(*const IAMTimecodeGenerator.VTable, @ptrCast(self.vtable)).put_VITCLine(@as(*const IAMTimecodeGenerator, @ptrCast(self)), Line);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeGenerator_get_VITCLine(self: *const T, pLine: ?*i32) HRESULT {
                return @as(*const IAMTimecodeGenerator.VTable, @ptrCast(self.vtable)).get_VITCLine(@as(*const IAMTimecodeGenerator, @ptrCast(self)), pLine);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeGenerator_SetTimecode(self: *const T, pTimecodeSample: ?*TIMECODE_SAMPLE) HRESULT {
                return @as(*const IAMTimecodeGenerator.VTable, @ptrCast(self.vtable)).SetTimecode(@as(*const IAMTimecodeGenerator, @ptrCast(self)), pTimecodeSample);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeGenerator_GetTimecode(self: *const T, pTimecodeSample: ?*TIMECODE_SAMPLE) HRESULT {
                return @as(*const IAMTimecodeGenerator.VTable, @ptrCast(self.vtable)).GetTimecode(@as(*const IAMTimecodeGenerator, @ptrCast(self)), pTimecodeSample);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMTimecodeDisplay_Value = Guid.initString("9b496ce2-811b-11cf-8c77-00aa006b6814");
pub const IID_IAMTimecodeDisplay = &IID_IAMTimecodeDisplay_Value;
pub const IAMTimecodeDisplay = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTCDisplayEnable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeDisplay,
                pState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeDisplay,
                pState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTCDisplayEnable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeDisplay,
                State: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeDisplay,
                State: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTCDisplay: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeDisplay,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeDisplay,
                Param: i32,
                pValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTCDisplay: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMTimecodeDisplay,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMTimecodeDisplay,
                Param: i32,
                Value: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeDisplay_GetTCDisplayEnable(self: *const T, pState: ?*i32) HRESULT {
                return @as(*const IAMTimecodeDisplay.VTable, @ptrCast(self.vtable)).GetTCDisplayEnable(@as(*const IAMTimecodeDisplay, @ptrCast(self)), pState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeDisplay_SetTCDisplayEnable(self: *const T, State: i32) HRESULT {
                return @as(*const IAMTimecodeDisplay.VTable, @ptrCast(self.vtable)).SetTCDisplayEnable(@as(*const IAMTimecodeDisplay, @ptrCast(self)), State);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeDisplay_GetTCDisplay(self: *const T, Param: i32, pValue: ?*i32) HRESULT {
                return @as(*const IAMTimecodeDisplay.VTable, @ptrCast(self.vtable)).GetTCDisplay(@as(*const IAMTimecodeDisplay, @ptrCast(self)), Param, pValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMTimecodeDisplay_SetTCDisplay(self: *const T, Param: i32, Value: i32) HRESULT {
                return @as(*const IAMTimecodeDisplay.VTable, @ptrCast(self.vtable)).SetTCDisplay(@as(*const IAMTimecodeDisplay, @ptrCast(self)), Param, Value);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMDevMemoryAllocator_Value = Guid.initString("c6545bf0-e76b-11d0-bd52-00a0c911ce86");
pub const IID_IAMDevMemoryAllocator = &IID_IAMDevMemoryAllocator_Value;
pub const IAMDevMemoryAllocator = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDevMemoryAllocator,
                pdwcbTotalFree: ?*u32,
                pdwcbLargestFree: ?*u32,
                pdwcbTotalMemory: ?*u32,
                pdwcbMinimumChunk: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDevMemoryAllocator,
                pdwcbTotalFree: ?*u32,
                pdwcbLargestFree: ?*u32,
                pdwcbTotalMemory: ?*u32,
                pdwcbMinimumChunk: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CheckMemory: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDevMemoryAllocator,
                pBuffer: ?*const u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDevMemoryAllocator,
                pBuffer: ?*const u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Alloc: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDevMemoryAllocator,
                ppBuffer: ?*?*u8,
                pdwcbBuffer: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDevMemoryAllocator,
                ppBuffer: ?*?*u8,
                pdwcbBuffer: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Free: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDevMemoryAllocator,
                pBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDevMemoryAllocator,
                pBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDevMemoryObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDevMemoryAllocator,
                ppUnkInnner: ?*?*IUnknown,
                pUnkOuter: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDevMemoryAllocator,
                ppUnkInnner: ?*?*IUnknown,
                pUnkOuter: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDevMemoryAllocator_GetInfo(self: *const T, pdwcbTotalFree: ?*u32, pdwcbLargestFree: ?*u32, pdwcbTotalMemory: ?*u32, pdwcbMinimumChunk: ?*u32) HRESULT {
                return @as(*const IAMDevMemoryAllocator.VTable, @ptrCast(self.vtable)).GetInfo(@as(*const IAMDevMemoryAllocator, @ptrCast(self)), pdwcbTotalFree, pdwcbLargestFree, pdwcbTotalMemory, pdwcbMinimumChunk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDevMemoryAllocator_CheckMemory(self: *const T, pBuffer: ?*const u8) HRESULT {
                return @as(*const IAMDevMemoryAllocator.VTable, @ptrCast(self.vtable)).CheckMemory(@as(*const IAMDevMemoryAllocator, @ptrCast(self)), pBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDevMemoryAllocator_Alloc(self: *const T, ppBuffer: ?*?*u8, pdwcbBuffer: ?*u32) HRESULT {
                return @as(*const IAMDevMemoryAllocator.VTable, @ptrCast(self.vtable)).Alloc(@as(*const IAMDevMemoryAllocator, @ptrCast(self)), ppBuffer, pdwcbBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDevMemoryAllocator_Free(self: *const T, pBuffer: ?*u8) HRESULT {
                return @as(*const IAMDevMemoryAllocator.VTable, @ptrCast(self.vtable)).Free(@as(*const IAMDevMemoryAllocator, @ptrCast(self)), pBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDevMemoryAllocator_GetDevMemoryObject(self: *const T, ppUnkInnner: ?*?*IUnknown, pUnkOuter: ?*IUnknown) HRESULT {
                return @as(*const IAMDevMemoryAllocator.VTable, @ptrCast(self.vtable)).GetDevMemoryObject(@as(*const IAMDevMemoryAllocator, @ptrCast(self)), ppUnkInnner, pUnkOuter);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMDevMemoryControl_Value = Guid.initString("c6545bf1-e76b-11d0-bd52-00a0c911ce86");
pub const IID_IAMDevMemoryControl = &IID_IAMDevMemoryControl_Value;
pub const IAMDevMemoryControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        QueryWriteSync: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDevMemoryControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDevMemoryControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WriteSync: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDevMemoryControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDevMemoryControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDevId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDevMemoryControl,
                pdwDevId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDevMemoryControl,
                pdwDevId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDevMemoryControl_QueryWriteSync(self: *const T) HRESULT {
                return @as(*const IAMDevMemoryControl.VTable, @ptrCast(self.vtable)).QueryWriteSync(@as(*const IAMDevMemoryControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDevMemoryControl_WriteSync(self: *const T) HRESULT {
                return @as(*const IAMDevMemoryControl.VTable, @ptrCast(self.vtable)).WriteSync(@as(*const IAMDevMemoryControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDevMemoryControl_GetDevId(self: *const T, pdwDevId: ?*u32) HRESULT {
                return @as(*const IAMDevMemoryControl.VTable, @ptrCast(self.vtable)).GetDevId(@as(*const IAMDevMemoryControl, @ptrCast(self)), pdwDevId);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _AMSTREAMSELECTINFOFLAGS = enum(i32) {
    NABLED = 1,
    XCLUSIVE = 2,
};
pub const AMSTREAMSELECTINFO_ENABLED = _AMSTREAMSELECTINFOFLAGS.NABLED;
pub const AMSTREAMSELECTINFO_EXCLUSIVE = _AMSTREAMSELECTINFOFLAGS.XCLUSIVE;

pub const _AMSTREAMSELECTENABLEFLAGS = enum(i32) {
    E = 1,
    ALL = 2,
};
pub const AMSTREAMSELECTENABLE_ENABLE = _AMSTREAMSELECTENABLEFLAGS.E;
pub const AMSTREAMSELECTENABLE_ENABLEALL = _AMSTREAMSELECTENABLEFLAGS.ALL;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMStreamSelect_Value = Guid.initString("c1960960-17f5-11d1-abe1-00a0c905f375");
pub const IID_IAMStreamSelect = &IID_IAMStreamSelect_Value;
pub const IAMStreamSelect = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Count: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamSelect,
                pcStreams: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamSelect,
                pcStreams: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Info: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamSelect,
                lIndex: i32,
                ppmt: ?*?*AM_MEDIA_TYPE,
                pdwFlags: ?*u32,
                plcid: ?*u32,
                pdwGroup: ?*u32,
                ppszName: ?*?PWSTR,
                ppObject: ?*?*IUnknown,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamSelect,
                lIndex: i32,
                ppmt: ?*?*AM_MEDIA_TYPE,
                pdwFlags: ?*u32,
                plcid: ?*u32,
                pdwGroup: ?*u32,
                ppszName: ?*?PWSTR,
                ppObject: ?*?*IUnknown,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Enable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStreamSelect,
                lIndex: i32,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStreamSelect,
                lIndex: i32,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamSelect_Count(self: *const T, pcStreams: ?*u32) HRESULT {
                return @as(*const IAMStreamSelect.VTable, @ptrCast(self.vtable)).Count(@as(*const IAMStreamSelect, @ptrCast(self)), pcStreams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamSelect_Info(self: *const T, lIndex: i32, ppmt: ?*?*AM_MEDIA_TYPE, pdwFlags: ?*u32, plcid: ?*u32, pdwGroup: ?*u32, ppszName: ?*?PWSTR, ppObject: ?*?*IUnknown, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IAMStreamSelect.VTable, @ptrCast(self.vtable)).Info(@as(*const IAMStreamSelect, @ptrCast(self)), lIndex, ppmt, pdwFlags, plcid, pdwGroup, ppszName, ppObject, ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStreamSelect_Enable(self: *const T, lIndex: i32, dwFlags: u32) HRESULT {
                return @as(*const IAMStreamSelect.VTable, @ptrCast(self.vtable)).Enable(@as(*const IAMStreamSelect, @ptrCast(self)), lIndex, dwFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _AMRESCTL_RESERVEFLAGS = enum(i32) {
    RESERVE = 0,
    UNRESERVE = 1,
};
pub const AMRESCTL_RESERVEFLAGS_RESERVE = _AMRESCTL_RESERVEFLAGS.RESERVE;
pub const AMRESCTL_RESERVEFLAGS_UNRESERVE = _AMRESCTL_RESERVEFLAGS.UNRESERVE;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMResourceControl_Value = Guid.initString("8389d2d0-77d7-11d1-abe6-00a0c905f375");
pub const IID_IAMResourceControl = &IID_IAMResourceControl_Value;
pub const IAMResourceControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Reserve: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMResourceControl,
                dwFlags: u32,
                pvReserved: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMResourceControl,
                dwFlags: u32,
                pvReserved: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMResourceControl_Reserve(self: *const T, dwFlags: u32, pvReserved: ?*anyopaque) HRESULT {
                return @as(*const IAMResourceControl.VTable, @ptrCast(self.vtable)).Reserve(@as(*const IAMResourceControl, @ptrCast(self)), dwFlags, pvReserved);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMClockAdjust_Value = Guid.initString("4d5466b0-a49c-11d1-abe8-00a0c905f375");
pub const IID_IAMClockAdjust = &IID_IAMClockAdjust_Value;
pub const IAMClockAdjust = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetClockDelta: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMClockAdjust,
                rtDelta: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMClockAdjust,
                rtDelta: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMClockAdjust_SetClockDelta(self: *const T, rtDelta: i64) HRESULT {
                return @as(*const IAMClockAdjust.VTable, @ptrCast(self.vtable)).SetClockDelta(@as(*const IAMClockAdjust, @ptrCast(self)), rtDelta);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _AM_FILTER_MISC_FLAGS = enum(i32) {
    RENDERER = 1,
    SOURCE = 2,
};
pub const AM_FILTER_MISC_FLAGS_IS_RENDERER = _AM_FILTER_MISC_FLAGS.RENDERER;
pub const AM_FILTER_MISC_FLAGS_IS_SOURCE = _AM_FILTER_MISC_FLAGS.SOURCE;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMFilterMiscFlags_Value = Guid.initString("2dd74950-a890-11d1-abe8-00a0c905f375");
pub const IID_IAMFilterMiscFlags = &IID_IAMFilterMiscFlags_Value;
pub const IAMFilterMiscFlags = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetMiscFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMFilterMiscFlags,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IAMFilterMiscFlags,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMFilterMiscFlags_GetMiscFlags(self: *const T) u32 {
                return @as(*const IAMFilterMiscFlags.VTable, @ptrCast(self.vtable)).GetMiscFlags(@as(*const IAMFilterMiscFlags, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDrawVideoImage_Value = Guid.initString("48efb120-ab49-11d2-aed2-00a0c995e8d5");
pub const IID_IDrawVideoImage = &IID_IDrawVideoImage_Value;
pub const IDrawVideoImage = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        DrawVideoImageBegin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDrawVideoImage,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDrawVideoImage,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DrawVideoImageEnd: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDrawVideoImage,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDrawVideoImage,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DrawVideoImageDraw: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDrawVideoImage,
                hdc: ?HDC,
                lprcSrc: ?*RECT,
                lprcDst: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDrawVideoImage,
                hdc: ?HDC,
                lprcSrc: ?*RECT,
                lprcDst: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDrawVideoImage_DrawVideoImageBegin(self: *const T) HRESULT {
                return @as(*const IDrawVideoImage.VTable, @ptrCast(self.vtable)).DrawVideoImageBegin(@as(*const IDrawVideoImage, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDrawVideoImage_DrawVideoImageEnd(self: *const T) HRESULT {
                return @as(*const IDrawVideoImage.VTable, @ptrCast(self.vtable)).DrawVideoImageEnd(@as(*const IDrawVideoImage, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDrawVideoImage_DrawVideoImageDraw(self: *const T, hdc: ?HDC, lprcSrc: ?*RECT, lprcDst: ?*RECT) HRESULT {
                return @as(*const IDrawVideoImage.VTable, @ptrCast(self.vtable)).DrawVideoImageDraw(@as(*const IDrawVideoImage, @ptrCast(self)), hdc, lprcSrc, lprcDst);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDecimateVideoImage_Value = Guid.initString("2e5ea3e0-e924-11d2-b6da-00a0c995e8df");
pub const IID_IDecimateVideoImage = &IID_IDecimateVideoImage_Value;
pub const IDecimateVideoImage = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetDecimationImageSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDecimateVideoImage,
                lWidth: i32,
                lHeight: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDecimateVideoImage,
                lWidth: i32,
                lHeight: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ResetDecimationImageSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDecimateVideoImage,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDecimateVideoImage,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDecimateVideoImage_SetDecimationImageSize(self: *const T, lWidth: i32, lHeight: i32) HRESULT {
                return @as(*const IDecimateVideoImage.VTable, @ptrCast(self.vtable)).SetDecimationImageSize(@as(*const IDecimateVideoImage, @ptrCast(self)), lWidth, lHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDecimateVideoImage_ResetDecimationImageSize(self: *const T) HRESULT {
                return @as(*const IDecimateVideoImage.VTable, @ptrCast(self.vtable)).ResetDecimationImageSize(@as(*const IDecimateVideoImage, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DECIMATION_USAGE = enum(i32) {
    LEGACY = 0,
    USE_DECODER_ONLY = 1,
    USE_VIDEOPORT_ONLY = 2,
    USE_OVERLAY_ONLY = 3,
    DEFAULT = 4,
};
pub const DECIMATION_LEGACY = DECIMATION_USAGE.LEGACY;
pub const DECIMATION_USE_DECODER_ONLY = DECIMATION_USAGE.USE_DECODER_ONLY;
pub const DECIMATION_USE_VIDEOPORT_ONLY = DECIMATION_USAGE.USE_VIDEOPORT_ONLY;
pub const DECIMATION_USE_OVERLAY_ONLY = DECIMATION_USAGE.USE_OVERLAY_ONLY;
pub const DECIMATION_DEFAULT = DECIMATION_USAGE.DEFAULT;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMVideoDecimationProperties_Value = Guid.initString("60d32930-13da-11d3-9ec6-c4fcaef5c7be");
pub const IID_IAMVideoDecimationProperties = &IID_IAMVideoDecimationProperties_Value;
pub const IAMVideoDecimationProperties = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        QueryDecimationUsage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoDecimationProperties,
                lpUsage: ?*DECIMATION_USAGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoDecimationProperties,
                lpUsage: ?*DECIMATION_USAGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDecimationUsage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoDecimationProperties,
                Usage: DECIMATION_USAGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoDecimationProperties,
                Usage: DECIMATION_USAGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoDecimationProperties_QueryDecimationUsage(self: *const T, lpUsage: ?*DECIMATION_USAGE) HRESULT {
                return @as(*const IAMVideoDecimationProperties.VTable, @ptrCast(self.vtable)).QueryDecimationUsage(@as(*const IAMVideoDecimationProperties, @ptrCast(self)), lpUsage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoDecimationProperties_SetDecimationUsage(self: *const T, Usage: DECIMATION_USAGE) HRESULT {
                return @as(*const IAMVideoDecimationProperties.VTable, @ptrCast(self.vtable)).SetDecimationUsage(@as(*const IAMVideoDecimationProperties, @ptrCast(self)), Usage);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVideoFrameStep_Value = Guid.initString("e46a9787-2b71-444d-a4b5-1fab7b708d6a");
pub const IID_IVideoFrameStep = &IID_IVideoFrameStep_Value;
pub const IVideoFrameStep = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Step: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoFrameStep,
                dwFrames: u32,
                pStepObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoFrameStep,
                dwFrames: u32,
                pStepObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CanStep: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoFrameStep,
                bMultiple: i32,
                pStepObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoFrameStep,
                bMultiple: i32,
                pStepObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CancelStep: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoFrameStep,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoFrameStep,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoFrameStep_Step(self: *const T, dwFrames: u32, pStepObject: ?*IUnknown) HRESULT {
                return @as(*const IVideoFrameStep.VTable, @ptrCast(self.vtable)).Step(@as(*const IVideoFrameStep, @ptrCast(self)), dwFrames, pStepObject);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoFrameStep_CanStep(self: *const T, bMultiple: i32, pStepObject: ?*IUnknown) HRESULT {
                return @as(*const IVideoFrameStep.VTable, @ptrCast(self.vtable)).CanStep(@as(*const IVideoFrameStep, @ptrCast(self)), bMultiple, pStepObject);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoFrameStep_CancelStep(self: *const T) HRESULT {
                return @as(*const IVideoFrameStep.VTable, @ptrCast(self.vtable)).CancelStep(@as(*const IVideoFrameStep, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _AM_PUSHSOURCE_FLAGS = enum(i32) {
    CAPS_INTERNAL_RM = 1,
    CAPS_NOT_LIVE = 2,
    CAPS_PRIVATE_CLOCK = 4,
    REQS_USE_STREAM_CLOCK = 65536,
    REQS_USE_CLOCK_CHAIN = 131072,
};
pub const AM_PUSHSOURCECAPS_INTERNAL_RM = _AM_PUSHSOURCE_FLAGS.CAPS_INTERNAL_RM;
pub const AM_PUSHSOURCECAPS_NOT_LIVE = _AM_PUSHSOURCE_FLAGS.CAPS_NOT_LIVE;
pub const AM_PUSHSOURCECAPS_PRIVATE_CLOCK = _AM_PUSHSOURCE_FLAGS.CAPS_PRIVATE_CLOCK;
pub const AM_PUSHSOURCEREQS_USE_STREAM_CLOCK = _AM_PUSHSOURCE_FLAGS.REQS_USE_STREAM_CLOCK;
pub const AM_PUSHSOURCEREQS_USE_CLOCK_CHAIN = _AM_PUSHSOURCE_FLAGS.REQS_USE_CLOCK_CHAIN;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMLatency_Value = Guid.initString("62ea93ba-ec62-11d2-b770-00c04fb6bd3d");
pub const IID_IAMLatency = &IID_IAMLatency_Value;
pub const IAMLatency = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetLatency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLatency,
                prtLatency: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLatency,
                prtLatency: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLatency_GetLatency(self: *const T, prtLatency: ?*i64) HRESULT {
                return @as(*const IAMLatency.VTable, @ptrCast(self.vtable)).GetLatency(@as(*const IAMLatency, @ptrCast(self)), prtLatency);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMPushSource_Value = Guid.initString("f185fe76-e64e-11d2-b76e-00c04fb6bd3d");
pub const IID_IAMPushSource = &IID_IAMPushSource_Value;
pub const IAMPushSource = extern struct {
    pub const VTable = extern struct {
        base: IAMLatency.VTable,
        GetPushSourceFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPushSource,
                pFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPushSource,
                pFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetPushSourceFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPushSource,
                Flags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPushSource,
                Flags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetStreamOffset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPushSource,
                rtOffset: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPushSource,
                rtOffset: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamOffset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPushSource,
                prtOffset: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPushSource,
                prtOffset: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMaxStreamOffset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPushSource,
                prtMaxOffset: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPushSource,
                prtMaxOffset: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMaxStreamOffset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPushSource,
                rtMaxOffset: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPushSource,
                rtMaxOffset: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IAMLatency.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPushSource_GetPushSourceFlags(self: *const T, pFlags: ?*u32) HRESULT {
                return @as(*const IAMPushSource.VTable, @ptrCast(self.vtable)).GetPushSourceFlags(@as(*const IAMPushSource, @ptrCast(self)), pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPushSource_SetPushSourceFlags(self: *const T, Flags: u32) HRESULT {
                return @as(*const IAMPushSource.VTable, @ptrCast(self.vtable)).SetPushSourceFlags(@as(*const IAMPushSource, @ptrCast(self)), Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPushSource_SetStreamOffset(self: *const T, rtOffset: i64) HRESULT {
                return @as(*const IAMPushSource.VTable, @ptrCast(self.vtable)).SetStreamOffset(@as(*const IAMPushSource, @ptrCast(self)), rtOffset);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPushSource_GetStreamOffset(self: *const T, prtOffset: ?*i64) HRESULT {
                return @as(*const IAMPushSource.VTable, @ptrCast(self.vtable)).GetStreamOffset(@as(*const IAMPushSource, @ptrCast(self)), prtOffset);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPushSource_GetMaxStreamOffset(self: *const T, prtMaxOffset: ?*i64) HRESULT {
                return @as(*const IAMPushSource.VTable, @ptrCast(self.vtable)).GetMaxStreamOffset(@as(*const IAMPushSource, @ptrCast(self)), prtMaxOffset);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPushSource_SetMaxStreamOffset(self: *const T, rtMaxOffset: i64) HRESULT {
                return @as(*const IAMPushSource.VTable, @ptrCast(self.vtable)).SetMaxStreamOffset(@as(*const IAMPushSource, @ptrCast(self)), rtMaxOffset);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMDeviceRemoval_Value = Guid.initString("f90a6130-b658-11d2-ae49-0000f8754b99");
pub const IID_IAMDeviceRemoval = &IID_IAMDeviceRemoval_Value;
pub const IAMDeviceRemoval = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        DeviceInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDeviceRemoval,
                pclsidInterfaceClass: ?*Guid,
                pwszSymbolicLink: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDeviceRemoval,
                pclsidInterfaceClass: ?*Guid,
                pwszSymbolicLink: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reassociate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDeviceRemoval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDeviceRemoval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Disassociate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDeviceRemoval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDeviceRemoval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDeviceRemoval_DeviceInfo(self: *const T, pclsidInterfaceClass: ?*Guid, pwszSymbolicLink: ?*?PWSTR) HRESULT {
                return @as(*const IAMDeviceRemoval.VTable, @ptrCast(self.vtable)).DeviceInfo(@as(*const IAMDeviceRemoval, @ptrCast(self)), pclsidInterfaceClass, pwszSymbolicLink);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDeviceRemoval_Reassociate(self: *const T) HRESULT {
                return @as(*const IAMDeviceRemoval.VTable, @ptrCast(self.vtable)).Reassociate(@as(*const IAMDeviceRemoval, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDeviceRemoval_Disassociate(self: *const T) HRESULT {
                return @as(*const IAMDeviceRemoval.VTable, @ptrCast(self.vtable)).Disassociate(@as(*const IAMDeviceRemoval, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DVINFO = extern struct {
    dwDVAAuxSrc: u32,
    dwDVAAuxCtl: u32,
    dwDVAAuxSrc1: u32,
    dwDVAAuxCtl1: u32,
    dwDVVAuxSrc: u32,
    dwDVVAuxCtl: u32,
    dwDVReserved: [2]u32,
};

pub const _DVENCODERRESOLUTION = enum(i32) {
    @"720x480" = 2012,
    @"360x240" = 2013,
    @"180x120" = 2014,
    @"88x60" = 2015,
};
pub const DVENCODERRESOLUTION_720x480 = _DVENCODERRESOLUTION.@"720x480";
pub const DVENCODERRESOLUTION_360x240 = _DVENCODERRESOLUTION.@"360x240";
pub const DVENCODERRESOLUTION_180x120 = _DVENCODERRESOLUTION.@"180x120";
pub const DVENCODERRESOLUTION_88x60 = _DVENCODERRESOLUTION.@"88x60";

pub const _DVENCODERVIDEOFORMAT = enum(i32) {
    NTSC = 2000,
    PAL = 2001,
};
pub const DVENCODERVIDEOFORMAT_NTSC = _DVENCODERVIDEOFORMAT.NTSC;
pub const DVENCODERVIDEOFORMAT_PAL = _DVENCODERVIDEOFORMAT.PAL;

pub const _DVENCODERFORMAT = enum(i32) {
    SD = 2007,
    HD = 2008,
    SL = 2009,
};
pub const DVENCODERFORMAT_DVSD = _DVENCODERFORMAT.SD;
pub const DVENCODERFORMAT_DVHD = _DVENCODERFORMAT.HD;
pub const DVENCODERFORMAT_DVSL = _DVENCODERFORMAT.SL;

// TODO: this type is limited to platform 'windows5.0'
const IID_IDVEnc_Value = Guid.initString("d18e17a0-aacb-11d0-afb0-00aa00b67a42");
pub const IID_IDVEnc = &IID_IDVEnc_Value;
pub const IDVEnc = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_IFormatResolution: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVEnc,
                VideoFormat: ?*i32,
                DVFormat: ?*i32,
                Resolution: ?*i32,
                fDVInfo: u8,
                sDVInfo: ?*DVINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVEnc,
                VideoFormat: ?*i32,
                DVFormat: ?*i32,
                Resolution: ?*i32,
                fDVInfo: u8,
                sDVInfo: ?*DVINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_IFormatResolution: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVEnc,
                VideoFormat: i32,
                DVFormat: i32,
                Resolution: i32,
                fDVInfo: u8,
                sDVInfo: ?*DVINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVEnc,
                VideoFormat: i32,
                DVFormat: i32,
                Resolution: i32,
                fDVInfo: u8,
                sDVInfo: ?*DVINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVEnc_get_IFormatResolution(self: *const T, VideoFormat: ?*i32, DVFormat: ?*i32, Resolution: ?*i32, fDVInfo: u8, sDVInfo: ?*DVINFO) HRESULT {
                return @as(*const IDVEnc.VTable, @ptrCast(self.vtable)).get_IFormatResolution(@as(*const IDVEnc, @ptrCast(self)), VideoFormat, DVFormat, Resolution, fDVInfo, sDVInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVEnc_put_IFormatResolution(self: *const T, VideoFormat: i32, DVFormat: i32, Resolution: i32, fDVInfo: u8, sDVInfo: ?*DVINFO) HRESULT {
                return @as(*const IDVEnc.VTable, @ptrCast(self.vtable)).put_IFormatResolution(@as(*const IDVEnc, @ptrCast(self)), VideoFormat, DVFormat, Resolution, fDVInfo, sDVInfo);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _DVDECODERRESOLUTION = enum(i32) {
    @"720x480" = 1000,
    @"360x240" = 1001,
    @"180x120" = 1002,
    @"88x60" = 1003,
};
pub const DVDECODERRESOLUTION_720x480 = _DVDECODERRESOLUTION.@"720x480";
pub const DVDECODERRESOLUTION_360x240 = _DVDECODERRESOLUTION.@"360x240";
pub const DVDECODERRESOLUTION_180x120 = _DVDECODERRESOLUTION.@"180x120";
pub const DVDECODERRESOLUTION_88x60 = _DVDECODERRESOLUTION.@"88x60";

pub const _DVRESOLUTION = enum(i32) {
    FULL = 1000,
    HALF = 1001,
    QUARTER = 1002,
    DC = 1003,
};
pub const DVRESOLUTION_FULL = _DVRESOLUTION.FULL;
pub const DVRESOLUTION_HALF = _DVRESOLUTION.HALF;
pub const DVRESOLUTION_QUARTER = _DVRESOLUTION.QUARTER;
pub const DVRESOLUTION_DC = _DVRESOLUTION.DC;

// TODO: this type is limited to platform 'windows5.0'
const IID_IIPDVDec_Value = Guid.initString("b8e8bd60-0bfe-11d0-af91-00aa00b67a42");
pub const IID_IIPDVDec = &IID_IIPDVDec_Value;
pub const IIPDVDec = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_IPDisplay: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IIPDVDec,
                displayPix: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IIPDVDec,
                displayPix: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_IPDisplay: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IIPDVDec,
                displayPix: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IIPDVDec,
                displayPix: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIPDVDec_get_IPDisplay(self: *const T, displayPix: ?*i32) HRESULT {
                return @as(*const IIPDVDec.VTable, @ptrCast(self.vtable)).get_IPDisplay(@as(*const IIPDVDec, @ptrCast(self)), displayPix);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIPDVDec_put_IPDisplay(self: *const T, displayPix: i32) HRESULT {
                return @as(*const IIPDVDec.VTable, @ptrCast(self.vtable)).put_IPDisplay(@as(*const IIPDVDec, @ptrCast(self)), displayPix);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDVRGB219_Value = Guid.initString("58473a19-2bc8-4663-8012-25f81babddd1");
pub const IID_IDVRGB219 = &IID_IDVRGB219_Value;
pub const IDVRGB219 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetRGB219: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVRGB219,
                bState: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVRGB219,
                bState: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVRGB219_SetRGB219(self: *const T, bState: BOOL) HRESULT {
                return @as(*const IDVRGB219.VTable, @ptrCast(self.vtable)).SetRGB219(@as(*const IDVRGB219, @ptrCast(self)), bState);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDVSplitter_Value = Guid.initString("92a3a302-da7c-4a1f-ba7e-1802bb5d2d02");
pub const IID_IDVSplitter = &IID_IDVSplitter_Value;
pub const IDVSplitter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        DiscardAlternateVideoFrames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVSplitter,
                nDiscard: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVSplitter,
                nDiscard: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVSplitter_DiscardAlternateVideoFrames(self: *const T, nDiscard: i32) HRESULT {
                return @as(*const IDVSplitter.VTable, @ptrCast(self.vtable)).DiscardAlternateVideoFrames(@as(*const IDVSplitter, @ptrCast(self)), nDiscard);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _AM_AUDIO_RENDERER_STAT_PARAM = enum(i32) {
    BREAK_COUNT = 1,
    SLAVE_MODE = 2,
    SILENCE_DUR = 3,
    LAST_BUFFER_DUR = 4,
    DISCONTINUITIES = 5,
    SLAVE_RATE = 6,
    SLAVE_DROPWRITE_DUR = 7,
    SLAVE_HIGHLOWERROR = 8,
    SLAVE_LASTHIGHLOWERROR = 9,
    SLAVE_ACCUMERROR = 10,
    BUFFERFULLNESS = 11,
    JITTER = 12,
};
pub const AM_AUDREND_STAT_PARAM_BREAK_COUNT = _AM_AUDIO_RENDERER_STAT_PARAM.BREAK_COUNT;
pub const AM_AUDREND_STAT_PARAM_SLAVE_MODE = _AM_AUDIO_RENDERER_STAT_PARAM.SLAVE_MODE;
pub const AM_AUDREND_STAT_PARAM_SILENCE_DUR = _AM_AUDIO_RENDERER_STAT_PARAM.SILENCE_DUR;
pub const AM_AUDREND_STAT_PARAM_LAST_BUFFER_DUR = _AM_AUDIO_RENDERER_STAT_PARAM.LAST_BUFFER_DUR;
pub const AM_AUDREND_STAT_PARAM_DISCONTINUITIES = _AM_AUDIO_RENDERER_STAT_PARAM.DISCONTINUITIES;
pub const AM_AUDREND_STAT_PARAM_SLAVE_RATE = _AM_AUDIO_RENDERER_STAT_PARAM.SLAVE_RATE;
pub const AM_AUDREND_STAT_PARAM_SLAVE_DROPWRITE_DUR = _AM_AUDIO_RENDERER_STAT_PARAM.SLAVE_DROPWRITE_DUR;
pub const AM_AUDREND_STAT_PARAM_SLAVE_HIGHLOWERROR = _AM_AUDIO_RENDERER_STAT_PARAM.SLAVE_HIGHLOWERROR;
pub const AM_AUDREND_STAT_PARAM_SLAVE_LASTHIGHLOWERROR = _AM_AUDIO_RENDERER_STAT_PARAM.SLAVE_LASTHIGHLOWERROR;
pub const AM_AUDREND_STAT_PARAM_SLAVE_ACCUMERROR = _AM_AUDIO_RENDERER_STAT_PARAM.SLAVE_ACCUMERROR;
pub const AM_AUDREND_STAT_PARAM_BUFFERFULLNESS = _AM_AUDIO_RENDERER_STAT_PARAM.BUFFERFULLNESS;
pub const AM_AUDREND_STAT_PARAM_JITTER = _AM_AUDIO_RENDERER_STAT_PARAM.JITTER;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMAudioRendererStats_Value = Guid.initString("22320cb2-d41a-11d2-bf7c-d7cb9df0bf93");
pub const IID_IAMAudioRendererStats = &IID_IAMAudioRendererStats_Value;
pub const IAMAudioRendererStats = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetStatParam: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMAudioRendererStats,
                dwParam: u32,
                pdwParam1: ?*u32,
                pdwParam2: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMAudioRendererStats,
                dwParam: u32,
                pdwParam1: ?*u32,
                pdwParam2: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAudioRendererStats_GetStatParam(self: *const T, dwParam: u32, pdwParam1: ?*u32, pdwParam2: ?*u32) HRESULT {
                return @as(*const IAMAudioRendererStats.VTable, @ptrCast(self.vtable)).GetStatParam(@as(*const IAMAudioRendererStats, @ptrCast(self)), dwParam, pdwParam1, pdwParam2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _AM_INTF_SEARCH_FLAGS = enum(i32) {
    INPUT_PIN = 1,
    OUTPUT_PIN = 2,
    FILTER = 4,
};
pub const AM_INTF_SEARCH_INPUT_PIN = _AM_INTF_SEARCH_FLAGS.INPUT_PIN;
pub const AM_INTF_SEARCH_OUTPUT_PIN = _AM_INTF_SEARCH_FLAGS.OUTPUT_PIN;
pub const AM_INTF_SEARCH_FILTER = _AM_INTF_SEARCH_FLAGS.FILTER;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMGraphStreams_Value = Guid.initString("632105fa-072e-11d3-8af9-00c04fb6bd3d");
pub const IID_IAMGraphStreams = &IID_IAMGraphStreams_Value;
pub const IAMGraphStreams = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        FindUpstreamInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMGraphStreams,
                pPin: ?*IPin,
                riid: ?*const Guid,
                ppvInterface: ?*?*anyopaque,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMGraphStreams,
                pPin: ?*IPin,
                riid: ?*const Guid,
                ppvInterface: ?*?*anyopaque,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SyncUsingStreamOffset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMGraphStreams,
                bUseStreamOffset: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMGraphStreams,
                bUseStreamOffset: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMaxGraphLatency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMGraphStreams,
                rtMaxGraphLatency: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMGraphStreams,
                rtMaxGraphLatency: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMGraphStreams_FindUpstreamInterface(self: *const T, pPin: ?*IPin, riid: ?*const Guid, ppvInterface: ?*?*anyopaque, dwFlags: u32) HRESULT {
                return @as(*const IAMGraphStreams.VTable, @ptrCast(self.vtable)).FindUpstreamInterface(@as(*const IAMGraphStreams, @ptrCast(self)), pPin, riid, ppvInterface, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMGraphStreams_SyncUsingStreamOffset(self: *const T, bUseStreamOffset: BOOL) HRESULT {
                return @as(*const IAMGraphStreams.VTable, @ptrCast(self.vtable)).SyncUsingStreamOffset(@as(*const IAMGraphStreams, @ptrCast(self)), bUseStreamOffset);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMGraphStreams_SetMaxGraphLatency(self: *const T, rtMaxGraphLatency: i64) HRESULT {
                return @as(*const IAMGraphStreams.VTable, @ptrCast(self.vtable)).SetMaxGraphLatency(@as(*const IAMGraphStreams, @ptrCast(self)), rtMaxGraphLatency);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AMOVERLAYFX = enum(i32) {
    NOFX = 0,
    MIRRORLEFTRIGHT = 2,
    MIRRORUPDOWN = 4,
    DEINTERLACE = 8,
};
pub const AMOVERFX_NOFX = AMOVERLAYFX.NOFX;
pub const AMOVERFX_MIRRORLEFTRIGHT = AMOVERLAYFX.MIRRORLEFTRIGHT;
pub const AMOVERFX_MIRRORUPDOWN = AMOVERLAYFX.MIRRORUPDOWN;
pub const AMOVERFX_DEINTERLACE = AMOVERLAYFX.DEINTERLACE;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMOverlayFX_Value = Guid.initString("62fae250-7e65-4460-bfc9-6398b322073c");
pub const IID_IAMOverlayFX = &IID_IAMOverlayFX_Value;
pub const IAMOverlayFX = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        QueryOverlayFXCaps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMOverlayFX,
                lpdwOverlayFXCaps: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMOverlayFX,
                lpdwOverlayFXCaps: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOverlayFX: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMOverlayFX,
                dwOverlayFX: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMOverlayFX,
                dwOverlayFX: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOverlayFX: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMOverlayFX,
                lpdwOverlayFX: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMOverlayFX,
                lpdwOverlayFX: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMOverlayFX_QueryOverlayFXCaps(self: *const T, lpdwOverlayFXCaps: ?*u32) HRESULT {
                return @as(*const IAMOverlayFX.VTable, @ptrCast(self.vtable)).QueryOverlayFXCaps(@as(*const IAMOverlayFX, @ptrCast(self)), lpdwOverlayFXCaps);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMOverlayFX_SetOverlayFX(self: *const T, dwOverlayFX: u32) HRESULT {
                return @as(*const IAMOverlayFX.VTable, @ptrCast(self.vtable)).SetOverlayFX(@as(*const IAMOverlayFX, @ptrCast(self)), dwOverlayFX);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMOverlayFX_GetOverlayFX(self: *const T, lpdwOverlayFX: ?*u32) HRESULT {
                return @as(*const IAMOverlayFX.VTable, @ptrCast(self.vtable)).GetOverlayFX(@as(*const IAMOverlayFX, @ptrCast(self)), lpdwOverlayFX);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMOpenProgress_Value = Guid.initString("8e1c39a1-de53-11cf-aa63-0080c744528d");
pub const IID_IAMOpenProgress = &IID_IAMOpenProgress_Value;
pub const IAMOpenProgress = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        QueryProgress: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMOpenProgress,
                pllTotal: ?*i64,
                pllCurrent: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMOpenProgress,
                pllTotal: ?*i64,
                pllCurrent: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AbortOperation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMOpenProgress,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMOpenProgress,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMOpenProgress_QueryProgress(self: *const T, pllTotal: ?*i64, pllCurrent: ?*i64) HRESULT {
                return @as(*const IAMOpenProgress.VTable, @ptrCast(self.vtable)).QueryProgress(@as(*const IAMOpenProgress, @ptrCast(self)), pllTotal, pllCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMOpenProgress_AbortOperation(self: *const T) HRESULT {
                return @as(*const IAMOpenProgress.VTable, @ptrCast(self.vtable)).AbortOperation(@as(*const IAMOpenProgress, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMpeg2Demultiplexer_Value = Guid.initString("436eee9c-264f-4242-90e1-4e330c107512");
pub const IID_IMpeg2Demultiplexer = &IID_IMpeg2Demultiplexer_Value;
pub const IMpeg2Demultiplexer = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateOutputPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2Demultiplexer,
                pMediaType: ?*AM_MEDIA_TYPE,
                pszPinName: ?PWSTR,
                ppIPin: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2Demultiplexer,
                pMediaType: ?*AM_MEDIA_TYPE,
                pszPinName: ?PWSTR,
                ppIPin: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOutputPinMediaType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2Demultiplexer,
                pszPinName: ?PWSTR,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2Demultiplexer,
                pszPinName: ?PWSTR,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DeleteOutputPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2Demultiplexer,
                pszPinName: ?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2Demultiplexer,
                pszPinName: ?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2Demultiplexer_CreateOutputPin(self: *const T, pMediaType: ?*AM_MEDIA_TYPE, pszPinName: ?PWSTR, ppIPin: ?*?*IPin) HRESULT {
                return @as(*const IMpeg2Demultiplexer.VTable, @ptrCast(self.vtable)).CreateOutputPin(@as(*const IMpeg2Demultiplexer, @ptrCast(self)), pMediaType, pszPinName, ppIPin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2Demultiplexer_SetOutputPinMediaType(self: *const T, pszPinName: ?PWSTR, pMediaType: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IMpeg2Demultiplexer.VTable, @ptrCast(self.vtable)).SetOutputPinMediaType(@as(*const IMpeg2Demultiplexer, @ptrCast(self)), pszPinName, pMediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2Demultiplexer_DeleteOutputPin(self: *const T, pszPinName: ?PWSTR) HRESULT {
                return @as(*const IMpeg2Demultiplexer.VTable, @ptrCast(self.vtable)).DeleteOutputPin(@as(*const IMpeg2Demultiplexer, @ptrCast(self)), pszPinName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const STREAM_ID_MAP = extern struct {
    stream_id: u32,
    dwMediaSampleContent: u32,
    ulSubstreamFilterValue: u32,
    iDataOffset: i32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IEnumStreamIdMap_Value = Guid.initString("945c1566-6202-46fc-96c7-d87f289c6534");
pub const IID_IEnumStreamIdMap = &IID_IEnumStreamIdMap_Value;
pub const IEnumStreamIdMap = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumStreamIdMap,
                cRequest: u32,
                pStreamIdMap: [*]STREAM_ID_MAP,
                pcReceived: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumStreamIdMap,
                cRequest: u32,
                pStreamIdMap: [*]STREAM_ID_MAP,
                pcReceived: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumStreamIdMap,
                cRecords: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumStreamIdMap,
                cRecords: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumStreamIdMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumStreamIdMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumStreamIdMap,
                ppIEnumStreamIdMap: ?*?*IEnumStreamIdMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumStreamIdMap,
                ppIEnumStreamIdMap: ?*?*IEnumStreamIdMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumStreamIdMap_Next(self: *const T, cRequest: u32, pStreamIdMap: [*]STREAM_ID_MAP, pcReceived: ?*u32) HRESULT {
                return @as(*const IEnumStreamIdMap.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumStreamIdMap, @ptrCast(self)), cRequest, pStreamIdMap, pcReceived);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumStreamIdMap_Skip(self: *const T, cRecords: u32) HRESULT {
                return @as(*const IEnumStreamIdMap.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumStreamIdMap, @ptrCast(self)), cRecords);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumStreamIdMap_Reset(self: *const T) HRESULT {
                return @as(*const IEnumStreamIdMap.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumStreamIdMap, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumStreamIdMap_Clone(self: *const T, ppIEnumStreamIdMap: ?*?*IEnumStreamIdMap) HRESULT {
                return @as(*const IEnumStreamIdMap.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumStreamIdMap, @ptrCast(self)), ppIEnumStreamIdMap);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMPEG2StreamIdMap_Value = Guid.initString("d0e04c47-25b8-4369-925a-362a01d95444");
pub const IID_IMPEG2StreamIdMap = &IID_IMPEG2StreamIdMap_Value;
pub const IMPEG2StreamIdMap = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        MapStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2StreamIdMap,
                ulStreamId: u32,
                MediaSampleContent: u32,
                ulSubstreamFilterValue: u32,
                iDataOffset: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2StreamIdMap,
                ulStreamId: u32,
                MediaSampleContent: u32,
                ulSubstreamFilterValue: u32,
                iDataOffset: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnmapStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2StreamIdMap,
                culStreamId: u32,
                pulStreamId: [*]u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2StreamIdMap,
                culStreamId: u32,
                pulStreamId: [*]u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumStreamIdMap: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2StreamIdMap,
                ppIEnumStreamIdMap: ?*?*IEnumStreamIdMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2StreamIdMap,
                ppIEnumStreamIdMap: ?*?*IEnumStreamIdMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2StreamIdMap_MapStreamId(self: *const T, ulStreamId: u32, MediaSampleContent: u32, ulSubstreamFilterValue: u32, iDataOffset: i32) HRESULT {
                return @as(*const IMPEG2StreamIdMap.VTable, @ptrCast(self.vtable)).MapStreamId(@as(*const IMPEG2StreamIdMap, @ptrCast(self)), ulStreamId, MediaSampleContent, ulSubstreamFilterValue, iDataOffset);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2StreamIdMap_UnmapStreamId(self: *const T, culStreamId: u32, pulStreamId: [*]u32) HRESULT {
                return @as(*const IMPEG2StreamIdMap.VTable, @ptrCast(self.vtable)).UnmapStreamId(@as(*const IMPEG2StreamIdMap, @ptrCast(self)), culStreamId, pulStreamId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2StreamIdMap_EnumStreamIdMap(self: *const T, ppIEnumStreamIdMap: ?*?*IEnumStreamIdMap) HRESULT {
                return @as(*const IMPEG2StreamIdMap.VTable, @ptrCast(self.vtable)).EnumStreamIdMap(@as(*const IMPEG2StreamIdMap, @ptrCast(self)), ppIEnumStreamIdMap);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IRegisterServiceProvider_Value = Guid.initString("7b3a2f01-0751-48dd-b556-004785171c54");
pub const IID_IRegisterServiceProvider = &IID_IRegisterServiceProvider_Value;
pub const IRegisterServiceProvider = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        RegisterService: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IRegisterServiceProvider,
                guidService: ?*const Guid,
                pUnkObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IRegisterServiceProvider,
                guidService: ?*const Guid,
                pUnkObject: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IRegisterServiceProvider_RegisterService(self: *const T, guidService: ?*const Guid, pUnkObject: ?*IUnknown) HRESULT {
                return @as(*const IRegisterServiceProvider.VTable, @ptrCast(self.vtable)).RegisterService(@as(*const IRegisterServiceProvider, @ptrCast(self)), guidService, pUnkObject);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMClockSlave_Value = Guid.initString("9fd52741-176d-4b36-8f51-ca8f933223be");
pub const IID_IAMClockSlave = &IID_IAMClockSlave_Value;
pub const IAMClockSlave = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetErrorTolerance: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMClockSlave,
                dwTolerance: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMClockSlave,
                dwTolerance: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetErrorTolerance: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMClockSlave,
                pdwTolerance: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMClockSlave,
                pdwTolerance: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMClockSlave_SetErrorTolerance(self: *const T, dwTolerance: u32) HRESULT {
                return @as(*const IAMClockSlave.VTable, @ptrCast(self.vtable)).SetErrorTolerance(@as(*const IAMClockSlave, @ptrCast(self)), dwTolerance);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMClockSlave_GetErrorTolerance(self: *const T, pdwTolerance: ?*u32) HRESULT {
                return @as(*const IAMClockSlave.VTable, @ptrCast(self.vtable)).GetErrorTolerance(@as(*const IAMClockSlave, @ptrCast(self)), pdwTolerance);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMGraphBuilderCallback_Value = Guid.initString("4995f511-9ddb-4f12-bd3b-f04611807b79");
pub const IID_IAMGraphBuilderCallback = &IID_IAMGraphBuilderCallback_Value;
pub const IAMGraphBuilderCallback = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SelectedFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMGraphBuilderCallback,
                pMon: ?*IMoniker,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMGraphBuilderCallback,
                pMon: ?*IMoniker,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreatedFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMGraphBuilderCallback,
                pFil: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMGraphBuilderCallback,
                pFil: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMGraphBuilderCallback_SelectedFilter(self: *const T, pMon: ?*IMoniker) HRESULT {
                return @as(*const IAMGraphBuilderCallback.VTable, @ptrCast(self.vtable)).SelectedFilter(@as(*const IAMGraphBuilderCallback, @ptrCast(self)), pMon);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMGraphBuilderCallback_CreatedFilter(self: *const T, pFil: ?*IBaseFilter) HRESULT {
                return @as(*const IAMGraphBuilderCallback.VTable, @ptrCast(self.vtable)).CreatedFilter(@as(*const IAMGraphBuilderCallback, @ptrCast(self)), pFil);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMFilterGraphCallback_Value = Guid.initString("56a868fd-0ad4-11ce-b0a3-0020af0ba770");
pub const IID_IAMFilterGraphCallback = &IID_IAMFilterGraphCallback_Value;
pub const IAMFilterGraphCallback = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        UnableToRender: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMFilterGraphCallback,
                pPin: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMFilterGraphCallback,
                pPin: ?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMFilterGraphCallback_UnableToRender(self: *const T, pPin: ?*IPin) HRESULT {
                return @as(*const IAMFilterGraphCallback.VTable, @ptrCast(self.vtable)).UnableToRender(@as(*const IAMFilterGraphCallback, @ptrCast(self)), pPin);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IGetCapabilitiesKey_Value = Guid.initString("a8809222-07bb-48ea-951c-33158100625b");
pub const IID_IGetCapabilitiesKey = &IID_IGetCapabilitiesKey_Value;
pub const IGetCapabilitiesKey = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCapabilitiesKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGetCapabilitiesKey,
                pHKey: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGetCapabilitiesKey,
                pHKey: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGetCapabilitiesKey_GetCapabilitiesKey(self: *const T, pHKey: ?*?HKEY) HRESULT {
                return @as(*const IGetCapabilitiesKey.VTable, @ptrCast(self.vtable)).GetCapabilitiesKey(@as(*const IGetCapabilitiesKey, @ptrCast(self)), pHKey);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IEncoderAPI_Value = Guid.initString("70423839-6acc-4b23-b079-21dbf08156a5");
pub const IID_IEncoderAPI = &IID_IEncoderAPI_Value;
pub const IEncoderAPI = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        IsSupported: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsAvailable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParameterRange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                ValueMin: ?*VARIANT,
                ValueMax: ?*VARIANT,
                SteppingDelta: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                ValueMin: ?*VARIANT,
                ValueMax: ?*VARIANT,
                SteppingDelta: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParameterValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                Values: [*]?*VARIANT,
                ValuesCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                Values: [*]?*VARIANT,
                ValuesCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDefaultValue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                Value: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                Value: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetValue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                Value: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                Value: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetValue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                Value: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEncoderAPI,
                Api: ?*const Guid,
                Value: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEncoderAPI_IsSupported(self: *const T, Api: ?*const Guid) HRESULT {
                return @as(*const IEncoderAPI.VTable, @ptrCast(self.vtable)).IsSupported(@as(*const IEncoderAPI, @ptrCast(self)), Api);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEncoderAPI_IsAvailable(self: *const T, Api: ?*const Guid) HRESULT {
                return @as(*const IEncoderAPI.VTable, @ptrCast(self.vtable)).IsAvailable(@as(*const IEncoderAPI, @ptrCast(self)), Api);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEncoderAPI_GetParameterRange(self: *const T, Api: ?*const Guid, ValueMin: ?*VARIANT, ValueMax: ?*VARIANT, SteppingDelta: ?*VARIANT) HRESULT {
                return @as(*const IEncoderAPI.VTable, @ptrCast(self.vtable)).GetParameterRange(@as(*const IEncoderAPI, @ptrCast(self)), Api, ValueMin, ValueMax, SteppingDelta);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEncoderAPI_GetParameterValues(self: *const T, Api: ?*const Guid, Values: [*]?*VARIANT, ValuesCount: ?*u32) HRESULT {
                return @as(*const IEncoderAPI.VTable, @ptrCast(self.vtable)).GetParameterValues(@as(*const IEncoderAPI, @ptrCast(self)), Api, Values, ValuesCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEncoderAPI_GetDefaultValue(self: *const T, Api: ?*const Guid, Value: ?*VARIANT) HRESULT {
                return @as(*const IEncoderAPI.VTable, @ptrCast(self.vtable)).GetDefaultValue(@as(*const IEncoderAPI, @ptrCast(self)), Api, Value);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEncoderAPI_GetValue(self: *const T, Api: ?*const Guid, Value: ?*VARIANT) HRESULT {
                return @as(*const IEncoderAPI.VTable, @ptrCast(self.vtable)).GetValue(@as(*const IEncoderAPI, @ptrCast(self)), Api, Value);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEncoderAPI_SetValue(self: *const T, Api: ?*const Guid, Value: ?*VARIANT) HRESULT {
                return @as(*const IEncoderAPI.VTable, @ptrCast(self.vtable)).SetValue(@as(*const IEncoderAPI, @ptrCast(self)), Api, Value);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IVideoEncoder_Value = Guid.initString("02997c3b-8e1b-460e-9270-545e0de9563e");
pub const IID_IVideoEncoder = &IID_IVideoEncoder_Value;
pub const IVideoEncoder = extern struct {
    pub const VTable = extern struct {
        base: IEncoderAPI.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IEncoderAPI.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMDecoderCaps_Value = Guid.initString("c0dff467-d499-4986-972b-e1d9090fa941");
pub const IID_IAMDecoderCaps = &IID_IAMDecoderCaps_Value;
pub const IAMDecoderCaps = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetDecoderCaps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDecoderCaps,
                dwCapIndex: u32,
                lpdwCap: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDecoderCaps,
                dwCapIndex: u32,
                lpdwCap: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDecoderCaps_GetDecoderCaps(self: *const T, dwCapIndex: u32, lpdwCap: ?*u32) HRESULT {
                return @as(*const IAMDecoderCaps.VTable, @ptrCast(self.vtable)).GetDecoderCaps(@as(*const IAMDecoderCaps, @ptrCast(self)), dwCapIndex, lpdwCap);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AMCOPPSignature = extern struct {
    Signature: [256]u8,
};

pub const AMCOPPCommand = extern struct {
    macKDI: Guid,
    guidCommandID: Guid,
    dwSequence: u32,
    cbSizeData: u32,
    CommandData: [4056]u8,
};

pub const AMCOPPStatusInput = extern struct {
    rApp: Guid,
    guidStatusRequestID: Guid,
    dwSequence: u32,
    cbSizeData: u32,
    StatusData: [4056]u8,
};

pub const AMCOPPStatusOutput = extern struct {
    macKDI: Guid,
    cbSizeData: u32,
    COPPStatus: [4076]u8,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMCertifiedOutputProtection_Value = Guid.initString("6feded3e-0ff1-4901-a2f1-43f7012c8515");
pub const IID_IAMCertifiedOutputProtection = &IID_IAMCertifiedOutputProtection_Value;
pub const IAMCertifiedOutputProtection = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        KeyExchange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCertifiedOutputProtection,
                pRandom: ?*Guid,
                VarLenCertGH: ?*?*u8,
                pdwLengthCertGH: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCertifiedOutputProtection,
                pRandom: ?*Guid,
                VarLenCertGH: ?*?*u8,
                pdwLengthCertGH: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SessionSequenceStart: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCertifiedOutputProtection,
                pSig: ?*AMCOPPSignature,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCertifiedOutputProtection,
                pSig: ?*AMCOPPSignature,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ProtectionCommand: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCertifiedOutputProtection,
                cmd: ?*const AMCOPPCommand,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCertifiedOutputProtection,
                cmd: ?*const AMCOPPCommand,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ProtectionStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCertifiedOutputProtection,
                pStatusInput: ?*const AMCOPPStatusInput,
                pStatusOutput: ?*AMCOPPStatusOutput,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCertifiedOutputProtection,
                pStatusInput: ?*const AMCOPPStatusInput,
                pStatusOutput: ?*AMCOPPStatusOutput,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCertifiedOutputProtection_KeyExchange(self: *const T, pRandom: ?*Guid, VarLenCertGH: ?*?*u8, pdwLengthCertGH: ?*u32) HRESULT {
                return @as(*const IAMCertifiedOutputProtection.VTable, @ptrCast(self.vtable)).KeyExchange(@as(*const IAMCertifiedOutputProtection, @ptrCast(self)), pRandom, VarLenCertGH, pdwLengthCertGH);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCertifiedOutputProtection_SessionSequenceStart(self: *const T, pSig: ?*AMCOPPSignature) HRESULT {
                return @as(*const IAMCertifiedOutputProtection.VTable, @ptrCast(self.vtable)).SessionSequenceStart(@as(*const IAMCertifiedOutputProtection, @ptrCast(self)), pSig);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCertifiedOutputProtection_ProtectionCommand(self: *const T, cmd: ?*const AMCOPPCommand) HRESULT {
                return @as(*const IAMCertifiedOutputProtection.VTable, @ptrCast(self.vtable)).ProtectionCommand(@as(*const IAMCertifiedOutputProtection, @ptrCast(self)), cmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCertifiedOutputProtection_ProtectionStatus(self: *const T, pStatusInput: ?*const AMCOPPStatusInput, pStatusOutput: ?*AMCOPPStatusOutput) HRESULT {
                return @as(*const IAMCertifiedOutputProtection.VTable, @ptrCast(self.vtable)).ProtectionStatus(@as(*const IAMCertifiedOutputProtection, @ptrCast(self)), pStatusInput, pStatusOutput);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IAMAsyncReaderTimestampScaling_Value = Guid.initString("cf7b26fc-9a00-485b-8147-3e789d5e8f67");
pub const IID_IAMAsyncReaderTimestampScaling = &IID_IAMAsyncReaderTimestampScaling_Value;
pub const IAMAsyncReaderTimestampScaling = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTimestampMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMAsyncReaderTimestampScaling,
                pfRaw: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMAsyncReaderTimestampScaling,
                pfRaw: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTimestampMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMAsyncReaderTimestampScaling,
                fRaw: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMAsyncReaderTimestampScaling,
                fRaw: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAsyncReaderTimestampScaling_GetTimestampMode(self: *const T, pfRaw: ?*BOOL) HRESULT {
                return @as(*const IAMAsyncReaderTimestampScaling.VTable, @ptrCast(self.vtable)).GetTimestampMode(@as(*const IAMAsyncReaderTimestampScaling, @ptrCast(self)), pfRaw);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMAsyncReaderTimestampScaling_SetTimestampMode(self: *const T, fRaw: BOOL) HRESULT {
                return @as(*const IAMAsyncReaderTimestampScaling.VTable, @ptrCast(self.vtable)).SetTimestampMode(@as(*const IAMAsyncReaderTimestampScaling, @ptrCast(self)), fRaw);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IAMPluginControl_Value = Guid.initString("0e26a181-f40c-4635-8786-976284b52981");
pub const IID_IAMPluginControl = &IID_IAMPluginControl_Value;
pub const IAMPluginControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetPreferredClsid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPluginControl,
                subType: ?*const Guid,
                clsid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPluginControl,
                subType: ?*const Guid,
                clsid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPreferredClsidByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPluginControl,
                index: u32,
                subType: ?*Guid,
                clsid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPluginControl,
                index: u32,
                subType: ?*Guid,
                clsid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetPreferredClsid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPluginControl,
                subType: ?*const Guid,
                clsid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPluginControl,
                subType: ?*const Guid,
                clsid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsDisabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPluginControl,
                clsid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPluginControl,
                clsid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDisabledByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPluginControl,
                index: u32,
                clsid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPluginControl,
                index: u32,
                clsid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDisabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPluginControl,
                clsid: ?*const Guid,
                disabled: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPluginControl,
                clsid: ?*const Guid,
                disabled: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsLegacyDisabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPluginControl,
                dllName: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPluginControl,
                dllName: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPluginControl_GetPreferredClsid(self: *const T, subType: ?*const Guid, clsid: ?*Guid) HRESULT {
                return @as(*const IAMPluginControl.VTable, @ptrCast(self.vtable)).GetPreferredClsid(@as(*const IAMPluginControl, @ptrCast(self)), subType, clsid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPluginControl_GetPreferredClsidByIndex(self: *const T, index: u32, subType: ?*Guid, clsid: ?*Guid) HRESULT {
                return @as(*const IAMPluginControl.VTable, @ptrCast(self.vtable)).GetPreferredClsidByIndex(@as(*const IAMPluginControl, @ptrCast(self)), index, subType, clsid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPluginControl_SetPreferredClsid(self: *const T, subType: ?*const Guid, clsid: ?*const Guid) HRESULT {
                return @as(*const IAMPluginControl.VTable, @ptrCast(self.vtable)).SetPreferredClsid(@as(*const IAMPluginControl, @ptrCast(self)), subType, clsid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPluginControl_IsDisabled(self: *const T, clsid: ?*const Guid) HRESULT {
                return @as(*const IAMPluginControl.VTable, @ptrCast(self.vtable)).IsDisabled(@as(*const IAMPluginControl, @ptrCast(self)), clsid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPluginControl_GetDisabledByIndex(self: *const T, index: u32, clsid: ?*Guid) HRESULT {
                return @as(*const IAMPluginControl.VTable, @ptrCast(self.vtable)).GetDisabledByIndex(@as(*const IAMPluginControl, @ptrCast(self)), index, clsid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPluginControl_SetDisabled(self: *const T, clsid: ?*const Guid, disabled: BOOL) HRESULT {
                return @as(*const IAMPluginControl.VTable, @ptrCast(self.vtable)).SetDisabled(@as(*const IAMPluginControl, @ptrCast(self)), clsid, disabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPluginControl_IsLegacyDisabled(self: *const T, dllName: ?[*:0]const u16) HRESULT {
                return @as(*const IAMPluginControl.VTable, @ptrCast(self.vtable)).IsLegacyDisabled(@as(*const IAMPluginControl, @ptrCast(self)), dllName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IPinConnection_Value = Guid.initString("4a9a62d3-27d4-403d-91e9-89f540e55534");
pub const IID_IPinConnection = &IID_IPinConnection_Value;
pub const IPinConnection = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        DynamicQueryAccept: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinConnection,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinConnection,
                pmt: ?*const AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NotifyEndOfStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinConnection,
                hNotifyEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinConnection,
                hNotifyEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsEndPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinConnection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinConnection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DynamicDisconnect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinConnection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinConnection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinConnection_DynamicQueryAccept(self: *const T, pmt: ?*const AM_MEDIA_TYPE) HRESULT {
                return @as(*const IPinConnection.VTable, @ptrCast(self.vtable)).DynamicQueryAccept(@as(*const IPinConnection, @ptrCast(self)), pmt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinConnection_NotifyEndOfStream(self: *const T, hNotifyEvent: ?HANDLE) HRESULT {
                return @as(*const IPinConnection.VTable, @ptrCast(self.vtable)).NotifyEndOfStream(@as(*const IPinConnection, @ptrCast(self)), hNotifyEvent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinConnection_IsEndPin(self: *const T) HRESULT {
                return @as(*const IPinConnection.VTable, @ptrCast(self.vtable)).IsEndPin(@as(*const IPinConnection, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinConnection_DynamicDisconnect(self: *const T) HRESULT {
                return @as(*const IPinConnection.VTable, @ptrCast(self.vtable)).DynamicDisconnect(@as(*const IPinConnection, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IPinFlowControl_Value = Guid.initString("c56e9858-dbf3-4f6b-8119-384af2060deb");
pub const IID_IPinFlowControl = &IID_IPinFlowControl_Value;
pub const IPinFlowControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Block: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinFlowControl,
                dwBlockFlags: u32,
                hEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinFlowControl,
                dwBlockFlags: u32,
                hEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinFlowControl_Block(self: *const T, dwBlockFlags: u32, hEvent: ?HANDLE) HRESULT {
                return @as(*const IPinFlowControl.VTable, @ptrCast(self.vtable)).Block(@as(*const IPinFlowControl, @ptrCast(self)), dwBlockFlags, hEvent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS = enum(i32) {
    K = 1,
};
pub const AM_PIN_FLOW_CONTROL_BLOCK = _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS.K;

pub const AM_GRAPH_CONFIG_RECONNECT_FLAGS = enum(i32) {
    DIRECTCONNECT = 1,
    CACHE_REMOVED_FILTERS = 2,
    USE_ONLY_CACHED_FILTERS = 4,
};
pub const AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = AM_GRAPH_CONFIG_RECONNECT_FLAGS.DIRECTCONNECT;
pub const AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = AM_GRAPH_CONFIG_RECONNECT_FLAGS.CACHE_REMOVED_FILTERS;
pub const AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = AM_GRAPH_CONFIG_RECONNECT_FLAGS.USE_ONLY_CACHED_FILTERS;

pub const _REM_FILTER_FLAGS = enum(i32) {
    D = 1,
};
pub const REMFILTERF_LEAVECONNECTED = _REM_FILTER_FLAGS.D;

pub const AM_FILTER_FLAGS = enum(i32) {
    E = 1,
};
pub const AM_FILTER_FLAGS_REMOVABLE = AM_FILTER_FLAGS.E;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IGraphConfig_Value = Guid.initString("03a1eb8e-32bf-4245-8502-114d08a9cb88");
pub const IID_IGraphConfig = &IID_IGraphConfig_Value;
pub const IGraphConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Reconnect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                pOutputPin: ?*IPin,
                pInputPin: ?*IPin,
                pmtFirstConnection: ?*const AM_MEDIA_TYPE,
                pUsingFilter: ?*IBaseFilter,
                hAbortEvent: ?HANDLE,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                pOutputPin: ?*IPin,
                pInputPin: ?*IPin,
                pmtFirstConnection: ?*const AM_MEDIA_TYPE,
                pUsingFilter: ?*IBaseFilter,
                hAbortEvent: ?HANDLE,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reconfigure: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                pCallback: ?*IGraphConfigCallback,
                pvContext: ?*anyopaque,
                dwFlags: u32,
                hAbortEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                pCallback: ?*IGraphConfigCallback,
                pvContext: ?*anyopaque,
                dwFlags: u32,
                hAbortEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddFilterToCache: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumCacheFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                pEnum: ?*?*IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                pEnum: ?*?*IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveFilterFromCache: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStartTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                prtStart: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                prtStart: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PushThroughData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                pOutputPin: ?*IPin,
                pConnection: ?*IPinConnection,
                hEventAbort: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                pOutputPin: ?*IPin,
                pConnection: ?*IPinConnection,
                hEventAbort: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFilterFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFilterFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveFilterEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
                Flags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfig,
                pFilter: ?*IBaseFilter,
                Flags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_Reconnect(self: *const T, pOutputPin: ?*IPin, pInputPin: ?*IPin, pmtFirstConnection: ?*const AM_MEDIA_TYPE, pUsingFilter: ?*IBaseFilter, hAbortEvent: ?HANDLE, dwFlags: u32) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).Reconnect(@as(*const IGraphConfig, @ptrCast(self)), pOutputPin, pInputPin, pmtFirstConnection, pUsingFilter, hAbortEvent, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_Reconfigure(self: *const T, pCallback: ?*IGraphConfigCallback, pvContext: ?*anyopaque, dwFlags: u32, hAbortEvent: ?HANDLE) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).Reconfigure(@as(*const IGraphConfig, @ptrCast(self)), pCallback, pvContext, dwFlags, hAbortEvent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_AddFilterToCache(self: *const T, pFilter: ?*IBaseFilter) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).AddFilterToCache(@as(*const IGraphConfig, @ptrCast(self)), pFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_EnumCacheFilter(self: *const T, pEnum: ?*?*IEnumFilters) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).EnumCacheFilter(@as(*const IGraphConfig, @ptrCast(self)), pEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_RemoveFilterFromCache(self: *const T, pFilter: ?*IBaseFilter) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).RemoveFilterFromCache(@as(*const IGraphConfig, @ptrCast(self)), pFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_GetStartTime(self: *const T, prtStart: ?*i64) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).GetStartTime(@as(*const IGraphConfig, @ptrCast(self)), prtStart);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_PushThroughData(self: *const T, pOutputPin: ?*IPin, pConnection: ?*IPinConnection, hEventAbort: ?HANDLE) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).PushThroughData(@as(*const IGraphConfig, @ptrCast(self)), pOutputPin, pConnection, hEventAbort);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_SetFilterFlags(self: *const T, pFilter: ?*IBaseFilter, dwFlags: u32) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).SetFilterFlags(@as(*const IGraphConfig, @ptrCast(self)), pFilter, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_GetFilterFlags(self: *const T, pFilter: ?*IBaseFilter, pdwFlags: ?*u32) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).GetFilterFlags(@as(*const IGraphConfig, @ptrCast(self)), pFilter, pdwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfig_RemoveFilterEx(self: *const T, pFilter: ?*IBaseFilter, Flags: u32) HRESULT {
                return @as(*const IGraphConfig.VTable, @ptrCast(self.vtable)).RemoveFilterEx(@as(*const IGraphConfig, @ptrCast(self)), pFilter, Flags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IGraphConfigCallback_Value = Guid.initString("ade0fd60-d19d-11d2-abf6-00a0c905f375");
pub const IID_IGraphConfigCallback = &IID_IGraphConfigCallback_Value;
pub const IGraphConfigCallback = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Reconfigure: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGraphConfigCallback,
                pvContext: ?*anyopaque,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGraphConfigCallback,
                pvContext: ?*anyopaque,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGraphConfigCallback_Reconfigure(self: *const T, pvContext: ?*anyopaque, dwFlags: u32) HRESULT {
                return @as(*const IGraphConfigCallback.VTable, @ptrCast(self.vtable)).Reconfigure(@as(*const IGraphConfigCallback, @ptrCast(self)), pvContext, dwFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IFilterChain_Value = Guid.initString("dcfbdcf6-0dc2-45f5-9ab2-7c330ea09c29");
pub const IID_IFilterChain = &IID_IFilterChain_Value;
pub const IFilterChain = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        StartChain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterChain,
                pStartFilter: ?*IBaseFilter,
                pEndFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterChain,
                pStartFilter: ?*IBaseFilter,
                pEndFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PauseChain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterChain,
                pStartFilter: ?*IBaseFilter,
                pEndFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterChain,
                pStartFilter: ?*IBaseFilter,
                pEndFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StopChain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterChain,
                pStartFilter: ?*IBaseFilter,
                pEndFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterChain,
                pStartFilter: ?*IBaseFilter,
                pEndFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveChain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterChain,
                pStartFilter: ?*IBaseFilter,
                pEndFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterChain,
                pStartFilter: ?*IBaseFilter,
                pEndFilter: ?*IBaseFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterChain_StartChain(self: *const T, pStartFilter: ?*IBaseFilter, pEndFilter: ?*IBaseFilter) HRESULT {
                return @as(*const IFilterChain.VTable, @ptrCast(self.vtable)).StartChain(@as(*const IFilterChain, @ptrCast(self)), pStartFilter, pEndFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterChain_PauseChain(self: *const T, pStartFilter: ?*IBaseFilter, pEndFilter: ?*IBaseFilter) HRESULT {
                return @as(*const IFilterChain.VTable, @ptrCast(self.vtable)).PauseChain(@as(*const IFilterChain, @ptrCast(self)), pStartFilter, pEndFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterChain_StopChain(self: *const T, pStartFilter: ?*IBaseFilter, pEndFilter: ?*IBaseFilter) HRESULT {
                return @as(*const IFilterChain.VTable, @ptrCast(self.vtable)).StopChain(@as(*const IFilterChain, @ptrCast(self)), pStartFilter, pEndFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterChain_RemoveChain(self: *const T, pStartFilter: ?*IBaseFilter, pEndFilter: ?*IBaseFilter) HRESULT {
                return @as(*const IFilterChain.VTable, @ptrCast(self.vtable)).RemoveChain(@as(*const IFilterChain, @ptrCast(self)), pStartFilter, pEndFilter);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMRPresentationFlags = enum(i32) {
    SyncPoint = 1,
    Preroll = 2,
    Discontinuity = 4,
    TimeValid = 8,
    SrcDstRectsValid = 16,
};
pub const VMRSample_SyncPoint = VMRPresentationFlags.SyncPoint;
pub const VMRSample_Preroll = VMRPresentationFlags.Preroll;
pub const VMRSample_Discontinuity = VMRPresentationFlags.Discontinuity;
pub const VMRSample_TimeValid = VMRPresentationFlags.TimeValid;
pub const VMRSample_SrcDstRectsValid = VMRPresentationFlags.SrcDstRectsValid;

pub const VMRPRESENTATIONINFO = extern struct {
    dwFlags: u32,
    lpSurf: ?*IDirectDrawSurface7,
    rtStart: i64,
    rtEnd: i64,
    szAspectRatio: SIZE,
    rcSrc: RECT,
    rcDst: RECT,
    dwTypeSpecificFlags: u32,
    dwInterlaceFlags: u32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRImagePresenter_Value = Guid.initString("ce704fe7-e71e-41fb-baa2-c4403e1182f5");
pub const IID_IVMRImagePresenter = &IID_IVMRImagePresenter_Value;
pub const IVMRImagePresenter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        StartPresenting: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenter,
                dwUserID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenter,
                dwUserID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StopPresenting: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenter,
                dwUserID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenter,
                dwUserID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PresentImage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenter,
                dwUserID: usize,
                lpPresInfo: ?*VMRPRESENTATIONINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenter,
                dwUserID: usize,
                lpPresInfo: ?*VMRPRESENTATIONINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenter_StartPresenting(self: *const T, dwUserID: usize) HRESULT {
                return @as(*const IVMRImagePresenter.VTable, @ptrCast(self.vtable)).StartPresenting(@as(*const IVMRImagePresenter, @ptrCast(self)), dwUserID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenter_StopPresenting(self: *const T, dwUserID: usize) HRESULT {
                return @as(*const IVMRImagePresenter.VTable, @ptrCast(self.vtable)).StopPresenting(@as(*const IVMRImagePresenter, @ptrCast(self)), dwUserID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenter_PresentImage(self: *const T, dwUserID: usize, lpPresInfo: ?*VMRPRESENTATIONINFO) HRESULT {
                return @as(*const IVMRImagePresenter.VTable, @ptrCast(self.vtable)).PresentImage(@as(*const IVMRImagePresenter, @ptrCast(self)), dwUserID, lpPresInfo);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMRSurfaceAllocationFlags = enum(i32) {
    PIXELFORMAT_VALID = 1,
    @"3D_TARGET" = 2,
    ALLOW_SYSMEM = 4,
    FORCE_SYSMEM = 8,
    DIRECTED_FLIP = 16,
    DXVA_TARGET = 32,
};
pub const AMAP_PIXELFORMAT_VALID = VMRSurfaceAllocationFlags.PIXELFORMAT_VALID;
pub const AMAP_3D_TARGET = VMRSurfaceAllocationFlags.@"3D_TARGET";
pub const AMAP_ALLOW_SYSMEM = VMRSurfaceAllocationFlags.ALLOW_SYSMEM;
pub const AMAP_FORCE_SYSMEM = VMRSurfaceAllocationFlags.FORCE_SYSMEM;
pub const AMAP_DIRECTED_FLIP = VMRSurfaceAllocationFlags.DIRECTED_FLIP;
pub const AMAP_DXVA_TARGET = VMRSurfaceAllocationFlags.DXVA_TARGET;

pub const VMRALLOCATIONINFO = extern struct {
    dwFlags: u32,
    lpHdr: ?*BITMAPINFOHEADER,
    lpPixFmt: ?*DDPIXELFORMAT,
    szAspectRatio: SIZE,
    dwMinBuffers: u32,
    dwMaxBuffers: u32,
    dwInterlaceFlags: u32,
    szNativeSize: SIZE,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRSurfaceAllocator_Value = Guid.initString("31ce832e-4484-458b-8cca-f4d7e3db0b52");
pub const IID_IVMRSurfaceAllocator = &IID_IVMRSurfaceAllocator_Value;
pub const IVMRSurfaceAllocator = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AllocateSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocator,
                dwUserID: usize,
                lpAllocInfo: ?*VMRALLOCATIONINFO,
                lpdwActualBuffers: ?*u32,
                lplpSurface: ?*?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocator,
                dwUserID: usize,
                lpAllocInfo: ?*VMRALLOCATIONINFO,
                lpdwActualBuffers: ?*u32,
                lplpSurface: ?*?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FreeSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocator,
                dwID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocator,
                dwID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PrepareSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocator,
                dwUserID: usize,
                lpSurface: ?*IDirectDrawSurface7,
                dwSurfaceFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocator,
                dwUserID: usize,
                lpSurface: ?*IDirectDrawSurface7,
                dwSurfaceFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AdviseNotify: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocator,
                lpIVMRSurfAllocNotify: ?*IVMRSurfaceAllocatorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocator,
                lpIVMRSurfAllocNotify: ?*IVMRSurfaceAllocatorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocator_AllocateSurface(self: *const T, dwUserID: usize, lpAllocInfo: ?*VMRALLOCATIONINFO, lpdwActualBuffers: ?*u32, lplpSurface: ?*?*IDirectDrawSurface7) HRESULT {
                return @as(*const IVMRSurfaceAllocator.VTable, @ptrCast(self.vtable)).AllocateSurface(@as(*const IVMRSurfaceAllocator, @ptrCast(self)), dwUserID, lpAllocInfo, lpdwActualBuffers, lplpSurface);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocator_FreeSurface(self: *const T, dwID: usize) HRESULT {
                return @as(*const IVMRSurfaceAllocator.VTable, @ptrCast(self.vtable)).FreeSurface(@as(*const IVMRSurfaceAllocator, @ptrCast(self)), dwID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocator_PrepareSurface(self: *const T, dwUserID: usize, lpSurface: ?*IDirectDrawSurface7, dwSurfaceFlags: u32) HRESULT {
                return @as(*const IVMRSurfaceAllocator.VTable, @ptrCast(self.vtable)).PrepareSurface(@as(*const IVMRSurfaceAllocator, @ptrCast(self)), dwUserID, lpSurface, dwSurfaceFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocator_AdviseNotify(self: *const T, lpIVMRSurfAllocNotify: ?*IVMRSurfaceAllocatorNotify) HRESULT {
                return @as(*const IVMRSurfaceAllocator.VTable, @ptrCast(self.vtable)).AdviseNotify(@as(*const IVMRSurfaceAllocator, @ptrCast(self)), lpIVMRSurfAllocNotify);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRSurfaceAllocatorNotify_Value = Guid.initString("aada05a8-5a4e-4729-af0b-cea27aed51e2");
pub const IID_IVMRSurfaceAllocatorNotify = &IID_IVMRSurfaceAllocatorNotify_Value;
pub const IVMRSurfaceAllocatorNotify = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AdviseSurfaceAllocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify,
                dwUserID: usize,
                lpIVRMSurfaceAllocator: ?*IVMRSurfaceAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify,
                dwUserID: usize,
                lpIVRMSurfaceAllocator: ?*IVMRSurfaceAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDDrawDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify,
                lpDDrawDevice: ?*IDirectDraw7,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify,
                lpDDrawDevice: ?*IDirectDraw7,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChangeDDrawDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify,
                lpDDrawDevice: ?*IDirectDraw7,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify,
                lpDDrawDevice: ?*IDirectDraw7,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RestoreDDrawSurfaces: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NotifyEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify,
                EventCode: i32,
                Param1: isize,
                Param2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify,
                EventCode: i32,
                Param1: isize,
                Param2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBorderColor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify,
                clrBorder: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify,
                clrBorder: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify_AdviseSurfaceAllocator(self: *const T, dwUserID: usize, lpIVRMSurfaceAllocator: ?*IVMRSurfaceAllocator) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify.VTable, @ptrCast(self.vtable)).AdviseSurfaceAllocator(@as(*const IVMRSurfaceAllocatorNotify, @ptrCast(self)), dwUserID, lpIVRMSurfaceAllocator);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify_SetDDrawDevice(self: *const T, lpDDrawDevice: ?*IDirectDraw7, hMonitor: ?HMONITOR) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify.VTable, @ptrCast(self.vtable)).SetDDrawDevice(@as(*const IVMRSurfaceAllocatorNotify, @ptrCast(self)), lpDDrawDevice, hMonitor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify_ChangeDDrawDevice(self: *const T, lpDDrawDevice: ?*IDirectDraw7, hMonitor: ?HMONITOR) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify.VTable, @ptrCast(self.vtable)).ChangeDDrawDevice(@as(*const IVMRSurfaceAllocatorNotify, @ptrCast(self)), lpDDrawDevice, hMonitor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify_RestoreDDrawSurfaces(self: *const T) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify.VTable, @ptrCast(self.vtable)).RestoreDDrawSurfaces(@as(*const IVMRSurfaceAllocatorNotify, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify_NotifyEvent(self: *const T, EventCode: i32, Param1: isize, Param2: isize) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify.VTable, @ptrCast(self.vtable)).NotifyEvent(@as(*const IVMRSurfaceAllocatorNotify, @ptrCast(self)), EventCode, Param1, Param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify_SetBorderColor(self: *const T, clrBorder: u32) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify.VTable, @ptrCast(self.vtable)).SetBorderColor(@as(*const IVMRSurfaceAllocatorNotify, @ptrCast(self)), clrBorder);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR_ASPECT_RATIO_MODE = enum(i32) {
    NONE = 0,
    LETTER_BOX = 1,
};
pub const VMR_ARMODE_NONE = VMR_ASPECT_RATIO_MODE.NONE;
pub const VMR_ARMODE_LETTER_BOX = VMR_ASPECT_RATIO_MODE.LETTER_BOX;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRWindowlessControl_Value = Guid.initString("0eb1088c-4dcd-46f0-878f-39dae86a51b7");
pub const IID_IVMRWindowlessControl = &IID_IVMRWindowlessControl_Value;
pub const IVMRWindowlessControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetNativeVideoSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
                lpARWidth: ?*i32,
                lpARHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
                lpARWidth: ?*i32,
                lpARHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMinIdealVideoSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMaxIdealVideoSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetVideoPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                lpSRCRect: ?*const RECT,
                lpDSTRect: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                lpSRCRect: ?*const RECT,
                lpDSTRect: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVideoPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                lpSRCRect: ?*RECT,
                lpDSTRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                lpSRCRect: ?*RECT,
                lpDSTRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                lpAspectRatioMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                lpAspectRatioMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                AspectRatioMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                AspectRatioMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetVideoClippingWindow: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RepaintVideo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                hwnd: ?HWND,
                hdc: ?HDC,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                hwnd: ?HWND,
                hdc: ?HDC,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DisplayModeChanged: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentImage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                lpDib: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                lpDib: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBorderColor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                Clr: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                Clr: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBorderColor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                lpClr: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                lpClr: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                Clr: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                Clr: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl,
                lpClr: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl,
                lpClr: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_GetNativeVideoSize(self: *const T, lpWidth: ?*i32, lpHeight: ?*i32, lpARWidth: ?*i32, lpARHeight: ?*i32) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).GetNativeVideoSize(@as(*const IVMRWindowlessControl, @ptrCast(self)), lpWidth, lpHeight, lpARWidth, lpARHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_GetMinIdealVideoSize(self: *const T, lpWidth: ?*i32, lpHeight: ?*i32) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).GetMinIdealVideoSize(@as(*const IVMRWindowlessControl, @ptrCast(self)), lpWidth, lpHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_GetMaxIdealVideoSize(self: *const T, lpWidth: ?*i32, lpHeight: ?*i32) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).GetMaxIdealVideoSize(@as(*const IVMRWindowlessControl, @ptrCast(self)), lpWidth, lpHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_SetVideoPosition(self: *const T, lpSRCRect: ?*const RECT, lpDSTRect: ?*const RECT) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).SetVideoPosition(@as(*const IVMRWindowlessControl, @ptrCast(self)), lpSRCRect, lpDSTRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_GetVideoPosition(self: *const T, lpSRCRect: ?*RECT, lpDSTRect: ?*RECT) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).GetVideoPosition(@as(*const IVMRWindowlessControl, @ptrCast(self)), lpSRCRect, lpDSTRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_GetAspectRatioMode(self: *const T, lpAspectRatioMode: ?*u32) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).GetAspectRatioMode(@as(*const IVMRWindowlessControl, @ptrCast(self)), lpAspectRatioMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_SetAspectRatioMode(self: *const T, AspectRatioMode: u32) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).SetAspectRatioMode(@as(*const IVMRWindowlessControl, @ptrCast(self)), AspectRatioMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_SetVideoClippingWindow(self: *const T, hwnd: ?HWND) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).SetVideoClippingWindow(@as(*const IVMRWindowlessControl, @ptrCast(self)), hwnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_RepaintVideo(self: *const T, hwnd: ?HWND, hdc: ?HDC) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).RepaintVideo(@as(*const IVMRWindowlessControl, @ptrCast(self)), hwnd, hdc);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_DisplayModeChanged(self: *const T) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).DisplayModeChanged(@as(*const IVMRWindowlessControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_GetCurrentImage(self: *const T, lpDib: ?*?*u8) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).GetCurrentImage(@as(*const IVMRWindowlessControl, @ptrCast(self)), lpDib);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_SetBorderColor(self: *const T, Clr: u32) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).SetBorderColor(@as(*const IVMRWindowlessControl, @ptrCast(self)), Clr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_GetBorderColor(self: *const T, lpClr: ?*u32) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).GetBorderColor(@as(*const IVMRWindowlessControl, @ptrCast(self)), lpClr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_SetColorKey(self: *const T, Clr: u32) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).SetColorKey(@as(*const IVMRWindowlessControl, @ptrCast(self)), Clr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl_GetColorKey(self: *const T, lpClr: ?*u32) HRESULT {
                return @as(*const IVMRWindowlessControl.VTable, @ptrCast(self.vtable)).GetColorKey(@as(*const IVMRWindowlessControl, @ptrCast(self)), lpClr);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMRMixerPrefs = enum(i32) {
    NoDecimation = 1,
    DecimateOutput = 2,
    ARAdjustXorY = 4,
    DecimationReserved = 8,
    DecimateMask = 15,
    BiLinearFiltering = 16,
    PointFiltering = 32,
    FilteringMask = 240,
    RenderTargetRGB = 256,
    RenderTargetYUV = 4096,
    RenderTargetYUV420 = 512,
    RenderTargetYUV422 = 1024,
    RenderTargetYUV444 = 2048,
    RenderTargetReserved = 57344,
    RenderTargetMask = 65280,
    DynamicSwitchToBOB = 65536,
    DynamicDecimateBy2 = 131072,
    DynamicReserved = 786432,
    DynamicMask = 983040,
};
pub const MixerPref_NoDecimation = VMRMixerPrefs.NoDecimation;
pub const MixerPref_DecimateOutput = VMRMixerPrefs.DecimateOutput;
pub const MixerPref_ARAdjustXorY = VMRMixerPrefs.ARAdjustXorY;
pub const MixerPref_DecimationReserved = VMRMixerPrefs.DecimationReserved;
pub const MixerPref_DecimateMask = VMRMixerPrefs.DecimateMask;
pub const MixerPref_BiLinearFiltering = VMRMixerPrefs.BiLinearFiltering;
pub const MixerPref_PointFiltering = VMRMixerPrefs.PointFiltering;
pub const MixerPref_FilteringMask = VMRMixerPrefs.FilteringMask;
pub const MixerPref_RenderTargetRGB = VMRMixerPrefs.RenderTargetRGB;
pub const MixerPref_RenderTargetYUV = VMRMixerPrefs.RenderTargetYUV;
pub const MixerPref_RenderTargetYUV420 = VMRMixerPrefs.RenderTargetYUV420;
pub const MixerPref_RenderTargetYUV422 = VMRMixerPrefs.RenderTargetYUV422;
pub const MixerPref_RenderTargetYUV444 = VMRMixerPrefs.RenderTargetYUV444;
pub const MixerPref_RenderTargetReserved = VMRMixerPrefs.RenderTargetReserved;
pub const MixerPref_RenderTargetMask = VMRMixerPrefs.RenderTargetMask;
pub const MixerPref_DynamicSwitchToBOB = VMRMixerPrefs.DynamicSwitchToBOB;
pub const MixerPref_DynamicDecimateBy2 = VMRMixerPrefs.DynamicDecimateBy2;
pub const MixerPref_DynamicReserved = VMRMixerPrefs.DynamicReserved;
pub const MixerPref_DynamicMask = VMRMixerPrefs.DynamicMask;

pub const NORMALIZEDRECT = extern struct {
    left: f32,
    top: f32,
    right: f32,
    bottom: f32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRMixerControl_Value = Guid.initString("1c1a17b0-bed0-415d-974b-dc6696131599");
pub const IID_IVMRMixerControl = &IID_IVMRMixerControl_Value;
pub const IVMRMixerControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetAlpha: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                Alpha: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                Alpha: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAlpha: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                pAlpha: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                pAlpha: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetZOrder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                dwZ: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                dwZ: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetZOrder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                pZ: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                pZ: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOutputRect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                pRect: ?*const NORMALIZEDRECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                pRect: ?*const NORMALIZEDRECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOutputRect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                pRect: ?*NORMALIZEDRECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                dwStreamID: u32,
                pRect: ?*NORMALIZEDRECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBackgroundClr: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                ClrBkg: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                ClrBkg: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBackgroundClr: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                lpClrBkg: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                lpClrBkg: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMixingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                dwMixerPrefs: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                dwMixerPrefs: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMixingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl,
                pdwMixerPrefs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl,
                pdwMixerPrefs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_SetAlpha(self: *const T, dwStreamID: u32, Alpha: f32) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).SetAlpha(@as(*const IVMRMixerControl, @ptrCast(self)), dwStreamID, Alpha);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_GetAlpha(self: *const T, dwStreamID: u32, pAlpha: ?*f32) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).GetAlpha(@as(*const IVMRMixerControl, @ptrCast(self)), dwStreamID, pAlpha);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_SetZOrder(self: *const T, dwStreamID: u32, dwZ: u32) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).SetZOrder(@as(*const IVMRMixerControl, @ptrCast(self)), dwStreamID, dwZ);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_GetZOrder(self: *const T, dwStreamID: u32, pZ: ?*u32) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).GetZOrder(@as(*const IVMRMixerControl, @ptrCast(self)), dwStreamID, pZ);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_SetOutputRect(self: *const T, dwStreamID: u32, pRect: ?*const NORMALIZEDRECT) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).SetOutputRect(@as(*const IVMRMixerControl, @ptrCast(self)), dwStreamID, pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_GetOutputRect(self: *const T, dwStreamID: u32, pRect: ?*NORMALIZEDRECT) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).GetOutputRect(@as(*const IVMRMixerControl, @ptrCast(self)), dwStreamID, pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_SetBackgroundClr(self: *const T, ClrBkg: u32) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).SetBackgroundClr(@as(*const IVMRMixerControl, @ptrCast(self)), ClrBkg);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_GetBackgroundClr(self: *const T, lpClrBkg: ?*u32) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).GetBackgroundClr(@as(*const IVMRMixerControl, @ptrCast(self)), lpClrBkg);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_SetMixingPrefs(self: *const T, dwMixerPrefs: u32) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).SetMixingPrefs(@as(*const IVMRMixerControl, @ptrCast(self)), dwMixerPrefs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl_GetMixingPrefs(self: *const T, pdwMixerPrefs: ?*u32) HRESULT {
                return @as(*const IVMRMixerControl.VTable, @ptrCast(self.vtable)).GetMixingPrefs(@as(*const IVMRMixerControl, @ptrCast(self)), pdwMixerPrefs);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMRGUID = extern struct {
    pGUID: ?*Guid,
    GUID: Guid,
};

pub const VMRMONITORINFO = extern struct {
    guid: VMRGUID,
    rcMonitor: RECT,
    hMon: ?HMONITOR,
    dwFlags: u32,
    szDevice: [32]u16,
    szDescription: [256]u16,
    liDriverVersion: LARGE_INTEGER,
    dwVendorId: u32,
    dwDeviceId: u32,
    dwSubSysId: u32,
    dwRevision: u32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRMonitorConfig_Value = Guid.initString("9cf0b1b6-fbaa-4b7f-88cf-cf1f130a0dce");
pub const IID_IVMRMonitorConfig = &IID_IVMRMonitorConfig_Value;
pub const IVMRMonitorConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig,
                pGUID: ?*const VMRGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig,
                pGUID: ?*const VMRGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig,
                pGUID: ?*VMRGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig,
                pGUID: ?*VMRGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDefaultMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig,
                pGUID: ?*const VMRGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig,
                pGUID: ?*const VMRGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDefaultMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig,
                pGUID: ?*VMRGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig,
                pGUID: ?*VMRGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAvailableMonitors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig,
                pInfo: ?*VMRMONITORINFO,
                dwMaxInfoArraySize: u32,
                pdwNumDevices: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig,
                pInfo: ?*VMRMONITORINFO,
                dwMaxInfoArraySize: u32,
                pdwNumDevices: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig_SetMonitor(self: *const T, pGUID: ?*const VMRGUID) HRESULT {
                return @as(*const IVMRMonitorConfig.VTable, @ptrCast(self.vtable)).SetMonitor(@as(*const IVMRMonitorConfig, @ptrCast(self)), pGUID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig_GetMonitor(self: *const T, pGUID: ?*VMRGUID) HRESULT {
                return @as(*const IVMRMonitorConfig.VTable, @ptrCast(self.vtable)).GetMonitor(@as(*const IVMRMonitorConfig, @ptrCast(self)), pGUID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig_SetDefaultMonitor(self: *const T, pGUID: ?*const VMRGUID) HRESULT {
                return @as(*const IVMRMonitorConfig.VTable, @ptrCast(self.vtable)).SetDefaultMonitor(@as(*const IVMRMonitorConfig, @ptrCast(self)), pGUID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig_GetDefaultMonitor(self: *const T, pGUID: ?*VMRGUID) HRESULT {
                return @as(*const IVMRMonitorConfig.VTable, @ptrCast(self.vtable)).GetDefaultMonitor(@as(*const IVMRMonitorConfig, @ptrCast(self)), pGUID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig_GetAvailableMonitors(self: *const T, pInfo: ?*VMRMONITORINFO, dwMaxInfoArraySize: u32, pdwNumDevices: ?*u32) HRESULT {
                return @as(*const IVMRMonitorConfig.VTable, @ptrCast(self.vtable)).GetAvailableMonitors(@as(*const IVMRMonitorConfig, @ptrCast(self)), pInfo, dwMaxInfoArraySize, pdwNumDevices);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMRRenderPrefs = enum(i32) {
    RestrictToInitialMonitor = 0,
    ForceOffscreen = 1,
    ForceOverlays = 2,
    // AllowOverlays = 0, this enum value conflicts with RestrictToInitialMonitor
    // AllowOffscreen = 0, this enum value conflicts with RestrictToInitialMonitor
    DoNotRenderColorKeyAndBorder = 8,
    Reserved = 16,
    PreferAGPMemWhenMixing = 32,
    Mask = 63,
};
pub const RenderPrefs_RestrictToInitialMonitor = VMRRenderPrefs.RestrictToInitialMonitor;
pub const RenderPrefs_ForceOffscreen = VMRRenderPrefs.ForceOffscreen;
pub const RenderPrefs_ForceOverlays = VMRRenderPrefs.ForceOverlays;
pub const RenderPrefs_AllowOverlays = VMRRenderPrefs.RestrictToInitialMonitor;
pub const RenderPrefs_AllowOffscreen = VMRRenderPrefs.RestrictToInitialMonitor;
pub const RenderPrefs_DoNotRenderColorKeyAndBorder = VMRRenderPrefs.DoNotRenderColorKeyAndBorder;
pub const RenderPrefs_Reserved = VMRRenderPrefs.Reserved;
pub const RenderPrefs_PreferAGPMemWhenMixing = VMRRenderPrefs.PreferAGPMemWhenMixing;
pub const RenderPrefs_Mask = VMRRenderPrefs.Mask;

pub const VMRMode = enum(i32) {
    Windowed = 1,
    Windowless = 2,
    Renderless = 4,
    Mask = 7,
};
pub const VMRMode_Windowed = VMRMode.Windowed;
pub const VMRMode_Windowless = VMRMode.Windowless;
pub const VMRMode_Renderless = VMRMode.Renderless;
pub const VMRMode_Mask = VMRMode.Mask;

pub const STREAMIF_CONSTANTS = enum(i32) {
    S = 16,
};
pub const MAX_NUMBER_OF_STREAMS = STREAMIF_CONSTANTS.S;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRFilterConfig_Value = Guid.initString("9e5530c5-7034-48b4-bb46-0b8a6efc8e36");
pub const IID_IVMRFilterConfig = &IID_IVMRFilterConfig_Value;
pub const IVMRFilterConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetImageCompositor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig,
                lpVMRImgCompositor: ?*IVMRImageCompositor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig,
                lpVMRImgCompositor: ?*IVMRImageCompositor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetNumberOfStreams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig,
                dwMaxStreams: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig,
                dwMaxStreams: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumberOfStreams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig,
                pdwMaxStreams: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig,
                pdwMaxStreams: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRenderingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig,
                dwRenderFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig,
                dwRenderFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRenderingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig,
                pdwRenderFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig,
                pdwRenderFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRenderingMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig,
                Mode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig,
                Mode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRenderingMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig,
                pMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig,
                pMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig_SetImageCompositor(self: *const T, lpVMRImgCompositor: ?*IVMRImageCompositor) HRESULT {
                return @as(*const IVMRFilterConfig.VTable, @ptrCast(self.vtable)).SetImageCompositor(@as(*const IVMRFilterConfig, @ptrCast(self)), lpVMRImgCompositor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig_SetNumberOfStreams(self: *const T, dwMaxStreams: u32) HRESULT {
                return @as(*const IVMRFilterConfig.VTable, @ptrCast(self.vtable)).SetNumberOfStreams(@as(*const IVMRFilterConfig, @ptrCast(self)), dwMaxStreams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig_GetNumberOfStreams(self: *const T, pdwMaxStreams: ?*u32) HRESULT {
                return @as(*const IVMRFilterConfig.VTable, @ptrCast(self.vtable)).GetNumberOfStreams(@as(*const IVMRFilterConfig, @ptrCast(self)), pdwMaxStreams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig_SetRenderingPrefs(self: *const T, dwRenderFlags: u32) HRESULT {
                return @as(*const IVMRFilterConfig.VTable, @ptrCast(self.vtable)).SetRenderingPrefs(@as(*const IVMRFilterConfig, @ptrCast(self)), dwRenderFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig_GetRenderingPrefs(self: *const T, pdwRenderFlags: ?*u32) HRESULT {
                return @as(*const IVMRFilterConfig.VTable, @ptrCast(self.vtable)).GetRenderingPrefs(@as(*const IVMRFilterConfig, @ptrCast(self)), pdwRenderFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig_SetRenderingMode(self: *const T, Mode: u32) HRESULT {
                return @as(*const IVMRFilterConfig.VTable, @ptrCast(self.vtable)).SetRenderingMode(@as(*const IVMRFilterConfig, @ptrCast(self)), Mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig_GetRenderingMode(self: *const T, pMode: ?*u32) HRESULT {
                return @as(*const IVMRFilterConfig.VTable, @ptrCast(self.vtable)).GetRenderingMode(@as(*const IVMRFilterConfig, @ptrCast(self)), pMode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRAspectRatioControl_Value = Guid.initString("ede80b5c-bad6-4623-b537-65586c9f8dfd");
pub const IID_IVMRAspectRatioControl = &IID_IVMRAspectRatioControl_Value;
pub const IVMRAspectRatioControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRAspectRatioControl,
                lpdwARMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRAspectRatioControl,
                lpdwARMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRAspectRatioControl,
                dwARMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRAspectRatioControl,
                dwARMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRAspectRatioControl_GetAspectRatioMode(self: *const T, lpdwARMode: ?*u32) HRESULT {
                return @as(*const IVMRAspectRatioControl.VTable, @ptrCast(self.vtable)).GetAspectRatioMode(@as(*const IVMRAspectRatioControl, @ptrCast(self)), lpdwARMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRAspectRatioControl_SetAspectRatioMode(self: *const T, dwARMode: u32) HRESULT {
                return @as(*const IVMRAspectRatioControl.VTable, @ptrCast(self.vtable)).SetAspectRatioMode(@as(*const IVMRAspectRatioControl, @ptrCast(self)), dwARMode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMRDeinterlacePrefs = enum(i32) {
    NextBest = 1,
    BOB = 2,
    Weave = 4,
    Mask = 7,
};
pub const DeinterlacePref_NextBest = VMRDeinterlacePrefs.NextBest;
pub const DeinterlacePref_BOB = VMRDeinterlacePrefs.BOB;
pub const DeinterlacePref_Weave = VMRDeinterlacePrefs.Weave;
pub const DeinterlacePref_Mask = VMRDeinterlacePrefs.Mask;

pub const VMRDeinterlaceTech = enum(i32) {
    Unknown = 0,
    BOBLineReplicate = 1,
    BOBVerticalStretch = 2,
    MedianFiltering = 4,
    EdgeFiltering = 16,
    FieldAdaptive = 32,
    PixelAdaptive = 64,
    MotionVectorSteered = 128,
};
pub const DeinterlaceTech_Unknown = VMRDeinterlaceTech.Unknown;
pub const DeinterlaceTech_BOBLineReplicate = VMRDeinterlaceTech.BOBLineReplicate;
pub const DeinterlaceTech_BOBVerticalStretch = VMRDeinterlaceTech.BOBVerticalStretch;
pub const DeinterlaceTech_MedianFiltering = VMRDeinterlaceTech.MedianFiltering;
pub const DeinterlaceTech_EdgeFiltering = VMRDeinterlaceTech.EdgeFiltering;
pub const DeinterlaceTech_FieldAdaptive = VMRDeinterlaceTech.FieldAdaptive;
pub const DeinterlaceTech_PixelAdaptive = VMRDeinterlaceTech.PixelAdaptive;
pub const DeinterlaceTech_MotionVectorSteered = VMRDeinterlaceTech.MotionVectorSteered;

pub const VMRFrequency = extern struct {
    dwNumerator: u32,
    dwDenominator: u32,
};

pub const VMRVideoDesc = extern struct {
    dwSize: u32,
    dwSampleWidth: u32,
    dwSampleHeight: u32,
    SingleFieldPerSample: BOOL,
    dwFourCC: u32,
    InputSampleFreq: VMRFrequency,
    OutputFrameFreq: VMRFrequency,
};

pub const VMRDeinterlaceCaps = extern struct {
    dwSize: u32,
    dwNumPreviousOutputFrames: u32,
    dwNumForwardRefSamples: u32,
    dwNumBackwardRefSamples: u32,
    DeinterlaceTechnology: VMRDeinterlaceTech,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRDeinterlaceControl_Value = Guid.initString("bb057577-0db8-4e6a-87a7-1a8c9a505a0f");
pub const IID_IVMRDeinterlaceControl = &IID_IVMRDeinterlaceControl_Value;
pub const IVMRDeinterlaceControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetNumberOfDeinterlaceModes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl,
                lpVideoDescription: ?*VMRVideoDesc,
                lpdwNumDeinterlaceModes: ?*u32,
                lpDeinterlaceModes: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl,
                lpVideoDescription: ?*VMRVideoDesc,
                lpdwNumDeinterlaceModes: ?*u32,
                lpDeinterlaceModes: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeinterlaceModeCaps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl,
                lpDeinterlaceMode: ?*Guid,
                lpVideoDescription: ?*VMRVideoDesc,
                lpDeinterlaceCaps: ?*VMRDeinterlaceCaps,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl,
                lpDeinterlaceMode: ?*Guid,
                lpVideoDescription: ?*VMRVideoDesc,
                lpDeinterlaceCaps: ?*VMRDeinterlaceCaps,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeinterlaceMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDeinterlaceMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeinterlacePrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl,
                lpdwDeinterlacePrefs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl,
                lpdwDeinterlacePrefs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDeinterlacePrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl,
                dwDeinterlacePrefs: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl,
                dwDeinterlacePrefs: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetActualDeinterlaceMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl_GetNumberOfDeinterlaceModes(self: *const T, lpVideoDescription: ?*VMRVideoDesc, lpdwNumDeinterlaceModes: ?*u32, lpDeinterlaceModes: ?*Guid) HRESULT {
                return @as(*const IVMRDeinterlaceControl.VTable, @ptrCast(self.vtable)).GetNumberOfDeinterlaceModes(@as(*const IVMRDeinterlaceControl, @ptrCast(self)), lpVideoDescription, lpdwNumDeinterlaceModes, lpDeinterlaceModes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl_GetDeinterlaceModeCaps(self: *const T, lpDeinterlaceMode: ?*Guid, lpVideoDescription: ?*VMRVideoDesc, lpDeinterlaceCaps: ?*VMRDeinterlaceCaps) HRESULT {
                return @as(*const IVMRDeinterlaceControl.VTable, @ptrCast(self.vtable)).GetDeinterlaceModeCaps(@as(*const IVMRDeinterlaceControl, @ptrCast(self)), lpDeinterlaceMode, lpVideoDescription, lpDeinterlaceCaps);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl_GetDeinterlaceMode(self: *const T, dwStreamID: u32, lpDeinterlaceMode: ?*Guid) HRESULT {
                return @as(*const IVMRDeinterlaceControl.VTable, @ptrCast(self.vtable)).GetDeinterlaceMode(@as(*const IVMRDeinterlaceControl, @ptrCast(self)), dwStreamID, lpDeinterlaceMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl_SetDeinterlaceMode(self: *const T, dwStreamID: u32, lpDeinterlaceMode: ?*Guid) HRESULT {
                return @as(*const IVMRDeinterlaceControl.VTable, @ptrCast(self.vtable)).SetDeinterlaceMode(@as(*const IVMRDeinterlaceControl, @ptrCast(self)), dwStreamID, lpDeinterlaceMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl_GetDeinterlacePrefs(self: *const T, lpdwDeinterlacePrefs: ?*u32) HRESULT {
                return @as(*const IVMRDeinterlaceControl.VTable, @ptrCast(self.vtable)).GetDeinterlacePrefs(@as(*const IVMRDeinterlaceControl, @ptrCast(self)), lpdwDeinterlacePrefs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl_SetDeinterlacePrefs(self: *const T, dwDeinterlacePrefs: u32) HRESULT {
                return @as(*const IVMRDeinterlaceControl.VTable, @ptrCast(self.vtable)).SetDeinterlacePrefs(@as(*const IVMRDeinterlaceControl, @ptrCast(self)), dwDeinterlacePrefs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl_GetActualDeinterlaceMode(self: *const T, dwStreamID: u32, lpDeinterlaceMode: ?*Guid) HRESULT {
                return @as(*const IVMRDeinterlaceControl.VTable, @ptrCast(self.vtable)).GetActualDeinterlaceMode(@as(*const IVMRDeinterlaceControl, @ptrCast(self)), dwStreamID, lpDeinterlaceMode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMRALPHABITMAP = extern struct {
    dwFlags: u32,
    hdc: ?HDC,
    pDDS: ?*IDirectDrawSurface7,
    rSrc: RECT,
    rDest: NORMALIZEDRECT,
    fAlpha: f32,
    clrSrcKey: u32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRMixerBitmap_Value = Guid.initString("1e673275-0257-40aa-af20-7c608d4a0428");
pub const IID_IVMRMixerBitmap = &IID_IVMRMixerBitmap_Value;
pub const IVMRMixerBitmap = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetAlphaBitmap: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerBitmap,
                pBmpParms: ?*const VMRALPHABITMAP,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerBitmap,
                pBmpParms: ?*const VMRALPHABITMAP,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UpdateAlphaBitmapParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerBitmap,
                pBmpParms: ?*VMRALPHABITMAP,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerBitmap,
                pBmpParms: ?*VMRALPHABITMAP,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAlphaBitmapParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerBitmap,
                pBmpParms: ?*VMRALPHABITMAP,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerBitmap,
                pBmpParms: ?*VMRALPHABITMAP,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerBitmap_SetAlphaBitmap(self: *const T, pBmpParms: ?*const VMRALPHABITMAP) HRESULT {
                return @as(*const IVMRMixerBitmap.VTable, @ptrCast(self.vtable)).SetAlphaBitmap(@as(*const IVMRMixerBitmap, @ptrCast(self)), pBmpParms);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerBitmap_UpdateAlphaBitmapParameters(self: *const T, pBmpParms: ?*VMRALPHABITMAP) HRESULT {
                return @as(*const IVMRMixerBitmap.VTable, @ptrCast(self.vtable)).UpdateAlphaBitmapParameters(@as(*const IVMRMixerBitmap, @ptrCast(self)), pBmpParms);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerBitmap_GetAlphaBitmapParameters(self: *const T, pBmpParms: ?*VMRALPHABITMAP) HRESULT {
                return @as(*const IVMRMixerBitmap.VTable, @ptrCast(self.vtable)).GetAlphaBitmapParameters(@as(*const IVMRMixerBitmap, @ptrCast(self)), pBmpParms);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMRVIDEOSTREAMINFO = extern struct {
    pddsVideoSurface: ?*IDirectDrawSurface7,
    dwWidth: u32,
    dwHeight: u32,
    dwStrmID: u32,
    fAlpha: f32,
    ddClrKey: DDCOLORKEY,
    rNormal: NORMALIZEDRECT,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRImageCompositor_Value = Guid.initString("7a4fb5af-479f-4074-bb40-ce6722e43c82");
pub const IID_IVMRImageCompositor = &IID_IVMRImageCompositor_Value;
pub const IVMRImageCompositor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        InitCompositionTarget: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImageCompositor,
                pD3DDevice: ?*IUnknown,
                pddsRenderTarget: ?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImageCompositor,
                pD3DDevice: ?*IUnknown,
                pddsRenderTarget: ?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TermCompositionTarget: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImageCompositor,
                pD3DDevice: ?*IUnknown,
                pddsRenderTarget: ?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImageCompositor,
                pD3DDevice: ?*IUnknown,
                pddsRenderTarget: ?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetStreamMediaType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImageCompositor,
                dwStrmID: u32,
                pmt: ?*AM_MEDIA_TYPE,
                fTexture: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImageCompositor,
                dwStrmID: u32,
                pmt: ?*AM_MEDIA_TYPE,
                fTexture: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CompositeImage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImageCompositor,
                pD3DDevice: ?*IUnknown,
                pddsRenderTarget: ?*IDirectDrawSurface7,
                pmtRenderTarget: ?*AM_MEDIA_TYPE,
                rtStart: i64,
                rtEnd: i64,
                dwClrBkGnd: u32,
                pVideoStreamInfo: ?*VMRVIDEOSTREAMINFO,
                cStreams: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImageCompositor,
                pD3DDevice: ?*IUnknown,
                pddsRenderTarget: ?*IDirectDrawSurface7,
                pmtRenderTarget: ?*AM_MEDIA_TYPE,
                rtStart: i64,
                rtEnd: i64,
                dwClrBkGnd: u32,
                pVideoStreamInfo: ?*VMRVIDEOSTREAMINFO,
                cStreams: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImageCompositor_InitCompositionTarget(self: *const T, pD3DDevice: ?*IUnknown, pddsRenderTarget: ?*IDirectDrawSurface7) HRESULT {
                return @as(*const IVMRImageCompositor.VTable, @ptrCast(self.vtable)).InitCompositionTarget(@as(*const IVMRImageCompositor, @ptrCast(self)), pD3DDevice, pddsRenderTarget);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImageCompositor_TermCompositionTarget(self: *const T, pD3DDevice: ?*IUnknown, pddsRenderTarget: ?*IDirectDrawSurface7) HRESULT {
                return @as(*const IVMRImageCompositor.VTable, @ptrCast(self.vtable)).TermCompositionTarget(@as(*const IVMRImageCompositor, @ptrCast(self)), pD3DDevice, pddsRenderTarget);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImageCompositor_SetStreamMediaType(self: *const T, dwStrmID: u32, pmt: ?*AM_MEDIA_TYPE, fTexture: BOOL) HRESULT {
                return @as(*const IVMRImageCompositor.VTable, @ptrCast(self.vtable)).SetStreamMediaType(@as(*const IVMRImageCompositor, @ptrCast(self)), dwStrmID, pmt, fTexture);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImageCompositor_CompositeImage(self: *const T, pD3DDevice: ?*IUnknown, pddsRenderTarget: ?*IDirectDrawSurface7, pmtRenderTarget: ?*AM_MEDIA_TYPE, rtStart: i64, rtEnd: i64, dwClrBkGnd: u32, pVideoStreamInfo: ?*VMRVIDEOSTREAMINFO, cStreams: u32) HRESULT {
                return @as(*const IVMRImageCompositor.VTable, @ptrCast(self.vtable)).CompositeImage(@as(*const IVMRImageCompositor, @ptrCast(self)), pD3DDevice, pddsRenderTarget, pmtRenderTarget, rtStart, rtEnd, dwClrBkGnd, pVideoStreamInfo, cStreams);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRVideoStreamControl_Value = Guid.initString("058d1f11-2a54-4bef-bd54-df706626b727");
pub const IID_IVMRVideoStreamControl = &IID_IVMRVideoStreamControl_Value;
pub const IVMRVideoStreamControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRVideoStreamControl,
                lpClrKey: ?*DDCOLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRVideoStreamControl,
                lpClrKey: ?*DDCOLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRVideoStreamControl,
                lpClrKey: ?*DDCOLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRVideoStreamControl,
                lpClrKey: ?*DDCOLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetStreamActiveState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRVideoStreamControl,
                fActive: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRVideoStreamControl,
                fActive: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamActiveState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRVideoStreamControl,
                lpfActive: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRVideoStreamControl,
                lpfActive: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRVideoStreamControl_SetColorKey(self: *const T, lpClrKey: ?*DDCOLORKEY) HRESULT {
                return @as(*const IVMRVideoStreamControl.VTable, @ptrCast(self.vtable)).SetColorKey(@as(*const IVMRVideoStreamControl, @ptrCast(self)), lpClrKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRVideoStreamControl_GetColorKey(self: *const T, lpClrKey: ?*DDCOLORKEY) HRESULT {
                return @as(*const IVMRVideoStreamControl.VTable, @ptrCast(self.vtable)).GetColorKey(@as(*const IVMRVideoStreamControl, @ptrCast(self)), lpClrKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRVideoStreamControl_SetStreamActiveState(self: *const T, fActive: BOOL) HRESULT {
                return @as(*const IVMRVideoStreamControl.VTable, @ptrCast(self.vtable)).SetStreamActiveState(@as(*const IVMRVideoStreamControl, @ptrCast(self)), fActive);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRVideoStreamControl_GetStreamActiveState(self: *const T, lpfActive: ?*BOOL) HRESULT {
                return @as(*const IVMRVideoStreamControl.VTable, @ptrCast(self.vtable)).GetStreamActiveState(@as(*const IVMRVideoStreamControl, @ptrCast(self)), lpfActive);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRSurface_Value = Guid.initString("a9849bbe-9ec8-4263-b764-62730f0d15d0");
pub const IID_IVMRSurface = &IID_IVMRSurface_Value;
pub const IVMRSurface = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        IsSurfaceLocked: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurface,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurface,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        LockSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurface,
                lpSurface: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurface,
                lpSurface: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnlockSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurface,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurface,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurface,
                lplpSurface: ?*?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurface,
                lplpSurface: ?*?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurface_IsSurfaceLocked(self: *const T) HRESULT {
                return @as(*const IVMRSurface.VTable, @ptrCast(self.vtable)).IsSurfaceLocked(@as(*const IVMRSurface, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurface_LockSurface(self: *const T, lpSurface: ?*?*u8) HRESULT {
                return @as(*const IVMRSurface.VTable, @ptrCast(self.vtable)).LockSurface(@as(*const IVMRSurface, @ptrCast(self)), lpSurface);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurface_UnlockSurface(self: *const T) HRESULT {
                return @as(*const IVMRSurface.VTable, @ptrCast(self.vtable)).UnlockSurface(@as(*const IVMRSurface, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurface_GetSurface(self: *const T, lplpSurface: ?*?*IDirectDrawSurface7) HRESULT {
                return @as(*const IVMRSurface.VTable, @ptrCast(self.vtable)).GetSurface(@as(*const IVMRSurface, @ptrCast(self)), lplpSurface);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRImagePresenterConfig_Value = Guid.initString("9f3a1c85-8555-49ba-935f-be5b5b29d178");
pub const IID_IVMRImagePresenterConfig = &IID_IVMRImagePresenterConfig_Value;
pub const IVMRImagePresenterConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetRenderingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenterConfig,
                dwRenderFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenterConfig,
                dwRenderFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRenderingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenterConfig,
                dwRenderFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenterConfig,
                dwRenderFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenterConfig_SetRenderingPrefs(self: *const T, dwRenderFlags: u32) HRESULT {
                return @as(*const IVMRImagePresenterConfig.VTable, @ptrCast(self.vtable)).SetRenderingPrefs(@as(*const IVMRImagePresenterConfig, @ptrCast(self)), dwRenderFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenterConfig_GetRenderingPrefs(self: *const T, dwRenderFlags: ?*u32) HRESULT {
                return @as(*const IVMRImagePresenterConfig.VTable, @ptrCast(self.vtable)).GetRenderingPrefs(@as(*const IVMRImagePresenterConfig, @ptrCast(self)), dwRenderFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRImagePresenterExclModeConfig_Value = Guid.initString("e6f7ce40-4673-44f1-8f77-5499d68cb4ea");
pub const IID_IVMRImagePresenterExclModeConfig = &IID_IVMRImagePresenterExclModeConfig_Value;
pub const IVMRImagePresenterExclModeConfig = extern struct {
    pub const VTable = extern struct {
        base: IVMRImagePresenterConfig.VTable,
        SetXlcModeDDObjAndPrimarySurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenterExclModeConfig,
                lpDDObj: ?*IDirectDraw7,
                lpPrimarySurf: ?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenterExclModeConfig,
                lpDDObj: ?*IDirectDraw7,
                lpPrimarySurf: ?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetXlcModeDDObjAndPrimarySurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenterExclModeConfig,
                lpDDObj: ?*?*IDirectDraw7,
                lpPrimarySurf: ?*?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenterExclModeConfig,
                lpDDObj: ?*?*IDirectDraw7,
                lpPrimarySurf: ?*?*IDirectDrawSurface7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IVMRImagePresenterConfig.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenterExclModeConfig_SetXlcModeDDObjAndPrimarySurface(self: *const T, lpDDObj: ?*IDirectDraw7, lpPrimarySurf: ?*IDirectDrawSurface7) HRESULT {
                return @as(*const IVMRImagePresenterExclModeConfig.VTable, @ptrCast(self.vtable)).SetXlcModeDDObjAndPrimarySurface(@as(*const IVMRImagePresenterExclModeConfig, @ptrCast(self)), lpDDObj, lpPrimarySurf);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenterExclModeConfig_GetXlcModeDDObjAndPrimarySurface(self: *const T, lpDDObj: ?*?*IDirectDraw7, lpPrimarySurf: ?*?*IDirectDrawSurface7) HRESULT {
                return @as(*const IVMRImagePresenterExclModeConfig.VTable, @ptrCast(self.vtable)).GetXlcModeDDObjAndPrimarySurface(@as(*const IVMRImagePresenterExclModeConfig, @ptrCast(self)), lpDDObj, lpPrimarySurf);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVPManager_Value = Guid.initString("aac18c18-e186-46d2-825d-a1f8dc8e395a");
pub const IID_IVPManager = &IID_IVPManager_Value;
pub const IVPManager = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetVideoPortIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPManager,
                dwVideoPortIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPManager,
                dwVideoPortIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVideoPortIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPManager,
                pdwVideoPortIndex: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPManager,
                pdwVideoPortIndex: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPManager_SetVideoPortIndex(self: *const T, dwVideoPortIndex: u32) HRESULT {
                return @as(*const IVPManager.VTable, @ptrCast(self.vtable)).SetVideoPortIndex(@as(*const IVPManager, @ptrCast(self)), dwVideoPortIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPManager_GetVideoPortIndex(self: *const T, pdwVideoPortIndex: ?*u32) HRESULT {
                return @as(*const IVPManager.VTable, @ptrCast(self.vtable)).GetVideoPortIndex(@as(*const IVPManager, @ptrCast(self)), pdwVideoPortIndex);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DVD_DOMAIN = enum(i32) {
    FirstPlay = 1,
    VideoManagerMenu = 2,
    VideoTitleSetMenu = 3,
    Title = 4,
    Stop = 5,
};
pub const DVD_DOMAIN_FirstPlay = DVD_DOMAIN.FirstPlay;
pub const DVD_DOMAIN_VideoManagerMenu = DVD_DOMAIN.VideoManagerMenu;
pub const DVD_DOMAIN_VideoTitleSetMenu = DVD_DOMAIN.VideoTitleSetMenu;
pub const DVD_DOMAIN_Title = DVD_DOMAIN.Title;
pub const DVD_DOMAIN_Stop = DVD_DOMAIN.Stop;

pub const DVD_MENU_ID = enum(i32) {
    Title = 2,
    Root = 3,
    Subpicture = 4,
    Audio = 5,
    Angle = 6,
    Chapter = 7,
};
pub const DVD_MENU_Title = DVD_MENU_ID.Title;
pub const DVD_MENU_Root = DVD_MENU_ID.Root;
pub const DVD_MENU_Subpicture = DVD_MENU_ID.Subpicture;
pub const DVD_MENU_Audio = DVD_MENU_ID.Audio;
pub const DVD_MENU_Angle = DVD_MENU_ID.Angle;
pub const DVD_MENU_Chapter = DVD_MENU_ID.Chapter;

pub const DVD_DISC_SIDE = enum(i32) {
    A = 1,
    B = 2,
};
pub const DVD_SIDE_A = DVD_DISC_SIDE.A;
pub const DVD_SIDE_B = DVD_DISC_SIDE.B;

pub const DVD_PREFERRED_DISPLAY_MODE = enum(i32) {
    CONTENT_DEFAULT = 0,
    @"16x9" = 1,
    @"4x3_PANSCAN_PREFERRED" = 2,
    @"4x3_LETTERBOX_PREFERRED" = 3,
};
pub const DISPLAY_CONTENT_DEFAULT = DVD_PREFERRED_DISPLAY_MODE.CONTENT_DEFAULT;
pub const DISPLAY_16x9 = DVD_PREFERRED_DISPLAY_MODE.@"16x9";
pub const DISPLAY_4x3_PANSCAN_PREFERRED = DVD_PREFERRED_DISPLAY_MODE.@"4x3_PANSCAN_PREFERRED";
pub const DISPLAY_4x3_LETTERBOX_PREFERRED = DVD_PREFERRED_DISPLAY_MODE.@"4x3_LETTERBOX_PREFERRED";

pub const DVD_ATR = extern struct {
    ulCAT: u32,
    pbATRI: [768]u8,
};

pub const DVD_FRAMERATE = enum(i32) {
    @"25" = 1,
    @"30NonDrop" = 3,
};
pub const DVD_FPS_25 = DVD_FRAMERATE.@"25";
pub const DVD_FPS_30NonDrop = DVD_FRAMERATE.@"30NonDrop";

pub const DVD_TIMECODE = extern struct {
    _bitfield: u32,
};

pub const DVD_NavCmdType = enum(i32) {
    Pre = 1,
    Post = 2,
    Cell = 3,
    Button = 4,
};
pub const DVD_NavCmdType_Pre = DVD_NavCmdType.Pre;
pub const DVD_NavCmdType_Post = DVD_NavCmdType.Post;
pub const DVD_NavCmdType_Cell = DVD_NavCmdType.Cell;
pub const DVD_NavCmdType_Button = DVD_NavCmdType.Button;

pub const DVD_TIMECODE_FLAGS = enum(i32) {
    @"25fps" = 1,
    @"30fps" = 2,
    DropFrame = 4,
    Interpolated = 8,
};
pub const DVD_TC_FLAG_25fps = DVD_TIMECODE_FLAGS.@"25fps";
pub const DVD_TC_FLAG_30fps = DVD_TIMECODE_FLAGS.@"30fps";
pub const DVD_TC_FLAG_DropFrame = DVD_TIMECODE_FLAGS.DropFrame;
pub const DVD_TC_FLAG_Interpolated = DVD_TIMECODE_FLAGS.Interpolated;

pub const DVD_HMSF_TIMECODE = extern struct {
    bHours: u8,
    bMinutes: u8,
    bSeconds: u8,
    bFrames: u8,
};

pub const DVD_PLAYBACK_LOCATION2 = extern struct {
    TitleNum: u32,
    ChapterNum: u32,
    TimeCode: DVD_HMSF_TIMECODE,
    TimeCodeFlags: u32,
};

pub const DVD_PLAYBACK_LOCATION = extern struct {
    TitleNum: u32,
    ChapterNum: u32,
    TimeCode: u32,
};

pub const VALID_UOP_FLAG = enum(i32) {
    Play_Title_Or_AtTime = 1,
    Play_Chapter = 2,
    Play_Title = 4,
    Stop = 8,
    ReturnFromSubMenu = 16,
    Play_Chapter_Or_AtTime = 32,
    PlayPrev_Or_Replay_Chapter = 64,
    PlayNext_Chapter = 128,
    Play_Forwards = 256,
    Play_Backwards = 512,
    ShowMenu_Title = 1024,
    ShowMenu_Root = 2048,
    ShowMenu_SubPic = 4096,
    ShowMenu_Audio = 8192,
    ShowMenu_Angle = 16384,
    ShowMenu_Chapter = 32768,
    Resume = 65536,
    Select_Or_Activate_Button = 131072,
    Still_Off = 262144,
    Pause_On = 524288,
    Select_Audio_Stream = 1048576,
    Select_SubPic_Stream = 2097152,
    Select_Angle = 4194304,
    Select_Karaoke_Audio_Presentation_Mode = 8388608,
    Select_Video_Mode_Preference = 16777216,
};
pub const UOP_FLAG_Play_Title_Or_AtTime = VALID_UOP_FLAG.Play_Title_Or_AtTime;
pub const UOP_FLAG_Play_Chapter = VALID_UOP_FLAG.Play_Chapter;
pub const UOP_FLAG_Play_Title = VALID_UOP_FLAG.Play_Title;
pub const UOP_FLAG_Stop = VALID_UOP_FLAG.Stop;
pub const UOP_FLAG_ReturnFromSubMenu = VALID_UOP_FLAG.ReturnFromSubMenu;
pub const UOP_FLAG_Play_Chapter_Or_AtTime = VALID_UOP_FLAG.Play_Chapter_Or_AtTime;
pub const UOP_FLAG_PlayPrev_Or_Replay_Chapter = VALID_UOP_FLAG.PlayPrev_Or_Replay_Chapter;
pub const UOP_FLAG_PlayNext_Chapter = VALID_UOP_FLAG.PlayNext_Chapter;
pub const UOP_FLAG_Play_Forwards = VALID_UOP_FLAG.Play_Forwards;
pub const UOP_FLAG_Play_Backwards = VALID_UOP_FLAG.Play_Backwards;
pub const UOP_FLAG_ShowMenu_Title = VALID_UOP_FLAG.ShowMenu_Title;
pub const UOP_FLAG_ShowMenu_Root = VALID_UOP_FLAG.ShowMenu_Root;
pub const UOP_FLAG_ShowMenu_SubPic = VALID_UOP_FLAG.ShowMenu_SubPic;
pub const UOP_FLAG_ShowMenu_Audio = VALID_UOP_FLAG.ShowMenu_Audio;
pub const UOP_FLAG_ShowMenu_Angle = VALID_UOP_FLAG.ShowMenu_Angle;
pub const UOP_FLAG_ShowMenu_Chapter = VALID_UOP_FLAG.ShowMenu_Chapter;
pub const UOP_FLAG_Resume = VALID_UOP_FLAG.Resume;
pub const UOP_FLAG_Select_Or_Activate_Button = VALID_UOP_FLAG.Select_Or_Activate_Button;
pub const UOP_FLAG_Still_Off = VALID_UOP_FLAG.Still_Off;
pub const UOP_FLAG_Pause_On = VALID_UOP_FLAG.Pause_On;
pub const UOP_FLAG_Select_Audio_Stream = VALID_UOP_FLAG.Select_Audio_Stream;
pub const UOP_FLAG_Select_SubPic_Stream = VALID_UOP_FLAG.Select_SubPic_Stream;
pub const UOP_FLAG_Select_Angle = VALID_UOP_FLAG.Select_Angle;
pub const UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode = VALID_UOP_FLAG.Select_Karaoke_Audio_Presentation_Mode;
pub const UOP_FLAG_Select_Video_Mode_Preference = VALID_UOP_FLAG.Select_Video_Mode_Preference;

pub const DVD_CMD_FLAGS = enum(i32) {
    None = 0,
    Flush = 1,
    SendEvents = 2,
    Block = 4,
    StartWhenRendered = 8,
    EndAfterRendered = 16,
};
pub const DVD_CMD_FLAG_None = DVD_CMD_FLAGS.None;
pub const DVD_CMD_FLAG_Flush = DVD_CMD_FLAGS.Flush;
pub const DVD_CMD_FLAG_SendEvents = DVD_CMD_FLAGS.SendEvents;
pub const DVD_CMD_FLAG_Block = DVD_CMD_FLAGS.Block;
pub const DVD_CMD_FLAG_StartWhenRendered = DVD_CMD_FLAGS.StartWhenRendered;
pub const DVD_CMD_FLAG_EndAfterRendered = DVD_CMD_FLAGS.EndAfterRendered;

pub const DVD_OPTION_FLAG = enum(i32) {
    ResetOnStop = 1,
    NotifyParentalLevelChange = 2,
    HMSF_TimeCodeEvents = 3,
    AudioDuringFFwdRew = 4,
    EnableNonblockingAPIs = 5,
    CacheSizeInMB = 6,
    EnablePortableBookmarks = 7,
    EnableExtendedCopyProtectErrors = 8,
    NotifyPositionChange = 9,
    IncreaseOutputControl = 10,
    EnableStreaming = 11,
    EnableESOutput = 12,
    EnableTitleLength = 13,
    DisableStillThrottle = 14,
    EnableLoggingEvents = 15,
    MaxReadBurstInKB = 16,
    ReadBurstPeriodInMS = 17,
    RestartDisc = 18,
    EnableCC = 19,
};
pub const DVD_ResetOnStop = DVD_OPTION_FLAG.ResetOnStop;
pub const DVD_NotifyParentalLevelChange = DVD_OPTION_FLAG.NotifyParentalLevelChange;
pub const DVD_HMSF_TimeCodeEvents = DVD_OPTION_FLAG.HMSF_TimeCodeEvents;
pub const DVD_AudioDuringFFwdRew = DVD_OPTION_FLAG.AudioDuringFFwdRew;
pub const DVD_EnableNonblockingAPIs = DVD_OPTION_FLAG.EnableNonblockingAPIs;
pub const DVD_CacheSizeInMB = DVD_OPTION_FLAG.CacheSizeInMB;
pub const DVD_EnablePortableBookmarks = DVD_OPTION_FLAG.EnablePortableBookmarks;
pub const DVD_EnableExtendedCopyProtectErrors = DVD_OPTION_FLAG.EnableExtendedCopyProtectErrors;
pub const DVD_NotifyPositionChange = DVD_OPTION_FLAG.NotifyPositionChange;
pub const DVD_IncreaseOutputControl = DVD_OPTION_FLAG.IncreaseOutputControl;
pub const DVD_EnableStreaming = DVD_OPTION_FLAG.EnableStreaming;
pub const DVD_EnableESOutput = DVD_OPTION_FLAG.EnableESOutput;
pub const DVD_EnableTitleLength = DVD_OPTION_FLAG.EnableTitleLength;
pub const DVD_DisableStillThrottle = DVD_OPTION_FLAG.DisableStillThrottle;
pub const DVD_EnableLoggingEvents = DVD_OPTION_FLAG.EnableLoggingEvents;
pub const DVD_MaxReadBurstInKB = DVD_OPTION_FLAG.MaxReadBurstInKB;
pub const DVD_ReadBurstPeriodInMS = DVD_OPTION_FLAG.ReadBurstPeriodInMS;
pub const DVD_RestartDisc = DVD_OPTION_FLAG.RestartDisc;
pub const DVD_EnableCC = DVD_OPTION_FLAG.EnableCC;

pub const DVD_RELATIVE_BUTTON = enum(i32) {
    Upper = 1,
    Lower = 2,
    Left = 3,
    Right = 4,
};
pub const DVD_Relative_Upper = DVD_RELATIVE_BUTTON.Upper;
pub const DVD_Relative_Lower = DVD_RELATIVE_BUTTON.Lower;
pub const DVD_Relative_Left = DVD_RELATIVE_BUTTON.Left;
pub const DVD_Relative_Right = DVD_RELATIVE_BUTTON.Right;

pub const DVD_PARENTAL_LEVEL = enum(i32) {
    @"8" = 32768,
    @"7" = 16384,
    @"6" = 8192,
    @"5" = 4096,
    @"4" = 2048,
    @"3" = 1024,
    @"2" = 512,
    @"1" = 256,
};
pub const DVD_PARENTAL_LEVEL_8 = DVD_PARENTAL_LEVEL.@"8";
pub const DVD_PARENTAL_LEVEL_7 = DVD_PARENTAL_LEVEL.@"7";
pub const DVD_PARENTAL_LEVEL_6 = DVD_PARENTAL_LEVEL.@"6";
pub const DVD_PARENTAL_LEVEL_5 = DVD_PARENTAL_LEVEL.@"5";
pub const DVD_PARENTAL_LEVEL_4 = DVD_PARENTAL_LEVEL.@"4";
pub const DVD_PARENTAL_LEVEL_3 = DVD_PARENTAL_LEVEL.@"3";
pub const DVD_PARENTAL_LEVEL_2 = DVD_PARENTAL_LEVEL.@"2";
pub const DVD_PARENTAL_LEVEL_1 = DVD_PARENTAL_LEVEL.@"1";

pub const DVD_AUDIO_LANG_EXT = enum(i32) {
    NotSpecified = 0,
    Captions = 1,
    VisuallyImpaired = 2,
    DirectorComments1 = 3,
    DirectorComments2 = 4,
};
pub const DVD_AUD_EXT_NotSpecified = DVD_AUDIO_LANG_EXT.NotSpecified;
pub const DVD_AUD_EXT_Captions = DVD_AUDIO_LANG_EXT.Captions;
pub const DVD_AUD_EXT_VisuallyImpaired = DVD_AUDIO_LANG_EXT.VisuallyImpaired;
pub const DVD_AUD_EXT_DirectorComments1 = DVD_AUDIO_LANG_EXT.DirectorComments1;
pub const DVD_AUD_EXT_DirectorComments2 = DVD_AUDIO_LANG_EXT.DirectorComments2;

pub const DVD_SUBPICTURE_LANG_EXT = enum(i32) {
    NotSpecified = 0,
    Caption_Normal = 1,
    Caption_Big = 2,
    Caption_Children = 3,
    CC_Normal = 5,
    CC_Big = 6,
    CC_Children = 7,
    Forced = 9,
    DirectorComments_Normal = 13,
    DirectorComments_Big = 14,
    DirectorComments_Children = 15,
};
pub const DVD_SP_EXT_NotSpecified = DVD_SUBPICTURE_LANG_EXT.NotSpecified;
pub const DVD_SP_EXT_Caption_Normal = DVD_SUBPICTURE_LANG_EXT.Caption_Normal;
pub const DVD_SP_EXT_Caption_Big = DVD_SUBPICTURE_LANG_EXT.Caption_Big;
pub const DVD_SP_EXT_Caption_Children = DVD_SUBPICTURE_LANG_EXT.Caption_Children;
pub const DVD_SP_EXT_CC_Normal = DVD_SUBPICTURE_LANG_EXT.CC_Normal;
pub const DVD_SP_EXT_CC_Big = DVD_SUBPICTURE_LANG_EXT.CC_Big;
pub const DVD_SP_EXT_CC_Children = DVD_SUBPICTURE_LANG_EXT.CC_Children;
pub const DVD_SP_EXT_Forced = DVD_SUBPICTURE_LANG_EXT.Forced;
pub const DVD_SP_EXT_DirectorComments_Normal = DVD_SUBPICTURE_LANG_EXT.DirectorComments_Normal;
pub const DVD_SP_EXT_DirectorComments_Big = DVD_SUBPICTURE_LANG_EXT.DirectorComments_Big;
pub const DVD_SP_EXT_DirectorComments_Children = DVD_SUBPICTURE_LANG_EXT.DirectorComments_Children;

pub const DVD_AUDIO_APPMODE = enum(i32) {
    None = 0,
    Karaoke = 1,
    Surround = 2,
    Other = 3,
};
pub const DVD_AudioMode_None = DVD_AUDIO_APPMODE.None;
pub const DVD_AudioMode_Karaoke = DVD_AUDIO_APPMODE.Karaoke;
pub const DVD_AudioMode_Surround = DVD_AUDIO_APPMODE.Surround;
pub const DVD_AudioMode_Other = DVD_AUDIO_APPMODE.Other;

pub const DVD_AUDIO_FORMAT = enum(i32) {
    AC3 = 0,
    MPEG1 = 1,
    MPEG1_DRC = 2,
    MPEG2 = 3,
    MPEG2_DRC = 4,
    LPCM = 5,
    DTS = 6,
    SDDS = 7,
    Other = 8,
};
pub const DVD_AudioFormat_AC3 = DVD_AUDIO_FORMAT.AC3;
pub const DVD_AudioFormat_MPEG1 = DVD_AUDIO_FORMAT.MPEG1;
pub const DVD_AudioFormat_MPEG1_DRC = DVD_AUDIO_FORMAT.MPEG1_DRC;
pub const DVD_AudioFormat_MPEG2 = DVD_AUDIO_FORMAT.MPEG2;
pub const DVD_AudioFormat_MPEG2_DRC = DVD_AUDIO_FORMAT.MPEG2_DRC;
pub const DVD_AudioFormat_LPCM = DVD_AUDIO_FORMAT.LPCM;
pub const DVD_AudioFormat_DTS = DVD_AUDIO_FORMAT.DTS;
pub const DVD_AudioFormat_SDDS = DVD_AUDIO_FORMAT.SDDS;
pub const DVD_AudioFormat_Other = DVD_AUDIO_FORMAT.Other;

pub const DVD_KARAOKE_DOWNMIX = enum(i32) {
    @"0to0" = 1,
    @"1to0" = 2,
    @"2to0" = 4,
    @"3to0" = 8,
    @"4to0" = 16,
    Lto0 = 32,
    Rto0 = 64,
    @"0to1" = 256,
    @"1to1" = 512,
    @"2to1" = 1024,
    @"3to1" = 2048,
    @"4to1" = 4096,
    Lto1 = 8192,
    Rto1 = 16384,
};
pub const DVD_Mix_0to0 = DVD_KARAOKE_DOWNMIX.@"0to0";
pub const DVD_Mix_1to0 = DVD_KARAOKE_DOWNMIX.@"1to0";
pub const DVD_Mix_2to0 = DVD_KARAOKE_DOWNMIX.@"2to0";
pub const DVD_Mix_3to0 = DVD_KARAOKE_DOWNMIX.@"3to0";
pub const DVD_Mix_4to0 = DVD_KARAOKE_DOWNMIX.@"4to0";
pub const DVD_Mix_Lto0 = DVD_KARAOKE_DOWNMIX.Lto0;
pub const DVD_Mix_Rto0 = DVD_KARAOKE_DOWNMIX.Rto0;
pub const DVD_Mix_0to1 = DVD_KARAOKE_DOWNMIX.@"0to1";
pub const DVD_Mix_1to1 = DVD_KARAOKE_DOWNMIX.@"1to1";
pub const DVD_Mix_2to1 = DVD_KARAOKE_DOWNMIX.@"2to1";
pub const DVD_Mix_3to1 = DVD_KARAOKE_DOWNMIX.@"3to1";
pub const DVD_Mix_4to1 = DVD_KARAOKE_DOWNMIX.@"4to1";
pub const DVD_Mix_Lto1 = DVD_KARAOKE_DOWNMIX.Lto1;
pub const DVD_Mix_Rto1 = DVD_KARAOKE_DOWNMIX.Rto1;

pub const DVD_AudioAttributes = extern struct {
    AppMode: DVD_AUDIO_APPMODE,
    AppModeData: u8,
    AudioFormat: DVD_AUDIO_FORMAT,
    Language: u32,
    LanguageExtension: DVD_AUDIO_LANG_EXT,
    fHasMultichannelInfo: BOOL,
    dwFrequency: u32,
    bQuantization: u8,
    bNumberOfChannels: u8,
    dwReserved: [2]u32,
};

pub const DVD_MUA_MixingInfo = extern struct {
    fMixTo0: BOOL,
    fMixTo1: BOOL,
    fMix0InPhase: BOOL,
    fMix1InPhase: BOOL,
    dwSpeakerPosition: u32,
};

pub const DVD_MUA_Coeff = extern struct {
    log2_alpha: f64,
    log2_beta: f64,
};

pub const DVD_MultichannelAudioAttributes = extern struct {
    Info: [8]DVD_MUA_MixingInfo,
    Coeff: [8]DVD_MUA_Coeff,
};

pub const DVD_KARAOKE_CONTENTS = enum(i32) {
    GuideVocal1 = 1,
    GuideVocal2 = 2,
    GuideMelody1 = 4,
    GuideMelody2 = 8,
    GuideMelodyA = 16,
    GuideMelodyB = 32,
    SoundEffectA = 64,
    SoundEffectB = 128,
};
pub const DVD_Karaoke_GuideVocal1 = DVD_KARAOKE_CONTENTS.GuideVocal1;
pub const DVD_Karaoke_GuideVocal2 = DVD_KARAOKE_CONTENTS.GuideVocal2;
pub const DVD_Karaoke_GuideMelody1 = DVD_KARAOKE_CONTENTS.GuideMelody1;
pub const DVD_Karaoke_GuideMelody2 = DVD_KARAOKE_CONTENTS.GuideMelody2;
pub const DVD_Karaoke_GuideMelodyA = DVD_KARAOKE_CONTENTS.GuideMelodyA;
pub const DVD_Karaoke_GuideMelodyB = DVD_KARAOKE_CONTENTS.GuideMelodyB;
pub const DVD_Karaoke_SoundEffectA = DVD_KARAOKE_CONTENTS.SoundEffectA;
pub const DVD_Karaoke_SoundEffectB = DVD_KARAOKE_CONTENTS.SoundEffectB;

pub const DVD_KARAOKE_ASSIGNMENT = enum(i32) {
    reserved0 = 0,
    reserved1 = 1,
    LR = 2,
    LRM = 3,
    LR1 = 4,
    LRM1 = 5,
    LR12 = 6,
    LRM12 = 7,
};
pub const DVD_Assignment_reserved0 = DVD_KARAOKE_ASSIGNMENT.reserved0;
pub const DVD_Assignment_reserved1 = DVD_KARAOKE_ASSIGNMENT.reserved1;
pub const DVD_Assignment_LR = DVD_KARAOKE_ASSIGNMENT.LR;
pub const DVD_Assignment_LRM = DVD_KARAOKE_ASSIGNMENT.LRM;
pub const DVD_Assignment_LR1 = DVD_KARAOKE_ASSIGNMENT.LR1;
pub const DVD_Assignment_LRM1 = DVD_KARAOKE_ASSIGNMENT.LRM1;
pub const DVD_Assignment_LR12 = DVD_KARAOKE_ASSIGNMENT.LR12;
pub const DVD_Assignment_LRM12 = DVD_KARAOKE_ASSIGNMENT.LRM12;

pub const DVD_KaraokeAttributes = extern struct {
    bVersion: u8,
    fMasterOfCeremoniesInGuideVocal1: BOOL,
    fDuet: BOOL,
    ChannelAssignment: DVD_KARAOKE_ASSIGNMENT,
    wChannelContents: [8]u16,
};

pub const DVD_VIDEO_COMPRESSION = enum(i32) {
    Other = 0,
    MPEG1 = 1,
    MPEG2 = 2,
};
pub const DVD_VideoCompression_Other = DVD_VIDEO_COMPRESSION.Other;
pub const DVD_VideoCompression_MPEG1 = DVD_VIDEO_COMPRESSION.MPEG1;
pub const DVD_VideoCompression_MPEG2 = DVD_VIDEO_COMPRESSION.MPEG2;

pub const DVD_VideoAttributes = extern struct {
    fPanscanPermitted: BOOL,
    fLetterboxPermitted: BOOL,
    ulAspectX: u32,
    ulAspectY: u32,
    ulFrameRate: u32,
    ulFrameHeight: u32,
    Compression: DVD_VIDEO_COMPRESSION,
    fLine21Field1InGOP: BOOL,
    fLine21Field2InGOP: BOOL,
    ulSourceResolutionX: u32,
    ulSourceResolutionY: u32,
    fIsSourceLetterboxed: BOOL,
    fIsFilmMode: BOOL,
};

pub const DVD_SUBPICTURE_TYPE = enum(i32) {
    NotSpecified = 0,
    Language = 1,
    Other = 2,
};
pub const DVD_SPType_NotSpecified = DVD_SUBPICTURE_TYPE.NotSpecified;
pub const DVD_SPType_Language = DVD_SUBPICTURE_TYPE.Language;
pub const DVD_SPType_Other = DVD_SUBPICTURE_TYPE.Other;

pub const DVD_SUBPICTURE_CODING = enum(i32) {
    RunLength = 0,
    Extended = 1,
    Other = 2,
};
pub const DVD_SPCoding_RunLength = DVD_SUBPICTURE_CODING.RunLength;
pub const DVD_SPCoding_Extended = DVD_SUBPICTURE_CODING.Extended;
pub const DVD_SPCoding_Other = DVD_SUBPICTURE_CODING.Other;

pub const DVD_SubpictureAttributes = extern struct {
    Type: DVD_SUBPICTURE_TYPE,
    CodingMode: DVD_SUBPICTURE_CODING,
    Language: u32,
    LanguageExtension: DVD_SUBPICTURE_LANG_EXT,
};

pub const DVD_TITLE_APPMODE = enum(i32) {
    Not_Specified = 0,
    Karaoke = 1,
    Other = 3,
};
pub const DVD_AppMode_Not_Specified = DVD_TITLE_APPMODE.Not_Specified;
pub const DVD_AppMode_Karaoke = DVD_TITLE_APPMODE.Karaoke;
pub const DVD_AppMode_Other = DVD_TITLE_APPMODE.Other;

pub const DVD_TitleAttributes = extern struct {
    Anonymous: extern union {
        AppMode: DVD_TITLE_APPMODE,
        TitleLength: DVD_HMSF_TIMECODE,
    },
    VideoAttributes: DVD_VideoAttributes,
    ulNumberOfAudioStreams: u32,
    AudioAttributes: [8]DVD_AudioAttributes,
    MultichannelAudioAttributes: [8]DVD_MultichannelAudioAttributes,
    ulNumberOfSubpictureStreams: u32,
    SubpictureAttributes: [32]DVD_SubpictureAttributes,
};

pub const DVD_MenuAttributes = extern struct {
    fCompatibleRegion: [8]BOOL,
    VideoAttributes: DVD_VideoAttributes,
    fAudioPresent: BOOL,
    AudioAttributes: DVD_AudioAttributes,
    fSubpicturePresent: BOOL,
    SubpictureAttributes: DVD_SubpictureAttributes,
};

const IID_IDvdControl_Value = Guid.initString("a70efe61-e2a3-11d0-a9be-00aa0061be93");
pub const IID_IDvdControl = &IID_IDvdControl_Value;
pub const IDvdControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        TitlePlay: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulTitle: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulTitle: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChapterPlay: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulTitle: u32,
                ulChapter: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulTitle: u32,
                ulChapter: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TimePlay: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulTitle: u32,
                bcdTime: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulTitle: u32,
                bcdTime: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StopForResume: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GoUp: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TimeSearch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                bcdTime: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                bcdTime: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChapterSearch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulChapter: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulChapter: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PrevPGSearch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TopPGSearch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NextPGSearch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ForwardScan: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                dwSpeed: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                dwSpeed: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        BackwardScan: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                dwSpeed: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                dwSpeed: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        MenuCall: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                MenuID: DVD_MENU_ID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                MenuID: DVD_MENU_ID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Resume: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UpperButtonSelect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        LowerButtonSelect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        LeftButtonSelect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RightButtonSelect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ButtonActivate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ButtonSelectAndActivate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulButton: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulButton: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StillOff: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PauseOn: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PauseOff: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        MenuLanguageSelect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                Language: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                Language: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AudioStreamChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulAudio: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulAudio: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SubpictureStreamChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulSubPicture: u32,
                bDisplay: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulSubPicture: u32,
                bDisplay: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AngleChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulAngle: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulAngle: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ParentalLevelSelect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulParentalLevel: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulParentalLevel: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ParentalCountrySelect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                wCountry: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                wCountry: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        KaraokeAudioPresentationModeChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        VideoModePreferrence: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulPreferredDisplayMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulPreferredDisplayMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRoot: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                pszPath: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                pszPath: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        MouseActivate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                point: POINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                point: POINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        MouseSelect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                point: POINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                point: POINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChapterPlayAutoStop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl,
                ulTitle: u32,
                ulChapter: u32,
                ulChaptersToPlay: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl,
                ulTitle: u32,
                ulChapter: u32,
                ulChaptersToPlay: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_TitlePlay(self: *const T, ulTitle: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).TitlePlay(@as(*const IDvdControl, @ptrCast(self)), ulTitle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_ChapterPlay(self: *const T, ulTitle: u32, ulChapter: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).ChapterPlay(@as(*const IDvdControl, @ptrCast(self)), ulTitle, ulChapter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_TimePlay(self: *const T, ulTitle: u32, bcdTime: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).TimePlay(@as(*const IDvdControl, @ptrCast(self)), ulTitle, bcdTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_StopForResume(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).StopForResume(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_GoUp(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).GoUp(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_TimeSearch(self: *const T, bcdTime: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).TimeSearch(@as(*const IDvdControl, @ptrCast(self)), bcdTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_ChapterSearch(self: *const T, ulChapter: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).ChapterSearch(@as(*const IDvdControl, @ptrCast(self)), ulChapter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_PrevPGSearch(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).PrevPGSearch(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_TopPGSearch(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).TopPGSearch(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_NextPGSearch(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).NextPGSearch(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_ForwardScan(self: *const T, dwSpeed: f64) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).ForwardScan(@as(*const IDvdControl, @ptrCast(self)), dwSpeed);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_BackwardScan(self: *const T, dwSpeed: f64) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).BackwardScan(@as(*const IDvdControl, @ptrCast(self)), dwSpeed);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_MenuCall(self: *const T, MenuID: DVD_MENU_ID) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).MenuCall(@as(*const IDvdControl, @ptrCast(self)), MenuID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_Resume(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).Resume(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_UpperButtonSelect(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).UpperButtonSelect(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_LowerButtonSelect(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).LowerButtonSelect(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_LeftButtonSelect(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).LeftButtonSelect(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_RightButtonSelect(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).RightButtonSelect(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_ButtonActivate(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).ButtonActivate(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_ButtonSelectAndActivate(self: *const T, ulButton: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).ButtonSelectAndActivate(@as(*const IDvdControl, @ptrCast(self)), ulButton);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_StillOff(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).StillOff(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_PauseOn(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).PauseOn(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_PauseOff(self: *const T) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).PauseOff(@as(*const IDvdControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_MenuLanguageSelect(self: *const T, Language: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).MenuLanguageSelect(@as(*const IDvdControl, @ptrCast(self)), Language);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_AudioStreamChange(self: *const T, ulAudio: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).AudioStreamChange(@as(*const IDvdControl, @ptrCast(self)), ulAudio);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_SubpictureStreamChange(self: *const T, ulSubPicture: u32, bDisplay: BOOL) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).SubpictureStreamChange(@as(*const IDvdControl, @ptrCast(self)), ulSubPicture, bDisplay);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_AngleChange(self: *const T, ulAngle: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).AngleChange(@as(*const IDvdControl, @ptrCast(self)), ulAngle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_ParentalLevelSelect(self: *const T, ulParentalLevel: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).ParentalLevelSelect(@as(*const IDvdControl, @ptrCast(self)), ulParentalLevel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_ParentalCountrySelect(self: *const T, wCountry: u16) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).ParentalCountrySelect(@as(*const IDvdControl, @ptrCast(self)), wCountry);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_KaraokeAudioPresentationModeChange(self: *const T, ulMode: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).KaraokeAudioPresentationModeChange(@as(*const IDvdControl, @ptrCast(self)), ulMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_VideoModePreferrence(self: *const T, ulPreferredDisplayMode: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).VideoModePreferrence(@as(*const IDvdControl, @ptrCast(self)), ulPreferredDisplayMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_SetRoot(self: *const T, pszPath: ?[*:0]const u16) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).SetRoot(@as(*const IDvdControl, @ptrCast(self)), pszPath);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_MouseActivate(self: *const T, point: POINT) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).MouseActivate(@as(*const IDvdControl, @ptrCast(self)), point);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_MouseSelect(self: *const T, point: POINT) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).MouseSelect(@as(*const IDvdControl, @ptrCast(self)), point);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl_ChapterPlayAutoStop(self: *const T, ulTitle: u32, ulChapter: u32, ulChaptersToPlay: u32) HRESULT {
                return @as(*const IDvdControl.VTable, @ptrCast(self.vtable)).ChapterPlayAutoStop(@as(*const IDvdControl, @ptrCast(self)), ulTitle, ulChapter, ulChaptersToPlay);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDvdInfo_Value = Guid.initString("a70efe60-e2a3-11d0-a9be-00aa0061be93");
pub const IID_IDvdInfo = &IID_IDvdInfo_Value;
pub const IDvdInfo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCurrentDomain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pDomain: ?*DVD_DOMAIN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pDomain: ?*DVD_DOMAIN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentLocation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pLocation: ?*DVD_PLAYBACK_LOCATION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pLocation: ?*DVD_PLAYBACK_LOCATION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTotalTitleTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pulTotalTime: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pulTotalTime: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pulButtonsAvailable: ?*u32,
                pulCurrentButton: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pulButtonsAvailable: ?*u32,
                pulCurrentButton: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentAngle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pulAnglesAvailable: ?*u32,
                pulCurrentAngle: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pulAnglesAvailable: ?*u32,
                pulCurrentAngle: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentAudio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pulStreamsAvailable: ?*u32,
                pulCurrentStream: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pulStreamsAvailable: ?*u32,
                pulCurrentStream: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentSubpicture: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pulStreamsAvailable: ?*u32,
                pulCurrentStream: ?*u32,
                pIsDisabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pulStreamsAvailable: ?*u32,
                pulCurrentStream: ?*u32,
                pIsDisabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentUOPS: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pUOP: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pUOP: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAllSPRMs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pRegisterArray: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pRegisterArray: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAllGPRMs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pRegisterArray: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pRegisterArray: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAudioLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                ulStream: u32,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                ulStream: u32,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSubpictureLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                ulStream: u32,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                ulStream: u32,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTitleAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                ulTitle: u32,
                pATR: ?*DVD_ATR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                ulTitle: u32,
                pATR: ?*DVD_ATR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVMGAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pATR: ?*DVD_ATR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pATR: ?*DVD_ATR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentVideoAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pATR: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pATR: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentAudioAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pATR: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pATR: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentSubpictureAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pATR: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pATR: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentVolumeInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pulNumOfVol: ?*u32,
                pulThisVolNum: ?*u32,
                pSide: ?*DVD_DISC_SIDE,
                pulNumOfTitles: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pulNumOfVol: ?*u32,
                pulThisVolNum: ?*u32,
                pSide: ?*DVD_DISC_SIDE,
                pulNumOfTitles: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDVDTextInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                // TODO: what to do with BytesParamIndex 1?
                pTextManager: ?*u8,
                ulBufSize: u32,
                pulActualSize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                // TODO: what to do with BytesParamIndex 1?
                pTextManager: ?*u8,
                ulBufSize: u32,
                pulActualSize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPlayerParentalLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pulParentalLevel: ?*u32,
                pulCountryCode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pulParentalLevel: ?*u32,
                pulCountryCode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumberOfChapters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                ulTitle: u32,
                pulNumberOfChapters: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                ulTitle: u32,
                pulNumberOfChapters: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTitleParentalLevels: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                ulTitle: u32,
                pulParentalLevels: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                ulTitle: u32,
                pulParentalLevels: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRoot: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo,
                pRoot: [*:0]u8,
                ulBufSize: u32,
                pulActualSize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo,
                pRoot: [*:0]u8,
                ulBufSize: u32,
                pulActualSize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentDomain(self: *const T, pDomain: ?*DVD_DOMAIN) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentDomain(@as(*const IDvdInfo, @ptrCast(self)), pDomain);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentLocation(self: *const T, pLocation: ?*DVD_PLAYBACK_LOCATION) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentLocation(@as(*const IDvdInfo, @ptrCast(self)), pLocation);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetTotalTitleTime(self: *const T, pulTotalTime: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetTotalTitleTime(@as(*const IDvdInfo, @ptrCast(self)), pulTotalTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentButton(self: *const T, pulButtonsAvailable: ?*u32, pulCurrentButton: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentButton(@as(*const IDvdInfo, @ptrCast(self)), pulButtonsAvailable, pulCurrentButton);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentAngle(self: *const T, pulAnglesAvailable: ?*u32, pulCurrentAngle: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentAngle(@as(*const IDvdInfo, @ptrCast(self)), pulAnglesAvailable, pulCurrentAngle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentAudio(self: *const T, pulStreamsAvailable: ?*u32, pulCurrentStream: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentAudio(@as(*const IDvdInfo, @ptrCast(self)), pulStreamsAvailable, pulCurrentStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentSubpicture(self: *const T, pulStreamsAvailable: ?*u32, pulCurrentStream: ?*u32, pIsDisabled: ?*BOOL) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentSubpicture(@as(*const IDvdInfo, @ptrCast(self)), pulStreamsAvailable, pulCurrentStream, pIsDisabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentUOPS(self: *const T, pUOP: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentUOPS(@as(*const IDvdInfo, @ptrCast(self)), pUOP);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetAllSPRMs(self: *const T, pRegisterArray: ?*?*u16) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetAllSPRMs(@as(*const IDvdInfo, @ptrCast(self)), pRegisterArray);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetAllGPRMs(self: *const T, pRegisterArray: ?*?*u16) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetAllGPRMs(@as(*const IDvdInfo, @ptrCast(self)), pRegisterArray);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetAudioLanguage(self: *const T, ulStream: u32, pLanguage: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetAudioLanguage(@as(*const IDvdInfo, @ptrCast(self)), ulStream, pLanguage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetSubpictureLanguage(self: *const T, ulStream: u32, pLanguage: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetSubpictureLanguage(@as(*const IDvdInfo, @ptrCast(self)), ulStream, pLanguage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetTitleAttributes(self: *const T, ulTitle: u32, pATR: ?*DVD_ATR) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetTitleAttributes(@as(*const IDvdInfo, @ptrCast(self)), ulTitle, pATR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetVMGAttributes(self: *const T, pATR: ?*DVD_ATR) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetVMGAttributes(@as(*const IDvdInfo, @ptrCast(self)), pATR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentVideoAttributes(self: *const T, pATR: ?*?*u8) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentVideoAttributes(@as(*const IDvdInfo, @ptrCast(self)), pATR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentAudioAttributes(self: *const T, pATR: ?*?*u8) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentAudioAttributes(@as(*const IDvdInfo, @ptrCast(self)), pATR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentSubpictureAttributes(self: *const T, pATR: ?*?*u8) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentSubpictureAttributes(@as(*const IDvdInfo, @ptrCast(self)), pATR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetCurrentVolumeInfo(self: *const T, pulNumOfVol: ?*u32, pulThisVolNum: ?*u32, pSide: ?*DVD_DISC_SIDE, pulNumOfTitles: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetCurrentVolumeInfo(@as(*const IDvdInfo, @ptrCast(self)), pulNumOfVol, pulThisVolNum, pSide, pulNumOfTitles);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetDVDTextInfo(self: *const T, pTextManager: ?*u8, ulBufSize: u32, pulActualSize: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetDVDTextInfo(@as(*const IDvdInfo, @ptrCast(self)), pTextManager, ulBufSize, pulActualSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetPlayerParentalLevel(self: *const T, pulParentalLevel: ?*u32, pulCountryCode: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetPlayerParentalLevel(@as(*const IDvdInfo, @ptrCast(self)), pulParentalLevel, pulCountryCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetNumberOfChapters(self: *const T, ulTitle: u32, pulNumberOfChapters: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetNumberOfChapters(@as(*const IDvdInfo, @ptrCast(self)), ulTitle, pulNumberOfChapters);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetTitleParentalLevels(self: *const T, ulTitle: u32, pulParentalLevels: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetTitleParentalLevels(@as(*const IDvdInfo, @ptrCast(self)), ulTitle, pulParentalLevels);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo_GetRoot(self: *const T, pRoot: [*:0]u8, ulBufSize: u32, pulActualSize: ?*u32) HRESULT {
                return @as(*const IDvdInfo.VTable, @ptrCast(self.vtable)).GetRoot(@as(*const IDvdInfo, @ptrCast(self)), pRoot, ulBufSize, pulActualSize);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDvdCmd_Value = Guid.initString("5a4a97e4-94ee-4a55-9751-74b5643aa27d");
pub const IID_IDvdCmd = &IID_IDvdCmd_Value;
pub const IDvdCmd = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        WaitForStart: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WaitForEnd: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdCmd_WaitForStart(self: *const T) HRESULT {
                return @as(*const IDvdCmd.VTable, @ptrCast(self.vtable)).WaitForStart(@as(*const IDvdCmd, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdCmd_WaitForEnd(self: *const T) HRESULT {
                return @as(*const IDvdCmd.VTable, @ptrCast(self.vtable)).WaitForEnd(@as(*const IDvdCmd, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDvdState_Value = Guid.initString("86303d6d-1c4a-4087-ab42-f711167048ef");
pub const IID_IDvdState = &IID_IDvdState_Value;
pub const IDvdState = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetDiscID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdState,
                pullUniqueID: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdState,
                pullUniqueID: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParentalLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdState,
                pulParentalLevel: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdState,
                pulParentalLevel: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdState_GetDiscID(self: *const T, pullUniqueID: ?*u64) HRESULT {
                return @as(*const IDvdState.VTable, @ptrCast(self.vtable)).GetDiscID(@as(*const IDvdState, @ptrCast(self)), pullUniqueID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdState_GetParentalLevel(self: *const T, pulParentalLevel: ?*u32) HRESULT {
                return @as(*const IDvdState.VTable, @ptrCast(self.vtable)).GetParentalLevel(@as(*const IDvdState, @ptrCast(self)), pulParentalLevel);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDvdControl2_Value = Guid.initString("33bc7430-eec0-11d2-8201-00a0c9d74842");
pub const IID_IDvdControl2 = &IID_IDvdControl2_Value;
pub const IDvdControl2 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        PlayTitle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayChapterInTitle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                ulChapter: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                ulChapter: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayAtTimeInTitle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                pStartTime: ?*DVD_HMSF_TIMECODE,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                pStartTime: ?*DVD_HMSF_TIMECODE,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReturnFromSubmenu: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayAtTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                pTime: ?*DVD_HMSF_TIMECODE,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                pTime: ?*DVD_HMSF_TIMECODE,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulChapter: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulChapter: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayPrevChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReplayChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayNextChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayForwards: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                dSpeed: f64,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                dSpeed: f64,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayBackwards: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                dSpeed: f64,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                dSpeed: f64,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ShowMenu: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                MenuID: DVD_MENU_ID,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                MenuID: DVD_MENU_ID,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Resume: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectRelativeButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                buttonDir: DVD_RELATIVE_BUTTON,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                buttonDir: DVD_RELATIVE_BUTTON,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ActivateButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulButton: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulButton: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectAndActivateButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulButton: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulButton: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StillOff: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Pause: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                bState: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                bState: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectAudioStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulAudio: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulAudio: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectSubpictureStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulSubPicture: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulSubPicture: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSubpictureState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                bState: BOOL,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                bState: BOOL,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectAngle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulAngle: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulAngle: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectParentalLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulParentalLevel: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulParentalLevel: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectParentalCountry: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                bCountry: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                bCountry: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectKaraokeAudioPresentationMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectVideoModePreference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulPreferredDisplayMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulPreferredDisplayMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDVDDirectory: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                pszwPath: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                pszwPath: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ActivateAtPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                point: POINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                point: POINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectAtPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                point: POINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                point: POINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayChaptersAutoStop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                ulChapter: u32,
                ulChaptersToPlay: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                ulChapter: u32,
                ulChaptersToPlay: u32,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AcceptParentalLevelChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                bAccept: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                bAccept: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOption: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                flag: DVD_OPTION_FLAG,
                fState: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                flag: DVD_OPTION_FLAG,
                fState: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                pState: ?*IDvdState,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                pState: ?*IDvdState,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayPeriodInTitleAutoStop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                pStartTime: ?*DVD_HMSF_TIMECODE,
                pEndTime: ?*DVD_HMSF_TIMECODE,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulTitle: u32,
                pStartTime: ?*DVD_HMSF_TIMECODE,
                pEndTime: ?*DVD_HMSF_TIMECODE,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetGPRM: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                ulIndex: u32,
                wValue: u16,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                ulIndex: u32,
                wValue: u16,
                dwFlags: u32,
                ppCmd: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectDefaultMenuLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                Language: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                Language: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectDefaultAudioLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                Language: u32,
                audioExtension: DVD_AUDIO_LANG_EXT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                Language: u32,
                audioExtension: DVD_AUDIO_LANG_EXT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectDefaultSubpictureLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdControl2,
                Language: u32,
                subpictureExtension: DVD_SUBPICTURE_LANG_EXT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdControl2,
                Language: u32,
                subpictureExtension: DVD_SUBPICTURE_LANG_EXT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayTitle(self: *const T, ulTitle: u32, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayTitle(@as(*const IDvdControl2, @ptrCast(self)), ulTitle, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayChapterInTitle(self: *const T, ulTitle: u32, ulChapter: u32, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayChapterInTitle(@as(*const IDvdControl2, @ptrCast(self)), ulTitle, ulChapter, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayAtTimeInTitle(self: *const T, ulTitle: u32, pStartTime: ?*DVD_HMSF_TIMECODE, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayAtTimeInTitle(@as(*const IDvdControl2, @ptrCast(self)), ulTitle, pStartTime, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_Stop(self: *const T) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).Stop(@as(*const IDvdControl2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_ReturnFromSubmenu(self: *const T, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).ReturnFromSubmenu(@as(*const IDvdControl2, @ptrCast(self)), dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayAtTime(self: *const T, pTime: ?*DVD_HMSF_TIMECODE, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayAtTime(@as(*const IDvdControl2, @ptrCast(self)), pTime, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayChapter(self: *const T, ulChapter: u32, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayChapter(@as(*const IDvdControl2, @ptrCast(self)), ulChapter, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayPrevChapter(self: *const T, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayPrevChapter(@as(*const IDvdControl2, @ptrCast(self)), dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_ReplayChapter(self: *const T, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).ReplayChapter(@as(*const IDvdControl2, @ptrCast(self)), dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayNextChapter(self: *const T, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayNextChapter(@as(*const IDvdControl2, @ptrCast(self)), dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayForwards(self: *const T, dSpeed: f64, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayForwards(@as(*const IDvdControl2, @ptrCast(self)), dSpeed, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayBackwards(self: *const T, dSpeed: f64, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayBackwards(@as(*const IDvdControl2, @ptrCast(self)), dSpeed, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_ShowMenu(self: *const T, MenuID: DVD_MENU_ID, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).ShowMenu(@as(*const IDvdControl2, @ptrCast(self)), MenuID, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_Resume(self: *const T, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).Resume(@as(*const IDvdControl2, @ptrCast(self)), dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectRelativeButton(self: *const T, buttonDir: DVD_RELATIVE_BUTTON) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectRelativeButton(@as(*const IDvdControl2, @ptrCast(self)), buttonDir);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_ActivateButton(self: *const T) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).ActivateButton(@as(*const IDvdControl2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectButton(self: *const T, ulButton: u32) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectButton(@as(*const IDvdControl2, @ptrCast(self)), ulButton);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectAndActivateButton(self: *const T, ulButton: u32) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectAndActivateButton(@as(*const IDvdControl2, @ptrCast(self)), ulButton);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_StillOff(self: *const T) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).StillOff(@as(*const IDvdControl2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_Pause(self: *const T, bState: BOOL) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).Pause(@as(*const IDvdControl2, @ptrCast(self)), bState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectAudioStream(self: *const T, ulAudio: u32, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectAudioStream(@as(*const IDvdControl2, @ptrCast(self)), ulAudio, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectSubpictureStream(self: *const T, ulSubPicture: u32, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectSubpictureStream(@as(*const IDvdControl2, @ptrCast(self)), ulSubPicture, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SetSubpictureState(self: *const T, bState: BOOL, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SetSubpictureState(@as(*const IDvdControl2, @ptrCast(self)), bState, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectAngle(self: *const T, ulAngle: u32, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectAngle(@as(*const IDvdControl2, @ptrCast(self)), ulAngle, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectParentalLevel(self: *const T, ulParentalLevel: u32) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectParentalLevel(@as(*const IDvdControl2, @ptrCast(self)), ulParentalLevel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectParentalCountry(self: *const T, bCountry: ?*u8) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectParentalCountry(@as(*const IDvdControl2, @ptrCast(self)), bCountry);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectKaraokeAudioPresentationMode(self: *const T, ulMode: u32) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectKaraokeAudioPresentationMode(@as(*const IDvdControl2, @ptrCast(self)), ulMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectVideoModePreference(self: *const T, ulPreferredDisplayMode: u32) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectVideoModePreference(@as(*const IDvdControl2, @ptrCast(self)), ulPreferredDisplayMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SetDVDDirectory(self: *const T, pszwPath: ?[*:0]const u16) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SetDVDDirectory(@as(*const IDvdControl2, @ptrCast(self)), pszwPath);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_ActivateAtPosition(self: *const T, point: POINT) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).ActivateAtPosition(@as(*const IDvdControl2, @ptrCast(self)), point);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectAtPosition(self: *const T, point: POINT) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectAtPosition(@as(*const IDvdControl2, @ptrCast(self)), point);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayChaptersAutoStop(self: *const T, ulTitle: u32, ulChapter: u32, ulChaptersToPlay: u32, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayChaptersAutoStop(@as(*const IDvdControl2, @ptrCast(self)), ulTitle, ulChapter, ulChaptersToPlay, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_AcceptParentalLevelChange(self: *const T, bAccept: BOOL) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).AcceptParentalLevelChange(@as(*const IDvdControl2, @ptrCast(self)), bAccept);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SetOption(self: *const T, flag: DVD_OPTION_FLAG, fState: BOOL) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SetOption(@as(*const IDvdControl2, @ptrCast(self)), flag, fState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SetState(self: *const T, pState: ?*IDvdState, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SetState(@as(*const IDvdControl2, @ptrCast(self)), pState, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_PlayPeriodInTitleAutoStop(self: *const T, ulTitle: u32, pStartTime: ?*DVD_HMSF_TIMECODE, pEndTime: ?*DVD_HMSF_TIMECODE, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).PlayPeriodInTitleAutoStop(@as(*const IDvdControl2, @ptrCast(self)), ulTitle, pStartTime, pEndTime, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SetGPRM(self: *const T, ulIndex: u32, wValue: u16, dwFlags: u32, ppCmd: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SetGPRM(@as(*const IDvdControl2, @ptrCast(self)), ulIndex, wValue, dwFlags, ppCmd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectDefaultMenuLanguage(self: *const T, Language: u32) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectDefaultMenuLanguage(@as(*const IDvdControl2, @ptrCast(self)), Language);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectDefaultAudioLanguage(self: *const T, Language: u32, audioExtension: DVD_AUDIO_LANG_EXT) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectDefaultAudioLanguage(@as(*const IDvdControl2, @ptrCast(self)), Language, audioExtension);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdControl2_SelectDefaultSubpictureLanguage(self: *const T, Language: u32, subpictureExtension: DVD_SUBPICTURE_LANG_EXT) HRESULT {
                return @as(*const IDvdControl2.VTable, @ptrCast(self.vtable)).SelectDefaultSubpictureLanguage(@as(*const IDvdControl2, @ptrCast(self)), Language, subpictureExtension);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DVD_TextStringType = enum(i32) {
    Struct_Volume = 1,
    Struct_Title = 2,
    Struct_ParentalID = 3,
    Struct_PartOfTitle = 4,
    Struct_Cell = 5,
    Stream_Audio = 16,
    Stream_Subpicture = 17,
    Stream_Angle = 18,
    Channel_Audio = 32,
    General_Name = 48,
    General_Comments = 49,
    Title_Series = 56,
    Title_Movie = 57,
    Title_Video = 58,
    Title_Album = 59,
    Title_Song = 60,
    Title_Other = 63,
    Title_Sub_Series = 64,
    Title_Sub_Movie = 65,
    Title_Sub_Video = 66,
    Title_Sub_Album = 67,
    Title_Sub_Song = 68,
    Title_Sub_Other = 71,
    Title_Orig_Series = 72,
    Title_Orig_Movie = 73,
    Title_Orig_Video = 74,
    Title_Orig_Album = 75,
    Title_Orig_Song = 76,
    Title_Orig_Other = 79,
    Other_Scene = 80,
    Other_Cut = 81,
    Other_Take = 82,
};
pub const DVD_Struct_Volume = DVD_TextStringType.Struct_Volume;
pub const DVD_Struct_Title = DVD_TextStringType.Struct_Title;
pub const DVD_Struct_ParentalID = DVD_TextStringType.Struct_ParentalID;
pub const DVD_Struct_PartOfTitle = DVD_TextStringType.Struct_PartOfTitle;
pub const DVD_Struct_Cell = DVD_TextStringType.Struct_Cell;
pub const DVD_Stream_Audio = DVD_TextStringType.Stream_Audio;
pub const DVD_Stream_Subpicture = DVD_TextStringType.Stream_Subpicture;
pub const DVD_Stream_Angle = DVD_TextStringType.Stream_Angle;
pub const DVD_Channel_Audio = DVD_TextStringType.Channel_Audio;
pub const DVD_General_Name = DVD_TextStringType.General_Name;
pub const DVD_General_Comments = DVD_TextStringType.General_Comments;
pub const DVD_Title_Series = DVD_TextStringType.Title_Series;
pub const DVD_Title_Movie = DVD_TextStringType.Title_Movie;
pub const DVD_Title_Video = DVD_TextStringType.Title_Video;
pub const DVD_Title_Album = DVD_TextStringType.Title_Album;
pub const DVD_Title_Song = DVD_TextStringType.Title_Song;
pub const DVD_Title_Other = DVD_TextStringType.Title_Other;
pub const DVD_Title_Sub_Series = DVD_TextStringType.Title_Sub_Series;
pub const DVD_Title_Sub_Movie = DVD_TextStringType.Title_Sub_Movie;
pub const DVD_Title_Sub_Video = DVD_TextStringType.Title_Sub_Video;
pub const DVD_Title_Sub_Album = DVD_TextStringType.Title_Sub_Album;
pub const DVD_Title_Sub_Song = DVD_TextStringType.Title_Sub_Song;
pub const DVD_Title_Sub_Other = DVD_TextStringType.Title_Sub_Other;
pub const DVD_Title_Orig_Series = DVD_TextStringType.Title_Orig_Series;
pub const DVD_Title_Orig_Movie = DVD_TextStringType.Title_Orig_Movie;
pub const DVD_Title_Orig_Video = DVD_TextStringType.Title_Orig_Video;
pub const DVD_Title_Orig_Album = DVD_TextStringType.Title_Orig_Album;
pub const DVD_Title_Orig_Song = DVD_TextStringType.Title_Orig_Song;
pub const DVD_Title_Orig_Other = DVD_TextStringType.Title_Orig_Other;
pub const DVD_Other_Scene = DVD_TextStringType.Other_Scene;
pub const DVD_Other_Cut = DVD_TextStringType.Other_Cut;
pub const DVD_Other_Take = DVD_TextStringType.Other_Take;

pub const DVD_TextCharSet = enum(i32) {
    Unicode = 0,
    ISO646 = 1,
    JIS_Roman_Kanji = 2,
    ISO8859_1 = 3,
    ShiftJIS_Kanji_Roman_Katakana = 4,
};
pub const DVD_CharSet_Unicode = DVD_TextCharSet.Unicode;
pub const DVD_CharSet_ISO646 = DVD_TextCharSet.ISO646;
pub const DVD_CharSet_JIS_Roman_Kanji = DVD_TextCharSet.JIS_Roman_Kanji;
pub const DVD_CharSet_ISO8859_1 = DVD_TextCharSet.ISO8859_1;
pub const DVD_CharSet_ShiftJIS_Kanji_Roman_Katakana = DVD_TextCharSet.ShiftJIS_Kanji_Roman_Katakana;

pub const DVD_DECODER_CAPS = extern struct {
    dwSize: u32,
    dwAudioCaps: u32,
    dFwdMaxRateVideo: f64,
    dFwdMaxRateAudio: f64,
    dFwdMaxRateSP: f64,
    dBwdMaxRateVideo: f64,
    dBwdMaxRateAudio: f64,
    dBwdMaxRateSP: f64,
    dwRes1: u32,
    dwRes2: u32,
    dwRes3: u32,
    dwRes4: u32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDvdInfo2_Value = Guid.initString("34151510-eec0-11d2-8201-00a0c9d74842");
pub const IID_IDvdInfo2 = &IID_IDvdInfo2_Value;
pub const IDvdInfo2 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCurrentDomain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pDomain: ?*DVD_DOMAIN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pDomain: ?*DVD_DOMAIN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentLocation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pLocation: ?*DVD_PLAYBACK_LOCATION2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pLocation: ?*DVD_PLAYBACK_LOCATION2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTotalTitleTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pTotalTime: ?*DVD_HMSF_TIMECODE,
                ulTimeCodeFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pTotalTime: ?*DVD_HMSF_TIMECODE,
                ulTimeCodeFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pulButtonsAvailable: ?*u32,
                pulCurrentButton: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pulButtonsAvailable: ?*u32,
                pulCurrentButton: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentAngle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pulAnglesAvailable: ?*u32,
                pulCurrentAngle: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pulAnglesAvailable: ?*u32,
                pulCurrentAngle: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentAudio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pulStreamsAvailable: ?*u32,
                pulCurrentStream: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pulStreamsAvailable: ?*u32,
                pulCurrentStream: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentSubpicture: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pulStreamsAvailable: ?*u32,
                pulCurrentStream: ?*u32,
                pbIsDisabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pulStreamsAvailable: ?*u32,
                pulCurrentStream: ?*u32,
                pbIsDisabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentUOPS: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pulUOPs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pulUOPs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAllSPRMs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pRegisterArray: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pRegisterArray: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAllGPRMs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pRegisterArray: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pRegisterArray: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAudioLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSubpictureLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTitleAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulTitle: u32,
                pMenu: ?*DVD_MenuAttributes,
                pTitle: ?*DVD_TitleAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulTitle: u32,
                pMenu: ?*DVD_MenuAttributes,
                pTitle: ?*DVD_TitleAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVMGAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pATR: ?*DVD_MenuAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pATR: ?*DVD_MenuAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentVideoAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pATR: ?*DVD_VideoAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pATR: ?*DVD_VideoAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAudioAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pATR: ?*DVD_AudioAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pATR: ?*DVD_AudioAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetKaraokeAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pAttributes: ?*DVD_KaraokeAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pAttributes: ?*DVD_KaraokeAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSubpictureAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pATR: ?*DVD_SubpictureAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulStream: u32,
                pATR: ?*DVD_SubpictureAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDVDVolumeInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pulNumOfVolumes: ?*u32,
                pulVolume: ?*u32,
                pSide: ?*DVD_DISC_SIDE,
                pulNumOfTitles: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pulNumOfVolumes: ?*u32,
                pulVolume: ?*u32,
                pSide: ?*DVD_DISC_SIDE,
                pulNumOfTitles: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDVDTextNumberOfLanguages: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pulNumOfLangs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pulNumOfLangs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDVDTextLanguageInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulLangIndex: u32,
                pulNumOfStrings: ?*u32,
                pLangCode: ?*u32,
                pbCharacterSet: ?*DVD_TextCharSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulLangIndex: u32,
                pulNumOfStrings: ?*u32,
                pLangCode: ?*u32,
                pbCharacterSet: ?*DVD_TextCharSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDVDTextStringAsNative: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulLangIndex: u32,
                ulStringIndex: u32,
                pbBuffer: ?*u8,
                ulMaxBufferSize: u32,
                pulActualSize: ?*u32,
                pType: ?*DVD_TextStringType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulLangIndex: u32,
                ulStringIndex: u32,
                pbBuffer: ?*u8,
                ulMaxBufferSize: u32,
                pulActualSize: ?*u32,
                pType: ?*DVD_TextStringType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDVDTextStringAsUnicode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulLangIndex: u32,
                ulStringIndex: u32,
                pchwBuffer: ?PWSTR,
                ulMaxBufferSize: u32,
                pulActualSize: ?*u32,
                pType: ?*DVD_TextStringType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulLangIndex: u32,
                ulStringIndex: u32,
                pchwBuffer: ?PWSTR,
                ulMaxBufferSize: u32,
                pulActualSize: ?*u32,
                pType: ?*DVD_TextStringType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPlayerParentalLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pulParentalLevel: ?*u32,
                pbCountryCode: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pulParentalLevel: ?*u32,
                pbCountryCode: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumberOfChapters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulTitle: u32,
                pulNumOfChapters: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulTitle: u32,
                pulNumOfChapters: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTitleParentalLevels: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulTitle: u32,
                pulParentalLevels: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulTitle: u32,
                pulParentalLevels: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDVDDirectory: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pszwPath: [*:0]u16,
                ulMaxSize: u32,
                pulActualSize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pszwPath: [*:0]u16,
                ulMaxSize: u32,
                pulActualSize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsAudioStreamEnabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulStreamNum: u32,
                pbEnabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulStreamNum: u32,
                pbEnabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDiscID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pszwPath: ?[*:0]const u16,
                pullDiscID: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pszwPath: ?[*:0]const u16,
                pullDiscID: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pStateData: ?*?*IDvdState,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pStateData: ?*?*IDvdState,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMenuLanguages: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pLanguages: ?*u32,
                ulMaxLanguages: u32,
                pulActualLanguages: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pLanguages: ?*u32,
                ulMaxLanguages: u32,
                pulActualLanguages: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetButtonAtPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                point: POINT,
                pulButtonIndex: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                point: POINT,
                pulButtonIndex: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCmdFromEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                lParam1: isize,
                pCmdObj: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                lParam1: isize,
                pCmdObj: ?*?*IDvdCmd,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDefaultMenuLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pLanguage: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDefaultAudioLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pLanguage: ?*u32,
                pAudioExtension: ?*DVD_AUDIO_LANG_EXT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pLanguage: ?*u32,
                pAudioExtension: ?*DVD_AUDIO_LANG_EXT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDefaultSubpictureLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pLanguage: ?*u32,
                pSubpictureExtension: ?*DVD_SUBPICTURE_LANG_EXT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pLanguage: ?*u32,
                pSubpictureExtension: ?*DVD_SUBPICTURE_LANG_EXT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDecoderCaps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                pCaps: ?*DVD_DECODER_CAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                pCaps: ?*DVD_DECODER_CAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetButtonRect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulButton: u32,
                pRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulButton: u32,
                pRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsSubpictureStreamEnabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdInfo2,
                ulStreamNum: u32,
                pbEnabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdInfo2,
                ulStreamNum: u32,
                pbEnabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetCurrentDomain(self: *const T, pDomain: ?*DVD_DOMAIN) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetCurrentDomain(@as(*const IDvdInfo2, @ptrCast(self)), pDomain);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetCurrentLocation(self: *const T, pLocation: ?*DVD_PLAYBACK_LOCATION2) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetCurrentLocation(@as(*const IDvdInfo2, @ptrCast(self)), pLocation);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetTotalTitleTime(self: *const T, pTotalTime: ?*DVD_HMSF_TIMECODE, ulTimeCodeFlags: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetTotalTitleTime(@as(*const IDvdInfo2, @ptrCast(self)), pTotalTime, ulTimeCodeFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetCurrentButton(self: *const T, pulButtonsAvailable: ?*u32, pulCurrentButton: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetCurrentButton(@as(*const IDvdInfo2, @ptrCast(self)), pulButtonsAvailable, pulCurrentButton);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetCurrentAngle(self: *const T, pulAnglesAvailable: ?*u32, pulCurrentAngle: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetCurrentAngle(@as(*const IDvdInfo2, @ptrCast(self)), pulAnglesAvailable, pulCurrentAngle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetCurrentAudio(self: *const T, pulStreamsAvailable: ?*u32, pulCurrentStream: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetCurrentAudio(@as(*const IDvdInfo2, @ptrCast(self)), pulStreamsAvailable, pulCurrentStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetCurrentSubpicture(self: *const T, pulStreamsAvailable: ?*u32, pulCurrentStream: ?*u32, pbIsDisabled: ?*BOOL) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetCurrentSubpicture(@as(*const IDvdInfo2, @ptrCast(self)), pulStreamsAvailable, pulCurrentStream, pbIsDisabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetCurrentUOPS(self: *const T, pulUOPs: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetCurrentUOPS(@as(*const IDvdInfo2, @ptrCast(self)), pulUOPs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetAllSPRMs(self: *const T, pRegisterArray: ?*?*u16) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetAllSPRMs(@as(*const IDvdInfo2, @ptrCast(self)), pRegisterArray);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetAllGPRMs(self: *const T, pRegisterArray: ?*?*u16) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetAllGPRMs(@as(*const IDvdInfo2, @ptrCast(self)), pRegisterArray);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetAudioLanguage(self: *const T, ulStream: u32, pLanguage: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetAudioLanguage(@as(*const IDvdInfo2, @ptrCast(self)), ulStream, pLanguage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetSubpictureLanguage(self: *const T, ulStream: u32, pLanguage: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetSubpictureLanguage(@as(*const IDvdInfo2, @ptrCast(self)), ulStream, pLanguage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetTitleAttributes(self: *const T, ulTitle: u32, pMenu: ?*DVD_MenuAttributes, pTitle: ?*DVD_TitleAttributes) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetTitleAttributes(@as(*const IDvdInfo2, @ptrCast(self)), ulTitle, pMenu, pTitle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetVMGAttributes(self: *const T, pATR: ?*DVD_MenuAttributes) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetVMGAttributes(@as(*const IDvdInfo2, @ptrCast(self)), pATR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetCurrentVideoAttributes(self: *const T, pATR: ?*DVD_VideoAttributes) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetCurrentVideoAttributes(@as(*const IDvdInfo2, @ptrCast(self)), pATR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetAudioAttributes(self: *const T, ulStream: u32, pATR: ?*DVD_AudioAttributes) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetAudioAttributes(@as(*const IDvdInfo2, @ptrCast(self)), ulStream, pATR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetKaraokeAttributes(self: *const T, ulStream: u32, pAttributes: ?*DVD_KaraokeAttributes) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetKaraokeAttributes(@as(*const IDvdInfo2, @ptrCast(self)), ulStream, pAttributes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetSubpictureAttributes(self: *const T, ulStream: u32, pATR: ?*DVD_SubpictureAttributes) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetSubpictureAttributes(@as(*const IDvdInfo2, @ptrCast(self)), ulStream, pATR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDVDVolumeInfo(self: *const T, pulNumOfVolumes: ?*u32, pulVolume: ?*u32, pSide: ?*DVD_DISC_SIDE, pulNumOfTitles: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDVDVolumeInfo(@as(*const IDvdInfo2, @ptrCast(self)), pulNumOfVolumes, pulVolume, pSide, pulNumOfTitles);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDVDTextNumberOfLanguages(self: *const T, pulNumOfLangs: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDVDTextNumberOfLanguages(@as(*const IDvdInfo2, @ptrCast(self)), pulNumOfLangs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDVDTextLanguageInfo(self: *const T, ulLangIndex: u32, pulNumOfStrings: ?*u32, pLangCode: ?*u32, pbCharacterSet: ?*DVD_TextCharSet) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDVDTextLanguageInfo(@as(*const IDvdInfo2, @ptrCast(self)), ulLangIndex, pulNumOfStrings, pLangCode, pbCharacterSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDVDTextStringAsNative(self: *const T, ulLangIndex: u32, ulStringIndex: u32, pbBuffer: ?*u8, ulMaxBufferSize: u32, pulActualSize: ?*u32, pType: ?*DVD_TextStringType) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDVDTextStringAsNative(@as(*const IDvdInfo2, @ptrCast(self)), ulLangIndex, ulStringIndex, pbBuffer, ulMaxBufferSize, pulActualSize, pType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDVDTextStringAsUnicode(self: *const T, ulLangIndex: u32, ulStringIndex: u32, pchwBuffer: ?PWSTR, ulMaxBufferSize: u32, pulActualSize: ?*u32, pType: ?*DVD_TextStringType) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDVDTextStringAsUnicode(@as(*const IDvdInfo2, @ptrCast(self)), ulLangIndex, ulStringIndex, pchwBuffer, ulMaxBufferSize, pulActualSize, pType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetPlayerParentalLevel(self: *const T, pulParentalLevel: ?*u32, pbCountryCode: ?*u8) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetPlayerParentalLevel(@as(*const IDvdInfo2, @ptrCast(self)), pulParentalLevel, pbCountryCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetNumberOfChapters(self: *const T, ulTitle: u32, pulNumOfChapters: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetNumberOfChapters(@as(*const IDvdInfo2, @ptrCast(self)), ulTitle, pulNumOfChapters);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetTitleParentalLevels(self: *const T, ulTitle: u32, pulParentalLevels: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetTitleParentalLevels(@as(*const IDvdInfo2, @ptrCast(self)), ulTitle, pulParentalLevels);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDVDDirectory(self: *const T, pszwPath: [*:0]u16, ulMaxSize: u32, pulActualSize: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDVDDirectory(@as(*const IDvdInfo2, @ptrCast(self)), pszwPath, ulMaxSize, pulActualSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_IsAudioStreamEnabled(self: *const T, ulStreamNum: u32, pbEnabled: ?*BOOL) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).IsAudioStreamEnabled(@as(*const IDvdInfo2, @ptrCast(self)), ulStreamNum, pbEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDiscID(self: *const T, pszwPath: ?[*:0]const u16, pullDiscID: ?*u64) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDiscID(@as(*const IDvdInfo2, @ptrCast(self)), pszwPath, pullDiscID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetState(self: *const T, pStateData: ?*?*IDvdState) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetState(@as(*const IDvdInfo2, @ptrCast(self)), pStateData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetMenuLanguages(self: *const T, pLanguages: ?*u32, ulMaxLanguages: u32, pulActualLanguages: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetMenuLanguages(@as(*const IDvdInfo2, @ptrCast(self)), pLanguages, ulMaxLanguages, pulActualLanguages);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetButtonAtPosition(self: *const T, point: POINT, pulButtonIndex: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetButtonAtPosition(@as(*const IDvdInfo2, @ptrCast(self)), point, pulButtonIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetCmdFromEvent(self: *const T, lParam1: isize, pCmdObj: ?*?*IDvdCmd) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetCmdFromEvent(@as(*const IDvdInfo2, @ptrCast(self)), lParam1, pCmdObj);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDefaultMenuLanguage(self: *const T, pLanguage: ?*u32) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDefaultMenuLanguage(@as(*const IDvdInfo2, @ptrCast(self)), pLanguage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDefaultAudioLanguage(self: *const T, pLanguage: ?*u32, pAudioExtension: ?*DVD_AUDIO_LANG_EXT) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDefaultAudioLanguage(@as(*const IDvdInfo2, @ptrCast(self)), pLanguage, pAudioExtension);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDefaultSubpictureLanguage(self: *const T, pLanguage: ?*u32, pSubpictureExtension: ?*DVD_SUBPICTURE_LANG_EXT) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDefaultSubpictureLanguage(@as(*const IDvdInfo2, @ptrCast(self)), pLanguage, pSubpictureExtension);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetDecoderCaps(self: *const T, pCaps: ?*DVD_DECODER_CAPS) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetDecoderCaps(@as(*const IDvdInfo2, @ptrCast(self)), pCaps);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_GetButtonRect(self: *const T, ulButton: u32, pRect: ?*RECT) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).GetButtonRect(@as(*const IDvdInfo2, @ptrCast(self)), ulButton, pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdInfo2_IsSubpictureStreamEnabled(self: *const T, ulStreamNum: u32, pbEnabled: ?*BOOL) HRESULT {
                return @as(*const IDvdInfo2.VTable, @ptrCast(self.vtable)).IsSubpictureStreamEnabled(@as(*const IDvdInfo2, @ptrCast(self)), ulStreamNum, pbEnabled);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_DVD_GRAPH_FLAGS = enum(i32) {
    HWDEC_PREFER = 1,
    HWDEC_ONLY = 2,
    SWDEC_PREFER = 4,
    SWDEC_ONLY = 8,
    NOVPE = 256,
    DO_NOT_CLEAR = 512,
    VMR9_ONLY = 2048,
    EVR_ONLY = 4096,
    EVR_QOS = 8192,
    ADAPT_GRAPH = 16384,
    MASK = 65535,
};
pub const AM_DVD_HWDEC_PREFER = AM_DVD_GRAPH_FLAGS.HWDEC_PREFER;
pub const AM_DVD_HWDEC_ONLY = AM_DVD_GRAPH_FLAGS.HWDEC_ONLY;
pub const AM_DVD_SWDEC_PREFER = AM_DVD_GRAPH_FLAGS.SWDEC_PREFER;
pub const AM_DVD_SWDEC_ONLY = AM_DVD_GRAPH_FLAGS.SWDEC_ONLY;
pub const AM_DVD_NOVPE = AM_DVD_GRAPH_FLAGS.NOVPE;
pub const AM_DVD_DO_NOT_CLEAR = AM_DVD_GRAPH_FLAGS.DO_NOT_CLEAR;
pub const AM_DVD_VMR9_ONLY = AM_DVD_GRAPH_FLAGS.VMR9_ONLY;
pub const AM_DVD_EVR_ONLY = AM_DVD_GRAPH_FLAGS.EVR_ONLY;
pub const AM_DVD_EVR_QOS = AM_DVD_GRAPH_FLAGS.EVR_QOS;
pub const AM_DVD_ADAPT_GRAPH = AM_DVD_GRAPH_FLAGS.ADAPT_GRAPH;
pub const AM_DVD_MASK = AM_DVD_GRAPH_FLAGS.MASK;

pub const AM_DVD_STREAM_FLAGS = enum(i32) {
    VIDEO = 1,
    AUDIO = 2,
    SUBPIC = 4,
};
pub const AM_DVD_STREAM_VIDEO = AM_DVD_STREAM_FLAGS.VIDEO;
pub const AM_DVD_STREAM_AUDIO = AM_DVD_STREAM_FLAGS.AUDIO;
pub const AM_DVD_STREAM_SUBPIC = AM_DVD_STREAM_FLAGS.SUBPIC;

pub const AM_DVD_RENDERSTATUS = extern struct {
    hrVPEStatus: HRESULT,
    bDvdVolInvalid: BOOL,
    bDvdVolUnknown: BOOL,
    bNoLine21In: BOOL,
    bNoLine21Out: BOOL,
    iNumStreams: i32,
    iNumStreamsFailed: i32,
    dwFailedStreamsFlag: u32,
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IDvdGraphBuilder_Value = Guid.initString("fcc152b6-f372-11d0-8e00-00c04fd7c08b");
pub const IID_IDvdGraphBuilder = &IID_IDvdGraphBuilder_Value;
pub const IDvdGraphBuilder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetFiltergraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdGraphBuilder,
                ppGB: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdGraphBuilder,
                ppGB: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDvdInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdGraphBuilder,
                riid: ?*const Guid,
                ppvIF: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdGraphBuilder,
                riid: ?*const Guid,
                ppvIF: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RenderDvdVideoVolume: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvdGraphBuilder,
                lpcwszPathName: ?[*:0]const u16,
                dwFlags: u32,
                pStatus: ?*AM_DVD_RENDERSTATUS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvdGraphBuilder,
                lpcwszPathName: ?[*:0]const u16,
                dwFlags: u32,
                pStatus: ?*AM_DVD_RENDERSTATUS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdGraphBuilder_GetFiltergraph(self: *const T, ppGB: ?*?*IGraphBuilder) HRESULT {
                return @as(*const IDvdGraphBuilder.VTable, @ptrCast(self.vtable)).GetFiltergraph(@as(*const IDvdGraphBuilder, @ptrCast(self)), ppGB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdGraphBuilder_GetDvdInterface(self: *const T, riid: ?*const Guid, ppvIF: ?*?*anyopaque) HRESULT {
                return @as(*const IDvdGraphBuilder.VTable, @ptrCast(self.vtable)).GetDvdInterface(@as(*const IDvdGraphBuilder, @ptrCast(self)), riid, ppvIF);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvdGraphBuilder_RenderDvdVideoVolume(self: *const T, lpcwszPathName: ?[*:0]const u16, dwFlags: u32, pStatus: ?*AM_DVD_RENDERSTATUS) HRESULT {
                return @as(*const IDvdGraphBuilder.VTable, @ptrCast(self.vtable)).RenderDvdVideoVolume(@as(*const IDvdGraphBuilder, @ptrCast(self)), lpcwszPathName, dwFlags, pStatus);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IDDrawExclModeVideo_Value = Guid.initString("153acc21-d83b-11d1-82bf-00a0c9696c8f");
pub const IID_IDDrawExclModeVideo = &IID_IDDrawExclModeVideo_Value;
pub const IDDrawExclModeVideo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetDDrawObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideo,
                pDDrawObject: ?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideo,
                pDDrawObject: ?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDDrawObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideo,
                ppDDrawObject: ?*?*IDirectDraw,
                pbUsingExternal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideo,
                ppDDrawObject: ?*?*IDirectDraw,
                pbUsingExternal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDDrawSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideo,
                pDDrawSurface: ?*IDirectDrawSurface,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideo,
                pDDrawSurface: ?*IDirectDrawSurface,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDDrawSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideo,
                ppDDrawSurface: ?*?*IDirectDrawSurface,
                pbUsingExternal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideo,
                ppDDrawSurface: ?*?*IDirectDrawSurface,
                pbUsingExternal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDrawParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideo,
                prcSource: ?*const RECT,
                prcTarget: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideo,
                prcSource: ?*const RECT,
                prcTarget: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNativeVideoProps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideo,
                pdwVideoWidth: ?*u32,
                pdwVideoHeight: ?*u32,
                pdwPictAspectRatioX: ?*u32,
                pdwPictAspectRatioY: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideo,
                pdwVideoWidth: ?*u32,
                pdwVideoHeight: ?*u32,
                pdwPictAspectRatioX: ?*u32,
                pdwPictAspectRatioY: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCallbackInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideo,
                pCallback: ?*IDDrawExclModeVideoCallback,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideo,
                pCallback: ?*IDDrawExclModeVideoCallback,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideo_SetDDrawObject(self: *const T, pDDrawObject: ?*IDirectDraw) HRESULT {
                return @as(*const IDDrawExclModeVideo.VTable, @ptrCast(self.vtable)).SetDDrawObject(@as(*const IDDrawExclModeVideo, @ptrCast(self)), pDDrawObject);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideo_GetDDrawObject(self: *const T, ppDDrawObject: ?*?*IDirectDraw, pbUsingExternal: ?*BOOL) HRESULT {
                return @as(*const IDDrawExclModeVideo.VTable, @ptrCast(self.vtable)).GetDDrawObject(@as(*const IDDrawExclModeVideo, @ptrCast(self)), ppDDrawObject, pbUsingExternal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideo_SetDDrawSurface(self: *const T, pDDrawSurface: ?*IDirectDrawSurface) HRESULT {
                return @as(*const IDDrawExclModeVideo.VTable, @ptrCast(self.vtable)).SetDDrawSurface(@as(*const IDDrawExclModeVideo, @ptrCast(self)), pDDrawSurface);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideo_GetDDrawSurface(self: *const T, ppDDrawSurface: ?*?*IDirectDrawSurface, pbUsingExternal: ?*BOOL) HRESULT {
                return @as(*const IDDrawExclModeVideo.VTable, @ptrCast(self.vtable)).GetDDrawSurface(@as(*const IDDrawExclModeVideo, @ptrCast(self)), ppDDrawSurface, pbUsingExternal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideo_SetDrawParameters(self: *const T, prcSource: ?*const RECT, prcTarget: ?*const RECT) HRESULT {
                return @as(*const IDDrawExclModeVideo.VTable, @ptrCast(self.vtable)).SetDrawParameters(@as(*const IDDrawExclModeVideo, @ptrCast(self)), prcSource, prcTarget);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideo_GetNativeVideoProps(self: *const T, pdwVideoWidth: ?*u32, pdwVideoHeight: ?*u32, pdwPictAspectRatioX: ?*u32, pdwPictAspectRatioY: ?*u32) HRESULT {
                return @as(*const IDDrawExclModeVideo.VTable, @ptrCast(self.vtable)).GetNativeVideoProps(@as(*const IDDrawExclModeVideo, @ptrCast(self)), pdwVideoWidth, pdwVideoHeight, pdwPictAspectRatioX, pdwPictAspectRatioY);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideo_SetCallbackInterface(self: *const T, pCallback: ?*IDDrawExclModeVideoCallback, dwFlags: u32) HRESULT {
                return @as(*const IDDrawExclModeVideo.VTable, @ptrCast(self.vtable)).SetCallbackInterface(@as(*const IDDrawExclModeVideo, @ptrCast(self)), pCallback, dwFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const _AM_OVERLAY_NOTIFY_FLAGS = enum(i32) {
    VISIBLE_CHANGE = 1,
    SOURCE_CHANGE = 2,
    DEST_CHANGE = 4,
};
pub const AM_OVERLAY_NOTIFY_VISIBLE_CHANGE = _AM_OVERLAY_NOTIFY_FLAGS.VISIBLE_CHANGE;
pub const AM_OVERLAY_NOTIFY_SOURCE_CHANGE = _AM_OVERLAY_NOTIFY_FLAGS.SOURCE_CHANGE;
pub const AM_OVERLAY_NOTIFY_DEST_CHANGE = _AM_OVERLAY_NOTIFY_FLAGS.DEST_CHANGE;

// TODO: this type is limited to platform 'windows5.0'
const IID_IDDrawExclModeVideoCallback_Value = Guid.initString("913c24a0-20ab-11d2-9038-00a0c9697298");
pub const IID_IDDrawExclModeVideoCallback = &IID_IDDrawExclModeVideoCallback_Value;
pub const IDDrawExclModeVideoCallback = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        OnUpdateOverlay: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideoCallback,
                bBefore: BOOL,
                dwFlags: u32,
                bOldVisible: BOOL,
                prcOldSrc: ?*const RECT,
                prcOldDest: ?*const RECT,
                bNewVisible: BOOL,
                prcNewSrc: ?*const RECT,
                prcNewDest: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideoCallback,
                bBefore: BOOL,
                dwFlags: u32,
                bOldVisible: BOOL,
                prcOldSrc: ?*const RECT,
                prcOldDest: ?*const RECT,
                bNewVisible: BOOL,
                prcNewSrc: ?*const RECT,
                prcNewDest: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OnUpdateColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideoCallback,
                pKey: ?*const COLORKEY,
                dwColor: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideoCallback,
                pKey: ?*const COLORKEY,
                dwColor: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OnUpdateSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDDrawExclModeVideoCallback,
                dwWidth: u32,
                dwHeight: u32,
                dwARWidth: u32,
                dwARHeight: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDDrawExclModeVideoCallback,
                dwWidth: u32,
                dwHeight: u32,
                dwARWidth: u32,
                dwARHeight: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideoCallback_OnUpdateOverlay(self: *const T, bBefore: BOOL, dwFlags: u32, bOldVisible: BOOL, prcOldSrc: ?*const RECT, prcOldDest: ?*const RECT, bNewVisible: BOOL, prcNewSrc: ?*const RECT, prcNewDest: ?*const RECT) HRESULT {
                return @as(*const IDDrawExclModeVideoCallback.VTable, @ptrCast(self.vtable)).OnUpdateOverlay(@as(*const IDDrawExclModeVideoCallback, @ptrCast(self)), bBefore, dwFlags, bOldVisible, prcOldSrc, prcOldDest, bNewVisible, prcNewSrc, prcNewDest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideoCallback_OnUpdateColorKey(self: *const T, pKey: ?*const COLORKEY, dwColor: u32) HRESULT {
                return @as(*const IDDrawExclModeVideoCallback.VTable, @ptrCast(self.vtable)).OnUpdateColorKey(@as(*const IDDrawExclModeVideoCallback, @ptrCast(self)), pKey, dwColor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDDrawExclModeVideoCallback_OnUpdateSize(self: *const T, dwWidth: u32, dwHeight: u32, dwARWidth: u32, dwARHeight: u32) HRESULT {
                return @as(*const IDDrawExclModeVideoCallback.VTable, @ptrCast(self.vtable)).OnUpdateSize(@as(*const IDDrawExclModeVideoCallback, @ptrCast(self)), dwWidth, dwHeight, dwARWidth, dwARHeight);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const BDA_TEMPLATE_CONNECTION = extern struct {
    FromNodeType: u32,
    FromNodePinType: u32,
    ToNodeType: u32,
    ToNodePinType: u32,
};

pub const BDA_TEMPLATE_PIN_JOINT = extern struct {
    uliTemplateConnection: u32,
    ulcInstancesMax: u32,
};

pub const BDA_EVENT_ID = enum(i32) {
    SIGNAL_LOSS = 0,
    SIGNAL_LOCK = 1,
    DATA_START = 2,
    DATA_STOP = 3,
    CHANNEL_ACQUIRED = 4,
    CHANNEL_LOST = 5,
    CHANNEL_SOURCE_CHANGED = 6,
    CHANNEL_ACTIVATED = 7,
    CHANNEL_DEACTIVATED = 8,
    SUBCHANNEL_ACQUIRED = 9,
    SUBCHANNEL_LOST = 10,
    SUBCHANNEL_SOURCE_CHANGED = 11,
    SUBCHANNEL_ACTIVATED = 12,
    SUBCHANNEL_DEACTIVATED = 13,
    ACCESS_GRANTED = 14,
    ACCESS_DENIED = 15,
    OFFER_EXTENDED = 16,
    PURCHASE_COMPLETED = 17,
    SMART_CARD_INSERTED = 18,
    SMART_CARD_REMOVED = 19,
};
pub const BDA_EVENT_SIGNAL_LOSS = BDA_EVENT_ID.SIGNAL_LOSS;
pub const BDA_EVENT_SIGNAL_LOCK = BDA_EVENT_ID.SIGNAL_LOCK;
pub const BDA_EVENT_DATA_START = BDA_EVENT_ID.DATA_START;
pub const BDA_EVENT_DATA_STOP = BDA_EVENT_ID.DATA_STOP;
pub const BDA_EVENT_CHANNEL_ACQUIRED = BDA_EVENT_ID.CHANNEL_ACQUIRED;
pub const BDA_EVENT_CHANNEL_LOST = BDA_EVENT_ID.CHANNEL_LOST;
pub const BDA_EVENT_CHANNEL_SOURCE_CHANGED = BDA_EVENT_ID.CHANNEL_SOURCE_CHANGED;
pub const BDA_EVENT_CHANNEL_ACTIVATED = BDA_EVENT_ID.CHANNEL_ACTIVATED;
pub const BDA_EVENT_CHANNEL_DEACTIVATED = BDA_EVENT_ID.CHANNEL_DEACTIVATED;
pub const BDA_EVENT_SUBCHANNEL_ACQUIRED = BDA_EVENT_ID.SUBCHANNEL_ACQUIRED;
pub const BDA_EVENT_SUBCHANNEL_LOST = BDA_EVENT_ID.SUBCHANNEL_LOST;
pub const BDA_EVENT_SUBCHANNEL_SOURCE_CHANGED = BDA_EVENT_ID.SUBCHANNEL_SOURCE_CHANGED;
pub const BDA_EVENT_SUBCHANNEL_ACTIVATED = BDA_EVENT_ID.SUBCHANNEL_ACTIVATED;
pub const BDA_EVENT_SUBCHANNEL_DEACTIVATED = BDA_EVENT_ID.SUBCHANNEL_DEACTIVATED;
pub const BDA_EVENT_ACCESS_GRANTED = BDA_EVENT_ID.ACCESS_GRANTED;
pub const BDA_EVENT_ACCESS_DENIED = BDA_EVENT_ID.ACCESS_DENIED;
pub const BDA_EVENT_OFFER_EXTENDED = BDA_EVENT_ID.OFFER_EXTENDED;
pub const BDA_EVENT_PURCHASE_COMPLETED = BDA_EVENT_ID.PURCHASE_COMPLETED;
pub const BDA_EVENT_SMART_CARD_INSERTED = BDA_EVENT_ID.SMART_CARD_INSERTED;
pub const BDA_EVENT_SMART_CARD_REMOVED = BDA_EVENT_ID.SMART_CARD_REMOVED;

pub const KS_BDA_FRAME_INFO = extern struct {
    ExtendedHeaderSize: u32,
    dwFrameFlags: u32,
    ulEvent: u32,
    ulChannelNumber: u32,
    ulSubchannelNumber: u32,
    ulReason: u32,
};

pub const BDA_ETHERNET_ADDRESS = extern struct {
    rgbAddress: [6]u8,
};

pub const BDA_ETHERNET_ADDRESS_LIST = extern struct {
    ulcAddresses: u32,
    rgAddressl: [1]BDA_ETHERNET_ADDRESS,
};

pub const BDA_MULTICAST_MODE = enum(i32) {
    PROMISCUOUS_MULTICAST = 0,
    FILTERED_MULTICAST = 1,
    NO_MULTICAST = 2,
};
pub const BDA_PROMISCUOUS_MULTICAST = BDA_MULTICAST_MODE.PROMISCUOUS_MULTICAST;
pub const BDA_FILTERED_MULTICAST = BDA_MULTICAST_MODE.FILTERED_MULTICAST;
pub const BDA_NO_MULTICAST = BDA_MULTICAST_MODE.NO_MULTICAST;

pub const BDA_IPv4_ADDRESS = extern struct {
    rgbAddress: [4]u8,
};

pub const BDA_IPv4_ADDRESS_LIST = extern struct {
    ulcAddresses: u32,
    rgAddressl: [1]BDA_IPv4_ADDRESS,
};

pub const BDA_IPv6_ADDRESS = extern struct {
    rgbAddress: [6]u8,
};

pub const BDA_IPv6_ADDRESS_LIST = extern struct {
    ulcAddresses: u32,
    rgAddressl: [1]BDA_IPv6_ADDRESS,
};

pub const BDA_SIGNAL_STATE = enum(i32) {
    UNAVAILABLE = 0,
    INACTIVE = 1,
    ACTIVE = 2,
};
pub const BDA_SIGNAL_UNAVAILABLE = BDA_SIGNAL_STATE.UNAVAILABLE;
pub const BDA_SIGNAL_INACTIVE = BDA_SIGNAL_STATE.INACTIVE;
pub const BDA_SIGNAL_ACTIVE = BDA_SIGNAL_STATE.ACTIVE;

pub const BDA_CHANGE_STATE = enum(i32) {
    COMPLETE = 0,
    PENDING = 1,
};
pub const BDA_CHANGES_COMPLETE = BDA_CHANGE_STATE.COMPLETE;
pub const BDA_CHANGES_PENDING = BDA_CHANGE_STATE.PENDING;

pub const BDANODE_DESCRIPTOR = extern struct {
    ulBdaNodeType: u32,
    guidFunction: Guid,
    guidName: Guid,
};

pub const BDA_TABLE_SECTION = extern struct {
    ulPrimarySectionId: u32,
    ulSecondarySectionId: u32,
    ulcbSectionLength: u32,
    argbSectionData: [1]u32,
};

pub const BDA_DISEQC_SEND = extern struct {
    ulRequestId: u32,
    ulPacketLength: u32,
    argbPacketData: [8]u8,
};

pub const BDA_DISEQC_RESPONSE = extern struct {
    ulRequestId: u32,
    ulPacketLength: u32,
    argbPacketData: [8]u8,
};

pub const MEDIA_SAMPLE_CONTENT = enum(i32) {
    TRANSPORT_PACKET = 0,
    ELEMENTARY_STREAM = 1,
    MPEG2_PSI = 2,
    TRANSPORT_PAYLOAD = 3,
};
pub const MEDIA_TRANSPORT_PACKET = MEDIA_SAMPLE_CONTENT.TRANSPORT_PACKET;
pub const MEDIA_ELEMENTARY_STREAM = MEDIA_SAMPLE_CONTENT.ELEMENTARY_STREAM;
pub const MEDIA_MPEG2_PSI = MEDIA_SAMPLE_CONTENT.MPEG2_PSI;
pub const MEDIA_TRANSPORT_PAYLOAD = MEDIA_SAMPLE_CONTENT.TRANSPORT_PAYLOAD;

pub const PID_MAP = extern struct {
    ulPID: u32,
    MediaSampleContent: MEDIA_SAMPLE_CONTENT,
};

pub const BDA_PID_MAP = extern struct {
    MediaSampleContent: MEDIA_SAMPLE_CONTENT,
    ulcPIDs: u32,
    aulPIDs: [1]u32,
};

pub const BDA_PID_UNMAP = extern struct {
    ulcPIDs: u32,
    aulPIDs: [1]u32,
};

pub const BDA_CA_MODULE_UI = extern struct {
    ulFormat: u32,
    ulbcDesc: u32,
    ulDesc: [1]u32,
};

pub const BDA_PROGRAM_PID_LIST = extern struct {
    ulProgramNumber: u32,
    ulcPIDs: u32,
    ulPID: [1]u32,
};

pub const BDA_DRM_DRMSTATUS = extern struct {
    lResult: i32,
    DRMuuid: Guid,
    ulDrmUuidListStringSize: u32,
    argbDrmUuidListString: [1]Guid,
};

pub const BDA_WMDRM_STATUS = extern struct {
    lResult: i32,
    ulMaxCaptureTokenSize: u32,
    uMaxStreamingPid: u32,
    ulMaxLicense: u32,
    ulMinSecurityLevel: u32,
    ulRevInfoSequenceNumber: u32,
    ulRevInfoIssuedTime: u64,
    ulRevListVersion: u32,
    ulRevInfoTTL: u32,
    ulState: u32,
};

pub const BDA_WMDRM_KEYINFOLIST = extern struct {
    lResult: i32,
    ulKeyuuidBufferLen: u32,
    argKeyuuidBuffer: [1]Guid,
};

pub const BDA_BUFFER = extern struct {
    lResult: i32,
    ulBufferSize: u32,
    argbBuffer: [1]u8,
};

pub const BDA_WMDRM_RENEWLICENSE = extern struct {
    lResult: i32,
    ulDescrambleStatus: u32,
    ulXmrLicenseOutputLength: u32,
    argbXmrLicenceOutputBuffer: [1]u8,
};

pub const BDA_WMDRMTUNER_PIDPROTECTION = extern struct {
    lResult: i32,
    uuidKeyID: Guid,
};

pub const BDA_WMDRMTUNER_PURCHASEENTITLEMENT = extern struct {
    lResult: i32,
    ulDescrambleStatus: u32,
    ulCaptureTokenLength: u32,
    argbCaptureTokenBuffer: [1]u8,
};

pub const BDA_TUNER_TUNERSTATE = extern struct {
    lResult: i32,
    ulTuneLength: u32,
    argbTuneData: [1]u8,
};

pub const BDA_TUNER_DIAGNOSTICS = extern struct {
    lResult: i32,
    ulSignalLevel: u32,
    ulSignalLevelQuality: u32,
    ulSignalNoiseRatio: u32,
};

pub const BDA_STRING = extern struct {
    lResult: i32,
    ulStringSize: u32,
    argbString: [1]u8,
};

pub const BDA_SCAN_CAPABILTIES = extern struct {
    lResult: i32,
    ul64AnalogStandardsSupported: u64,
};

pub const BDA_SCAN_STATE = extern struct {
    lResult: i32,
    ulSignalLock: u32,
    ulSecondsLeft: u32,
    ulCurrentFrequency: u32,
};

pub const BDA_SCAN_START = extern struct {
    lResult: i32,
    LowerFrequency: u32,
    HigerFrequency: u32,
};

pub const BDA_GDDS_DATATYPE = extern struct {
    lResult: i32,
    uuidDataType: Guid,
};

pub const BDA_GDDS_DATA = extern struct {
    lResult: i32,
    ulDataLength: u32,
    ulPercentageProgress: u32,
    argbData: [1]u8,
};

pub const BDA_USERACTIVITY_INTERVAL = extern struct {
    lResult: i32,
    ulActivityInterval: u32,
};

pub const BDA_CAS_CHECK_ENTITLEMENTTOKEN = extern struct {
    lResult: i32,
    ulDescrambleStatus: u32,
};

pub const BDA_CAS_CLOSE_MMIDIALOG = extern struct {
    lResult: i32,
    SessionResult: u32,
};

pub const BDA_CAS_REQUESTTUNERDATA = extern struct {
    ucRequestPriority: u8,
    ucRequestReason: u8,
    ucRequestConsequences: u8,
    ulEstimatedTime: u32,
};

pub const BDA_CAS_OPENMMIDATA = extern struct {
    ulDialogNumber: u32,
    ulDialogRequest: u32,
    uuidDialogType: Guid,
    usDialogDataLength: u16,
    argbDialogData: [1]u8,
};

pub const BDA_CAS_CLOSEMMIDATA = extern struct {
    ulDialogNumber: u32,
};

pub const ISDBCAS_REQUEST_ID = enum(i32) {
    G = 56,
    D = 58,
};
pub const ISDBCAS_REQUEST_ID_EMG = ISDBCAS_REQUEST_ID.G;
pub const ISDBCAS_REQUEST_ID_EMD = ISDBCAS_REQUEST_ID.D;

pub const BDA_ISDBCAS_REQUESTHEADER = extern struct {
    bInstruction: u8 align(1),
    bReserved: [3]u8 align(1),
    ulDataLength: u32 align(1),
    argbIsdbCommand: [1]u8 align(1),
};

pub const BDA_ISDBCAS_RESPONSEDATA = extern struct {
    lResult: i32 align(1),
    ulRequestID: u32 align(1),
    ulIsdbStatus: u32 align(1),
    ulIsdbDataSize: u32 align(1),
    argbIsdbCommandData: [1]u8 align(1),
};

pub const BDA_ISDBCAS_EMG_REQ = extern struct {
    bCLA: u8,
    bINS: u8,
    bP1: u8,
    bP2: u8,
    bLC: u8,
    bCardId: [6]u8,
    bProtocol: u8,
    bCABroadcasterGroupId: u8,
    bMessageControl: u8,
    bMessageCode: [1]u8,
};

pub const MUX_PID_TYPE = enum(i32) {
    OTHER = -1,
    ELEMENTARY_STREAM = 0,
    MPEG2_SECTION_PSI_SI = 1,
};
pub const PID_OTHER = MUX_PID_TYPE.OTHER;
pub const PID_ELEMENTARY_STREAM = MUX_PID_TYPE.ELEMENTARY_STREAM;
pub const PID_MPEG2_SECTION_PSI_SI = MUX_PID_TYPE.MPEG2_SECTION_PSI_SI;

pub const BDA_MUX_PIDLISTITEM = extern struct {
    usPIDNumber: u16 align(2),
    usProgramNumber: u16 align(2),
    ePIDType: MUX_PID_TYPE align(2),
};

pub const BDA_TS_SELECTORINFO = extern struct {
    bTSInfolength: u8 align(1),
    bReserved: [2]u8 align(1),
    guidNetworkType: Guid align(1),
    bTSIDCount: u8 align(1),
    usTSID: [1]u16 align(1),
};

pub const BDA_TS_SELECTORINFO_ISDBS_EXT = extern struct {
    bTMCC: [48]u8,
};

pub const BDA_DVBT2_L1_SIGNALLING_DATA = extern struct {
    L1Pre_TYPE: u8,
    L1Pre_BWT_S1_S2: u8,
    L1Pre_REPETITION_GUARD_PAPR: u8,
    L1Pre_MOD_COD_FEC: u8,
    L1Pre_POSTSIZE_INFO_PILOT: [5]u8,
    L1Pre_TX_ID_AVAIL: u8,
    L1Pre_CELL_ID: [2]u8,
    L1Pre_NETWORK_ID: [2]u8,
    L1Pre_T2SYSTEM_ID: [2]u8,
    L1Pre_NUM_T2_FRAMES: u8,
    L1Pre_NUM_DATA_REGENFLAG_L1POSTEXT: [2]u8,
    L1Pre_NUMRF_CURRENTRF_RESERVED: [2]u8,
    L1Pre_CRC32: [4]u8,
    L1PostData: [1]u8,
};

pub const BDA_RATING_PINRESET = extern struct {
    bPinLength: u8,
    argbNewPin: [1]u8,
};

pub const DVBSystemType = enum(i32) {
    DVB_Cable = 0,
    DVB_Terrestrial = 1,
    DVB_Satellite = 2,
    ISDB_Terrestrial = 3,
    ISDB_Satellite = 4,
};
pub const DVB_Cable = DVBSystemType.DVB_Cable;
pub const DVB_Terrestrial = DVBSystemType.DVB_Terrestrial;
pub const DVB_Satellite = DVBSystemType.DVB_Satellite;
pub const ISDB_Terrestrial = DVBSystemType.ISDB_Terrestrial;
pub const ISDB_Satellite = DVBSystemType.ISDB_Satellite;

pub const BDA_Channel = enum(i32) {
    L = -1,
};
pub const BDA_UNDEFINED_CHANNEL = BDA_Channel.L;

pub const ComponentCategory = enum(i32) {
    ategoryNotSet = -1,
    ategoryOther = 0,
    ategoryVideo = 1,
    ategoryAudio = 2,
    ategoryText = 3,
    ategorySubtitles = 4,
    ategoryCaptions = 5,
    ategorySuperimpose = 6,
    ategoryData = 7,
    ATEGORY_COUNT = 8,
};
pub const CategoryNotSet = ComponentCategory.ategoryNotSet;
pub const CategoryOther = ComponentCategory.ategoryOther;
pub const CategoryVideo = ComponentCategory.ategoryVideo;
pub const CategoryAudio = ComponentCategory.ategoryAudio;
pub const CategoryText = ComponentCategory.ategoryText;
pub const CategorySubtitles = ComponentCategory.ategorySubtitles;
pub const CategoryCaptions = ComponentCategory.ategoryCaptions;
pub const CategorySuperimpose = ComponentCategory.ategorySuperimpose;
pub const CategoryData = ComponentCategory.ategoryData;
pub const CATEGORY_COUNT = ComponentCategory.ATEGORY_COUNT;

pub const ComponentStatus = enum(i32) {
    Active = 0,
    Inactive = 1,
    Unavailable = 2,
};
pub const StatusActive = ComponentStatus.Active;
pub const StatusInactive = ComponentStatus.Inactive;
pub const StatusUnavailable = ComponentStatus.Unavailable;

pub const MPEG2StreamType = enum(i32) {
    BDA_UNITIALIZED_MPEG2STREAMTYPE = -1,
    Reserved1 = 0,
    ISO_IEC_11172_2_VIDEO = 1,
    ISO_IEC_13818_2_VIDEO = 2,
    ISO_IEC_11172_3_AUDIO = 3,
    ISO_IEC_13818_3_AUDIO = 4,
    ISO_IEC_13818_1_PRIVATE_SECTION = 5,
    ISO_IEC_13818_1_PES = 6,
    ISO_IEC_13522_MHEG = 7,
    ANNEX_A_DSM_CC = 8,
    ITU_T_REC_H_222_1 = 9,
    ISO_IEC_13818_6_TYPE_A = 10,
    ISO_IEC_13818_6_TYPE_B = 11,
    ISO_IEC_13818_6_TYPE_C = 12,
    ISO_IEC_13818_6_TYPE_D = 13,
    ISO_IEC_13818_1_AUXILIARY = 14,
    ISO_IEC_13818_7_AUDIO = 15,
    ISO_IEC_14496_2_VISUAL = 16,
    ISO_IEC_14496_3_AUDIO = 17,
    ISO_IEC_14496_1_IN_PES = 18,
    ISO_IEC_14496_1_IN_SECTION = 19,
    ISO_IEC_13818_6_DOWNLOAD = 20,
    METADATA_IN_PES = 21,
    METADATA_IN_SECTION = 22,
    METADATA_IN_DATA_CAROUSEL = 23,
    METADATA_IN_OBJECT_CAROUSEL = 24,
    METADATA_IN_DOWNLOAD_PROTOCOL = 25,
    IRPM_STREAMM = 26,
    ITU_T_H264 = 27,
    ISO_IEC_13818_1_RESERVED = 28,
    // USER_PRIVATE = 16, this enum value conflicts with ISO_IEC_14496_2_VISUAL
    HEVC_VIDEO_OR_TEMPORAL_VIDEO = 36,
    HEVC_TEMPORAL_VIDEO_SUBSET = 37,
    ISO_IEC_USER_PRIVATE = 128,
    DOLBY_AC3_AUDIO = 129,
    DOLBY_DIGITAL_PLUS_AUDIO_ATSC = 135,
};
pub const BDA_UNITIALIZED_MPEG2STREAMTYPE = MPEG2StreamType.BDA_UNITIALIZED_MPEG2STREAMTYPE;
pub const Reserved1 = MPEG2StreamType.Reserved1;
pub const ISO_IEC_11172_2_VIDEO = MPEG2StreamType.ISO_IEC_11172_2_VIDEO;
pub const ISO_IEC_13818_2_VIDEO = MPEG2StreamType.ISO_IEC_13818_2_VIDEO;
pub const ISO_IEC_11172_3_AUDIO = MPEG2StreamType.ISO_IEC_11172_3_AUDIO;
pub const ISO_IEC_13818_3_AUDIO = MPEG2StreamType.ISO_IEC_13818_3_AUDIO;
pub const ISO_IEC_13818_1_PRIVATE_SECTION = MPEG2StreamType.ISO_IEC_13818_1_PRIVATE_SECTION;
pub const ISO_IEC_13818_1_PES = MPEG2StreamType.ISO_IEC_13818_1_PES;
pub const ISO_IEC_13522_MHEG = MPEG2StreamType.ISO_IEC_13522_MHEG;
pub const ANNEX_A_DSM_CC = MPEG2StreamType.ANNEX_A_DSM_CC;
pub const ITU_T_REC_H_222_1 = MPEG2StreamType.ITU_T_REC_H_222_1;
pub const ISO_IEC_13818_6_TYPE_A = MPEG2StreamType.ISO_IEC_13818_6_TYPE_A;
pub const ISO_IEC_13818_6_TYPE_B = MPEG2StreamType.ISO_IEC_13818_6_TYPE_B;
pub const ISO_IEC_13818_6_TYPE_C = MPEG2StreamType.ISO_IEC_13818_6_TYPE_C;
pub const ISO_IEC_13818_6_TYPE_D = MPEG2StreamType.ISO_IEC_13818_6_TYPE_D;
pub const ISO_IEC_13818_1_AUXILIARY = MPEG2StreamType.ISO_IEC_13818_1_AUXILIARY;
pub const ISO_IEC_13818_7_AUDIO = MPEG2StreamType.ISO_IEC_13818_7_AUDIO;
pub const ISO_IEC_14496_2_VISUAL = MPEG2StreamType.ISO_IEC_14496_2_VISUAL;
pub const ISO_IEC_14496_3_AUDIO = MPEG2StreamType.ISO_IEC_14496_3_AUDIO;
pub const ISO_IEC_14496_1_IN_PES = MPEG2StreamType.ISO_IEC_14496_1_IN_PES;
pub const ISO_IEC_14496_1_IN_SECTION = MPEG2StreamType.ISO_IEC_14496_1_IN_SECTION;
pub const ISO_IEC_13818_6_DOWNLOAD = MPEG2StreamType.ISO_IEC_13818_6_DOWNLOAD;
pub const METADATA_IN_PES = MPEG2StreamType.METADATA_IN_PES;
pub const METADATA_IN_SECTION = MPEG2StreamType.METADATA_IN_SECTION;
pub const METADATA_IN_DATA_CAROUSEL = MPEG2StreamType.METADATA_IN_DATA_CAROUSEL;
pub const METADATA_IN_OBJECT_CAROUSEL = MPEG2StreamType.METADATA_IN_OBJECT_CAROUSEL;
pub const METADATA_IN_DOWNLOAD_PROTOCOL = MPEG2StreamType.METADATA_IN_DOWNLOAD_PROTOCOL;
pub const IRPM_STREAMM = MPEG2StreamType.IRPM_STREAMM;
pub const ITU_T_H264 = MPEG2StreamType.ITU_T_H264;
pub const ISO_IEC_13818_1_RESERVED = MPEG2StreamType.ISO_IEC_13818_1_RESERVED;
pub const USER_PRIVATE = MPEG2StreamType.ISO_IEC_14496_2_VISUAL;
pub const HEVC_VIDEO_OR_TEMPORAL_VIDEO = MPEG2StreamType.HEVC_VIDEO_OR_TEMPORAL_VIDEO;
pub const HEVC_TEMPORAL_VIDEO_SUBSET = MPEG2StreamType.HEVC_TEMPORAL_VIDEO_SUBSET;
pub const ISO_IEC_USER_PRIVATE = MPEG2StreamType.ISO_IEC_USER_PRIVATE;
pub const DOLBY_AC3_AUDIO = MPEG2StreamType.DOLBY_AC3_AUDIO;
pub const DOLBY_DIGITAL_PLUS_AUDIO_ATSC = MPEG2StreamType.DOLBY_DIGITAL_PLUS_AUDIO_ATSC;

pub const MPEG2_TRANSPORT_STRIDE = extern struct {
    dwOffset: u32,
    dwPacketLength: u32,
    dwStride: u32,
};

pub const ATSCComponentTypeFlags = enum(i32) {
    @"3" = 1,
};
pub const ATSCCT_AC3 = ATSCComponentTypeFlags.@"3";

pub const BinaryConvolutionCodeRate = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    @"1_2" = 1,
    @"2_3" = 2,
    @"3_4" = 3,
    @"3_5" = 4,
    @"4_5" = 5,
    @"5_6" = 6,
    @"5_11" = 7,
    @"7_8" = 8,
    @"1_4" = 9,
    @"1_3" = 10,
    @"2_5" = 11,
    @"6_7" = 12,
    @"8_9" = 13,
    @"9_10" = 14,
    MAX = 15,
};
pub const BDA_BCC_RATE_NOT_SET = BinaryConvolutionCodeRate.NOT_SET;
pub const BDA_BCC_RATE_NOT_DEFINED = BinaryConvolutionCodeRate.NOT_DEFINED;
pub const BDA_BCC_RATE_1_2 = BinaryConvolutionCodeRate.@"1_2";
pub const BDA_BCC_RATE_2_3 = BinaryConvolutionCodeRate.@"2_3";
pub const BDA_BCC_RATE_3_4 = BinaryConvolutionCodeRate.@"3_4";
pub const BDA_BCC_RATE_3_5 = BinaryConvolutionCodeRate.@"3_5";
pub const BDA_BCC_RATE_4_5 = BinaryConvolutionCodeRate.@"4_5";
pub const BDA_BCC_RATE_5_6 = BinaryConvolutionCodeRate.@"5_6";
pub const BDA_BCC_RATE_5_11 = BinaryConvolutionCodeRate.@"5_11";
pub const BDA_BCC_RATE_7_8 = BinaryConvolutionCodeRate.@"7_8";
pub const BDA_BCC_RATE_1_4 = BinaryConvolutionCodeRate.@"1_4";
pub const BDA_BCC_RATE_1_3 = BinaryConvolutionCodeRate.@"1_3";
pub const BDA_BCC_RATE_2_5 = BinaryConvolutionCodeRate.@"2_5";
pub const BDA_BCC_RATE_6_7 = BinaryConvolutionCodeRate.@"6_7";
pub const BDA_BCC_RATE_8_9 = BinaryConvolutionCodeRate.@"8_9";
pub const BDA_BCC_RATE_9_10 = BinaryConvolutionCodeRate.@"9_10";
pub const BDA_BCC_RATE_MAX = BinaryConvolutionCodeRate.MAX;

pub const FECMethod = enum(i32) {
    METHOD_NOT_SET = -1,
    METHOD_NOT_DEFINED = 0,
    VITERBI = 1,
    RS_204_188 = 2,
    LDPC = 3,
    BCH = 4,
    RS_147_130 = 5,
    MAX = 6,
};
pub const BDA_FEC_METHOD_NOT_SET = FECMethod.METHOD_NOT_SET;
pub const BDA_FEC_METHOD_NOT_DEFINED = FECMethod.METHOD_NOT_DEFINED;
pub const BDA_FEC_VITERBI = FECMethod.VITERBI;
pub const BDA_FEC_RS_204_188 = FECMethod.RS_204_188;
pub const BDA_FEC_LDPC = FECMethod.LDPC;
pub const BDA_FEC_BCH = FECMethod.BCH;
pub const BDA_FEC_RS_147_130 = FECMethod.RS_147_130;
pub const BDA_FEC_MAX = FECMethod.MAX;

pub const ModulationType = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    @"16QAM" = 1,
    @"32QAM" = 2,
    @"64QAM" = 3,
    @"80QAM" = 4,
    @"96QAM" = 5,
    @"112QAM" = 6,
    @"128QAM" = 7,
    @"160QAM" = 8,
    @"192QAM" = 9,
    @"224QAM" = 10,
    @"256QAM" = 11,
    @"320QAM" = 12,
    @"384QAM" = 13,
    @"448QAM" = 14,
    @"512QAM" = 15,
    @"640QAM" = 16,
    @"768QAM" = 17,
    @"896QAM" = 18,
    @"1024QAM" = 19,
    QPSK = 20,
    BPSK = 21,
    OQPSK = 22,
    @"8VSB" = 23,
    @"16VSB" = 24,
    ANALOG_AMPLITUDE = 25,
    ANALOG_FREQUENCY = 26,
    @"8PSK" = 27,
    RF = 28,
    @"16APSK" = 29,
    @"32APSK" = 30,
    NBC_QPSK = 31,
    NBC_8PSK = 32,
    DIRECTV = 33,
    ISDB_T_TMCC = 34,
    ISDB_S_TMCC = 35,
    MAX = 36,
};
pub const BDA_MOD_NOT_SET = ModulationType.NOT_SET;
pub const BDA_MOD_NOT_DEFINED = ModulationType.NOT_DEFINED;
pub const BDA_MOD_16QAM = ModulationType.@"16QAM";
pub const BDA_MOD_32QAM = ModulationType.@"32QAM";
pub const BDA_MOD_64QAM = ModulationType.@"64QAM";
pub const BDA_MOD_80QAM = ModulationType.@"80QAM";
pub const BDA_MOD_96QAM = ModulationType.@"96QAM";
pub const BDA_MOD_112QAM = ModulationType.@"112QAM";
pub const BDA_MOD_128QAM = ModulationType.@"128QAM";
pub const BDA_MOD_160QAM = ModulationType.@"160QAM";
pub const BDA_MOD_192QAM = ModulationType.@"192QAM";
pub const BDA_MOD_224QAM = ModulationType.@"224QAM";
pub const BDA_MOD_256QAM = ModulationType.@"256QAM";
pub const BDA_MOD_320QAM = ModulationType.@"320QAM";
pub const BDA_MOD_384QAM = ModulationType.@"384QAM";
pub const BDA_MOD_448QAM = ModulationType.@"448QAM";
pub const BDA_MOD_512QAM = ModulationType.@"512QAM";
pub const BDA_MOD_640QAM = ModulationType.@"640QAM";
pub const BDA_MOD_768QAM = ModulationType.@"768QAM";
pub const BDA_MOD_896QAM = ModulationType.@"896QAM";
pub const BDA_MOD_1024QAM = ModulationType.@"1024QAM";
pub const BDA_MOD_QPSK = ModulationType.QPSK;
pub const BDA_MOD_BPSK = ModulationType.BPSK;
pub const BDA_MOD_OQPSK = ModulationType.OQPSK;
pub const BDA_MOD_8VSB = ModulationType.@"8VSB";
pub const BDA_MOD_16VSB = ModulationType.@"16VSB";
pub const BDA_MOD_ANALOG_AMPLITUDE = ModulationType.ANALOG_AMPLITUDE;
pub const BDA_MOD_ANALOG_FREQUENCY = ModulationType.ANALOG_FREQUENCY;
pub const BDA_MOD_8PSK = ModulationType.@"8PSK";
pub const BDA_MOD_RF = ModulationType.RF;
pub const BDA_MOD_16APSK = ModulationType.@"16APSK";
pub const BDA_MOD_32APSK = ModulationType.@"32APSK";
pub const BDA_MOD_NBC_QPSK = ModulationType.NBC_QPSK;
pub const BDA_MOD_NBC_8PSK = ModulationType.NBC_8PSK;
pub const BDA_MOD_DIRECTV = ModulationType.DIRECTV;
pub const BDA_MOD_ISDB_T_TMCC = ModulationType.ISDB_T_TMCC;
pub const BDA_MOD_ISDB_S_TMCC = ModulationType.ISDB_S_TMCC;
pub const BDA_MOD_MAX = ModulationType.MAX;

pub const ScanModulationTypes = enum(i32) {
    BDA_SCAN_MOD_16QAM = 1,
    BDA_SCAN_MOD_32QAM = 2,
    BDA_SCAN_MOD_64QAM = 4,
    BDA_SCAN_MOD_80QAM = 8,
    BDA_SCAN_MOD_96QAM = 16,
    BDA_SCAN_MOD_112QAM = 32,
    BDA_SCAN_MOD_128QAM = 64,
    BDA_SCAN_MOD_160QAM = 128,
    BDA_SCAN_MOD_192QAM = 256,
    BDA_SCAN_MOD_224QAM = 512,
    BDA_SCAN_MOD_256QAM = 1024,
    BDA_SCAN_MOD_320QAM = 2048,
    BDA_SCAN_MOD_384QAM = 4096,
    BDA_SCAN_MOD_448QAM = 8192,
    BDA_SCAN_MOD_512QAM = 16384,
    BDA_SCAN_MOD_640QAM = 32768,
    BDA_SCAN_MOD_768QAM = 65536,
    BDA_SCAN_MOD_896QAM = 131072,
    BDA_SCAN_MOD_1024QAM = 262144,
    BDA_SCAN_MOD_QPSK = 524288,
    BDA_SCAN_MOD_BPSK = 1048576,
    BDA_SCAN_MOD_OQPSK = 2097152,
    BDA_SCAN_MOD_8VSB = 4194304,
    BDA_SCAN_MOD_16VSB = 8388608,
    BDA_SCAN_MOD_AM_RADIO = 16777216,
    BDA_SCAN_MOD_FM_RADIO = 33554432,
    BDA_SCAN_MOD_8PSK = 67108864,
    BDA_SCAN_MOD_RF = 134217728,
    ScanModulationTypesMask_MCE_DigitalCable = 11,
    ScanModulationTypesMask_MCE_TerrestrialATSC = 23,
    ScanModulationTypesMask_MCE_AnalogTv = 28,
    ScanModulationTypesMask_MCE_All_TV = -1,
    ScanModulationTypesMask_DVBC = 75,
    BDA_SCAN_MOD_16APSK = 268435456,
    BDA_SCAN_MOD_32APSK = 536870912,
};
pub const BDA_SCAN_MOD_16QAM = ScanModulationTypes.BDA_SCAN_MOD_16QAM;
pub const BDA_SCAN_MOD_32QAM = ScanModulationTypes.BDA_SCAN_MOD_32QAM;
pub const BDA_SCAN_MOD_64QAM = ScanModulationTypes.BDA_SCAN_MOD_64QAM;
pub const BDA_SCAN_MOD_80QAM = ScanModulationTypes.BDA_SCAN_MOD_80QAM;
pub const BDA_SCAN_MOD_96QAM = ScanModulationTypes.BDA_SCAN_MOD_96QAM;
pub const BDA_SCAN_MOD_112QAM = ScanModulationTypes.BDA_SCAN_MOD_112QAM;
pub const BDA_SCAN_MOD_128QAM = ScanModulationTypes.BDA_SCAN_MOD_128QAM;
pub const BDA_SCAN_MOD_160QAM = ScanModulationTypes.BDA_SCAN_MOD_160QAM;
pub const BDA_SCAN_MOD_192QAM = ScanModulationTypes.BDA_SCAN_MOD_192QAM;
pub const BDA_SCAN_MOD_224QAM = ScanModulationTypes.BDA_SCAN_MOD_224QAM;
pub const BDA_SCAN_MOD_256QAM = ScanModulationTypes.BDA_SCAN_MOD_256QAM;
pub const BDA_SCAN_MOD_320QAM = ScanModulationTypes.BDA_SCAN_MOD_320QAM;
pub const BDA_SCAN_MOD_384QAM = ScanModulationTypes.BDA_SCAN_MOD_384QAM;
pub const BDA_SCAN_MOD_448QAM = ScanModulationTypes.BDA_SCAN_MOD_448QAM;
pub const BDA_SCAN_MOD_512QAM = ScanModulationTypes.BDA_SCAN_MOD_512QAM;
pub const BDA_SCAN_MOD_640QAM = ScanModulationTypes.BDA_SCAN_MOD_640QAM;
pub const BDA_SCAN_MOD_768QAM = ScanModulationTypes.BDA_SCAN_MOD_768QAM;
pub const BDA_SCAN_MOD_896QAM = ScanModulationTypes.BDA_SCAN_MOD_896QAM;
pub const BDA_SCAN_MOD_1024QAM = ScanModulationTypes.BDA_SCAN_MOD_1024QAM;
pub const BDA_SCAN_MOD_QPSK = ScanModulationTypes.BDA_SCAN_MOD_QPSK;
pub const BDA_SCAN_MOD_BPSK = ScanModulationTypes.BDA_SCAN_MOD_BPSK;
pub const BDA_SCAN_MOD_OQPSK = ScanModulationTypes.BDA_SCAN_MOD_OQPSK;
pub const BDA_SCAN_MOD_8VSB = ScanModulationTypes.BDA_SCAN_MOD_8VSB;
pub const BDA_SCAN_MOD_16VSB = ScanModulationTypes.BDA_SCAN_MOD_16VSB;
pub const BDA_SCAN_MOD_AM_RADIO = ScanModulationTypes.BDA_SCAN_MOD_AM_RADIO;
pub const BDA_SCAN_MOD_FM_RADIO = ScanModulationTypes.BDA_SCAN_MOD_FM_RADIO;
pub const BDA_SCAN_MOD_8PSK = ScanModulationTypes.BDA_SCAN_MOD_8PSK;
pub const BDA_SCAN_MOD_RF = ScanModulationTypes.BDA_SCAN_MOD_RF;
pub const ScanModulationTypesMask_MCE_DigitalCable = ScanModulationTypes.ScanModulationTypesMask_MCE_DigitalCable;
pub const ScanModulationTypesMask_MCE_TerrestrialATSC = ScanModulationTypes.ScanModulationTypesMask_MCE_TerrestrialATSC;
pub const ScanModulationTypesMask_MCE_AnalogTv = ScanModulationTypes.ScanModulationTypesMask_MCE_AnalogTv;
pub const ScanModulationTypesMask_MCE_All_TV = ScanModulationTypes.ScanModulationTypesMask_MCE_All_TV;
pub const ScanModulationTypesMask_DVBC = ScanModulationTypes.ScanModulationTypesMask_DVBC;
pub const BDA_SCAN_MOD_16APSK = ScanModulationTypes.BDA_SCAN_MOD_16APSK;
pub const BDA_SCAN_MOD_32APSK = ScanModulationTypes.BDA_SCAN_MOD_32APSK;

pub const SpectralInversion = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    AUTOMATIC = 1,
    NORMAL = 2,
    INVERTED = 3,
    MAX = 4,
};
pub const BDA_SPECTRAL_INVERSION_NOT_SET = SpectralInversion.NOT_SET;
pub const BDA_SPECTRAL_INVERSION_NOT_DEFINED = SpectralInversion.NOT_DEFINED;
pub const BDA_SPECTRAL_INVERSION_AUTOMATIC = SpectralInversion.AUTOMATIC;
pub const BDA_SPECTRAL_INVERSION_NORMAL = SpectralInversion.NORMAL;
pub const BDA_SPECTRAL_INVERSION_INVERTED = SpectralInversion.INVERTED;
pub const BDA_SPECTRAL_INVERSION_MAX = SpectralInversion.MAX;

pub const Polarisation = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    LINEAR_H = 1,
    LINEAR_V = 2,
    CIRCULAR_L = 3,
    CIRCULAR_R = 4,
    MAX = 5,
};
pub const BDA_POLARISATION_NOT_SET = Polarisation.NOT_SET;
pub const BDA_POLARISATION_NOT_DEFINED = Polarisation.NOT_DEFINED;
pub const BDA_POLARISATION_LINEAR_H = Polarisation.LINEAR_H;
pub const BDA_POLARISATION_LINEAR_V = Polarisation.LINEAR_V;
pub const BDA_POLARISATION_CIRCULAR_L = Polarisation.CIRCULAR_L;
pub const BDA_POLARISATION_CIRCULAR_R = Polarisation.CIRCULAR_R;
pub const BDA_POLARISATION_MAX = Polarisation.MAX;

pub const LNB_Source = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    A = 1,
    B = 2,
    C = 3,
    D = 4,
    MAX = 5,
};
pub const BDA_LNB_SOURCE_NOT_SET = LNB_Source.NOT_SET;
pub const BDA_LNB_SOURCE_NOT_DEFINED = LNB_Source.NOT_DEFINED;
pub const BDA_LNB_SOURCE_A = LNB_Source.A;
pub const BDA_LNB_SOURCE_B = LNB_Source.B;
pub const BDA_LNB_SOURCE_C = LNB_Source.C;
pub const BDA_LNB_SOURCE_D = LNB_Source.D;
pub const BDA_LNB_SOURCE_MAX = LNB_Source.MAX;

pub const GuardInterval = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    @"1_32" = 1,
    @"1_16" = 2,
    @"1_8" = 3,
    @"1_4" = 4,
    @"1_128" = 5,
    @"19_128" = 6,
    @"19_256" = 7,
    MAX = 8,
};
pub const BDA_GUARD_NOT_SET = GuardInterval.NOT_SET;
pub const BDA_GUARD_NOT_DEFINED = GuardInterval.NOT_DEFINED;
pub const BDA_GUARD_1_32 = GuardInterval.@"1_32";
pub const BDA_GUARD_1_16 = GuardInterval.@"1_16";
pub const BDA_GUARD_1_8 = GuardInterval.@"1_8";
pub const BDA_GUARD_1_4 = GuardInterval.@"1_4";
pub const BDA_GUARD_1_128 = GuardInterval.@"1_128";
pub const BDA_GUARD_19_128 = GuardInterval.@"19_128";
pub const BDA_GUARD_19_256 = GuardInterval.@"19_256";
pub const BDA_GUARD_MAX = GuardInterval.MAX;

pub const HierarchyAlpha = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    @"1" = 1,
    @"2" = 2,
    @"4" = 3,
    MAX = 4,
};
pub const BDA_HALPHA_NOT_SET = HierarchyAlpha.NOT_SET;
pub const BDA_HALPHA_NOT_DEFINED = HierarchyAlpha.NOT_DEFINED;
pub const BDA_HALPHA_1 = HierarchyAlpha.@"1";
pub const BDA_HALPHA_2 = HierarchyAlpha.@"2";
pub const BDA_HALPHA_4 = HierarchyAlpha.@"4";
pub const BDA_HALPHA_MAX = HierarchyAlpha.MAX;

pub const TransmissionMode = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    @"2K" = 1,
    @"8K" = 2,
    @"4K" = 3,
    @"2K_INTERLEAVED" = 4,
    @"4K_INTERLEAVED" = 5,
    @"1K" = 6,
    @"16K" = 7,
    @"32K" = 8,
    MAX = 9,
};
pub const BDA_XMIT_MODE_NOT_SET = TransmissionMode.NOT_SET;
pub const BDA_XMIT_MODE_NOT_DEFINED = TransmissionMode.NOT_DEFINED;
pub const BDA_XMIT_MODE_2K = TransmissionMode.@"2K";
pub const BDA_XMIT_MODE_8K = TransmissionMode.@"8K";
pub const BDA_XMIT_MODE_4K = TransmissionMode.@"4K";
pub const BDA_XMIT_MODE_2K_INTERLEAVED = TransmissionMode.@"2K_INTERLEAVED";
pub const BDA_XMIT_MODE_4K_INTERLEAVED = TransmissionMode.@"4K_INTERLEAVED";
pub const BDA_XMIT_MODE_1K = TransmissionMode.@"1K";
pub const BDA_XMIT_MODE_16K = TransmissionMode.@"16K";
pub const BDA_XMIT_MODE_32K = TransmissionMode.@"32K";
pub const BDA_XMIT_MODE_MAX = TransmissionMode.MAX;

pub const RollOff = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    @"20" = 1,
    @"25" = 2,
    @"35" = 3,
    MAX = 4,
};
pub const BDA_ROLL_OFF_NOT_SET = RollOff.NOT_SET;
pub const BDA_ROLL_OFF_NOT_DEFINED = RollOff.NOT_DEFINED;
pub const BDA_ROLL_OFF_20 = RollOff.@"20";
pub const BDA_ROLL_OFF_25 = RollOff.@"25";
pub const BDA_ROLL_OFF_35 = RollOff.@"35";
pub const BDA_ROLL_OFF_MAX = RollOff.MAX;

pub const Pilot = enum(i32) {
    NOT_SET = -1,
    NOT_DEFINED = 0,
    OFF = 1,
    ON = 2,
    MAX = 3,
};
pub const BDA_PILOT_NOT_SET = Pilot.NOT_SET;
pub const BDA_PILOT_NOT_DEFINED = Pilot.NOT_DEFINED;
pub const BDA_PILOT_OFF = Pilot.OFF;
pub const BDA_PILOT_ON = Pilot.ON;
pub const BDA_PILOT_MAX = Pilot.MAX;

pub const BDA_SIGNAL_TIMEOUTS = extern struct {
    ulCarrierTimeoutMs: u32,
    ulScanningTimeoutMs: u32,
    ulTuningTimeoutMs: u32,
};

pub const BDA_Frequency = enum(i32) {
    SET = -1,
    DEFINED = 0,
};
pub const BDA_FREQUENCY_NOT_SET = BDA_Frequency.SET;
pub const BDA_FREQUENCY_NOT_DEFINED = BDA_Frequency.DEFINED;

pub const BDA_Range = enum(i32) {
    SET = -1,
    DEFINED = 0,
};
pub const BDA_RANGE_NOT_SET = BDA_Range.SET;
pub const BDA_RANGE_NOT_DEFINED = BDA_Range.DEFINED;

pub const BDA_Channel_Bandwidth = enum(i32) {
    SET = -1,
    DEFINED = 0,
};
pub const BDA_CHAN_BANDWITH_NOT_SET = BDA_Channel_Bandwidth.SET;
pub const BDA_CHAN_BANDWITH_NOT_DEFINED = BDA_Channel_Bandwidth.DEFINED;

pub const BDA_Frequency_Multiplier = enum(i32) {
    SET = -1,
    DEFINED = 0,
};
pub const BDA_FREQUENCY_MULTIPLIER_NOT_SET = BDA_Frequency_Multiplier.SET;
pub const BDA_FREQUENCY_MULTIPLIER_NOT_DEFINED = BDA_Frequency_Multiplier.DEFINED;

pub const BDA_Comp_Flags = enum(i32) {
    NOT_DEFINED = 0,
    EXCLUDE_TS_FROM_TR = 1,
    INCLUDE_LOCATOR_IN_TR = 2,
    INCLUDE_COMPONENTS_IN_TR = 4,
};
pub const BDACOMP_NOT_DEFINED = BDA_Comp_Flags.NOT_DEFINED;
pub const BDACOMP_EXCLUDE_TS_FROM_TR = BDA_Comp_Flags.EXCLUDE_TS_FROM_TR;
pub const BDACOMP_INCLUDE_LOCATOR_IN_TR = BDA_Comp_Flags.INCLUDE_LOCATOR_IN_TR;
pub const BDACOMP_INCLUDE_COMPONENTS_IN_TR = BDA_Comp_Flags.INCLUDE_COMPONENTS_IN_TR;

pub const ApplicationTypeType = enum(i32) {
    ConditionalAccess = 0,
    POD_Host_Binding_Information = 1,
    IPService = 2,
    NetworkInterface_SCTE55_2 = 3,
    NetworkInterface_SCTE55_1 = 4,
    CopyProtection = 5,
    Diagnostic = 6,
    Undesignated = 7,
    Reserved = 8,
};
pub const SCTE28_ConditionalAccess = ApplicationTypeType.ConditionalAccess;
pub const SCTE28_POD_Host_Binding_Information = ApplicationTypeType.POD_Host_Binding_Information;
pub const SCTE28_IPService = ApplicationTypeType.IPService;
pub const SCTE28_NetworkInterface_SCTE55_2 = ApplicationTypeType.NetworkInterface_SCTE55_2;
pub const SCTE28_NetworkInterface_SCTE55_1 = ApplicationTypeType.NetworkInterface_SCTE55_1;
pub const SCTE28_CopyProtection = ApplicationTypeType.CopyProtection;
pub const SCTE28_Diagnostic = ApplicationTypeType.Diagnostic;
pub const SCTE28_Undesignated = ApplicationTypeType.Undesignated;
pub const SCTE28_Reserved = ApplicationTypeType.Reserved;

pub const BDA_CONDITIONALACCESS_REQUESTTYPE = enum(i32) {
    UNSPECIFIED = 0,
    NOT_POSSIBLE = 1,
    POSSIBLE = 2,
    POSSIBLE_NO_STREAMING_DISRUPTION = 3,
};
pub const CONDITIONALACCESS_ACCESS_UNSPECIFIED = BDA_CONDITIONALACCESS_REQUESTTYPE.UNSPECIFIED;
pub const CONDITIONALACCESS_ACCESS_NOT_POSSIBLE = BDA_CONDITIONALACCESS_REQUESTTYPE.NOT_POSSIBLE;
pub const CONDITIONALACCESS_ACCESS_POSSIBLE = BDA_CONDITIONALACCESS_REQUESTTYPE.POSSIBLE;
pub const CONDITIONALACCESS_ACCESS_POSSIBLE_NO_STREAMING_DISRUPTION = BDA_CONDITIONALACCESS_REQUESTTYPE.POSSIBLE_NO_STREAMING_DISRUPTION;

pub const BDA_CONDITIONALACCESS_MMICLOSEREASON = enum(i32) {
    UNSPECIFIED = 0,
    CLOSED_ITSELF = 1,
    TUNER_REQUESTED_CLOSE = 2,
    DIALOG_TIMEOUT = 3,
    DIALOG_FOCUS_CHANGE = 4,
    DIALOG_USER_DISMISSED = 5,
    DIALOG_USER_NOT_AVAILABLE = 6,
};
pub const CONDITIONALACCESS_UNSPECIFIED = BDA_CONDITIONALACCESS_MMICLOSEREASON.UNSPECIFIED;
pub const CONDITIONALACCESS_CLOSED_ITSELF = BDA_CONDITIONALACCESS_MMICLOSEREASON.CLOSED_ITSELF;
pub const CONDITIONALACCESS_TUNER_REQUESTED_CLOSE = BDA_CONDITIONALACCESS_MMICLOSEREASON.TUNER_REQUESTED_CLOSE;
pub const CONDITIONALACCESS_DIALOG_TIMEOUT = BDA_CONDITIONALACCESS_MMICLOSEREASON.DIALOG_TIMEOUT;
pub const CONDITIONALACCESS_DIALOG_FOCUS_CHANGE = BDA_CONDITIONALACCESS_MMICLOSEREASON.DIALOG_FOCUS_CHANGE;
pub const CONDITIONALACCESS_DIALOG_USER_DISMISSED = BDA_CONDITIONALACCESS_MMICLOSEREASON.DIALOG_USER_DISMISSED;
pub const CONDITIONALACCESS_DIALOG_USER_NOT_AVAILABLE = BDA_CONDITIONALACCESS_MMICLOSEREASON.DIALOG_USER_NOT_AVAILABLE;

pub const BDA_CONDITIONALACCESS_SESSION_RESULT = enum(i32) {
    SUCCESSFULL = 0,
    ENDED_NOCHANGE = 1,
    ABORTED = 2,
};
pub const CONDITIONALACCESS_SUCCESSFULL = BDA_CONDITIONALACCESS_SESSION_RESULT.SUCCESSFULL;
pub const CONDITIONALACCESS_ENDED_NOCHANGE = BDA_CONDITIONALACCESS_SESSION_RESULT.ENDED_NOCHANGE;
pub const CONDITIONALACCESS_ABORTED = BDA_CONDITIONALACCESS_SESSION_RESULT.ABORTED;

pub const BDA_DISCOVERY_STATE = enum(i32) {
    UNSPECIFIED = 0,
    REQUIRED = 1,
    COMPLETE = 2,
};
pub const BDA_DISCOVERY_UNSPECIFIED = BDA_DISCOVERY_STATE.UNSPECIFIED;
pub const BDA_DISCOVERY_REQUIRED = BDA_DISCOVERY_STATE.REQUIRED;
pub const BDA_DISCOVERY_COMPLETE = BDA_DISCOVERY_STATE.COMPLETE;

pub const SmartCardStatusType = enum(i32) {
    Inserted = 0,
    Removed = 1,
    Error = 2,
    DataChanged = 3,
    FirmwareUpgrade = 4,
};
pub const CardInserted = SmartCardStatusType.Inserted;
pub const CardRemoved = SmartCardStatusType.Removed;
pub const CardError = SmartCardStatusType.Error;
pub const CardDataChanged = SmartCardStatusType.DataChanged;
pub const CardFirmwareUpgrade = SmartCardStatusType.FirmwareUpgrade;

pub const SmartCardAssociationType = enum(i32) {
    NotAssociated = 0,
    Associated = 1,
    AssociationUnknown = 2,
};
pub const NotAssociated = SmartCardAssociationType.NotAssociated;
pub const Associated = SmartCardAssociationType.Associated;
pub const AssociationUnknown = SmartCardAssociationType.AssociationUnknown;

pub const LocationCodeSchemeType = enum(i32) {
    @"8" = 0,
};
pub const SCTE_18 = LocationCodeSchemeType.@"8";

pub const EALocationCodeType = extern struct {
    LocationCodeScheme: LocationCodeSchemeType,
    state_code: u8,
    county_subdivision: u8,
    county_code: u16,
};

pub const EntitlementType = enum(i32) {
    Entitled = 0,
    NotEntitled = 1,
    TechnicalFailure = 2,
};
pub const Entitled = EntitlementType.Entitled;
pub const NotEntitled = EntitlementType.NotEntitled;
pub const TechnicalFailure = EntitlementType.TechnicalFailure;

pub const UICloseReasonType = enum(i32) {
    NotReady = 0,
    UserClosed = 1,
    SystemClosed = 2,
    DeviceClosed = 3,
    ErrorClosed = 4,
};
pub const NotReady = UICloseReasonType.NotReady;
pub const UserClosed = UICloseReasonType.UserClosed;
pub const SystemClosed = UICloseReasonType.SystemClosed;
pub const DeviceClosed = UICloseReasonType.DeviceClosed;
pub const ErrorClosed = UICloseReasonType.ErrorClosed;

pub const SmartCardApplication = extern struct {
    ApplicationType: ApplicationTypeType,
    ApplicationVersion: u16,
    pbstrApplicationName: ?BSTR,
    pbstrApplicationURL: ?BSTR,
};

pub const BDA_DrmPairingError = enum(i32) {
    Succeeded = 0,
    HardwareFailure = 1,
    NeedRevocationData = 2,
    NeedIndiv = 3,
    Other = 4,
    DrmInitFailed = 5,
    DrmNotPaired = 6,
    DrmRePairSoon = 7,
    Aborted = 8,
    NeedSDKUpdate = 9,
};
pub const BDA_DrmPairing_Succeeded = BDA_DrmPairingError.Succeeded;
pub const BDA_DrmPairing_HardwareFailure = BDA_DrmPairingError.HardwareFailure;
pub const BDA_DrmPairing_NeedRevocationData = BDA_DrmPairingError.NeedRevocationData;
pub const BDA_DrmPairing_NeedIndiv = BDA_DrmPairingError.NeedIndiv;
pub const BDA_DrmPairing_Other = BDA_DrmPairingError.Other;
pub const BDA_DrmPairing_DrmInitFailed = BDA_DrmPairingError.DrmInitFailed;
pub const BDA_DrmPairing_DrmNotPaired = BDA_DrmPairingError.DrmNotPaired;
pub const BDA_DrmPairing_DrmRePairSoon = BDA_DrmPairingError.DrmRePairSoon;
pub const BDA_DrmPairing_Aborted = BDA_DrmPairingError.Aborted;
pub const BDA_DrmPairing_NeedSDKUpdate = BDA_DrmPairingError.NeedSDKUpdate;

const IID_IBDA_NetworkProvider_Value = Guid.initString("fd501041-8ebe-11ce-8183-00aa00577da2");
pub const IID_IBDA_NetworkProvider = &IID_IBDA_NetworkProvider_Value;
pub const IBDA_NetworkProvider = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        PutSignalSource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NetworkProvider,
                ulSignalSource: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NetworkProvider,
                ulSignalSource: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSignalSource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NetworkProvider,
                pulSignalSource: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NetworkProvider,
                pulSignalSource: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNetworkType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NetworkProvider,
                pguidNetworkType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NetworkProvider,
                pguidNetworkType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PutTuningSpace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NetworkProvider,
                guidTuningSpace: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NetworkProvider,
                guidTuningSpace: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTuningSpace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NetworkProvider,
                pguidTuingSpace: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NetworkProvider,
                pguidTuingSpace: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterDeviceFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NetworkProvider,
                pUnkFilterControl: ?*IUnknown,
                ppvRegisitrationContext: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NetworkProvider,
                pUnkFilterControl: ?*IUnknown,
                ppvRegisitrationContext: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnRegisterDeviceFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NetworkProvider,
                pvRegistrationContext: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NetworkProvider,
                pvRegistrationContext: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NetworkProvider_PutSignalSource(self: *const T, ulSignalSource: u32) HRESULT {
                return @as(*const IBDA_NetworkProvider.VTable, @ptrCast(self.vtable)).PutSignalSource(@as(*const IBDA_NetworkProvider, @ptrCast(self)), ulSignalSource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NetworkProvider_GetSignalSource(self: *const T, pulSignalSource: ?*u32) HRESULT {
                return @as(*const IBDA_NetworkProvider.VTable, @ptrCast(self.vtable)).GetSignalSource(@as(*const IBDA_NetworkProvider, @ptrCast(self)), pulSignalSource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NetworkProvider_GetNetworkType(self: *const T, pguidNetworkType: ?*Guid) HRESULT {
                return @as(*const IBDA_NetworkProvider.VTable, @ptrCast(self.vtable)).GetNetworkType(@as(*const IBDA_NetworkProvider, @ptrCast(self)), pguidNetworkType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NetworkProvider_PutTuningSpace(self: *const T, guidTuningSpace: ?*const Guid) HRESULT {
                return @as(*const IBDA_NetworkProvider.VTable, @ptrCast(self.vtable)).PutTuningSpace(@as(*const IBDA_NetworkProvider, @ptrCast(self)), guidTuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NetworkProvider_GetTuningSpace(self: *const T, pguidTuingSpace: ?*Guid) HRESULT {
                return @as(*const IBDA_NetworkProvider.VTable, @ptrCast(self.vtable)).GetTuningSpace(@as(*const IBDA_NetworkProvider, @ptrCast(self)), pguidTuingSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NetworkProvider_RegisterDeviceFilter(self: *const T, pUnkFilterControl: ?*IUnknown, ppvRegisitrationContext: ?*u32) HRESULT {
                return @as(*const IBDA_NetworkProvider.VTable, @ptrCast(self.vtable)).RegisterDeviceFilter(@as(*const IBDA_NetworkProvider, @ptrCast(self)), pUnkFilterControl, ppvRegisitrationContext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NetworkProvider_UnRegisterDeviceFilter(self: *const T, pvRegistrationContext: u32) HRESULT {
                return @as(*const IBDA_NetworkProvider.VTable, @ptrCast(self.vtable)).UnRegisterDeviceFilter(@as(*const IBDA_NetworkProvider, @ptrCast(self)), pvRegistrationContext);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_EthernetFilter_Value = Guid.initString("71985f43-1ca1-11d3-9cc8-00c04f7971e0");
pub const IID_IBDA_EthernetFilter = &IID_IBDA_EthernetFilter_Value;
pub const IBDA_EthernetFilter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetMulticastListSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_EthernetFilter,
                pulcbAddresses: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_EthernetFilter,
                pulcbAddresses: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PutMulticastList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_EthernetFilter,
                ulcbAddresses: u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_EthernetFilter,
                ulcbAddresses: u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMulticastList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_EthernetFilter,
                pulcbAddresses: ?*u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_EthernetFilter,
                pulcbAddresses: ?*u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PutMulticastMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_EthernetFilter,
                ulModeMask: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_EthernetFilter,
                ulModeMask: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMulticastMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_EthernetFilter,
                pulModeMask: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_EthernetFilter,
                pulModeMask: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_EthernetFilter_GetMulticastListSize(self: *const T, pulcbAddresses: ?*u32) HRESULT {
                return @as(*const IBDA_EthernetFilter.VTable, @ptrCast(self.vtable)).GetMulticastListSize(@as(*const IBDA_EthernetFilter, @ptrCast(self)), pulcbAddresses);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_EthernetFilter_PutMulticastList(self: *const T, ulcbAddresses: u32, pAddressList: [*:0]u8) HRESULT {
                return @as(*const IBDA_EthernetFilter.VTable, @ptrCast(self.vtable)).PutMulticastList(@as(*const IBDA_EthernetFilter, @ptrCast(self)), ulcbAddresses, pAddressList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_EthernetFilter_GetMulticastList(self: *const T, pulcbAddresses: ?*u32, pAddressList: [*:0]u8) HRESULT {
                return @as(*const IBDA_EthernetFilter.VTable, @ptrCast(self.vtable)).GetMulticastList(@as(*const IBDA_EthernetFilter, @ptrCast(self)), pulcbAddresses, pAddressList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_EthernetFilter_PutMulticastMode(self: *const T, ulModeMask: u32) HRESULT {
                return @as(*const IBDA_EthernetFilter.VTable, @ptrCast(self.vtable)).PutMulticastMode(@as(*const IBDA_EthernetFilter, @ptrCast(self)), ulModeMask);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_EthernetFilter_GetMulticastMode(self: *const T, pulModeMask: ?*u32) HRESULT {
                return @as(*const IBDA_EthernetFilter.VTable, @ptrCast(self.vtable)).GetMulticastMode(@as(*const IBDA_EthernetFilter, @ptrCast(self)), pulModeMask);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_IPV4Filter_Value = Guid.initString("71985f44-1ca1-11d3-9cc8-00c04f7971e0");
pub const IID_IBDA_IPV4Filter = &IID_IBDA_IPV4Filter_Value;
pub const IBDA_IPV4Filter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetMulticastListSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV4Filter,
                pulcbAddresses: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV4Filter,
                pulcbAddresses: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PutMulticastList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV4Filter,
                ulcbAddresses: u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV4Filter,
                ulcbAddresses: u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMulticastList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV4Filter,
                pulcbAddresses: ?*u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV4Filter,
                pulcbAddresses: ?*u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PutMulticastMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV4Filter,
                ulModeMask: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV4Filter,
                ulModeMask: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMulticastMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV4Filter,
                pulModeMask: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV4Filter,
                pulModeMask: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV4Filter_GetMulticastListSize(self: *const T, pulcbAddresses: ?*u32) HRESULT {
                return @as(*const IBDA_IPV4Filter.VTable, @ptrCast(self.vtable)).GetMulticastListSize(@as(*const IBDA_IPV4Filter, @ptrCast(self)), pulcbAddresses);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV4Filter_PutMulticastList(self: *const T, ulcbAddresses: u32, pAddressList: [*:0]u8) HRESULT {
                return @as(*const IBDA_IPV4Filter.VTable, @ptrCast(self.vtable)).PutMulticastList(@as(*const IBDA_IPV4Filter, @ptrCast(self)), ulcbAddresses, pAddressList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV4Filter_GetMulticastList(self: *const T, pulcbAddresses: ?*u32, pAddressList: [*:0]u8) HRESULT {
                return @as(*const IBDA_IPV4Filter.VTable, @ptrCast(self.vtable)).GetMulticastList(@as(*const IBDA_IPV4Filter, @ptrCast(self)), pulcbAddresses, pAddressList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV4Filter_PutMulticastMode(self: *const T, ulModeMask: u32) HRESULT {
                return @as(*const IBDA_IPV4Filter.VTable, @ptrCast(self.vtable)).PutMulticastMode(@as(*const IBDA_IPV4Filter, @ptrCast(self)), ulModeMask);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV4Filter_GetMulticastMode(self: *const T, pulModeMask: ?*u32) HRESULT {
                return @as(*const IBDA_IPV4Filter.VTable, @ptrCast(self.vtable)).GetMulticastMode(@as(*const IBDA_IPV4Filter, @ptrCast(self)), pulModeMask);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_IPV6Filter_Value = Guid.initString("e1785a74-2a23-4fb3-9245-a8f88017ef33");
pub const IID_IBDA_IPV6Filter = &IID_IBDA_IPV6Filter_Value;
pub const IBDA_IPV6Filter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetMulticastListSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV6Filter,
                pulcbAddresses: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV6Filter,
                pulcbAddresses: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PutMulticastList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV6Filter,
                ulcbAddresses: u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV6Filter,
                ulcbAddresses: u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMulticastList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV6Filter,
                pulcbAddresses: ?*u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV6Filter,
                pulcbAddresses: ?*u32,
                pAddressList: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PutMulticastMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV6Filter,
                ulModeMask: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV6Filter,
                ulModeMask: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMulticastMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPV6Filter,
                pulModeMask: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPV6Filter,
                pulModeMask: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV6Filter_GetMulticastListSize(self: *const T, pulcbAddresses: ?*u32) HRESULT {
                return @as(*const IBDA_IPV6Filter.VTable, @ptrCast(self.vtable)).GetMulticastListSize(@as(*const IBDA_IPV6Filter, @ptrCast(self)), pulcbAddresses);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV6Filter_PutMulticastList(self: *const T, ulcbAddresses: u32, pAddressList: [*:0]u8) HRESULT {
                return @as(*const IBDA_IPV6Filter.VTable, @ptrCast(self.vtable)).PutMulticastList(@as(*const IBDA_IPV6Filter, @ptrCast(self)), ulcbAddresses, pAddressList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV6Filter_GetMulticastList(self: *const T, pulcbAddresses: ?*u32, pAddressList: [*:0]u8) HRESULT {
                return @as(*const IBDA_IPV6Filter.VTable, @ptrCast(self.vtable)).GetMulticastList(@as(*const IBDA_IPV6Filter, @ptrCast(self)), pulcbAddresses, pAddressList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV6Filter_PutMulticastMode(self: *const T, ulModeMask: u32) HRESULT {
                return @as(*const IBDA_IPV6Filter.VTable, @ptrCast(self.vtable)).PutMulticastMode(@as(*const IBDA_IPV6Filter, @ptrCast(self)), ulModeMask);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPV6Filter_GetMulticastMode(self: *const T, pulModeMask: ?*u32) HRESULT {
                return @as(*const IBDA_IPV6Filter.VTable, @ptrCast(self.vtable)).GetMulticastMode(@as(*const IBDA_IPV6Filter, @ptrCast(self)), pulModeMask);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_DeviceControl_Value = Guid.initString("fd0a5af3-b41d-11d2-9c95-00c04f7971e0");
pub const IID_IBDA_DeviceControl = &IID_IBDA_DeviceControl_Value;
pub const IBDA_DeviceControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        StartChanges: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DeviceControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DeviceControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CheckChanges: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DeviceControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DeviceControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CommitChanges: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DeviceControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DeviceControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetChangeState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DeviceControl,
                pState: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DeviceControl,
                pState: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DeviceControl_StartChanges(self: *const T) HRESULT {
                return @as(*const IBDA_DeviceControl.VTable, @ptrCast(self.vtable)).StartChanges(@as(*const IBDA_DeviceControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DeviceControl_CheckChanges(self: *const T) HRESULT {
                return @as(*const IBDA_DeviceControl.VTable, @ptrCast(self.vtable)).CheckChanges(@as(*const IBDA_DeviceControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DeviceControl_CommitChanges(self: *const T) HRESULT {
                return @as(*const IBDA_DeviceControl.VTable, @ptrCast(self.vtable)).CommitChanges(@as(*const IBDA_DeviceControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DeviceControl_GetChangeState(self: *const T, pState: ?*u32) HRESULT {
                return @as(*const IBDA_DeviceControl.VTable, @ptrCast(self.vtable)).GetChangeState(@as(*const IBDA_DeviceControl, @ptrCast(self)), pState);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_PinControl_Value = Guid.initString("0ded49d5-a8b7-4d5d-97a1-12b0c195874d");
pub const IID_IBDA_PinControl = &IID_IBDA_PinControl_Value;
pub const IBDA_PinControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetPinID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_PinControl,
                pulPinID: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_PinControl,
                pulPinID: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPinType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_PinControl,
                pulPinType: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_PinControl,
                pulPinType: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegistrationContext: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_PinControl,
                pulRegistrationCtx: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_PinControl,
                pulRegistrationCtx: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_PinControl_GetPinID(self: *const T, pulPinID: ?*u32) HRESULT {
                return @as(*const IBDA_PinControl.VTable, @ptrCast(self.vtable)).GetPinID(@as(*const IBDA_PinControl, @ptrCast(self)), pulPinID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_PinControl_GetPinType(self: *const T, pulPinType: ?*u32) HRESULT {
                return @as(*const IBDA_PinControl.VTable, @ptrCast(self.vtable)).GetPinType(@as(*const IBDA_PinControl, @ptrCast(self)), pulPinType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_PinControl_RegistrationContext(self: *const T, pulRegistrationCtx: ?*u32) HRESULT {
                return @as(*const IBDA_PinControl.VTable, @ptrCast(self.vtable)).RegistrationContext(@as(*const IBDA_PinControl, @ptrCast(self)), pulRegistrationCtx);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_SignalProperties_Value = Guid.initString("d2f1644b-b409-11d2-bc69-00a0c9ee9e16");
pub const IID_IBDA_SignalProperties = &IID_IBDA_SignalProperties_Value;
pub const IBDA_SignalProperties = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        PutNetworkType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_SignalProperties,
                guidNetworkType: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_SignalProperties,
                guidNetworkType: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNetworkType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_SignalProperties,
                pguidNetworkType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_SignalProperties,
                pguidNetworkType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PutSignalSource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_SignalProperties,
                ulSignalSource: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_SignalProperties,
                ulSignalSource: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSignalSource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_SignalProperties,
                pulSignalSource: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_SignalProperties,
                pulSignalSource: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PutTuningSpace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_SignalProperties,
                guidTuningSpace: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_SignalProperties,
                guidTuningSpace: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTuningSpace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_SignalProperties,
                pguidTuingSpace: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_SignalProperties,
                pguidTuingSpace: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalProperties_PutNetworkType(self: *const T, guidNetworkType: ?*const Guid) HRESULT {
                return @as(*const IBDA_SignalProperties.VTable, @ptrCast(self.vtable)).PutNetworkType(@as(*const IBDA_SignalProperties, @ptrCast(self)), guidNetworkType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalProperties_GetNetworkType(self: *const T, pguidNetworkType: ?*Guid) HRESULT {
                return @as(*const IBDA_SignalProperties.VTable, @ptrCast(self.vtable)).GetNetworkType(@as(*const IBDA_SignalProperties, @ptrCast(self)), pguidNetworkType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalProperties_PutSignalSource(self: *const T, ulSignalSource: u32) HRESULT {
                return @as(*const IBDA_SignalProperties.VTable, @ptrCast(self.vtable)).PutSignalSource(@as(*const IBDA_SignalProperties, @ptrCast(self)), ulSignalSource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalProperties_GetSignalSource(self: *const T, pulSignalSource: ?*u32) HRESULT {
                return @as(*const IBDA_SignalProperties.VTable, @ptrCast(self.vtable)).GetSignalSource(@as(*const IBDA_SignalProperties, @ptrCast(self)), pulSignalSource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalProperties_PutTuningSpace(self: *const T, guidTuningSpace: ?*const Guid) HRESULT {
                return @as(*const IBDA_SignalProperties.VTable, @ptrCast(self.vtable)).PutTuningSpace(@as(*const IBDA_SignalProperties, @ptrCast(self)), guidTuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalProperties_GetTuningSpace(self: *const T, pguidTuingSpace: ?*Guid) HRESULT {
                return @as(*const IBDA_SignalProperties.VTable, @ptrCast(self.vtable)).GetTuningSpace(@as(*const IBDA_SignalProperties, @ptrCast(self)), pguidTuingSpace);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_SignalStatistics_Value = Guid.initString("1347d106-cf3a-428a-a5cb-ac0d9a2a4338");
pub const IID_IBDA_SignalStatistics = &IID_IBDA_SignalStatistics_Value;
pub const IBDA_SignalStatistics = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SignalStrength: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                lDbStrength: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                lDbStrength: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SignalStrength: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                plDbStrength: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                plDbStrength: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SignalQuality: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                lPercentQuality: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                lPercentQuality: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SignalQuality: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                plPercentQuality: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                plPercentQuality: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SignalPresent: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                fPresent: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                fPresent: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SignalPresent: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                pfPresent: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                pfPresent: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SignalLocked: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                fLocked: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                fLocked: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SignalLocked: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                pfLocked: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                pfLocked: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SampleTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                lmsSampleTime: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                lmsSampleTime: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SampleTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_SignalStatistics,
                plmsSampleTime: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_SignalStatistics,
                plmsSampleTime: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_put_SignalStrength(self: *const T, lDbStrength: i32) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).put_SignalStrength(@as(*const IBDA_SignalStatistics, @ptrCast(self)), lDbStrength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_get_SignalStrength(self: *const T, plDbStrength: ?*i32) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).get_SignalStrength(@as(*const IBDA_SignalStatistics, @ptrCast(self)), plDbStrength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_put_SignalQuality(self: *const T, lPercentQuality: i32) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).put_SignalQuality(@as(*const IBDA_SignalStatistics, @ptrCast(self)), lPercentQuality);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_get_SignalQuality(self: *const T, plPercentQuality: ?*i32) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).get_SignalQuality(@as(*const IBDA_SignalStatistics, @ptrCast(self)), plPercentQuality);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_put_SignalPresent(self: *const T, fPresent: BOOLEAN) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).put_SignalPresent(@as(*const IBDA_SignalStatistics, @ptrCast(self)), fPresent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_get_SignalPresent(self: *const T, pfPresent: ?*u8) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).get_SignalPresent(@as(*const IBDA_SignalStatistics, @ptrCast(self)), pfPresent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_put_SignalLocked(self: *const T, fLocked: BOOLEAN) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).put_SignalLocked(@as(*const IBDA_SignalStatistics, @ptrCast(self)), fLocked);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_get_SignalLocked(self: *const T, pfLocked: ?*u8) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).get_SignalLocked(@as(*const IBDA_SignalStatistics, @ptrCast(self)), pfLocked);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_put_SampleTime(self: *const T, lmsSampleTime: i32) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).put_SampleTime(@as(*const IBDA_SignalStatistics, @ptrCast(self)), lmsSampleTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_SignalStatistics_get_SampleTime(self: *const T, plmsSampleTime: ?*i32) HRESULT {
                return @as(*const IBDA_SignalStatistics.VTable, @ptrCast(self.vtable)).get_SampleTime(@as(*const IBDA_SignalStatistics, @ptrCast(self)), plmsSampleTime);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_Topology_Value = Guid.initString("79b56888-7fea-4690-b45d-38fd3c7849be");
pub const IID_IBDA_Topology = &IID_IBDA_Topology_Value;
pub const IBDA_Topology = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetNodeTypes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                pulcNodeTypes: ?*u32,
                ulcNodeTypesMax: u32,
                rgulNodeTypes: [*]u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                pulcNodeTypes: ?*u32,
                ulcNodeTypesMax: u32,
                rgulNodeTypes: [*]u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNodeDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                ulcNodeDescriptors: ?*u32,
                ulcNodeDescriptorsMax: u32,
                rgNodeDescriptors: [*]BDANODE_DESCRIPTOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                ulcNodeDescriptors: ?*u32,
                ulcNodeDescriptorsMax: u32,
                rgNodeDescriptors: [*]BDANODE_DESCRIPTOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNodeInterfaces: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                ulNodeType: u32,
                pulcInterfaces: ?*u32,
                ulcInterfacesMax: u32,
                rgguidInterfaces: [*]Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                ulNodeType: u32,
                pulcInterfaces: ?*u32,
                ulcInterfacesMax: u32,
                rgguidInterfaces: [*]Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPinTypes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                pulcPinTypes: ?*u32,
                ulcPinTypesMax: u32,
                rgulPinTypes: [*]u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                pulcPinTypes: ?*u32,
                ulcPinTypesMax: u32,
                rgulPinTypes: [*]u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTemplateConnections: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                pulcConnections: ?*u32,
                ulcConnectionsMax: u32,
                rgConnections: [*]BDA_TEMPLATE_CONNECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                pulcConnections: ?*u32,
                ulcConnectionsMax: u32,
                rgConnections: [*]BDA_TEMPLATE_CONNECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreatePin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                ulPinType: u32,
                pulPinId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                ulPinType: u32,
                pulPinId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DeletePin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                ulPinId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                ulPinId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMediaType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                ulPinId: u32,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                ulPinId: u32,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMedium: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                ulPinId: u32,
                pMedium: ?*REGPINMEDIUM,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                ulPinId: u32,
                pMedium: ?*REGPINMEDIUM,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateTopology: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                ulInputPinId: u32,
                ulOutputPinId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                ulInputPinId: u32,
                ulOutputPinId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetControlNode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Topology,
                ulInputPinId: u32,
                ulOutputPinId: u32,
                ulNodeType: u32,
                ppControlNode: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Topology,
                ulInputPinId: u32,
                ulOutputPinId: u32,
                ulNodeType: u32,
                ppControlNode: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_GetNodeTypes(self: *const T, pulcNodeTypes: ?*u32, ulcNodeTypesMax: u32, rgulNodeTypes: [*]u32) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).GetNodeTypes(@as(*const IBDA_Topology, @ptrCast(self)), pulcNodeTypes, ulcNodeTypesMax, rgulNodeTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_GetNodeDescriptors(self: *const T, ulcNodeDescriptors: ?*u32, ulcNodeDescriptorsMax: u32, rgNodeDescriptors: [*]BDANODE_DESCRIPTOR) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).GetNodeDescriptors(@as(*const IBDA_Topology, @ptrCast(self)), ulcNodeDescriptors, ulcNodeDescriptorsMax, rgNodeDescriptors);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_GetNodeInterfaces(self: *const T, ulNodeType: u32, pulcInterfaces: ?*u32, ulcInterfacesMax: u32, rgguidInterfaces: [*]Guid) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).GetNodeInterfaces(@as(*const IBDA_Topology, @ptrCast(self)), ulNodeType, pulcInterfaces, ulcInterfacesMax, rgguidInterfaces);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_GetPinTypes(self: *const T, pulcPinTypes: ?*u32, ulcPinTypesMax: u32, rgulPinTypes: [*]u32) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).GetPinTypes(@as(*const IBDA_Topology, @ptrCast(self)), pulcPinTypes, ulcPinTypesMax, rgulPinTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_GetTemplateConnections(self: *const T, pulcConnections: ?*u32, ulcConnectionsMax: u32, rgConnections: [*]BDA_TEMPLATE_CONNECTION) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).GetTemplateConnections(@as(*const IBDA_Topology, @ptrCast(self)), pulcConnections, ulcConnectionsMax, rgConnections);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_CreatePin(self: *const T, ulPinType: u32, pulPinId: ?*u32) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).CreatePin(@as(*const IBDA_Topology, @ptrCast(self)), ulPinType, pulPinId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_DeletePin(self: *const T, ulPinId: u32) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).DeletePin(@as(*const IBDA_Topology, @ptrCast(self)), ulPinId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_SetMediaType(self: *const T, ulPinId: u32, pMediaType: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).SetMediaType(@as(*const IBDA_Topology, @ptrCast(self)), ulPinId, pMediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_SetMedium(self: *const T, ulPinId: u32, pMedium: ?*REGPINMEDIUM) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).SetMedium(@as(*const IBDA_Topology, @ptrCast(self)), ulPinId, pMedium);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_CreateTopology(self: *const T, ulInputPinId: u32, ulOutputPinId: u32) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).CreateTopology(@as(*const IBDA_Topology, @ptrCast(self)), ulInputPinId, ulOutputPinId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Topology_GetControlNode(self: *const T, ulInputPinId: u32, ulOutputPinId: u32, ulNodeType: u32, ppControlNode: ?*?*IUnknown) HRESULT {
                return @as(*const IBDA_Topology.VTable, @ptrCast(self.vtable)).GetControlNode(@as(*const IBDA_Topology, @ptrCast(self)), ulInputPinId, ulOutputPinId, ulNodeType, ppControlNode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_VoidTransform_Value = Guid.initString("71985f46-1ca1-11d3-9cc8-00c04f7971e0");
pub const IID_IBDA_VoidTransform = &IID_IBDA_VoidTransform_Value;
pub const IBDA_VoidTransform = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Start: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_VoidTransform,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_VoidTransform,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_VoidTransform,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_VoidTransform,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_VoidTransform_Start(self: *const T) HRESULT {
                return @as(*const IBDA_VoidTransform.VTable, @ptrCast(self.vtable)).Start(@as(*const IBDA_VoidTransform, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_VoidTransform_Stop(self: *const T) HRESULT {
                return @as(*const IBDA_VoidTransform.VTable, @ptrCast(self.vtable)).Stop(@as(*const IBDA_VoidTransform, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_NullTransform_Value = Guid.initString("ddf15b0d-bd25-11d2-9ca0-00c04f7971e0");
pub const IID_IBDA_NullTransform = &IID_IBDA_NullTransform_Value;
pub const IBDA_NullTransform = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Start: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NullTransform,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NullTransform,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NullTransform,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NullTransform,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NullTransform_Start(self: *const T) HRESULT {
                return @as(*const IBDA_NullTransform.VTable, @ptrCast(self.vtable)).Start(@as(*const IBDA_NullTransform, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NullTransform_Stop(self: *const T) HRESULT {
                return @as(*const IBDA_NullTransform.VTable, @ptrCast(self.vtable)).Stop(@as(*const IBDA_NullTransform, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_FrequencyFilter_Value = Guid.initString("71985f47-1ca1-11d3-9cc8-00c04f7971e0");
pub const IID_IBDA_FrequencyFilter = &IID_IBDA_FrequencyFilter_Value;
pub const IBDA_FrequencyFilter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Autotune: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                ulTransponder: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                ulTransponder: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Autotune: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                pulTransponder: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                pulTransponder: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Frequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                ulFrequency: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                ulFrequency: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Frequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                pulFrequency: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                pulFrequency: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Polarity: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                Polarity: Polarisation,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                Polarity: Polarisation,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Polarity: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                pPolarity: ?*Polarisation,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                pPolarity: ?*Polarisation,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Range: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                ulRange: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                ulRange: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Range: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                pulRange: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                pulRange: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Bandwidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                ulBandwidth: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                ulBandwidth: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Bandwidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                pulBandwidth: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                pulBandwidth: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FrequencyMultiplier: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                ulMultiplier: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                ulMultiplier: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FrequencyMultiplier: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_FrequencyFilter,
                pulMultiplier: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_FrequencyFilter,
                pulMultiplier: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_put_Autotune(self: *const T, ulTransponder: u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).put_Autotune(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), ulTransponder);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_get_Autotune(self: *const T, pulTransponder: ?*u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).get_Autotune(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), pulTransponder);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_put_Frequency(self: *const T, ulFrequency: u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).put_Frequency(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), ulFrequency);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_get_Frequency(self: *const T, pulFrequency: ?*u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).get_Frequency(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), pulFrequency);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_put_Polarity(self: *const T, Polarity: Polarisation) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).put_Polarity(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), Polarity);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_get_Polarity(self: *const T, pPolarity: ?*Polarisation) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).get_Polarity(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), pPolarity);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_put_Range(self: *const T, ulRange: u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).put_Range(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), ulRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_get_Range(self: *const T, pulRange: ?*u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).get_Range(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), pulRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_put_Bandwidth(self: *const T, ulBandwidth: u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).put_Bandwidth(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), ulBandwidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_get_Bandwidth(self: *const T, pulBandwidth: ?*u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).get_Bandwidth(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), pulBandwidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_put_FrequencyMultiplier(self: *const T, ulMultiplier: u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).put_FrequencyMultiplier(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), ulMultiplier);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FrequencyFilter_get_FrequencyMultiplier(self: *const T, pulMultiplier: ?*u32) HRESULT {
                return @as(*const IBDA_FrequencyFilter.VTable, @ptrCast(self.vtable)).get_FrequencyMultiplier(@as(*const IBDA_FrequencyFilter, @ptrCast(self)), pulMultiplier);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_LNBInfo_Value = Guid.initString("992cf102-49f9-4719-a664-c4f23e2408f4");
pub const IID_IBDA_LNBInfo = &IID_IBDA_LNBInfo_Value;
pub const IBDA_LNBInfo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LocalOscilatorFrequencyLowBand: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_LNBInfo,
                ulLOFLow: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_LNBInfo,
                ulLOFLow: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LocalOscilatorFrequencyLowBand: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_LNBInfo,
                pulLOFLow: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_LNBInfo,
                pulLOFLow: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LocalOscilatorFrequencyHighBand: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_LNBInfo,
                ulLOFHigh: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_LNBInfo,
                ulLOFHigh: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LocalOscilatorFrequencyHighBand: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_LNBInfo,
                pulLOFHigh: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_LNBInfo,
                pulLOFHigh: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_HighLowSwitchFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_LNBInfo,
                ulSwitchFrequency: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_LNBInfo,
                ulSwitchFrequency: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_HighLowSwitchFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_LNBInfo,
                pulSwitchFrequency: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_LNBInfo,
                pulSwitchFrequency: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_LNBInfo_put_LocalOscilatorFrequencyLowBand(self: *const T, ulLOFLow: u32) HRESULT {
                return @as(*const IBDA_LNBInfo.VTable, @ptrCast(self.vtable)).put_LocalOscilatorFrequencyLowBand(@as(*const IBDA_LNBInfo, @ptrCast(self)), ulLOFLow);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_LNBInfo_get_LocalOscilatorFrequencyLowBand(self: *const T, pulLOFLow: ?*u32) HRESULT {
                return @as(*const IBDA_LNBInfo.VTable, @ptrCast(self.vtable)).get_LocalOscilatorFrequencyLowBand(@as(*const IBDA_LNBInfo, @ptrCast(self)), pulLOFLow);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_LNBInfo_put_LocalOscilatorFrequencyHighBand(self: *const T, ulLOFHigh: u32) HRESULT {
                return @as(*const IBDA_LNBInfo.VTable, @ptrCast(self.vtable)).put_LocalOscilatorFrequencyHighBand(@as(*const IBDA_LNBInfo, @ptrCast(self)), ulLOFHigh);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_LNBInfo_get_LocalOscilatorFrequencyHighBand(self: *const T, pulLOFHigh: ?*u32) HRESULT {
                return @as(*const IBDA_LNBInfo.VTable, @ptrCast(self.vtable)).get_LocalOscilatorFrequencyHighBand(@as(*const IBDA_LNBInfo, @ptrCast(self)), pulLOFHigh);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_LNBInfo_put_HighLowSwitchFrequency(self: *const T, ulSwitchFrequency: u32) HRESULT {
                return @as(*const IBDA_LNBInfo.VTable, @ptrCast(self.vtable)).put_HighLowSwitchFrequency(@as(*const IBDA_LNBInfo, @ptrCast(self)), ulSwitchFrequency);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_LNBInfo_get_HighLowSwitchFrequency(self: *const T, pulSwitchFrequency: ?*u32) HRESULT {
                return @as(*const IBDA_LNBInfo.VTable, @ptrCast(self.vtable)).get_HighLowSwitchFrequency(@as(*const IBDA_LNBInfo, @ptrCast(self)), pulSwitchFrequency);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_DiseqCommand_Value = Guid.initString("f84e2ab0-3c6b-45e3-a0fc-8669d4b81f11");
pub const IID_IBDA_DiseqCommand = &IID_IBDA_DiseqCommand_Value;
pub const IBDA_DiseqCommand = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_EnableDiseqCommands: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DiseqCommand,
                bEnable: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DiseqCommand,
                bEnable: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DiseqLNBSource: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DiseqCommand,
                ulLNBSource: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DiseqCommand,
                ulLNBSource: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DiseqUseToneBurst: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DiseqCommand,
                bUseToneBurst: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DiseqCommand,
                bUseToneBurst: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DiseqRepeats: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DiseqCommand,
                ulRepeats: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DiseqCommand,
                ulRepeats: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DiseqSendCommand: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DiseqCommand,
                ulRequestId: u32,
                ulcbCommandLen: u32,
                pbCommand: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DiseqCommand,
                ulRequestId: u32,
                ulcbCommandLen: u32,
                pbCommand: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DiseqResponse: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DiseqCommand,
                ulRequestId: u32,
                pulcbResponseLen: ?*u32,
                pbResponse: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DiseqCommand,
                ulRequestId: u32,
                pulcbResponseLen: ?*u32,
                pbResponse: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DiseqCommand_put_EnableDiseqCommands(self: *const T, bEnable: BOOLEAN) HRESULT {
                return @as(*const IBDA_DiseqCommand.VTable, @ptrCast(self.vtable)).put_EnableDiseqCommands(@as(*const IBDA_DiseqCommand, @ptrCast(self)), bEnable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DiseqCommand_put_DiseqLNBSource(self: *const T, ulLNBSource: u32) HRESULT {
                return @as(*const IBDA_DiseqCommand.VTable, @ptrCast(self.vtable)).put_DiseqLNBSource(@as(*const IBDA_DiseqCommand, @ptrCast(self)), ulLNBSource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DiseqCommand_put_DiseqUseToneBurst(self: *const T, bUseToneBurst: BOOLEAN) HRESULT {
                return @as(*const IBDA_DiseqCommand.VTable, @ptrCast(self.vtable)).put_DiseqUseToneBurst(@as(*const IBDA_DiseqCommand, @ptrCast(self)), bUseToneBurst);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DiseqCommand_put_DiseqRepeats(self: *const T, ulRepeats: u32) HRESULT {
                return @as(*const IBDA_DiseqCommand.VTable, @ptrCast(self.vtable)).put_DiseqRepeats(@as(*const IBDA_DiseqCommand, @ptrCast(self)), ulRepeats);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DiseqCommand_put_DiseqSendCommand(self: *const T, ulRequestId: u32, ulcbCommandLen: u32, pbCommand: [*:0]u8) HRESULT {
                return @as(*const IBDA_DiseqCommand.VTable, @ptrCast(self.vtable)).put_DiseqSendCommand(@as(*const IBDA_DiseqCommand, @ptrCast(self)), ulRequestId, ulcbCommandLen, pbCommand);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DiseqCommand_get_DiseqResponse(self: *const T, ulRequestId: u32, pulcbResponseLen: ?*u32, pbResponse: [*:0]u8) HRESULT {
                return @as(*const IBDA_DiseqCommand.VTable, @ptrCast(self.vtable)).get_DiseqResponse(@as(*const IBDA_DiseqCommand, @ptrCast(self)), ulRequestId, pulcbResponseLen, pbResponse);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_AutoDemodulate_Value = Guid.initString("ddf15b12-bd25-11d2-9ca0-00c04f7971e0");
pub const IID_IBDA_AutoDemodulate = &IID_IBDA_AutoDemodulate_Value;
pub const IBDA_AutoDemodulate = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_AutoDemodulate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_AutoDemodulate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_AutoDemodulate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_AutoDemodulate_put_AutoDemodulate(self: *const T) HRESULT {
                return @as(*const IBDA_AutoDemodulate.VTable, @ptrCast(self.vtable)).put_AutoDemodulate(@as(*const IBDA_AutoDemodulate, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IBDA_AutoDemodulateEx_Value = Guid.initString("34518d13-1182-48e6-b28f-b24987787326");
pub const IID_IBDA_AutoDemodulateEx = &IID_IBDA_AutoDemodulateEx_Value;
pub const IBDA_AutoDemodulateEx = extern struct {
    pub const VTable = extern struct {
        base: IBDA_AutoDemodulate.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SupportedDeviceNodeTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_AutoDemodulateEx,
                ulcDeviceNodeTypesMax: u32,
                pulcDeviceNodeTypes: ?*u32,
                pguidDeviceNodeTypes: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_AutoDemodulateEx,
                ulcDeviceNodeTypesMax: u32,
                pulcDeviceNodeTypes: ?*u32,
                pguidDeviceNodeTypes: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SupportedVideoFormats: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_AutoDemodulateEx,
                pulAMTunerModeType: ?*u32,
                pulAnalogVideoStandard: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_AutoDemodulateEx,
                pulAMTunerModeType: ?*u32,
                pulAnalogVideoStandard: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AuxInputCount: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_AutoDemodulateEx,
                pulCompositeCount: ?*u32,
                pulSvideoCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_AutoDemodulateEx,
                pulCompositeCount: ?*u32,
                pulSvideoCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IBDA_AutoDemodulate.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_AutoDemodulateEx_get_SupportedDeviceNodeTypes(self: *const T, ulcDeviceNodeTypesMax: u32, pulcDeviceNodeTypes: ?*u32, pguidDeviceNodeTypes: ?*Guid) HRESULT {
                return @as(*const IBDA_AutoDemodulateEx.VTable, @ptrCast(self.vtable)).get_SupportedDeviceNodeTypes(@as(*const IBDA_AutoDemodulateEx, @ptrCast(self)), ulcDeviceNodeTypesMax, pulcDeviceNodeTypes, pguidDeviceNodeTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_AutoDemodulateEx_get_SupportedVideoFormats(self: *const T, pulAMTunerModeType: ?*u32, pulAnalogVideoStandard: ?*u32) HRESULT {
                return @as(*const IBDA_AutoDemodulateEx.VTable, @ptrCast(self.vtable)).get_SupportedVideoFormats(@as(*const IBDA_AutoDemodulateEx, @ptrCast(self)), pulAMTunerModeType, pulAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_AutoDemodulateEx_get_AuxInputCount(self: *const T, pulCompositeCount: ?*u32, pulSvideoCount: ?*u32) HRESULT {
                return @as(*const IBDA_AutoDemodulateEx.VTable, @ptrCast(self.vtable)).get_AuxInputCount(@as(*const IBDA_AutoDemodulateEx, @ptrCast(self)), pulCompositeCount, pulSvideoCount);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_DigitalDemodulator_Value = Guid.initString("ef30f379-985b-4d10-b640-a79d5e04e1e0");
pub const IID_IBDA_DigitalDemodulator = &IID_IBDA_DigitalDemodulator_Value;
pub const IBDA_DigitalDemodulator = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ModulationType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pModulationType: ?*ModulationType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pModulationType: ?*ModulationType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ModulationType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pModulationType: ?*ModulationType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pModulationType: ?*ModulationType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_InnerFECMethod: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pFECMethod: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pFECMethod: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_InnerFECMethod: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pFECMethod: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pFECMethod: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_InnerFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pFECRate: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pFECRate: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_InnerFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pFECRate: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pFECRate: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_OuterFECMethod: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pFECMethod: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pFECMethod: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OuterFECMethod: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pFECMethod: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pFECMethod: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_OuterFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pFECRate: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pFECRate: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OuterFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pFECRate: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pFECRate: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SymbolRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pSymbolRate: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pSymbolRate: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SymbolRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pSymbolRate: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pSymbolRate: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SpectralInversion: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pSpectralInversion: ?*SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pSpectralInversion: ?*SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SpectralInversion: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator,
                pSpectralInversion: ?*SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator,
                pSpectralInversion: ?*SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_put_ModulationType(self: *const T, pModulationType: ?*ModulationType) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).put_ModulationType(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pModulationType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_get_ModulationType(self: *const T, pModulationType: ?*ModulationType) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).get_ModulationType(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pModulationType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_put_InnerFECMethod(self: *const T, pFECMethod: ?*FECMethod) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).put_InnerFECMethod(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pFECMethod);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_get_InnerFECMethod(self: *const T, pFECMethod: ?*FECMethod) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).get_InnerFECMethod(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pFECMethod);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_put_InnerFECRate(self: *const T, pFECRate: ?*BinaryConvolutionCodeRate) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).put_InnerFECRate(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pFECRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_get_InnerFECRate(self: *const T, pFECRate: ?*BinaryConvolutionCodeRate) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).get_InnerFECRate(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pFECRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_put_OuterFECMethod(self: *const T, pFECMethod: ?*FECMethod) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).put_OuterFECMethod(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pFECMethod);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_get_OuterFECMethod(self: *const T, pFECMethod: ?*FECMethod) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).get_OuterFECMethod(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pFECMethod);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_put_OuterFECRate(self: *const T, pFECRate: ?*BinaryConvolutionCodeRate) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).put_OuterFECRate(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pFECRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_get_OuterFECRate(self: *const T, pFECRate: ?*BinaryConvolutionCodeRate) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).get_OuterFECRate(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pFECRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_put_SymbolRate(self: *const T, pSymbolRate: ?*u32) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).put_SymbolRate(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pSymbolRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_get_SymbolRate(self: *const T, pSymbolRate: ?*u32) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).get_SymbolRate(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pSymbolRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_put_SpectralInversion(self: *const T, pSpectralInversion: ?*SpectralInversion) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).put_SpectralInversion(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pSpectralInversion);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator_get_SpectralInversion(self: *const T, pSpectralInversion: ?*SpectralInversion) HRESULT {
                return @as(*const IBDA_DigitalDemodulator.VTable, @ptrCast(self.vtable)).get_SpectralInversion(@as(*const IBDA_DigitalDemodulator, @ptrCast(self)), pSpectralInversion);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_DigitalDemodulator2_Value = Guid.initString("525ed3ee-5cf3-4e1e-9a06-5368a84f9a6e");
pub const IID_IBDA_DigitalDemodulator2 = &IID_IBDA_DigitalDemodulator2_Value;
pub const IBDA_DigitalDemodulator2 = extern struct {
    pub const VTable = extern struct {
        base: IBDA_DigitalDemodulator.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_GuardInterval: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator2,
                pGuardInterval: ?*GuardInterval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator2,
                pGuardInterval: ?*GuardInterval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_GuardInterval: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator2,
                pGuardInterval: ?*GuardInterval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator2,
                pGuardInterval: ?*GuardInterval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TransmissionMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator2,
                pTransmissionMode: ?*TransmissionMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator2,
                pTransmissionMode: ?*TransmissionMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TransmissionMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator2,
                pTransmissionMode: ?*TransmissionMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator2,
                pTransmissionMode: ?*TransmissionMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_RollOff: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator2,
                pRollOff: ?*RollOff,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator2,
                pRollOff: ?*RollOff,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_RollOff: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator2,
                pRollOff: ?*RollOff,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator2,
                pRollOff: ?*RollOff,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Pilot: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator2,
                pPilot: ?*Pilot,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator2,
                pPilot: ?*Pilot,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Pilot: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator2,
                pPilot: ?*Pilot,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator2,
                pPilot: ?*Pilot,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IBDA_DigitalDemodulator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator2_put_GuardInterval(self: *const T, pGuardInterval: ?*GuardInterval) HRESULT {
                return @as(*const IBDA_DigitalDemodulator2.VTable, @ptrCast(self.vtable)).put_GuardInterval(@as(*const IBDA_DigitalDemodulator2, @ptrCast(self)), pGuardInterval);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator2_get_GuardInterval(self: *const T, pGuardInterval: ?*GuardInterval) HRESULT {
                return @as(*const IBDA_DigitalDemodulator2.VTable, @ptrCast(self.vtable)).get_GuardInterval(@as(*const IBDA_DigitalDemodulator2, @ptrCast(self)), pGuardInterval);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator2_put_TransmissionMode(self: *const T, pTransmissionMode: ?*TransmissionMode) HRESULT {
                return @as(*const IBDA_DigitalDemodulator2.VTable, @ptrCast(self.vtable)).put_TransmissionMode(@as(*const IBDA_DigitalDemodulator2, @ptrCast(self)), pTransmissionMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator2_get_TransmissionMode(self: *const T, pTransmissionMode: ?*TransmissionMode) HRESULT {
                return @as(*const IBDA_DigitalDemodulator2.VTable, @ptrCast(self.vtable)).get_TransmissionMode(@as(*const IBDA_DigitalDemodulator2, @ptrCast(self)), pTransmissionMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator2_put_RollOff(self: *const T, pRollOff: ?*RollOff) HRESULT {
                return @as(*const IBDA_DigitalDemodulator2.VTable, @ptrCast(self.vtable)).put_RollOff(@as(*const IBDA_DigitalDemodulator2, @ptrCast(self)), pRollOff);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator2_get_RollOff(self: *const T, pRollOff: ?*RollOff) HRESULT {
                return @as(*const IBDA_DigitalDemodulator2.VTable, @ptrCast(self.vtable)).get_RollOff(@as(*const IBDA_DigitalDemodulator2, @ptrCast(self)), pRollOff);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator2_put_Pilot(self: *const T, pPilot: ?*Pilot) HRESULT {
                return @as(*const IBDA_DigitalDemodulator2.VTable, @ptrCast(self.vtable)).put_Pilot(@as(*const IBDA_DigitalDemodulator2, @ptrCast(self)), pPilot);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator2_get_Pilot(self: *const T, pPilot: ?*Pilot) HRESULT {
                return @as(*const IBDA_DigitalDemodulator2.VTable, @ptrCast(self.vtable)).get_Pilot(@as(*const IBDA_DigitalDemodulator2, @ptrCast(self)), pPilot);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_DigitalDemodulator3_Value = Guid.initString("13f19604-7d32-4359-93a2-a05205d90ac9");
pub const IID_IBDA_DigitalDemodulator3 = &IID_IBDA_DigitalDemodulator3_Value;
pub const IBDA_DigitalDemodulator3 = extern struct {
    pub const VTable = extern struct {
        base: IBDA_DigitalDemodulator2.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SignalTimeouts: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator3,
                pSignalTimeouts: ?*BDA_SIGNAL_TIMEOUTS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator3,
                pSignalTimeouts: ?*BDA_SIGNAL_TIMEOUTS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SignalTimeouts: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator3,
                pSignalTimeouts: ?*BDA_SIGNAL_TIMEOUTS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator3,
                pSignalTimeouts: ?*BDA_SIGNAL_TIMEOUTS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PLPNumber: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator3,
                pPLPNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator3,
                pPLPNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PLPNumber: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_DigitalDemodulator3,
                pPLPNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_DigitalDemodulator3,
                pPLPNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IBDA_DigitalDemodulator2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator3_put_SignalTimeouts(self: *const T, pSignalTimeouts: ?*BDA_SIGNAL_TIMEOUTS) HRESULT {
                return @as(*const IBDA_DigitalDemodulator3.VTable, @ptrCast(self.vtable)).put_SignalTimeouts(@as(*const IBDA_DigitalDemodulator3, @ptrCast(self)), pSignalTimeouts);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator3_get_SignalTimeouts(self: *const T, pSignalTimeouts: ?*BDA_SIGNAL_TIMEOUTS) HRESULT {
                return @as(*const IBDA_DigitalDemodulator3.VTable, @ptrCast(self.vtable)).get_SignalTimeouts(@as(*const IBDA_DigitalDemodulator3, @ptrCast(self)), pSignalTimeouts);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator3_put_PLPNumber(self: *const T, pPLPNumber: ?*u32) HRESULT {
                return @as(*const IBDA_DigitalDemodulator3.VTable, @ptrCast(self.vtable)).put_PLPNumber(@as(*const IBDA_DigitalDemodulator3, @ptrCast(self)), pPLPNumber);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DigitalDemodulator3_get_PLPNumber(self: *const T, pPLPNumber: ?*u32) HRESULT {
                return @as(*const IBDA_DigitalDemodulator3.VTable, @ptrCast(self.vtable)).get_PLPNumber(@as(*const IBDA_DigitalDemodulator3, @ptrCast(self)), pPLPNumber);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const KSPROPERTY_IPSINK = enum(u32) {
    MULTICASTLIST = 0,
    ADAPTER_DESCRIPTION = 1,
    ADAPTER_ADDRESS = 2,
    _,
    pub fn initFlags(o: struct {
        MULTICASTLIST: u1 = 0,
        ADAPTER_DESCRIPTION: u1 = 0,
        ADAPTER_ADDRESS: u1 = 0,
    }) KSPROPERTY_IPSINK {
        return @as(KSPROPERTY_IPSINK, @enumFromInt((if (o.MULTICASTLIST == 1) @intFromEnum(KSPROPERTY_IPSINK.MULTICASTLIST) else 0) | (if (o.ADAPTER_DESCRIPTION == 1) @intFromEnum(KSPROPERTY_IPSINK.ADAPTER_DESCRIPTION) else 0) | (if (o.ADAPTER_ADDRESS == 1) @intFromEnum(KSPROPERTY_IPSINK.ADAPTER_ADDRESS) else 0)));
    }
};
pub const KSPROPERTY_IPSINK_MULTICASTLIST = KSPROPERTY_IPSINK.MULTICASTLIST;
pub const KSPROPERTY_IPSINK_ADAPTER_DESCRIPTION = KSPROPERTY_IPSINK.ADAPTER_DESCRIPTION;
pub const KSPROPERTY_IPSINK_ADAPTER_ADDRESS = KSPROPERTY_IPSINK.ADAPTER_ADDRESS;

const IID_ICCSubStreamFiltering_Value = Guid.initString("4b2bd7ea-8347-467b-8dbf-62f784929cc3");
pub const IID_ICCSubStreamFiltering = &IID_ICCSubStreamFiltering_Value;
pub const ICCSubStreamFiltering = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SubstreamTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICCSubStreamFiltering,
                pTypes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICCSubStreamFiltering,
                pTypes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SubstreamTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICCSubStreamFiltering,
                Types: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICCSubStreamFiltering,
                Types: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICCSubStreamFiltering_get_SubstreamTypes(self: *const T, pTypes: ?*i32) HRESULT {
                return @as(*const ICCSubStreamFiltering.VTable, @ptrCast(self.vtable)).get_SubstreamTypes(@as(*const ICCSubStreamFiltering, @ptrCast(self)), pTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICCSubStreamFiltering_put_SubstreamTypes(self: *const T, Types: i32) HRESULT {
                return @as(*const ICCSubStreamFiltering.VTable, @ptrCast(self.vtable)).put_SubstreamTypes(@as(*const ICCSubStreamFiltering, @ptrCast(self)), Types);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_IPSinkControl_Value = Guid.initString("3f4dc8e2-4050-11d3-8f4b-00c04f7971e2");
pub const IID_IBDA_IPSinkControl = &IID_IBDA_IPSinkControl_Value;
pub const IBDA_IPSinkControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetMulticastList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPSinkControl,
                pulcbSize: ?*u32,
                pbBuffer: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPSinkControl,
                pulcbSize: ?*u32,
                pbBuffer: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAdapterIPAddress: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_IPSinkControl,
                pulcbSize: ?*u32,
                pbBuffer: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_IPSinkControl,
                pulcbSize: ?*u32,
                pbBuffer: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPSinkControl_GetMulticastList(self: *const T, pulcbSize: ?*u32, pbBuffer: ?*?*u8) HRESULT {
                return @as(*const IBDA_IPSinkControl.VTable, @ptrCast(self.vtable)).GetMulticastList(@as(*const IBDA_IPSinkControl, @ptrCast(self)), pulcbSize, pbBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPSinkControl_GetAdapterIPAddress(self: *const T, pulcbSize: ?*u32, pbBuffer: ?*?*u8) HRESULT {
                return @as(*const IBDA_IPSinkControl.VTable, @ptrCast(self.vtable)).GetAdapterIPAddress(@as(*const IBDA_IPSinkControl, @ptrCast(self)), pulcbSize, pbBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_IPSinkInfo_Value = Guid.initString("a750108f-492e-4d51-95f7-649b23ff7ad7");
pub const IID_IBDA_IPSinkInfo = &IID_IBDA_IPSinkInfo_Value;
pub const IBDA_IPSinkInfo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MulticastList: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_IPSinkInfo,
                pulcbAddresses: ?*u32,
                ppbAddressList: [*]?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_IPSinkInfo,
                pulcbAddresses: ?*u32,
                ppbAddressList: [*]?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AdapterIPAddress: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_IPSinkInfo,
                pbstrBuffer: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_IPSinkInfo,
                pbstrBuffer: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AdapterDescription: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_IPSinkInfo,
                pbstrBuffer: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_IPSinkInfo,
                pbstrBuffer: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPSinkInfo_get_MulticastList(self: *const T, pulcbAddresses: ?*u32, ppbAddressList: [*]?*u8) HRESULT {
                return @as(*const IBDA_IPSinkInfo.VTable, @ptrCast(self.vtable)).get_MulticastList(@as(*const IBDA_IPSinkInfo, @ptrCast(self)), pulcbAddresses, ppbAddressList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPSinkInfo_get_AdapterIPAddress(self: *const T, pbstrBuffer: ?*?BSTR) HRESULT {
                return @as(*const IBDA_IPSinkInfo.VTable, @ptrCast(self.vtable)).get_AdapterIPAddress(@as(*const IBDA_IPSinkInfo, @ptrCast(self)), pbstrBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_IPSinkInfo_get_AdapterDescription(self: *const T, pbstrBuffer: ?*?BSTR) HRESULT {
                return @as(*const IBDA_IPSinkInfo.VTable, @ptrCast(self.vtable)).get_AdapterDescription(@as(*const IBDA_IPSinkInfo, @ptrCast(self)), pbstrBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IEnumPIDMap_Value = Guid.initString("afb6c2a2-2c41-11d3-8a60-0000f81e0e4a");
pub const IID_IEnumPIDMap = &IID_IEnumPIDMap_Value;
pub const IEnumPIDMap = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumPIDMap,
                cRequest: u32,
                pPIDMap: [*]PID_MAP,
                pcReceived: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumPIDMap,
                cRequest: u32,
                pPIDMap: [*]PID_MAP,
                pcReceived: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumPIDMap,
                cRecords: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumPIDMap,
                cRecords: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumPIDMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumPIDMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumPIDMap,
                ppIEnumPIDMap: ?*?*IEnumPIDMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumPIDMap,
                ppIEnumPIDMap: ?*?*IEnumPIDMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumPIDMap_Next(self: *const T, cRequest: u32, pPIDMap: [*]PID_MAP, pcReceived: ?*u32) HRESULT {
                return @as(*const IEnumPIDMap.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumPIDMap, @ptrCast(self)), cRequest, pPIDMap, pcReceived);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumPIDMap_Skip(self: *const T, cRecords: u32) HRESULT {
                return @as(*const IEnumPIDMap.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumPIDMap, @ptrCast(self)), cRecords);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumPIDMap_Reset(self: *const T) HRESULT {
                return @as(*const IEnumPIDMap.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumPIDMap, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumPIDMap_Clone(self: *const T, ppIEnumPIDMap: ?*?*IEnumPIDMap) HRESULT {
                return @as(*const IEnumPIDMap.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumPIDMap, @ptrCast(self)), ppIEnumPIDMap);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMPEG2PIDMap_Value = Guid.initString("afb6c2a1-2c41-11d3-8a60-0000f81e0e4a");
pub const IID_IMPEG2PIDMap = &IID_IMPEG2PIDMap_Value;
pub const IMPEG2PIDMap = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        MapPID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2PIDMap,
                culPID: u32,
                pulPID: ?*u32,
                MediaSampleContent: MEDIA_SAMPLE_CONTENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2PIDMap,
                culPID: u32,
                pulPID: ?*u32,
                MediaSampleContent: MEDIA_SAMPLE_CONTENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnmapPID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2PIDMap,
                culPID: u32,
                pulPID: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2PIDMap,
                culPID: u32,
                pulPID: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumPIDMap: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2PIDMap,
                pIEnumPIDMap: ?*?*IEnumPIDMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2PIDMap,
                pIEnumPIDMap: ?*?*IEnumPIDMap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2PIDMap_MapPID(self: *const T, culPID: u32, pulPID: ?*u32, MediaSampleContent: MEDIA_SAMPLE_CONTENT) HRESULT {
                return @as(*const IMPEG2PIDMap.VTable, @ptrCast(self.vtable)).MapPID(@as(*const IMPEG2PIDMap, @ptrCast(self)), culPID, pulPID, MediaSampleContent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2PIDMap_UnmapPID(self: *const T, culPID: u32, pulPID: ?*u32) HRESULT {
                return @as(*const IMPEG2PIDMap.VTable, @ptrCast(self.vtable)).UnmapPID(@as(*const IMPEG2PIDMap, @ptrCast(self)), culPID, pulPID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2PIDMap_EnumPIDMap(self: *const T, pIEnumPIDMap: ?*?*IEnumPIDMap) HRESULT {
                return @as(*const IMPEG2PIDMap.VTable, @ptrCast(self.vtable)).EnumPIDMap(@as(*const IMPEG2PIDMap, @ptrCast(self)), pIEnumPIDMap);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IFrequencyMap_Value = Guid.initString("06fb45c1-693c-4ea7-b79f-7a6a54d8def2");
pub const IID_IFrequencyMap = &IID_IFrequencyMap_Value;
pub const IFrequencyMap = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FrequencyMapping: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFrequencyMap,
                ulCount: ?*u32,
                ppulList: ?*?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFrequencyMap,
                ulCount: ?*u32,
                ppulList: ?*?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FrequencyMapping: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFrequencyMap,
                ulCount: u32,
                pList: [*]u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFrequencyMap,
                ulCount: u32,
                pList: [*]u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFrequencyMap,
                pulCountryCode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFrequencyMap,
                pulCountryCode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFrequencyMap,
                ulCountryCode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFrequencyMap,
                ulCountryCode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultFrequencyMapping: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFrequencyMap,
                ulCountryCode: u32,
                pulCount: ?*u32,
                ppulList: ?*?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFrequencyMap,
                ulCountryCode: u32,
                pulCount: ?*u32,
                ppulList: ?*?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CountryCodeList: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFrequencyMap,
                pulCount: ?*u32,
                ppulList: ?*?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFrequencyMap,
                pulCount: ?*u32,
                ppulList: ?*?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFrequencyMap_get_FrequencyMapping(self: *const T, ulCount: ?*u32, ppulList: ?*?*u32) HRESULT {
                return @as(*const IFrequencyMap.VTable, @ptrCast(self.vtable)).get_FrequencyMapping(@as(*const IFrequencyMap, @ptrCast(self)), ulCount, ppulList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFrequencyMap_put_FrequencyMapping(self: *const T, ulCount: u32, pList: [*]u32) HRESULT {
                return @as(*const IFrequencyMap.VTable, @ptrCast(self.vtable)).put_FrequencyMapping(@as(*const IFrequencyMap, @ptrCast(self)), ulCount, pList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFrequencyMap_get_CountryCode(self: *const T, pulCountryCode: ?*u32) HRESULT {
                return @as(*const IFrequencyMap.VTable, @ptrCast(self.vtable)).get_CountryCode(@as(*const IFrequencyMap, @ptrCast(self)), pulCountryCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFrequencyMap_put_CountryCode(self: *const T, ulCountryCode: u32) HRESULT {
                return @as(*const IFrequencyMap.VTable, @ptrCast(self.vtable)).put_CountryCode(@as(*const IFrequencyMap, @ptrCast(self)), ulCountryCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFrequencyMap_get_DefaultFrequencyMapping(self: *const T, ulCountryCode: u32, pulCount: ?*u32, ppulList: ?*?*u32) HRESULT {
                return @as(*const IFrequencyMap.VTable, @ptrCast(self.vtable)).get_DefaultFrequencyMapping(@as(*const IFrequencyMap, @ptrCast(self)), ulCountryCode, pulCount, ppulList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFrequencyMap_get_CountryCodeList(self: *const T, pulCount: ?*u32, ppulList: ?*?*u32) HRESULT {
                return @as(*const IFrequencyMap.VTable, @ptrCast(self.vtable)).get_CountryCodeList(@as(*const IFrequencyMap, @ptrCast(self)), pulCount, ppulList);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IBDA_EasMessage_Value = Guid.initString("d806973d-3ebe-46de-8fbb-6358fe784208");
pub const IID_IBDA_EasMessage = &IID_IBDA_EasMessage_Value;
pub const IBDA_EasMessage = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EasMessage: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_EasMessage,
                ulEventID: u32,
                ppEASObject: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_EasMessage,
                ulEventID: u32,
                ppEASObject: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_EasMessage_get_EasMessage(self: *const T, ulEventID: u32, ppEASObject: ?*?*IUnknown) HRESULT {
                return @as(*const IBDA_EasMessage.VTable, @ptrCast(self.vtable)).get_EasMessage(@as(*const IBDA_EasMessage, @ptrCast(self)), ulEventID, ppEASObject);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_TransportStreamInfo_Value = Guid.initString("8e882535-5f86-47ab-86cf-c281a72a0549");
pub const IID_IBDA_TransportStreamInfo = &IID_IBDA_TransportStreamInfo_Value;
pub const IBDA_TransportStreamInfo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PatTableTickCount: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_TransportStreamInfo,
                pPatTickCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_TransportStreamInfo,
                pPatTickCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_TransportStreamInfo_get_PatTableTickCount(self: *const T, pPatTickCount: ?*u32) HRESULT {
                return @as(*const IBDA_TransportStreamInfo.VTable, @ptrCast(self.vtable)).get_PatTableTickCount(@as(*const IBDA_TransportStreamInfo, @ptrCast(self)), pPatTickCount);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IBDA_ConditionalAccess_Value = Guid.initString("cd51f1e0-7be9-4123-8482-a2a796c0a6b0");
pub const IID_IBDA_ConditionalAccess = &IID_IBDA_ConditionalAccess_Value;
pub const IBDA_ConditionalAccess = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SmartCardStatus: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                pCardStatus: ?*SmartCardStatusType,
                pCardAssociation: ?*SmartCardAssociationType,
                pbstrCardError: ?*?BSTR,
                pfOOBLocked: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                pCardStatus: ?*SmartCardStatusType,
                pCardAssociation: ?*SmartCardAssociationType,
                pbstrCardError: ?*?BSTR,
                pfOOBLocked: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SmartCardInfo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                pbstrCardName: ?*?BSTR,
                pbstrCardManufacturer: ?*?BSTR,
                pfDaylightSavings: ?*i16,
                pbyRatingRegion: ?*u8,
                plTimeZoneOffsetMinutes: ?*i32,
                pbstrLanguage: ?*?BSTR,
                pEALocationCode: ?*EALocationCodeType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                pbstrCardName: ?*?BSTR,
                pbstrCardManufacturer: ?*?BSTR,
                pfDaylightSavings: ?*i16,
                pbyRatingRegion: ?*u8,
                plTimeZoneOffsetMinutes: ?*i32,
                pbstrLanguage: ?*?BSTR,
                pEALocationCode: ?*EALocationCodeType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SmartCardApplications: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                pulcApplications: ?*u32,
                ulcApplicationsMax: u32,
                rgApplications: [*]SmartCardApplication,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                pulcApplications: ?*u32,
                ulcApplicationsMax: u32,
                rgApplications: [*]SmartCardApplication,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Entitlement: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                usVirtualChannel: u16,
                pEntitlement: ?*EntitlementType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                usVirtualChannel: u16,
                pEntitlement: ?*EntitlementType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TuneByChannel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                usVirtualChannel: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                usVirtualChannel: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetProgram: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                usProgramNumber: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                usProgramNumber: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddProgram: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                usProgramNumber: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                usProgramNumber: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveProgram: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                usProgramNumber: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                usProgramNumber: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetModuleUI: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                byDialogNumber: u8,
                pbstrURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                byDialogNumber: u8,
                pbstrURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        InformUIClosed: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccess,
                byDialogNumber: u8,
                CloseReason: UICloseReasonType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccess,
                byDialogNumber: u8,
                CloseReason: UICloseReasonType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_get_SmartCardStatus(self: *const T, pCardStatus: ?*SmartCardStatusType, pCardAssociation: ?*SmartCardAssociationType, pbstrCardError: ?*?BSTR, pfOOBLocked: ?*i16) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).get_SmartCardStatus(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), pCardStatus, pCardAssociation, pbstrCardError, pfOOBLocked);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_get_SmartCardInfo(self: *const T, pbstrCardName: ?*?BSTR, pbstrCardManufacturer: ?*?BSTR, pfDaylightSavings: ?*i16, pbyRatingRegion: ?*u8, plTimeZoneOffsetMinutes: ?*i32, pbstrLanguage: ?*?BSTR, pEALocationCode: ?*EALocationCodeType) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).get_SmartCardInfo(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), pbstrCardName, pbstrCardManufacturer, pfDaylightSavings, pbyRatingRegion, plTimeZoneOffsetMinutes, pbstrLanguage, pEALocationCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_get_SmartCardApplications(self: *const T, pulcApplications: ?*u32, ulcApplicationsMax: u32, rgApplications: [*]SmartCardApplication) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).get_SmartCardApplications(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), pulcApplications, ulcApplicationsMax, rgApplications);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_get_Entitlement(self: *const T, usVirtualChannel: u16, pEntitlement: ?*EntitlementType) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).get_Entitlement(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), usVirtualChannel, pEntitlement);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_TuneByChannel(self: *const T, usVirtualChannel: u16) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).TuneByChannel(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), usVirtualChannel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_SetProgram(self: *const T, usProgramNumber: u16) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).SetProgram(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), usProgramNumber);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_AddProgram(self: *const T, usProgramNumber: u16) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).AddProgram(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), usProgramNumber);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_RemoveProgram(self: *const T, usProgramNumber: u16) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).RemoveProgram(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), usProgramNumber);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_GetModuleUI(self: *const T, byDialogNumber: u8, pbstrURL: ?*?BSTR) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).GetModuleUI(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), byDialogNumber, pbstrURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccess_InformUIClosed(self: *const T, byDialogNumber: u8, CloseReason: UICloseReasonType) HRESULT {
                return @as(*const IBDA_ConditionalAccess.VTable, @ptrCast(self.vtable)).InformUIClosed(@as(*const IBDA_ConditionalAccess, @ptrCast(self)), byDialogNumber, CloseReason);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_DiagnosticProperties_Value = Guid.initString("20e80cb5-c543-4c1b-8eb3-49e719eee7d4");
pub const IID_IBDA_DiagnosticProperties = &IID_IBDA_DiagnosticProperties_Value;
pub const IBDA_DiagnosticProperties = extern struct {
    pub const VTable = extern struct {
        base: IPropertyBag.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IPropertyBag.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IBDA_DRM_Value = Guid.initString("f98d88b0-1992-4cd6-a6d9-b9afab99330d");
pub const IID_IBDA_DRM = &IID_IBDA_DRM_Value;
pub const IBDA_DRM = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetDRMPairingStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRM,
                pdwStatus: ?*u32,
                phError: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRM,
                pdwStatus: ?*u32,
                phError: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PerformDRMPairing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRM,
                fSync: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRM,
                fSync: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRM_GetDRMPairingStatus(self: *const T, pdwStatus: ?*u32, phError: ?*HRESULT) HRESULT {
                return @as(*const IBDA_DRM.VTable, @ptrCast(self.vtable)).GetDRMPairingStatus(@as(*const IBDA_DRM, @ptrCast(self)), pdwStatus, phError);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRM_PerformDRMPairing(self: *const T, fSync: BOOL) HRESULT {
                return @as(*const IBDA_DRM.VTable, @ptrCast(self.vtable)).PerformDRMPairing(@as(*const IBDA_DRM, @ptrCast(self)), fSync);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_NameValueService_Value = Guid.initString("7f0b3150-7b81-4ad4-98e3-7e9097094301");
pub const IID_IBDA_NameValueService = &IID_IBDA_NameValueService_Value;
pub const IBDA_NameValueService = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetValueNameByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NameValueService,
                ulIndex: u32,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NameValueService,
                ulIndex: u32,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetValue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NameValueService,
                bstrName: ?BSTR,
                bstrLanguage: ?BSTR,
                pbstrValue: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NameValueService,
                bstrName: ?BSTR,
                bstrLanguage: ?BSTR,
                pbstrValue: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetValue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_NameValueService,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                bstrName: ?BSTR,
                bstrValue: ?BSTR,
                ulReserved: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_NameValueService,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                bstrName: ?BSTR,
                bstrValue: ?BSTR,
                ulReserved: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NameValueService_GetValueNameByIndex(self: *const T, ulIndex: u32, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IBDA_NameValueService.VTable, @ptrCast(self.vtable)).GetValueNameByIndex(@as(*const IBDA_NameValueService, @ptrCast(self)), ulIndex, pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NameValueService_GetValue(self: *const T, bstrName: ?BSTR, bstrLanguage: ?BSTR, pbstrValue: ?*?BSTR) HRESULT {
                return @as(*const IBDA_NameValueService.VTable, @ptrCast(self.vtable)).GetValue(@as(*const IBDA_NameValueService, @ptrCast(self)), bstrName, bstrLanguage, pbstrValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_NameValueService_SetValue(self: *const T, ulDialogRequest: u32, bstrLanguage: ?BSTR, bstrName: ?BSTR, bstrValue: ?BSTR, ulReserved: u32) HRESULT {
                return @as(*const IBDA_NameValueService.VTable, @ptrCast(self.vtable)).SetValue(@as(*const IBDA_NameValueService, @ptrCast(self)), ulDialogRequest, bstrLanguage, bstrName, bstrValue, ulReserved);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDA_ConditionalAccessEx_Value = Guid.initString("497c3418-23cb-44ba-bb62-769f506fcea7");
pub const IID_IBDA_ConditionalAccessEx = &IID_IBDA_ConditionalAccessEx_Value;
pub const IBDA_ConditionalAccessEx = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CheckEntitlementToken: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccessEx,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                RequestType: BDA_CONDITIONALACCESS_REQUESTTYPE,
                ulcbEntitlementTokenLen: u32,
                pbEntitlementToken: [*:0]u8,
                pulDescrambleStatus: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccessEx,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                RequestType: BDA_CONDITIONALACCESS_REQUESTTYPE,
                ulcbEntitlementTokenLen: u32,
                pbEntitlementToken: [*:0]u8,
                pulDescrambleStatus: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCaptureToken: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccessEx,
                ulcbCaptureTokenLen: u32,
                pbCaptureToken: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccessEx,
                ulcbCaptureTokenLen: u32,
                pbCaptureToken: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OpenBroadcastMmi: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccessEx,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                EventId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccessEx,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                EventId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CloseMmiDialog: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccessEx,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                ulDialogNumber: u32,
                ReasonCode: BDA_CONDITIONALACCESS_MMICLOSEREASON,
                pulSessionResult: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccessEx,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                ulDialogNumber: u32,
                ReasonCode: BDA_CONDITIONALACCESS_MMICLOSEREASON,
                pulSessionResult: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateDialogRequestNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ConditionalAccessEx,
                pulDialogRequestNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ConditionalAccessEx,
                pulDialogRequestNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccessEx_CheckEntitlementToken(self: *const T, ulDialogRequest: u32, bstrLanguage: ?BSTR, RequestType: BDA_CONDITIONALACCESS_REQUESTTYPE, ulcbEntitlementTokenLen: u32, pbEntitlementToken: [*:0]u8, pulDescrambleStatus: ?*u32) HRESULT {
                return @as(*const IBDA_ConditionalAccessEx.VTable, @ptrCast(self.vtable)).CheckEntitlementToken(@as(*const IBDA_ConditionalAccessEx, @ptrCast(self)), ulDialogRequest, bstrLanguage, RequestType, ulcbEntitlementTokenLen, pbEntitlementToken, pulDescrambleStatus);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccessEx_SetCaptureToken(self: *const T, ulcbCaptureTokenLen: u32, pbCaptureToken: [*:0]u8) HRESULT {
                return @as(*const IBDA_ConditionalAccessEx.VTable, @ptrCast(self.vtable)).SetCaptureToken(@as(*const IBDA_ConditionalAccessEx, @ptrCast(self)), ulcbCaptureTokenLen, pbCaptureToken);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccessEx_OpenBroadcastMmi(self: *const T, ulDialogRequest: u32, bstrLanguage: ?BSTR, EventId: u32) HRESULT {
                return @as(*const IBDA_ConditionalAccessEx.VTable, @ptrCast(self.vtable)).OpenBroadcastMmi(@as(*const IBDA_ConditionalAccessEx, @ptrCast(self)), ulDialogRequest, bstrLanguage, EventId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccessEx_CloseMmiDialog(self: *const T, ulDialogRequest: u32, bstrLanguage: ?BSTR, ulDialogNumber: u32, ReasonCode: BDA_CONDITIONALACCESS_MMICLOSEREASON, pulSessionResult: ?*u32) HRESULT {
                return @as(*const IBDA_ConditionalAccessEx.VTable, @ptrCast(self.vtable)).CloseMmiDialog(@as(*const IBDA_ConditionalAccessEx, @ptrCast(self)), ulDialogRequest, bstrLanguage, ulDialogNumber, ReasonCode, pulSessionResult);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ConditionalAccessEx_CreateDialogRequestNumber(self: *const T, pulDialogRequestNumber: ?*u32) HRESULT {
                return @as(*const IBDA_ConditionalAccessEx.VTable, @ptrCast(self.vtable)).CreateDialogRequestNumber(@as(*const IBDA_ConditionalAccessEx, @ptrCast(self)), pulDialogRequestNumber);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDA_ISDBConditionalAccess_Value = Guid.initString("5e68c627-16c2-4e6c-b1e2-d00170cdaa0f");
pub const IID_IBDA_ISDBConditionalAccess = &IID_IBDA_ISDBConditionalAccess_Value;
pub const IBDA_ISDBConditionalAccess = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetIsdbCasRequest: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_ISDBConditionalAccess,
                ulRequestId: u32,
                ulcbRequestBufferLen: u32,
                pbRequestBuffer: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_ISDBConditionalAccess,
                ulRequestId: u32,
                ulcbRequestBufferLen: u32,
                pbRequestBuffer: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_ISDBConditionalAccess_SetIsdbCasRequest(self: *const T, ulRequestId: u32, ulcbRequestBufferLen: u32, pbRequestBuffer: [*:0]u8) HRESULT {
                return @as(*const IBDA_ISDBConditionalAccess.VTable, @ptrCast(self.vtable)).SetIsdbCasRequest(@as(*const IBDA_ISDBConditionalAccess, @ptrCast(self)), ulRequestId, ulcbRequestBufferLen, pbRequestBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDA_EventingService_Value = Guid.initString("207c413f-00dc-4c61-bad6-6fee1ff07064");
pub const IID_IBDA_EventingService = &IID_IBDA_EventingService_Value;
pub const IBDA_EventingService = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CompleteEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_EventingService,
                ulEventID: u32,
                ulEventResult: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_EventingService,
                ulEventID: u32,
                ulEventResult: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_EventingService_CompleteEvent(self: *const T, ulEventID: u32, ulEventResult: u32) HRESULT {
                return @as(*const IBDA_EventingService.VTable, @ptrCast(self.vtable)).CompleteEvent(@as(*const IBDA_EventingService, @ptrCast(self)), ulEventID, ulEventResult);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_AUX_Value = Guid.initString("7def4c09-6e66-4567-a819-f0e17f4a81ab");
pub const IID_IBDA_AUX = &IID_IBDA_AUX_Value;
pub const IBDA_AUX = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        QueryCapabilities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_AUX,
                pdwNumAuxInputsBSTR: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_AUX,
                pdwNumAuxInputsBSTR: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumCapability: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_AUX,
                dwIndex: u32,
                dwInputID: ?*u32,
                pConnectorType: ?*Guid,
                ConnTypeNum: ?*u32,
                NumVideoStds: ?*u32,
                AnalogStds: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_AUX,
                dwIndex: u32,
                dwInputID: ?*u32,
                pConnectorType: ?*Guid,
                ConnTypeNum: ?*u32,
                NumVideoStds: ?*u32,
                AnalogStds: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_AUX_QueryCapabilities(self: *const T, pdwNumAuxInputsBSTR: ?*u32) HRESULT {
                return @as(*const IBDA_AUX.VTable, @ptrCast(self.vtable)).QueryCapabilities(@as(*const IBDA_AUX, @ptrCast(self)), pdwNumAuxInputsBSTR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_AUX_EnumCapability(self: *const T, dwIndex: u32, dwInputID: ?*u32, pConnectorType: ?*Guid, ConnTypeNum: ?*u32, NumVideoStds: ?*u32, AnalogStds: ?*u64) HRESULT {
                return @as(*const IBDA_AUX.VTable, @ptrCast(self.vtable)).EnumCapability(@as(*const IBDA_AUX, @ptrCast(self)), dwIndex, dwInputID, pConnectorType, ConnTypeNum, NumVideoStds, AnalogStds);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDA_Encoder_Value = Guid.initString("3a8bad59-59fe-4559-a0ba-396cfaa98ae3");
pub const IID_IBDA_Encoder = &IID_IBDA_Encoder_Value;
pub const IBDA_Encoder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        QueryCapabilities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Encoder,
                NumAudioFmts: ?*u32,
                NumVideoFmts: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Encoder,
                NumAudioFmts: ?*u32,
                NumVideoFmts: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumAudioCapability: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Encoder,
                FmtIndex: u32,
                MethodID: ?*u32,
                AlgorithmType: ?*u32,
                SamplingRate: ?*u32,
                BitDepth: ?*u32,
                NumChannels: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Encoder,
                FmtIndex: u32,
                MethodID: ?*u32,
                AlgorithmType: ?*u32,
                SamplingRate: ?*u32,
                BitDepth: ?*u32,
                NumChannels: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumVideoCapability: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Encoder,
                FmtIndex: u32,
                MethodID: ?*u32,
                AlgorithmType: ?*u32,
                VerticalSize: ?*u32,
                HorizontalSize: ?*u32,
                AspectRatio: ?*u32,
                FrameRateCode: ?*u32,
                ProgressiveSequence: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Encoder,
                FmtIndex: u32,
                MethodID: ?*u32,
                AlgorithmType: ?*u32,
                VerticalSize: ?*u32,
                HorizontalSize: ?*u32,
                AspectRatio: ?*u32,
                FrameRateCode: ?*u32,
                ProgressiveSequence: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Encoder,
                AudioBitrateMode: u32,
                AudioBitrate: u32,
                AudioMethodID: u32,
                AudioProgram: u32,
                VideoBitrateMode: u32,
                VideoBitrate: u32,
                VideoMethodID: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Encoder,
                AudioBitrateMode: u32,
                AudioBitrate: u32,
                AudioMethodID: u32,
                AudioProgram: u32,
                VideoBitrateMode: u32,
                VideoBitrate: u32,
                VideoMethodID: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_Encoder,
                AudioBitrateMax: ?*u32,
                AudioBitrateMin: ?*u32,
                AudioBitrateMode: ?*u32,
                AudioBitrateStepping: ?*u32,
                AudioBitrate: ?*u32,
                AudioMethodID: ?*u32,
                AvailableAudioPrograms: ?*u32,
                AudioProgram: ?*u32,
                VideoBitrateMax: ?*u32,
                VideoBitrateMin: ?*u32,
                VideoBitrateMode: ?*u32,
                VideoBitrate: ?*u32,
                VideoBitrateStepping: ?*u32,
                VideoMethodID: ?*u32,
                SignalSourceID: ?*u32,
                SignalFormat: ?*u64,
                SignalLock: ?*BOOL,
                SignalLevel: ?*i32,
                SignalToNoiseRatio: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_Encoder,
                AudioBitrateMax: ?*u32,
                AudioBitrateMin: ?*u32,
                AudioBitrateMode: ?*u32,
                AudioBitrateStepping: ?*u32,
                AudioBitrate: ?*u32,
                AudioMethodID: ?*u32,
                AvailableAudioPrograms: ?*u32,
                AudioProgram: ?*u32,
                VideoBitrateMax: ?*u32,
                VideoBitrateMin: ?*u32,
                VideoBitrateMode: ?*u32,
                VideoBitrate: ?*u32,
                VideoBitrateStepping: ?*u32,
                VideoMethodID: ?*u32,
                SignalSourceID: ?*u32,
                SignalFormat: ?*u64,
                SignalLock: ?*BOOL,
                SignalLevel: ?*i32,
                SignalToNoiseRatio: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Encoder_QueryCapabilities(self: *const T, NumAudioFmts: ?*u32, NumVideoFmts: ?*u32) HRESULT {
                return @as(*const IBDA_Encoder.VTable, @ptrCast(self.vtable)).QueryCapabilities(@as(*const IBDA_Encoder, @ptrCast(self)), NumAudioFmts, NumVideoFmts);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Encoder_EnumAudioCapability(self: *const T, FmtIndex: u32, MethodID: ?*u32, AlgorithmType: ?*u32, SamplingRate: ?*u32, BitDepth: ?*u32, NumChannels: ?*u32) HRESULT {
                return @as(*const IBDA_Encoder.VTable, @ptrCast(self.vtable)).EnumAudioCapability(@as(*const IBDA_Encoder, @ptrCast(self)), FmtIndex, MethodID, AlgorithmType, SamplingRate, BitDepth, NumChannels);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Encoder_EnumVideoCapability(self: *const T, FmtIndex: u32, MethodID: ?*u32, AlgorithmType: ?*u32, VerticalSize: ?*u32, HorizontalSize: ?*u32, AspectRatio: ?*u32, FrameRateCode: ?*u32, ProgressiveSequence: ?*u32) HRESULT {
                return @as(*const IBDA_Encoder.VTable, @ptrCast(self.vtable)).EnumVideoCapability(@as(*const IBDA_Encoder, @ptrCast(self)), FmtIndex, MethodID, AlgorithmType, VerticalSize, HorizontalSize, AspectRatio, FrameRateCode, ProgressiveSequence);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Encoder_SetParameters(self: *const T, AudioBitrateMode: u32, AudioBitrate: u32, AudioMethodID: u32, AudioProgram: u32, VideoBitrateMode: u32, VideoBitrate: u32, VideoMethodID: u32) HRESULT {
                return @as(*const IBDA_Encoder.VTable, @ptrCast(self.vtable)).SetParameters(@as(*const IBDA_Encoder, @ptrCast(self)), AudioBitrateMode, AudioBitrate, AudioMethodID, AudioProgram, VideoBitrateMode, VideoBitrate, VideoMethodID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_Encoder_GetState(self: *const T, AudioBitrateMax: ?*u32, AudioBitrateMin: ?*u32, AudioBitrateMode: ?*u32, AudioBitrateStepping: ?*u32, AudioBitrate: ?*u32, AudioMethodID: ?*u32, AvailableAudioPrograms: ?*u32, AudioProgram: ?*u32, VideoBitrateMax: ?*u32, VideoBitrateMin: ?*u32, VideoBitrateMode: ?*u32, VideoBitrate: ?*u32, VideoBitrateStepping: ?*u32, VideoMethodID: ?*u32, SignalSourceID: ?*u32, SignalFormat: ?*u64, SignalLock: ?*BOOL, SignalLevel: ?*i32, SignalToNoiseRatio: ?*u32) HRESULT {
                return @as(*const IBDA_Encoder.VTable, @ptrCast(self.vtable)).GetState(@as(*const IBDA_Encoder, @ptrCast(self)), AudioBitrateMax, AudioBitrateMin, AudioBitrateMode, AudioBitrateStepping, AudioBitrate, AudioMethodID, AvailableAudioPrograms, AudioProgram, VideoBitrateMax, VideoBitrateMin, VideoBitrateMode, VideoBitrate, VideoBitrateStepping, VideoMethodID, SignalSourceID, SignalFormat, SignalLock, SignalLevel, SignalToNoiseRatio);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDA_FDC_Value = Guid.initString("138adc7e-58ae-437f-b0b4-c9fe19d5b4ac");
pub const IID_IBDA_FDC = &IID_IBDA_FDC_Value;
pub const IBDA_FDC = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_FDC,
                CurrentBitrate: ?*u32,
                CarrierLock: ?*BOOL,
                CurrentFrequency: ?*u32,
                CurrentSpectrumInversion: ?*BOOL,
                CurrentPIDList: ?*?BSTR,
                CurrentTIDList: ?*?BSTR,
                Overflow: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_FDC,
                CurrentBitrate: ?*u32,
                CarrierLock: ?*BOOL,
                CurrentFrequency: ?*u32,
                CurrentSpectrumInversion: ?*BOOL,
                CurrentPIDList: ?*?BSTR,
                CurrentTIDList: ?*?BSTR,
                Overflow: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RequestTables: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_FDC,
                TableIDs: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_FDC,
                TableIDs: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddPid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_FDC,
                PidsToAdd: ?BSTR,
                RemainingFilterEntries: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_FDC,
                PidsToAdd: ?BSTR,
                RemainingFilterEntries: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemovePid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_FDC,
                PidsToRemove: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_FDC,
                PidsToRemove: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddTid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_FDC,
                TidsToAdd: ?BSTR,
                CurrentTidList: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_FDC,
                TidsToAdd: ?BSTR,
                CurrentTidList: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveTid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_FDC,
                TidsToRemove: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_FDC,
                TidsToRemove: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableSection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_FDC,
                Pid: ?*u32,
                MaxBufferSize: u32,
                ActualSize: ?*u32,
                SecBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_FDC,
                Pid: ?*u32,
                MaxBufferSize: u32,
                ActualSize: ?*u32,
                SecBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FDC_GetStatus(self: *const T, CurrentBitrate: ?*u32, CarrierLock: ?*BOOL, CurrentFrequency: ?*u32, CurrentSpectrumInversion: ?*BOOL, CurrentPIDList: ?*?BSTR, CurrentTIDList: ?*?BSTR, Overflow: ?*BOOL) HRESULT {
                return @as(*const IBDA_FDC.VTable, @ptrCast(self.vtable)).GetStatus(@as(*const IBDA_FDC, @ptrCast(self)), CurrentBitrate, CarrierLock, CurrentFrequency, CurrentSpectrumInversion, CurrentPIDList, CurrentTIDList, Overflow);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FDC_RequestTables(self: *const T, TableIDs: ?BSTR) HRESULT {
                return @as(*const IBDA_FDC.VTable, @ptrCast(self.vtable)).RequestTables(@as(*const IBDA_FDC, @ptrCast(self)), TableIDs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FDC_AddPid(self: *const T, PidsToAdd: ?BSTR, RemainingFilterEntries: ?*u32) HRESULT {
                return @as(*const IBDA_FDC.VTable, @ptrCast(self.vtable)).AddPid(@as(*const IBDA_FDC, @ptrCast(self)), PidsToAdd, RemainingFilterEntries);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FDC_RemovePid(self: *const T, PidsToRemove: ?BSTR) HRESULT {
                return @as(*const IBDA_FDC.VTable, @ptrCast(self.vtable)).RemovePid(@as(*const IBDA_FDC, @ptrCast(self)), PidsToRemove);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FDC_AddTid(self: *const T, TidsToAdd: ?BSTR, CurrentTidList: ?*?BSTR) HRESULT {
                return @as(*const IBDA_FDC.VTable, @ptrCast(self.vtable)).AddTid(@as(*const IBDA_FDC, @ptrCast(self)), TidsToAdd, CurrentTidList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FDC_RemoveTid(self: *const T, TidsToRemove: ?BSTR) HRESULT {
                return @as(*const IBDA_FDC.VTable, @ptrCast(self.vtable)).RemoveTid(@as(*const IBDA_FDC, @ptrCast(self)), TidsToRemove);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_FDC_GetTableSection(self: *const T, Pid: ?*u32, MaxBufferSize: u32, ActualSize: ?*u32, SecBuffer: ?*u8) HRESULT {
                return @as(*const IBDA_FDC.VTable, @ptrCast(self.vtable)).GetTableSection(@as(*const IBDA_FDC, @ptrCast(self)), Pid, MaxBufferSize, ActualSize, SecBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDA_GuideDataDeliveryService_Value = Guid.initString("c0afcb73-23e7-4bc6-bafa-fdc167b4719f");
pub const IID_IBDA_GuideDataDeliveryService = &IID_IBDA_GuideDataDeliveryService_Value;
pub const IBDA_GuideDataDeliveryService = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetGuideDataType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_GuideDataDeliveryService,
                pguidDataType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_GuideDataDeliveryService,
                pguidDataType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGuideData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_GuideDataDeliveryService,
                pulcbBufferLen: ?*u32,
                pbBuffer: ?*u8,
                pulGuideDataPercentageProgress: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_GuideDataDeliveryService,
                pulcbBufferLen: ?*u32,
                pbBuffer: ?*u8,
                pulGuideDataPercentageProgress: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RequestGuideDataUpdate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_GuideDataDeliveryService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_GuideDataDeliveryService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTuneXmlFromServiceIdx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_GuideDataDeliveryService,
                ul64ServiceIdx: u64,
                pbstrTuneXml: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_GuideDataDeliveryService,
                ul64ServiceIdx: u64,
                pbstrTuneXml: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_GuideDataDeliveryService,
                pulcbBufferLen: ?*u32,
                pbBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_GuideDataDeliveryService,
                pulcbBufferLen: ?*u32,
                pbBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceInfoFromTuneXml: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_GuideDataDeliveryService,
                bstrTuneXml: ?BSTR,
                pbstrServiceDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_GuideDataDeliveryService,
                bstrTuneXml: ?BSTR,
                pbstrServiceDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_GuideDataDeliveryService_GetGuideDataType(self: *const T, pguidDataType: ?*Guid) HRESULT {
                return @as(*const IBDA_GuideDataDeliveryService.VTable, @ptrCast(self.vtable)).GetGuideDataType(@as(*const IBDA_GuideDataDeliveryService, @ptrCast(self)), pguidDataType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_GuideDataDeliveryService_GetGuideData(self: *const T, pulcbBufferLen: ?*u32, pbBuffer: ?*u8, pulGuideDataPercentageProgress: ?*u32) HRESULT {
                return @as(*const IBDA_GuideDataDeliveryService.VTable, @ptrCast(self.vtable)).GetGuideData(@as(*const IBDA_GuideDataDeliveryService, @ptrCast(self)), pulcbBufferLen, pbBuffer, pulGuideDataPercentageProgress);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_GuideDataDeliveryService_RequestGuideDataUpdate(self: *const T) HRESULT {
                return @as(*const IBDA_GuideDataDeliveryService.VTable, @ptrCast(self.vtable)).RequestGuideDataUpdate(@as(*const IBDA_GuideDataDeliveryService, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_GuideDataDeliveryService_GetTuneXmlFromServiceIdx(self: *const T, ul64ServiceIdx: u64, pbstrTuneXml: ?*?BSTR) HRESULT {
                return @as(*const IBDA_GuideDataDeliveryService.VTable, @ptrCast(self.vtable)).GetTuneXmlFromServiceIdx(@as(*const IBDA_GuideDataDeliveryService, @ptrCast(self)), ul64ServiceIdx, pbstrTuneXml);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_GuideDataDeliveryService_GetServices(self: *const T, pulcbBufferLen: ?*u32, pbBuffer: ?*u8) HRESULT {
                return @as(*const IBDA_GuideDataDeliveryService.VTable, @ptrCast(self.vtable)).GetServices(@as(*const IBDA_GuideDataDeliveryService, @ptrCast(self)), pulcbBufferLen, pbBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_GuideDataDeliveryService_GetServiceInfoFromTuneXml(self: *const T, bstrTuneXml: ?BSTR, pbstrServiceDescription: ?*?BSTR) HRESULT {
                return @as(*const IBDA_GuideDataDeliveryService.VTable, @ptrCast(self.vtable)).GetServiceInfoFromTuneXml(@as(*const IBDA_GuideDataDeliveryService, @ptrCast(self)), bstrTuneXml, pbstrServiceDescription);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_DRMService_Value = Guid.initString("bff6b5bb-b0ae-484c-9dca-73528fb0b46e");
pub const IID_IBDA_DRMService = &IID_IBDA_DRMService_Value;
pub const IBDA_DRMService = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetDRM: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRMService,
                puuidNewDrm: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRMService,
                puuidNewDrm: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDRMStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRMService,
                pbstrDrmUuidList: ?*?BSTR,
                DrmUuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRMService,
                pbstrDrmUuidList: ?*?BSTR,
                DrmUuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRMService_SetDRM(self: *const T, puuidNewDrm: ?*Guid) HRESULT {
                return @as(*const IBDA_DRMService.VTable, @ptrCast(self.vtable)).SetDRM(@as(*const IBDA_DRMService, @ptrCast(self)), puuidNewDrm);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRMService_GetDRMStatus(self: *const T, pbstrDrmUuidList: ?*?BSTR, DrmUuid: ?*Guid) HRESULT {
                return @as(*const IBDA_DRMService.VTable, @ptrCast(self.vtable)).GetDRMStatus(@as(*const IBDA_DRMService, @ptrCast(self)), pbstrDrmUuidList, DrmUuid);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_WMDRMSession_Value = Guid.initString("4be6fa3d-07cd-4139-8b80-8c18ba3aec88");
pub const IID_IBDA_WMDRMSession = &IID_IBDA_WMDRMSession_Value;
pub const IBDA_WMDRMSession = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMSession,
                MaxCaptureToken: ?*u32,
                MaxStreamingPid: ?*u32,
                MaxLicense: ?*u32,
                MinSecurityLevel: ?*u32,
                RevInfoSequenceNumber: ?*u32,
                RevInfoIssuedTime: ?*u64,
                RevInfoTTL: ?*u32,
                RevListVersion: ?*u32,
                ulState: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMSession,
                MaxCaptureToken: ?*u32,
                MaxStreamingPid: ?*u32,
                MaxLicense: ?*u32,
                MinSecurityLevel: ?*u32,
                RevInfoSequenceNumber: ?*u32,
                RevInfoIssuedTime: ?*u64,
                RevInfoTTL: ?*u32,
                RevListVersion: ?*u32,
                ulState: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRevInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMSession,
                ulRevInfoLen: u32,
                pbRevInfo: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMSession,
                ulRevInfoLen: u32,
                pbRevInfo: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCrl: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMSession,
                ulCrlLen: u32,
                pbCrlLen: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMSession,
                ulCrlLen: u32,
                pbCrlLen: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TransactMessage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMSession,
                ulcbRequest: u32,
                pbRequest: [*:0]u8,
                pulcbResponse: ?*u32,
                pbResponse: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMSession,
                ulcbRequest: u32,
                pbRequest: [*:0]u8,
                pulcbResponse: ?*u32,
                pbResponse: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLicense: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMSession,
                uuidKey: ?*Guid,
                pulPackageLen: ?*u32,
                pbPackage: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMSession,
                uuidKey: ?*Guid,
                pulPackageLen: ?*u32,
                pbPackage: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReissueLicense: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMSession,
                uuidKey: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMSession,
                uuidKey: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RenewLicense: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMSession,
                ulInXmrLicenseLen: u32,
                pbInXmrLicense: [*:0]u8,
                ulEntitlementTokenLen: u32,
                pbEntitlementToken: [*:0]u8,
                pulDescrambleStatus: ?*u32,
                pulOutXmrLicenseLen: ?*u32,
                pbOutXmrLicense: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMSession,
                ulInXmrLicenseLen: u32,
                pbInXmrLicense: [*:0]u8,
                ulEntitlementTokenLen: u32,
                pbEntitlementToken: [*:0]u8,
                pulDescrambleStatus: ?*u32,
                pulOutXmrLicenseLen: ?*u32,
                pbOutXmrLicense: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetKeyInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMSession,
                pulKeyInfoLen: ?*u32,
                pbKeyInfo: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMSession,
                pulKeyInfoLen: ?*u32,
                pbKeyInfo: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMSession_GetStatus(self: *const T, MaxCaptureToken: ?*u32, MaxStreamingPid: ?*u32, MaxLicense: ?*u32, MinSecurityLevel: ?*u32, RevInfoSequenceNumber: ?*u32, RevInfoIssuedTime: ?*u64, RevInfoTTL: ?*u32, RevListVersion: ?*u32, ulState: ?*u32) HRESULT {
                return @as(*const IBDA_WMDRMSession.VTable, @ptrCast(self.vtable)).GetStatus(@as(*const IBDA_WMDRMSession, @ptrCast(self)), MaxCaptureToken, MaxStreamingPid, MaxLicense, MinSecurityLevel, RevInfoSequenceNumber, RevInfoIssuedTime, RevInfoTTL, RevListVersion, ulState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMSession_SetRevInfo(self: *const T, ulRevInfoLen: u32, pbRevInfo: [*:0]u8) HRESULT {
                return @as(*const IBDA_WMDRMSession.VTable, @ptrCast(self.vtable)).SetRevInfo(@as(*const IBDA_WMDRMSession, @ptrCast(self)), ulRevInfoLen, pbRevInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMSession_SetCrl(self: *const T, ulCrlLen: u32, pbCrlLen: [*:0]u8) HRESULT {
                return @as(*const IBDA_WMDRMSession.VTable, @ptrCast(self.vtable)).SetCrl(@as(*const IBDA_WMDRMSession, @ptrCast(self)), ulCrlLen, pbCrlLen);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMSession_TransactMessage(self: *const T, ulcbRequest: u32, pbRequest: [*:0]u8, pulcbResponse: ?*u32, pbResponse: ?*u8) HRESULT {
                return @as(*const IBDA_WMDRMSession.VTable, @ptrCast(self.vtable)).TransactMessage(@as(*const IBDA_WMDRMSession, @ptrCast(self)), ulcbRequest, pbRequest, pulcbResponse, pbResponse);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMSession_GetLicense(self: *const T, uuidKey: ?*Guid, pulPackageLen: ?*u32, pbPackage: ?*u8) HRESULT {
                return @as(*const IBDA_WMDRMSession.VTable, @ptrCast(self.vtable)).GetLicense(@as(*const IBDA_WMDRMSession, @ptrCast(self)), uuidKey, pulPackageLen, pbPackage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMSession_ReissueLicense(self: *const T, uuidKey: ?*Guid) HRESULT {
                return @as(*const IBDA_WMDRMSession.VTable, @ptrCast(self.vtable)).ReissueLicense(@as(*const IBDA_WMDRMSession, @ptrCast(self)), uuidKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMSession_RenewLicense(self: *const T, ulInXmrLicenseLen: u32, pbInXmrLicense: [*:0]u8, ulEntitlementTokenLen: u32, pbEntitlementToken: [*:0]u8, pulDescrambleStatus: ?*u32, pulOutXmrLicenseLen: ?*u32, pbOutXmrLicense: ?*u8) HRESULT {
                return @as(*const IBDA_WMDRMSession.VTable, @ptrCast(self.vtable)).RenewLicense(@as(*const IBDA_WMDRMSession, @ptrCast(self)), ulInXmrLicenseLen, pbInXmrLicense, ulEntitlementTokenLen, pbEntitlementToken, pulDescrambleStatus, pulOutXmrLicenseLen, pbOutXmrLicense);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMSession_GetKeyInfo(self: *const T, pulKeyInfoLen: ?*u32, pbKeyInfo: ?*u8) HRESULT {
                return @as(*const IBDA_WMDRMSession.VTable, @ptrCast(self.vtable)).GetKeyInfo(@as(*const IBDA_WMDRMSession, @ptrCast(self)), pulKeyInfoLen, pbKeyInfo);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_WMDRMTuner_Value = Guid.initString("86d979cf-a8a7-4f94-b5fb-14c0aca68fe6");
pub const IID_IBDA_WMDRMTuner = &IID_IBDA_WMDRMTuner_Value;
pub const IBDA_WMDRMTuner = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        PurchaseEntitlement: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMTuner,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                ulPurchaseTokenLen: u32,
                pbPurchaseToken: [*:0]u8,
                pulDescrambleStatus: ?*u32,
                pulCaptureTokenLen: ?*u32,
                pbCaptureToken: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMTuner,
                ulDialogRequest: u32,
                bstrLanguage: ?BSTR,
                ulPurchaseTokenLen: u32,
                pbPurchaseToken: [*:0]u8,
                pulDescrambleStatus: ?*u32,
                pulCaptureTokenLen: ?*u32,
                pbCaptureToken: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CancelCaptureToken: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMTuner,
                ulCaptureTokenLen: u32,
                pbCaptureToken: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMTuner,
                ulCaptureTokenLen: u32,
                pbCaptureToken: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetPidProtection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMTuner,
                ulPid: u32,
                uuidKey: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMTuner,
                ulPid: u32,
                uuidKey: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPidProtection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMTuner,
                pulPid: u32,
                uuidKey: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMTuner,
                pulPid: u32,
                uuidKey: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSyncValue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMTuner,
                ulSyncValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMTuner,
                ulSyncValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStartCodeProfile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_WMDRMTuner,
                pulStartCodeProfileLen: ?*u32,
                pbStartCodeProfile: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_WMDRMTuner,
                pulStartCodeProfileLen: ?*u32,
                pbStartCodeProfile: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMTuner_PurchaseEntitlement(self: *const T, ulDialogRequest: u32, bstrLanguage: ?BSTR, ulPurchaseTokenLen: u32, pbPurchaseToken: [*:0]u8, pulDescrambleStatus: ?*u32, pulCaptureTokenLen: ?*u32, pbCaptureToken: ?*u8) HRESULT {
                return @as(*const IBDA_WMDRMTuner.VTable, @ptrCast(self.vtable)).PurchaseEntitlement(@as(*const IBDA_WMDRMTuner, @ptrCast(self)), ulDialogRequest, bstrLanguage, ulPurchaseTokenLen, pbPurchaseToken, pulDescrambleStatus, pulCaptureTokenLen, pbCaptureToken);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMTuner_CancelCaptureToken(self: *const T, ulCaptureTokenLen: u32, pbCaptureToken: [*:0]u8) HRESULT {
                return @as(*const IBDA_WMDRMTuner.VTable, @ptrCast(self.vtable)).CancelCaptureToken(@as(*const IBDA_WMDRMTuner, @ptrCast(self)), ulCaptureTokenLen, pbCaptureToken);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMTuner_SetPidProtection(self: *const T, ulPid: u32, uuidKey: ?*Guid) HRESULT {
                return @as(*const IBDA_WMDRMTuner.VTable, @ptrCast(self.vtable)).SetPidProtection(@as(*const IBDA_WMDRMTuner, @ptrCast(self)), ulPid, uuidKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMTuner_GetPidProtection(self: *const T, pulPid: u32, uuidKey: ?*Guid) HRESULT {
                return @as(*const IBDA_WMDRMTuner.VTable, @ptrCast(self.vtable)).GetPidProtection(@as(*const IBDA_WMDRMTuner, @ptrCast(self)), pulPid, uuidKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMTuner_SetSyncValue(self: *const T, ulSyncValue: u32) HRESULT {
                return @as(*const IBDA_WMDRMTuner.VTable, @ptrCast(self.vtable)).SetSyncValue(@as(*const IBDA_WMDRMTuner, @ptrCast(self)), ulSyncValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_WMDRMTuner_GetStartCodeProfile(self: *const T, pulStartCodeProfileLen: ?*u32, pbStartCodeProfile: ?*u8) HRESULT {
                return @as(*const IBDA_WMDRMTuner.VTable, @ptrCast(self.vtable)).GetStartCodeProfile(@as(*const IBDA_WMDRMTuner, @ptrCast(self)), pulStartCodeProfileLen, pbStartCodeProfile);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDA_DRIDRMService_Value = Guid.initString("1f9bc2a5-44a3-4c52-aab1-0bbce5a1381d");
pub const IID_IBDA_DRIDRMService = &IID_IBDA_DRIDRMService_Value;
pub const IBDA_DRIDRMService = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetDRM: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIDRMService,
                bstrNewDrm: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIDRMService,
                bstrNewDrm: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDRMStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIDRMService,
                pbstrDrmUuidList: ?*?BSTR,
                DrmUuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIDRMService,
                pbstrDrmUuidList: ?*?BSTR,
                DrmUuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPairingStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIDRMService,
                penumPairingStatus: ?*BDA_DrmPairingError,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIDRMService,
                penumPairingStatus: ?*BDA_DrmPairingError,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIDRMService_SetDRM(self: *const T, bstrNewDrm: ?BSTR) HRESULT {
                return @as(*const IBDA_DRIDRMService.VTable, @ptrCast(self.vtable)).SetDRM(@as(*const IBDA_DRIDRMService, @ptrCast(self)), bstrNewDrm);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIDRMService_GetDRMStatus(self: *const T, pbstrDrmUuidList: ?*?BSTR, DrmUuid: ?*Guid) HRESULT {
                return @as(*const IBDA_DRIDRMService.VTable, @ptrCast(self.vtable)).GetDRMStatus(@as(*const IBDA_DRIDRMService, @ptrCast(self)), pbstrDrmUuidList, DrmUuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIDRMService_GetPairingStatus(self: *const T, penumPairingStatus: ?*BDA_DrmPairingError) HRESULT {
                return @as(*const IBDA_DRIDRMService.VTable, @ptrCast(self.vtable)).GetPairingStatus(@as(*const IBDA_DRIDRMService, @ptrCast(self)), penumPairingStatus);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_DRIWMDRMSession_Value = Guid.initString("05c690f8-56db-4bb2-b053-79c12098bb26");
pub const IID_IBDA_DRIWMDRMSession = &IID_IBDA_DRIWMDRMSession_Value;
pub const IBDA_DRIWMDRMSession = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AcknowledgeLicense: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIWMDRMSession,
                hrLicenseAck: HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIWMDRMSession,
                hrLicenseAck: HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ProcessLicenseChallenge: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIWMDRMSession,
                dwcbLicenseMessage: u32,
                pbLicenseMessage: [*:0]u8,
                pdwcbLicenseResponse: ?*u32,
                ppbLicenseResponse: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIWMDRMSession,
                dwcbLicenseMessage: u32,
                pbLicenseMessage: [*:0]u8,
                pdwcbLicenseResponse: ?*u32,
                ppbLicenseResponse: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ProcessRegistrationChallenge: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIWMDRMSession,
                dwcbRegistrationMessage: u32,
                pbRegistrationMessage: [*:0]u8,
                pdwcbRegistrationResponse: ?*u32,
                ppbRegistrationResponse: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIWMDRMSession,
                dwcbRegistrationMessage: u32,
                pbRegistrationMessage: [*:0]u8,
                pdwcbRegistrationResponse: ?*u32,
                ppbRegistrationResponse: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRevInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIWMDRMSession,
                dwRevInfoLen: u32,
                pbRevInfo: [*:0]u8,
                pdwResponse: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIWMDRMSession,
                dwRevInfoLen: u32,
                pbRevInfo: [*:0]u8,
                pdwResponse: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCrl: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIWMDRMSession,
                dwCrlLen: u32,
                pbCrlLen: [*:0]u8,
                pdwResponse: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIWMDRMSession,
                dwCrlLen: u32,
                pbCrlLen: [*:0]u8,
                pdwResponse: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetHMSAssociationData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIWMDRMSession,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIWMDRMSession,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastCardeaError: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_DRIWMDRMSession,
                pdwError: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_DRIWMDRMSession,
                pdwError: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIWMDRMSession_AcknowledgeLicense(self: *const T, hrLicenseAck: HRESULT) HRESULT {
                return @as(*const IBDA_DRIWMDRMSession.VTable, @ptrCast(self.vtable)).AcknowledgeLicense(@as(*const IBDA_DRIWMDRMSession, @ptrCast(self)), hrLicenseAck);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIWMDRMSession_ProcessLicenseChallenge(self: *const T, dwcbLicenseMessage: u32, pbLicenseMessage: [*:0]u8, pdwcbLicenseResponse: ?*u32, ppbLicenseResponse: ?*?*u8) HRESULT {
                return @as(*const IBDA_DRIWMDRMSession.VTable, @ptrCast(self.vtable)).ProcessLicenseChallenge(@as(*const IBDA_DRIWMDRMSession, @ptrCast(self)), dwcbLicenseMessage, pbLicenseMessage, pdwcbLicenseResponse, ppbLicenseResponse);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIWMDRMSession_ProcessRegistrationChallenge(self: *const T, dwcbRegistrationMessage: u32, pbRegistrationMessage: [*:0]u8, pdwcbRegistrationResponse: ?*u32, ppbRegistrationResponse: ?*?*u8) HRESULT {
                return @as(*const IBDA_DRIWMDRMSession.VTable, @ptrCast(self.vtable)).ProcessRegistrationChallenge(@as(*const IBDA_DRIWMDRMSession, @ptrCast(self)), dwcbRegistrationMessage, pbRegistrationMessage, pdwcbRegistrationResponse, ppbRegistrationResponse);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIWMDRMSession_SetRevInfo(self: *const T, dwRevInfoLen: u32, pbRevInfo: [*:0]u8, pdwResponse: ?*u32) HRESULT {
                return @as(*const IBDA_DRIWMDRMSession.VTable, @ptrCast(self.vtable)).SetRevInfo(@as(*const IBDA_DRIWMDRMSession, @ptrCast(self)), dwRevInfoLen, pbRevInfo, pdwResponse);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIWMDRMSession_SetCrl(self: *const T, dwCrlLen: u32, pbCrlLen: [*:0]u8, pdwResponse: ?*u32) HRESULT {
                return @as(*const IBDA_DRIWMDRMSession.VTable, @ptrCast(self.vtable)).SetCrl(@as(*const IBDA_DRIWMDRMSession, @ptrCast(self)), dwCrlLen, pbCrlLen, pdwResponse);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIWMDRMSession_GetHMSAssociationData(self: *const T) HRESULT {
                return @as(*const IBDA_DRIWMDRMSession.VTable, @ptrCast(self.vtable)).GetHMSAssociationData(@as(*const IBDA_DRIWMDRMSession, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_DRIWMDRMSession_GetLastCardeaError(self: *const T, pdwError: ?*u32) HRESULT {
                return @as(*const IBDA_DRIWMDRMSession.VTable, @ptrCast(self.vtable)).GetLastCardeaError(@as(*const IBDA_DRIWMDRMSession, @ptrCast(self)), pdwError);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDA_MUX_Value = Guid.initString("942aafec-4c05-4c74-b8eb-8706c2a4943f");
pub const IID_IBDA_MUX = &IID_IBDA_MUX_Value;
pub const IBDA_MUX = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetPidList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_MUX,
                ulPidListCount: u32,
                pbPidListBuffer: [*]BDA_MUX_PIDLISTITEM,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_MUX,
                ulPidListCount: u32,
                pbPidListBuffer: [*]BDA_MUX_PIDLISTITEM,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPidList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_MUX,
                pulPidListCount: ?*u32,
                pbPidListBuffer: ?*BDA_MUX_PIDLISTITEM,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_MUX,
                pulPidListCount: ?*u32,
                pbPidListBuffer: ?*BDA_MUX_PIDLISTITEM,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_MUX_SetPidList(self: *const T, ulPidListCount: u32, pbPidListBuffer: [*]BDA_MUX_PIDLISTITEM) HRESULT {
                return @as(*const IBDA_MUX.VTable, @ptrCast(self.vtable)).SetPidList(@as(*const IBDA_MUX, @ptrCast(self)), ulPidListCount, pbPidListBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_MUX_GetPidList(self: *const T, pulPidListCount: ?*u32, pbPidListBuffer: ?*BDA_MUX_PIDLISTITEM) HRESULT {
                return @as(*const IBDA_MUX.VTable, @ptrCast(self.vtable)).GetPidList(@as(*const IBDA_MUX, @ptrCast(self)), pulPidListCount, pbPidListBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_TransportStreamSelector_Value = Guid.initString("1dcfafe9-b45e-41b3-bb2a-561eb129ae98");
pub const IID_IBDA_TransportStreamSelector = &IID_IBDA_TransportStreamSelector_Value;
pub const IBDA_TransportStreamSelector = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetTSID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_TransportStreamSelector,
                usTSID: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_TransportStreamSelector,
                usTSID: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTSInformation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_TransportStreamSelector,
                pulTSInformationBufferLen: ?*u32,
                pbTSInformationBuffer: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_TransportStreamSelector,
                pulTSInformationBufferLen: ?*u32,
                pbTSInformationBuffer: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_TransportStreamSelector_SetTSID(self: *const T, usTSID: u16) HRESULT {
                return @as(*const IBDA_TransportStreamSelector.VTable, @ptrCast(self.vtable)).SetTSID(@as(*const IBDA_TransportStreamSelector, @ptrCast(self)), usTSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_TransportStreamSelector_GetTSInformation(self: *const T, pulTSInformationBufferLen: ?*u32, pbTSInformationBuffer: [*:0]u8) HRESULT {
                return @as(*const IBDA_TransportStreamSelector.VTable, @ptrCast(self.vtable)).GetTSInformation(@as(*const IBDA_TransportStreamSelector, @ptrCast(self)), pulTSInformationBufferLen, pbTSInformationBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDA_UserActivityService_Value = Guid.initString("53b14189-e478-4b7a-a1ff-506db4b99dfe");
pub const IID_IBDA_UserActivityService = &IID_IBDA_UserActivityService_Value;
pub const IBDA_UserActivityService = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetCurrentTunerUseReason: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_UserActivityService,
                dwUseReason: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_UserActivityService,
                dwUseReason: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetUserActivityInterval: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_UserActivityService,
                pdwActivityInterval: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_UserActivityService,
                pdwActivityInterval: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UserActivityDetected: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_UserActivityService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_UserActivityService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_UserActivityService_SetCurrentTunerUseReason(self: *const T, dwUseReason: u32) HRESULT {
                return @as(*const IBDA_UserActivityService.VTable, @ptrCast(self.vtable)).SetCurrentTunerUseReason(@as(*const IBDA_UserActivityService, @ptrCast(self)), dwUseReason);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_UserActivityService_GetUserActivityInterval(self: *const T, pdwActivityInterval: ?*u32) HRESULT {
                return @as(*const IBDA_UserActivityService.VTable, @ptrCast(self.vtable)).GetUserActivityInterval(@as(*const IBDA_UserActivityService, @ptrCast(self)), pdwActivityInterval);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_UserActivityService_UserActivityDetected(self: *const T) HRESULT {
                return @as(*const IBDA_UserActivityService.VTable, @ptrCast(self.vtable)).UserActivityDetected(@as(*const IBDA_UserActivityService, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESEvent_Value = Guid.initString("1f0e5357-af43-44e6-8547-654c645145d2");
pub const IID_IESEvent = &IID_IESEvent_Value;
pub const IESEvent = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetEventId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEvent,
                pdwEventId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEvent,
                pdwEventId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEventType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEvent,
                pguidEventType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEvent,
                pguidEventType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCompletionStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEvent,
                dwResult: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEvent,
                dwResult: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEvent,
                pbData: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEvent,
                pbData: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStringData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEvent,
                pbstrData: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEvent,
                pbstrData: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEvent_GetEventId(self: *const T, pdwEventId: ?*u32) HRESULT {
                return @as(*const IESEvent.VTable, @ptrCast(self.vtable)).GetEventId(@as(*const IESEvent, @ptrCast(self)), pdwEventId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEvent_GetEventType(self: *const T, pguidEventType: ?*Guid) HRESULT {
                return @as(*const IESEvent.VTable, @ptrCast(self.vtable)).GetEventType(@as(*const IESEvent, @ptrCast(self)), pguidEventType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEvent_SetCompletionStatus(self: *const T, dwResult: u32) HRESULT {
                return @as(*const IESEvent.VTable, @ptrCast(self.vtable)).SetCompletionStatus(@as(*const IESEvent, @ptrCast(self)), dwResult);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEvent_GetData(self: *const T, pbData: ?*?*SAFEARRAY) HRESULT {
                return @as(*const IESEvent.VTable, @ptrCast(self.vtable)).GetData(@as(*const IESEvent, @ptrCast(self)), pbData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEvent_GetStringData(self: *const T, pbstrData: ?*?BSTR) HRESULT {
                return @as(*const IESEvent.VTable, @ptrCast(self.vtable)).GetStringData(@as(*const IESEvent, @ptrCast(self)), pbstrData);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESEvents_Value = Guid.initString("abd414bf-cfe5-4e5e-af5b-4b4e49c5bfeb");
pub const IID_IESEvents = &IID_IESEvents_Value;
pub const IESEvents = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        OnESEventReceived: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEvents,
                guidEventType: Guid,
                pESEvent: ?*IESEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEvents,
                guidEventType: Guid,
                pESEvent: ?*IESEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEvents_OnESEventReceived(self: *const T, guidEventType: Guid, pESEvent: ?*IESEvent) HRESULT {
                return @as(*const IESEvents.VTable, @ptrCast(self.vtable)).OnESEventReceived(@as(*const IESEvents, @ptrCast(self)), guidEventType, pESEvent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IBroadcastEvent_Value = Guid.initString("3b21263f-26e8-489d-aac4-924f7efd9511");
pub const IID_IBroadcastEvent = &IID_IBroadcastEvent_Value;
pub const IBroadcastEvent = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Fire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBroadcastEvent,
                EventID: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBroadcastEvent,
                EventID: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBroadcastEvent_Fire(self: *const T, EventID: Guid) HRESULT {
                return @as(*const IBroadcastEvent.VTable, @ptrCast(self.vtable)).Fire(@as(*const IBroadcastEvent, @ptrCast(self)), EventID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBroadcastEventEx_Value = Guid.initString("3d9e3887-1929-423f-8021-43682de95448");
pub const IID_IBroadcastEventEx = &IID_IBroadcastEventEx_Value;
pub const IBroadcastEventEx = extern struct {
    pub const VTable = extern struct {
        base: IBroadcastEvent.VTable,
        FireEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBroadcastEventEx,
                EventID: Guid,
                Param1: u32,
                Param2: u32,
                Param3: u32,
                Param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBroadcastEventEx,
                EventID: Guid,
                Param1: u32,
                Param2: u32,
                Param3: u32,
                Param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IBroadcastEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBroadcastEventEx_FireEx(self: *const T, EventID: Guid, Param1: u32, Param2: u32, Param3: u32, Param4: u32) HRESULT {
                return @as(*const IBroadcastEventEx.VTable, @ptrCast(self.vtable)).FireEx(@as(*const IBroadcastEventEx, @ptrCast(self)), EventID, Param1, Param2, Param3, Param4);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMNetShowConfig_Value = Guid.initString("fa2aa8f1-8b62-11d0-a520-000000000000");
pub const IID_IAMNetShowConfig = &IID_IAMNetShowConfig_Value;
pub const IAMNetShowConfig = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BufferingTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pBufferingTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pBufferingTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BufferingTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                BufferingTime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                BufferingTime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_UseFixedUDPPort: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pUseFixedUDPPort: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pUseFixedUDPPort: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_UseFixedUDPPort: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                UseFixedUDPPort: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                UseFixedUDPPort: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FixedUDPPort: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pFixedUDPPort: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pFixedUDPPort: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FixedUDPPort: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                FixedUDPPort: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                FixedUDPPort: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_UseHTTPProxy: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pUseHTTPProxy: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pUseHTTPProxy: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_UseHTTPProxy: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                UseHTTPProxy: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                UseHTTPProxy: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EnableAutoProxy: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pEnableAutoProxy: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pEnableAutoProxy: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_EnableAutoProxy: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                EnableAutoProxy: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                EnableAutoProxy: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_HTTPProxyHost: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pbstrHTTPProxyHost: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pbstrHTTPProxyHost: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_HTTPProxyHost: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                bstrHTTPProxyHost: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                bstrHTTPProxyHost: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_HTTPProxyPort: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pHTTPProxyPort: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pHTTPProxyPort: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_HTTPProxyPort: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                HTTPProxyPort: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                HTTPProxyPort: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EnableMulticast: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pEnableMulticast: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pEnableMulticast: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_EnableMulticast: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                EnableMulticast: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                EnableMulticast: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EnableUDP: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pEnableUDP: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pEnableUDP: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_EnableUDP: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                EnableUDP: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                EnableUDP: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EnableTCP: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pEnableTCP: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pEnableTCP: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_EnableTCP: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                EnableTCP: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                EnableTCP: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EnableHTTP: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                pEnableHTTP: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                pEnableHTTP: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_EnableHTTP: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowConfig,
                EnableHTTP: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowConfig,
                EnableHTTP: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_BufferingTime(self: *const T, pBufferingTime: ?*f64) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_BufferingTime(@as(*const IAMNetShowConfig, @ptrCast(self)), pBufferingTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_BufferingTime(self: *const T, BufferingTime: f64) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_BufferingTime(@as(*const IAMNetShowConfig, @ptrCast(self)), BufferingTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_UseFixedUDPPort(self: *const T, pUseFixedUDPPort: ?*i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_UseFixedUDPPort(@as(*const IAMNetShowConfig, @ptrCast(self)), pUseFixedUDPPort);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_UseFixedUDPPort(self: *const T, UseFixedUDPPort: i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_UseFixedUDPPort(@as(*const IAMNetShowConfig, @ptrCast(self)), UseFixedUDPPort);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_FixedUDPPort(self: *const T, pFixedUDPPort: ?*i32) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_FixedUDPPort(@as(*const IAMNetShowConfig, @ptrCast(self)), pFixedUDPPort);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_FixedUDPPort(self: *const T, FixedUDPPort: i32) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_FixedUDPPort(@as(*const IAMNetShowConfig, @ptrCast(self)), FixedUDPPort);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_UseHTTPProxy(self: *const T, pUseHTTPProxy: ?*i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_UseHTTPProxy(@as(*const IAMNetShowConfig, @ptrCast(self)), pUseHTTPProxy);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_UseHTTPProxy(self: *const T, UseHTTPProxy: i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_UseHTTPProxy(@as(*const IAMNetShowConfig, @ptrCast(self)), UseHTTPProxy);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_EnableAutoProxy(self: *const T, pEnableAutoProxy: ?*i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_EnableAutoProxy(@as(*const IAMNetShowConfig, @ptrCast(self)), pEnableAutoProxy);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_EnableAutoProxy(self: *const T, EnableAutoProxy: i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_EnableAutoProxy(@as(*const IAMNetShowConfig, @ptrCast(self)), EnableAutoProxy);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_HTTPProxyHost(self: *const T, pbstrHTTPProxyHost: ?*?BSTR) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_HTTPProxyHost(@as(*const IAMNetShowConfig, @ptrCast(self)), pbstrHTTPProxyHost);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_HTTPProxyHost(self: *const T, bstrHTTPProxyHost: ?BSTR) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_HTTPProxyHost(@as(*const IAMNetShowConfig, @ptrCast(self)), bstrHTTPProxyHost);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_HTTPProxyPort(self: *const T, pHTTPProxyPort: ?*i32) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_HTTPProxyPort(@as(*const IAMNetShowConfig, @ptrCast(self)), pHTTPProxyPort);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_HTTPProxyPort(self: *const T, HTTPProxyPort: i32) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_HTTPProxyPort(@as(*const IAMNetShowConfig, @ptrCast(self)), HTTPProxyPort);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_EnableMulticast(self: *const T, pEnableMulticast: ?*i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_EnableMulticast(@as(*const IAMNetShowConfig, @ptrCast(self)), pEnableMulticast);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_EnableMulticast(self: *const T, EnableMulticast: i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_EnableMulticast(@as(*const IAMNetShowConfig, @ptrCast(self)), EnableMulticast);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_EnableUDP(self: *const T, pEnableUDP: ?*i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_EnableUDP(@as(*const IAMNetShowConfig, @ptrCast(self)), pEnableUDP);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_EnableUDP(self: *const T, EnableUDP: i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_EnableUDP(@as(*const IAMNetShowConfig, @ptrCast(self)), EnableUDP);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_EnableTCP(self: *const T, pEnableTCP: ?*i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_EnableTCP(@as(*const IAMNetShowConfig, @ptrCast(self)), pEnableTCP);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_EnableTCP(self: *const T, EnableTCP: i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_EnableTCP(@as(*const IAMNetShowConfig, @ptrCast(self)), EnableTCP);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_get_EnableHTTP(self: *const T, pEnableHTTP: ?*i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).get_EnableHTTP(@as(*const IAMNetShowConfig, @ptrCast(self)), pEnableHTTP);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowConfig_put_EnableHTTP(self: *const T, EnableHTTP: i16) HRESULT {
                return @as(*const IAMNetShowConfig.VTable, @ptrCast(self.vtable)).put_EnableHTTP(@as(*const IAMNetShowConfig, @ptrCast(self)), EnableHTTP);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMChannelInfo_Value = Guid.initString("fa2aa8f2-8b62-11d0-a520-000000000000");
pub const IID_IAMChannelInfo = &IID_IAMChannelInfo_Value;
pub const IAMChannelInfo = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ChannelName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMChannelInfo,
                pbstrChannelName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMChannelInfo,
                pbstrChannelName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ChannelDescription: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMChannelInfo,
                pbstrChannelDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMChannelInfo,
                pbstrChannelDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ChannelURL: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMChannelInfo,
                pbstrChannelURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMChannelInfo,
                pbstrChannelURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ContactAddress: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMChannelInfo,
                pbstrContactAddress: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMChannelInfo,
                pbstrContactAddress: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ContactPhone: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMChannelInfo,
                pbstrContactPhone: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMChannelInfo,
                pbstrContactPhone: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ContactEmail: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMChannelInfo,
                pbstrContactEmail: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMChannelInfo,
                pbstrContactEmail: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMChannelInfo_get_ChannelName(self: *const T, pbstrChannelName: ?*?BSTR) HRESULT {
                return @as(*const IAMChannelInfo.VTable, @ptrCast(self.vtable)).get_ChannelName(@as(*const IAMChannelInfo, @ptrCast(self)), pbstrChannelName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMChannelInfo_get_ChannelDescription(self: *const T, pbstrChannelDescription: ?*?BSTR) HRESULT {
                return @as(*const IAMChannelInfo.VTable, @ptrCast(self.vtable)).get_ChannelDescription(@as(*const IAMChannelInfo, @ptrCast(self)), pbstrChannelDescription);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMChannelInfo_get_ChannelURL(self: *const T, pbstrChannelURL: ?*?BSTR) HRESULT {
                return @as(*const IAMChannelInfo.VTable, @ptrCast(self.vtable)).get_ChannelURL(@as(*const IAMChannelInfo, @ptrCast(self)), pbstrChannelURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMChannelInfo_get_ContactAddress(self: *const T, pbstrContactAddress: ?*?BSTR) HRESULT {
                return @as(*const IAMChannelInfo.VTable, @ptrCast(self.vtable)).get_ContactAddress(@as(*const IAMChannelInfo, @ptrCast(self)), pbstrContactAddress);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMChannelInfo_get_ContactPhone(self: *const T, pbstrContactPhone: ?*?BSTR) HRESULT {
                return @as(*const IAMChannelInfo.VTable, @ptrCast(self.vtable)).get_ContactPhone(@as(*const IAMChannelInfo, @ptrCast(self)), pbstrContactPhone);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMChannelInfo_get_ContactEmail(self: *const T, pbstrContactEmail: ?*?BSTR) HRESULT {
                return @as(*const IAMChannelInfo.VTable, @ptrCast(self.vtable)).get_ContactEmail(@as(*const IAMChannelInfo, @ptrCast(self)), pbstrContactEmail);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMNetworkStatus_Value = Guid.initString("fa2aa8f3-8b62-11d0-a520-000000000000");
pub const IID_IAMNetworkStatus = &IID_IAMNetworkStatus_Value;
pub const IAMNetworkStatus = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ReceivedPackets: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetworkStatus,
                pReceivedPackets: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetworkStatus,
                pReceivedPackets: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_RecoveredPackets: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetworkStatus,
                pRecoveredPackets: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetworkStatus,
                pRecoveredPackets: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LostPackets: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetworkStatus,
                pLostPackets: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetworkStatus,
                pLostPackets: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ReceptionQuality: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetworkStatus,
                pReceptionQuality: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetworkStatus,
                pReceptionQuality: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BufferingCount: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetworkStatus,
                pBufferingCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetworkStatus,
                pBufferingCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_IsBroadcast: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetworkStatus,
                pIsBroadcast: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetworkStatus,
                pIsBroadcast: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BufferingProgress: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetworkStatus,
                pBufferingProgress: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetworkStatus,
                pBufferingProgress: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetworkStatus_get_ReceivedPackets(self: *const T, pReceivedPackets: ?*i32) HRESULT {
                return @as(*const IAMNetworkStatus.VTable, @ptrCast(self.vtable)).get_ReceivedPackets(@as(*const IAMNetworkStatus, @ptrCast(self)), pReceivedPackets);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetworkStatus_get_RecoveredPackets(self: *const T, pRecoveredPackets: ?*i32) HRESULT {
                return @as(*const IAMNetworkStatus.VTable, @ptrCast(self.vtable)).get_RecoveredPackets(@as(*const IAMNetworkStatus, @ptrCast(self)), pRecoveredPackets);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetworkStatus_get_LostPackets(self: *const T, pLostPackets: ?*i32) HRESULT {
                return @as(*const IAMNetworkStatus.VTable, @ptrCast(self.vtable)).get_LostPackets(@as(*const IAMNetworkStatus, @ptrCast(self)), pLostPackets);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetworkStatus_get_ReceptionQuality(self: *const T, pReceptionQuality: ?*i32) HRESULT {
                return @as(*const IAMNetworkStatus.VTable, @ptrCast(self.vtable)).get_ReceptionQuality(@as(*const IAMNetworkStatus, @ptrCast(self)), pReceptionQuality);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetworkStatus_get_BufferingCount(self: *const T, pBufferingCount: ?*i32) HRESULT {
                return @as(*const IAMNetworkStatus.VTable, @ptrCast(self.vtable)).get_BufferingCount(@as(*const IAMNetworkStatus, @ptrCast(self)), pBufferingCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetworkStatus_get_IsBroadcast(self: *const T, pIsBroadcast: ?*i16) HRESULT {
                return @as(*const IAMNetworkStatus.VTable, @ptrCast(self.vtable)).get_IsBroadcast(@as(*const IAMNetworkStatus, @ptrCast(self)), pIsBroadcast);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetworkStatus_get_BufferingProgress(self: *const T, pBufferingProgress: ?*i32) HRESULT {
                return @as(*const IAMNetworkStatus.VTable, @ptrCast(self.vtable)).get_BufferingProgress(@as(*const IAMNetworkStatus, @ptrCast(self)), pBufferingProgress);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AMExtendedSeekingCapabilities = enum(i32) {
    CANSEEK = 1,
    CANSCAN = 2,
    MARKERSEEK = 4,
    SCANWITHOUTCLOCK = 8,
    NOSTANDARDREPAINT = 16,
    BUFFERING = 32,
    SENDS_VIDEOFRAMEREADY = 64,
};
pub const AM_EXSEEK_CANSEEK = AMExtendedSeekingCapabilities.CANSEEK;
pub const AM_EXSEEK_CANSCAN = AMExtendedSeekingCapabilities.CANSCAN;
pub const AM_EXSEEK_MARKERSEEK = AMExtendedSeekingCapabilities.MARKERSEEK;
pub const AM_EXSEEK_SCANWITHOUTCLOCK = AMExtendedSeekingCapabilities.SCANWITHOUTCLOCK;
pub const AM_EXSEEK_NOSTANDARDREPAINT = AMExtendedSeekingCapabilities.NOSTANDARDREPAINT;
pub const AM_EXSEEK_BUFFERING = AMExtendedSeekingCapabilities.BUFFERING;
pub const AM_EXSEEK_SENDS_VIDEOFRAMEREADY = AMExtendedSeekingCapabilities.SENDS_VIDEOFRAMEREADY;

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMExtendedSeeking_Value = Guid.initString("fa2aa8f9-8b62-11d0-a520-000000000000");
pub const IID_IAMExtendedSeeking = &IID_IAMExtendedSeeking_Value;
pub const IAMExtendedSeeking = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ExSeekCapabilities: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtendedSeeking,
                pExCapabilities: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtendedSeeking,
                pExCapabilities: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MarkerCount: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtendedSeeking,
                pMarkerCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtendedSeeking,
                pMarkerCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentMarker: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtendedSeeking,
                pCurrentMarker: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtendedSeeking,
                pCurrentMarker: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMarkerTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtendedSeeking,
                MarkerNum: i32,
                pMarkerTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtendedSeeking,
                MarkerNum: i32,
                pMarkerTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMarkerName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMExtendedSeeking,
                MarkerNum: i32,
                pbstrMarkerName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMExtendedSeeking,
                MarkerNum: i32,
                pbstrMarkerName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PlaybackSpeed: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtendedSeeking,
                Speed: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtendedSeeking,
                Speed: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PlaybackSpeed: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtendedSeeking,
                pSpeed: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtendedSeeking,
                pSpeed: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedSeeking_get_ExSeekCapabilities(self: *const T, pExCapabilities: ?*i32) HRESULT {
                return @as(*const IAMExtendedSeeking.VTable, @ptrCast(self.vtable)).get_ExSeekCapabilities(@as(*const IAMExtendedSeeking, @ptrCast(self)), pExCapabilities);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedSeeking_get_MarkerCount(self: *const T, pMarkerCount: ?*i32) HRESULT {
                return @as(*const IAMExtendedSeeking.VTable, @ptrCast(self.vtable)).get_MarkerCount(@as(*const IAMExtendedSeeking, @ptrCast(self)), pMarkerCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedSeeking_get_CurrentMarker(self: *const T, pCurrentMarker: ?*i32) HRESULT {
                return @as(*const IAMExtendedSeeking.VTable, @ptrCast(self.vtable)).get_CurrentMarker(@as(*const IAMExtendedSeeking, @ptrCast(self)), pCurrentMarker);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedSeeking_GetMarkerTime(self: *const T, MarkerNum: i32, pMarkerTime: ?*f64) HRESULT {
                return @as(*const IAMExtendedSeeking.VTable, @ptrCast(self.vtable)).GetMarkerTime(@as(*const IAMExtendedSeeking, @ptrCast(self)), MarkerNum, pMarkerTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedSeeking_GetMarkerName(self: *const T, MarkerNum: i32, pbstrMarkerName: ?*?BSTR) HRESULT {
                return @as(*const IAMExtendedSeeking.VTable, @ptrCast(self.vtable)).GetMarkerName(@as(*const IAMExtendedSeeking, @ptrCast(self)), MarkerNum, pbstrMarkerName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedSeeking_put_PlaybackSpeed(self: *const T, Speed: f64) HRESULT {
                return @as(*const IAMExtendedSeeking.VTable, @ptrCast(self.vtable)).put_PlaybackSpeed(@as(*const IAMExtendedSeeking, @ptrCast(self)), Speed);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedSeeking_get_PlaybackSpeed(self: *const T, pSpeed: ?*f64) HRESULT {
                return @as(*const IAMExtendedSeeking.VTable, @ptrCast(self.vtable)).get_PlaybackSpeed(@as(*const IAMExtendedSeeking, @ptrCast(self)), pSpeed);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMNetShowExProps_Value = Guid.initString("fa2aa8f5-8b62-11d0-a520-000000000000");
pub const IID_IAMNetShowExProps = &IID_IAMNetShowExProps_Value;
pub const IAMNetShowExProps = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SourceProtocol: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowExProps,
                pSourceProtocol: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowExProps,
                pSourceProtocol: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Bandwidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowExProps,
                pBandwidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowExProps,
                pBandwidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ErrorCorrection: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowExProps,
                pbstrErrorCorrection: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowExProps,
                pbstrErrorCorrection: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CodecCount: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowExProps,
                pCodecCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowExProps,
                pCodecCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCodecInstalled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMNetShowExProps,
                CodecNum: i32,
                pCodecInstalled: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMNetShowExProps,
                CodecNum: i32,
                pCodecInstalled: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCodecDescription: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMNetShowExProps,
                CodecNum: i32,
                pbstrCodecDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMNetShowExProps,
                CodecNum: i32,
                pbstrCodecDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCodecURL: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMNetShowExProps,
                CodecNum: i32,
                pbstrCodecURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMNetShowExProps,
                CodecNum: i32,
                pbstrCodecURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CreationDate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowExProps,
                pCreationDate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowExProps,
                pCreationDate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SourceLink: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowExProps,
                pbstrSourceLink: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowExProps,
                pbstrSourceLink: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowExProps_get_SourceProtocol(self: *const T, pSourceProtocol: ?*i32) HRESULT {
                return @as(*const IAMNetShowExProps.VTable, @ptrCast(self.vtable)).get_SourceProtocol(@as(*const IAMNetShowExProps, @ptrCast(self)), pSourceProtocol);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowExProps_get_Bandwidth(self: *const T, pBandwidth: ?*i32) HRESULT {
                return @as(*const IAMNetShowExProps.VTable, @ptrCast(self.vtable)).get_Bandwidth(@as(*const IAMNetShowExProps, @ptrCast(self)), pBandwidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowExProps_get_ErrorCorrection(self: *const T, pbstrErrorCorrection: ?*?BSTR) HRESULT {
                return @as(*const IAMNetShowExProps.VTable, @ptrCast(self.vtable)).get_ErrorCorrection(@as(*const IAMNetShowExProps, @ptrCast(self)), pbstrErrorCorrection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowExProps_get_CodecCount(self: *const T, pCodecCount: ?*i32) HRESULT {
                return @as(*const IAMNetShowExProps.VTable, @ptrCast(self.vtable)).get_CodecCount(@as(*const IAMNetShowExProps, @ptrCast(self)), pCodecCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowExProps_GetCodecInstalled(self: *const T, CodecNum: i32, pCodecInstalled: ?*i16) HRESULT {
                return @as(*const IAMNetShowExProps.VTable, @ptrCast(self.vtable)).GetCodecInstalled(@as(*const IAMNetShowExProps, @ptrCast(self)), CodecNum, pCodecInstalled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowExProps_GetCodecDescription(self: *const T, CodecNum: i32, pbstrCodecDescription: ?*?BSTR) HRESULT {
                return @as(*const IAMNetShowExProps.VTable, @ptrCast(self.vtable)).GetCodecDescription(@as(*const IAMNetShowExProps, @ptrCast(self)), CodecNum, pbstrCodecDescription);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowExProps_GetCodecURL(self: *const T, CodecNum: i32, pbstrCodecURL: ?*?BSTR) HRESULT {
                return @as(*const IAMNetShowExProps.VTable, @ptrCast(self.vtable)).GetCodecURL(@as(*const IAMNetShowExProps, @ptrCast(self)), CodecNum, pbstrCodecURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowExProps_get_CreationDate(self: *const T, pCreationDate: ?*f64) HRESULT {
                return @as(*const IAMNetShowExProps.VTable, @ptrCast(self.vtable)).get_CreationDate(@as(*const IAMNetShowExProps, @ptrCast(self)), pCreationDate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowExProps_get_SourceLink(self: *const T, pbstrSourceLink: ?*?BSTR) HRESULT {
                return @as(*const IAMNetShowExProps.VTable, @ptrCast(self.vtable)).get_SourceLink(@as(*const IAMNetShowExProps, @ptrCast(self)), pbstrSourceLink);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMExtendedErrorInfo_Value = Guid.initString("fa2aa8f6-8b62-11d0-a520-000000000000");
pub const IID_IAMExtendedErrorInfo = &IID_IAMExtendedErrorInfo_Value;
pub const IAMExtendedErrorInfo = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_HasError: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtendedErrorInfo,
                pHasError: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtendedErrorInfo,
                pHasError: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ErrorDescription: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtendedErrorInfo,
                pbstrErrorDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtendedErrorInfo,
                pbstrErrorDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ErrorCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMExtendedErrorInfo,
                pErrorCode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMExtendedErrorInfo,
                pErrorCode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedErrorInfo_get_HasError(self: *const T, pHasError: ?*i16) HRESULT {
                return @as(*const IAMExtendedErrorInfo.VTable, @ptrCast(self.vtable)).get_HasError(@as(*const IAMExtendedErrorInfo, @ptrCast(self)), pHasError);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedErrorInfo_get_ErrorDescription(self: *const T, pbstrErrorDescription: ?*?BSTR) HRESULT {
                return @as(*const IAMExtendedErrorInfo.VTable, @ptrCast(self.vtable)).get_ErrorDescription(@as(*const IAMExtendedErrorInfo, @ptrCast(self)), pbstrErrorDescription);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMExtendedErrorInfo_get_ErrorCode(self: *const T, pErrorCode: ?*i32) HRESULT {
                return @as(*const IAMExtendedErrorInfo.VTable, @ptrCast(self.vtable)).get_ErrorCode(@as(*const IAMExtendedErrorInfo, @ptrCast(self)), pErrorCode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMMediaContent_Value = Guid.initString("fa2aa8f4-8b62-11d0-a520-000000000000");
pub const IID_IAMMediaContent = &IID_IAMMediaContent_Value;
pub const IAMMediaContent = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AuthorName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrAuthorName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrAuthorName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Title: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrTitle: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrTitle: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Rating: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrRating: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrRating: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Description: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrDescription: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Copyright: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrCopyright: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrCopyright: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BaseURL: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrBaseURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrBaseURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LogoURL: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrLogoURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrLogoURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LogoIconURL: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrLogoURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrLogoURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WatermarkURL: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrWatermarkURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrWatermarkURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MoreInfoURL: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrMoreInfoURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrMoreInfoURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MoreInfoBannerImage: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrMoreInfoBannerImage: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrMoreInfoBannerImage: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MoreInfoBannerURL: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrMoreInfoBannerURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrMoreInfoBannerURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MoreInfoText: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent,
                pbstrMoreInfoText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent,
                pbstrMoreInfoText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_AuthorName(self: *const T, pbstrAuthorName: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_AuthorName(@as(*const IAMMediaContent, @ptrCast(self)), pbstrAuthorName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_Title(self: *const T, pbstrTitle: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_Title(@as(*const IAMMediaContent, @ptrCast(self)), pbstrTitle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_Rating(self: *const T, pbstrRating: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_Rating(@as(*const IAMMediaContent, @ptrCast(self)), pbstrRating);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_Description(self: *const T, pbstrDescription: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_Description(@as(*const IAMMediaContent, @ptrCast(self)), pbstrDescription);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_Copyright(self: *const T, pbstrCopyright: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_Copyright(@as(*const IAMMediaContent, @ptrCast(self)), pbstrCopyright);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_BaseURL(self: *const T, pbstrBaseURL: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_BaseURL(@as(*const IAMMediaContent, @ptrCast(self)), pbstrBaseURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_LogoURL(self: *const T, pbstrLogoURL: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_LogoURL(@as(*const IAMMediaContent, @ptrCast(self)), pbstrLogoURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_LogoIconURL(self: *const T, pbstrLogoURL: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_LogoIconURL(@as(*const IAMMediaContent, @ptrCast(self)), pbstrLogoURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_WatermarkURL(self: *const T, pbstrWatermarkURL: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_WatermarkURL(@as(*const IAMMediaContent, @ptrCast(self)), pbstrWatermarkURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_MoreInfoURL(self: *const T, pbstrMoreInfoURL: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_MoreInfoURL(@as(*const IAMMediaContent, @ptrCast(self)), pbstrMoreInfoURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_MoreInfoBannerImage(self: *const T, pbstrMoreInfoBannerImage: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_MoreInfoBannerImage(@as(*const IAMMediaContent, @ptrCast(self)), pbstrMoreInfoBannerImage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_MoreInfoBannerURL(self: *const T, pbstrMoreInfoBannerURL: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_MoreInfoBannerURL(@as(*const IAMMediaContent, @ptrCast(self)), pbstrMoreInfoBannerURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent_get_MoreInfoText(self: *const T, pbstrMoreInfoText: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent.VTable, @ptrCast(self.vtable)).get_MoreInfoText(@as(*const IAMMediaContent, @ptrCast(self)), pbstrMoreInfoText);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMMediaContent2_Value = Guid.initString("ce8f78c1-74d9-11d2-b09d-00a0c9a81117");
pub const IID_IAMMediaContent2 = &IID_IAMMediaContent2_Value;
pub const IAMMediaContent2 = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MediaParameter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent2,
                EntryNum: i32,
                bstrName: ?BSTR,
                pbstrValue: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent2,
                EntryNum: i32,
                bstrName: ?BSTR,
                pbstrValue: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MediaParameterName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent2,
                EntryNum: i32,
                Index: i32,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent2,
                EntryNum: i32,
                Index: i32,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PlaylistCount: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMMediaContent2,
                pNumberEntries: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMMediaContent2,
                pNumberEntries: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent2_get_MediaParameter(self: *const T, EntryNum: i32, bstrName: ?BSTR, pbstrValue: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent2.VTable, @ptrCast(self.vtable)).get_MediaParameter(@as(*const IAMMediaContent2, @ptrCast(self)), EntryNum, bstrName, pbstrValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent2_get_MediaParameterName(self: *const T, EntryNum: i32, Index: i32, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IAMMediaContent2.VTable, @ptrCast(self.vtable)).get_MediaParameterName(@as(*const IAMMediaContent2, @ptrCast(self)), EntryNum, Index, pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaContent2_get_PlaylistCount(self: *const T, pNumberEntries: ?*i32) HRESULT {
                return @as(*const IAMMediaContent2.VTable, @ptrCast(self.vtable)).get_PlaylistCount(@as(*const IAMMediaContent2, @ptrCast(self)), pNumberEntries);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMNetShowPreroll_Value = Guid.initString("aae7e4e2-6388-11d1-8d93-006097c9a2b2");
pub const IID_IAMNetShowPreroll = &IID_IAMNetShowPreroll_Value;
pub const IAMNetShowPreroll = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Preroll: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowPreroll,
                fPreroll: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowPreroll,
                fPreroll: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Preroll: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMNetShowPreroll,
                pfPreroll: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMNetShowPreroll,
                pfPreroll: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowPreroll_put_Preroll(self: *const T, fPreroll: i16) HRESULT {
                return @as(*const IAMNetShowPreroll.VTable, @ptrCast(self.vtable)).put_Preroll(@as(*const IAMNetShowPreroll, @ptrCast(self)), fPreroll);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMNetShowPreroll_get_Preroll(self: *const T, pfPreroll: ?*i16) HRESULT {
                return @as(*const IAMNetShowPreroll.VTable, @ptrCast(self.vtable)).get_Preroll(@as(*const IAMNetShowPreroll, @ptrCast(self)), pfPreroll);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDShowPlugin_Value = Guid.initString("4746b7c8-700e-11d1-becc-00c04fb6e937");
pub const IID_IDShowPlugin = &IID_IDShowPlugin_Value;
pub const IDShowPlugin = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_URL: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDShowPlugin,
                pURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDShowPlugin,
                pURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_UserAgent: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDShowPlugin,
                pUserAgent: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDShowPlugin,
                pUserAgent: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDShowPlugin_get_URL(self: *const T, pURL: ?*?BSTR) HRESULT {
                return @as(*const IDShowPlugin.VTable, @ptrCast(self.vtable)).get_URL(@as(*const IDShowPlugin, @ptrCast(self)), pURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDShowPlugin_get_UserAgent(self: *const T, pUserAgent: ?*?BSTR) HRESULT {
                return @as(*const IDShowPlugin.VTable, @ptrCast(self.vtable)).get_UserAgent(@as(*const IDShowPlugin, @ptrCast(self)), pUserAgent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IAMDirectSound = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetDirectSoundInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDirectSound,
                lplpds: ?*?*IDirectSound,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDirectSound,
                lplpds: ?*?*IDirectSound,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPrimaryBufferInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDirectSound,
                lplpdsb: ?*?*IDirectSoundBuffer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDirectSound,
                lplpdsb: ?*?*IDirectSoundBuffer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSecondaryBufferInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDirectSound,
                lplpdsb: ?*?*IDirectSoundBuffer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDirectSound,
                lplpdsb: ?*?*IDirectSoundBuffer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleaseDirectSoundInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDirectSound,
                lpds: ?*IDirectSound,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDirectSound,
                lpds: ?*IDirectSound,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleasePrimaryBufferInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDirectSound,
                lpdsb: ?*IDirectSoundBuffer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDirectSound,
                lpdsb: ?*IDirectSoundBuffer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleaseSecondaryBufferInterface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDirectSound,
                lpdsb: ?*IDirectSoundBuffer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDirectSound,
                lpdsb: ?*IDirectSoundBuffer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFocusWindow: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDirectSound,
                param0: ?HWND,
                param1: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDirectSound,
                param0: ?HWND,
                param1: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFocusWindow: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMDirectSound,
                param0: ?*?HWND,
                param1: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMDirectSound,
                param0: ?*?HWND,
                param1: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDirectSound_GetDirectSoundInterface(self: *const T, lplpds: ?*?*IDirectSound) HRESULT {
                return @as(*const IAMDirectSound.VTable, @ptrCast(self.vtable)).GetDirectSoundInterface(@as(*const IAMDirectSound, @ptrCast(self)), lplpds);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDirectSound_GetPrimaryBufferInterface(self: *const T, lplpdsb: ?*?*IDirectSoundBuffer) HRESULT {
                return @as(*const IAMDirectSound.VTable, @ptrCast(self.vtable)).GetPrimaryBufferInterface(@as(*const IAMDirectSound, @ptrCast(self)), lplpdsb);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDirectSound_GetSecondaryBufferInterface(self: *const T, lplpdsb: ?*?*IDirectSoundBuffer) HRESULT {
                return @as(*const IAMDirectSound.VTable, @ptrCast(self.vtable)).GetSecondaryBufferInterface(@as(*const IAMDirectSound, @ptrCast(self)), lplpdsb);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDirectSound_ReleaseDirectSoundInterface(self: *const T, lpds: ?*IDirectSound) HRESULT {
                return @as(*const IAMDirectSound.VTable, @ptrCast(self.vtable)).ReleaseDirectSoundInterface(@as(*const IAMDirectSound, @ptrCast(self)), lpds);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDirectSound_ReleasePrimaryBufferInterface(self: *const T, lpdsb: ?*IDirectSoundBuffer) HRESULT {
                return @as(*const IAMDirectSound.VTable, @ptrCast(self.vtable)).ReleasePrimaryBufferInterface(@as(*const IAMDirectSound, @ptrCast(self)), lpdsb);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDirectSound_ReleaseSecondaryBufferInterface(self: *const T, lpdsb: ?*IDirectSoundBuffer) HRESULT {
                return @as(*const IAMDirectSound.VTable, @ptrCast(self.vtable)).ReleaseSecondaryBufferInterface(@as(*const IAMDirectSound, @ptrCast(self)), lpdsb);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDirectSound_SetFocusWindow(self: *const T, param0: ?HWND, param1: BOOL) HRESULT {
                return @as(*const IAMDirectSound.VTable, @ptrCast(self.vtable)).SetFocusWindow(@as(*const IAMDirectSound, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMDirectSound_GetFocusWindow(self: *const T, param0: ?*?HWND, param1: ?*BOOL) HRESULT {
                return @as(*const IAMDirectSound.VTable, @ptrCast(self.vtable)).GetFocusWindow(@as(*const IAMDirectSound, @ptrCast(self)), param0, param1);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_LINE21_CCLEVEL = enum(i32) {
    @"2" = 0,
};
pub const AM_L21_CCLEVEL_TC2 = AM_LINE21_CCLEVEL.@"2";

pub const AM_LINE21_CCSERVICE = enum(i32) {
    None = 0,
    Caption1 = 1,
    Caption2 = 2,
    Text1 = 3,
    Text2 = 4,
    XDS = 5,
    DefChannel = 10,
    Invalid = 11,
};
pub const AM_L21_CCSERVICE_None = AM_LINE21_CCSERVICE.None;
pub const AM_L21_CCSERVICE_Caption1 = AM_LINE21_CCSERVICE.Caption1;
pub const AM_L21_CCSERVICE_Caption2 = AM_LINE21_CCSERVICE.Caption2;
pub const AM_L21_CCSERVICE_Text1 = AM_LINE21_CCSERVICE.Text1;
pub const AM_L21_CCSERVICE_Text2 = AM_LINE21_CCSERVICE.Text2;
pub const AM_L21_CCSERVICE_XDS = AM_LINE21_CCSERVICE.XDS;
pub const AM_L21_CCSERVICE_DefChannel = AM_LINE21_CCSERVICE.DefChannel;
pub const AM_L21_CCSERVICE_Invalid = AM_LINE21_CCSERVICE.Invalid;

pub const AM_LINE21_CCSTATE = enum(i32) {
    ff = 0,
    n = 1,
};
pub const AM_L21_CCSTATE_Off = AM_LINE21_CCSTATE.ff;
pub const AM_L21_CCSTATE_On = AM_LINE21_CCSTATE.n;

pub const AM_LINE21_CCSTYLE = enum(i32) {
    None = 0,
    PopOn = 1,
    PaintOn = 2,
    RollUp = 3,
};
pub const AM_L21_CCSTYLE_None = AM_LINE21_CCSTYLE.None;
pub const AM_L21_CCSTYLE_PopOn = AM_LINE21_CCSTYLE.PopOn;
pub const AM_L21_CCSTYLE_PaintOn = AM_LINE21_CCSTYLE.PaintOn;
pub const AM_L21_CCSTYLE_RollUp = AM_LINE21_CCSTYLE.RollUp;

pub const AM_LINE21_DRAWBGMODE = enum(i32) {
    Opaque = 0,
    Transparent = 1,
};
pub const AM_L21_DRAWBGMODE_Opaque = AM_LINE21_DRAWBGMODE.Opaque;
pub const AM_L21_DRAWBGMODE_Transparent = AM_LINE21_DRAWBGMODE.Transparent;

// TODO: this type is limited to platform 'windows5.0'
pub const IAMLine21Decoder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetDecoderLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                lpLevel: ?*AM_LINE21_CCLEVEL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                lpLevel: ?*AM_LINE21_CCLEVEL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentService: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                lpService: ?*AM_LINE21_CCSERVICE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                lpService: ?*AM_LINE21_CCSERVICE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCurrentService: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                Service: AM_LINE21_CCSERVICE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                Service: AM_LINE21_CCSERVICE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                lpState: ?*AM_LINE21_CCSTATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                lpState: ?*AM_LINE21_CCSTATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetServiceState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                State: AM_LINE21_CCSTATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                State: AM_LINE21_CCSTATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOutputFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                lpbmih: ?*BITMAPINFOHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                lpbmih: ?*BITMAPINFOHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOutputFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                lpbmi: ?*BITMAPINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                lpbmi: ?*BITMAPINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBackgroundColor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                pdwPhysColor: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                pdwPhysColor: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBackgroundColor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                dwPhysColor: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                dwPhysColor: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRedrawAlways: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                lpbOption: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                lpbOption: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRedrawAlways: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                bOption: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                bOption: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDrawBackgroundMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                lpMode: ?*AM_LINE21_DRAWBGMODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                lpMode: ?*AM_LINE21_DRAWBGMODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDrawBackgroundMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMLine21Decoder,
                Mode: AM_LINE21_DRAWBGMODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMLine21Decoder,
                Mode: AM_LINE21_DRAWBGMODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_GetDecoderLevel(self: *const T, lpLevel: ?*AM_LINE21_CCLEVEL) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).GetDecoderLevel(@as(*const IAMLine21Decoder, @ptrCast(self)), lpLevel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_GetCurrentService(self: *const T, lpService: ?*AM_LINE21_CCSERVICE) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).GetCurrentService(@as(*const IAMLine21Decoder, @ptrCast(self)), lpService);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_SetCurrentService(self: *const T, Service: AM_LINE21_CCSERVICE) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).SetCurrentService(@as(*const IAMLine21Decoder, @ptrCast(self)), Service);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_GetServiceState(self: *const T, lpState: ?*AM_LINE21_CCSTATE) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).GetServiceState(@as(*const IAMLine21Decoder, @ptrCast(self)), lpState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_SetServiceState(self: *const T, State: AM_LINE21_CCSTATE) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).SetServiceState(@as(*const IAMLine21Decoder, @ptrCast(self)), State);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_GetOutputFormat(self: *const T, lpbmih: ?*BITMAPINFOHEADER) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).GetOutputFormat(@as(*const IAMLine21Decoder, @ptrCast(self)), lpbmih);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_SetOutputFormat(self: *const T, lpbmi: ?*BITMAPINFO) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).SetOutputFormat(@as(*const IAMLine21Decoder, @ptrCast(self)), lpbmi);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_GetBackgroundColor(self: *const T, pdwPhysColor: ?*u32) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).GetBackgroundColor(@as(*const IAMLine21Decoder, @ptrCast(self)), pdwPhysColor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_SetBackgroundColor(self: *const T, dwPhysColor: u32) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).SetBackgroundColor(@as(*const IAMLine21Decoder, @ptrCast(self)), dwPhysColor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_GetRedrawAlways(self: *const T, lpbOption: ?*i32) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).GetRedrawAlways(@as(*const IAMLine21Decoder, @ptrCast(self)), lpbOption);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_SetRedrawAlways(self: *const T, bOption: BOOL) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).SetRedrawAlways(@as(*const IAMLine21Decoder, @ptrCast(self)), bOption);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_GetDrawBackgroundMode(self: *const T, lpMode: ?*AM_LINE21_DRAWBGMODE) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).GetDrawBackgroundMode(@as(*const IAMLine21Decoder, @ptrCast(self)), lpMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMLine21Decoder_SetDrawBackgroundMode(self: *const T, Mode: AM_LINE21_DRAWBGMODE) HRESULT {
                return @as(*const IAMLine21Decoder.VTable, @ptrCast(self.vtable)).SetDrawBackgroundMode(@as(*const IAMLine21Decoder, @ptrCast(self)), Mode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMParse_Value = Guid.initString("c47a3420-005c-11d2-9038-00a0c9697298");
pub const IID_IAMParse = &IID_IAMParse_Value;
pub const IAMParse = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetParseTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMParse,
                prtCurrent: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMParse,
                prtCurrent: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetParseTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMParse,
                rtCurrent: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMParse,
                rtCurrent: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Flush: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMParse,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMParse,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMParse_GetParseTime(self: *const T, prtCurrent: ?*i64) HRESULT {
                return @as(*const IAMParse.VTable, @ptrCast(self.vtable)).GetParseTime(@as(*const IAMParse, @ptrCast(self)), prtCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMParse_SetParseTime(self: *const T, rtCurrent: i64) HRESULT {
                return @as(*const IAMParse.VTable, @ptrCast(self.vtable)).SetParseTime(@as(*const IAMParse, @ptrCast(self)), rtCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMParse_Flush(self: *const T) HRESULT {
                return @as(*const IAMParse.VTable, @ptrCast(self.vtable)).Flush(@as(*const IAMParse, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const CLSID_FilgraphManager_Value = Guid.initString("e436ebb3-524f-11ce-9f53-0020af0ba770");
pub const CLSID_FilgraphManager = &CLSID_FilgraphManager_Value;

const IID_IAMCollection_Value = Guid.initString("56a868b9-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IAMCollection = &IID_IAMCollection_Value;
pub const IAMCollection = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMCollection,
                plCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMCollection,
                plCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Item: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMCollection,
                lItem: i32,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMCollection,
                lItem: i32,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMCollection,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMCollection,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCollection_get_Count(self: *const T, plCount: ?*i32) HRESULT {
                return @as(*const IAMCollection.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IAMCollection, @ptrCast(self)), plCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCollection_Item(self: *const T, lItem: i32, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IAMCollection.VTable, @ptrCast(self.vtable)).Item(@as(*const IAMCollection, @ptrCast(self)), lItem, ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMCollection_get__NewEnum(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IAMCollection.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const IAMCollection, @ptrCast(self)), ppUnk);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaControl_Value = Guid.initString("56a868b1-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMediaControl = &IID_IMediaControl_Value;
pub const IMediaControl = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        Run: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Pause: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaControl,
                msTimeout: i32,
                pfs: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaControl,
                msTimeout: i32,
                pfs: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RenderFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaControl,
                strFilename: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaControl,
                strFilename: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddSourceFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaControl,
                strFilename: ?BSTR,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaControl,
                strFilename: ?BSTR,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FilterCollection: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaControl,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaControl,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_RegFilterCollection: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaControl,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaControl,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StopWhenReady: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaControl_Run(self: *const T) HRESULT {
                return @as(*const IMediaControl.VTable, @ptrCast(self.vtable)).Run(@as(*const IMediaControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaControl_Pause(self: *const T) HRESULT {
                return @as(*const IMediaControl.VTable, @ptrCast(self.vtable)).Pause(@as(*const IMediaControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaControl_Stop(self: *const T) HRESULT {
                return @as(*const IMediaControl.VTable, @ptrCast(self.vtable)).Stop(@as(*const IMediaControl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaControl_GetState(self: *const T, msTimeout: i32, pfs: ?*i32) HRESULT {
                return @as(*const IMediaControl.VTable, @ptrCast(self.vtable)).GetState(@as(*const IMediaControl, @ptrCast(self)), msTimeout, pfs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaControl_RenderFile(self: *const T, strFilename: ?BSTR) HRESULT {
                return @as(*const IMediaControl.VTable, @ptrCast(self.vtable)).RenderFile(@as(*const IMediaControl, @ptrCast(self)), strFilename);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaControl_AddSourceFilter(self: *const T, strFilename: ?BSTR, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IMediaControl.VTable, @ptrCast(self.vtable)).AddSourceFilter(@as(*const IMediaControl, @ptrCast(self)), strFilename, ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaControl_get_FilterCollection(self: *const T, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IMediaControl.VTable, @ptrCast(self.vtable)).get_FilterCollection(@as(*const IMediaControl, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaControl_get_RegFilterCollection(self: *const T, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IMediaControl.VTable, @ptrCast(self.vtable)).get_RegFilterCollection(@as(*const IMediaControl, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaControl_StopWhenReady(self: *const T) HRESULT {
                return @as(*const IMediaControl.VTable, @ptrCast(self.vtable)).StopWhenReady(@as(*const IMediaControl, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaEvent_Value = Guid.initString("56a868b6-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMediaEvent = &IID_IMediaEvent_Value;
pub const IMediaEvent = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        GetEventHandle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEvent,
                hEvent: ?*isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEvent,
                hEvent: ?*isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEvent,
                lEventCode: ?*i32,
                lParam1: ?*isize,
                lParam2: ?*isize,
                msTimeout: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEvent,
                lEventCode: ?*i32,
                lParam1: ?*isize,
                lParam2: ?*isize,
                msTimeout: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WaitForCompletion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEvent,
                msTimeout: i32,
                pEvCode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEvent,
                msTimeout: i32,
                pEvCode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CancelDefaultHandling: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEvent,
                lEvCode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEvent,
                lEvCode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RestoreDefaultHandling: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEvent,
                lEvCode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEvent,
                lEvCode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FreeEventParams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEvent,
                lEvCode: i32,
                lParam1: isize,
                lParam2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEvent,
                lEvCode: i32,
                lParam1: isize,
                lParam2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEvent_GetEventHandle(self: *const T, hEvent: ?*isize) HRESULT {
                return @as(*const IMediaEvent.VTable, @ptrCast(self.vtable)).GetEventHandle(@as(*const IMediaEvent, @ptrCast(self)), hEvent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEvent_GetEvent(self: *const T, lEventCode: ?*i32, lParam1: ?*isize, lParam2: ?*isize, msTimeout: i32) HRESULT {
                return @as(*const IMediaEvent.VTable, @ptrCast(self.vtable)).GetEvent(@as(*const IMediaEvent, @ptrCast(self)), lEventCode, lParam1, lParam2, msTimeout);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEvent_WaitForCompletion(self: *const T, msTimeout: i32, pEvCode: ?*i32) HRESULT {
                return @as(*const IMediaEvent.VTable, @ptrCast(self.vtable)).WaitForCompletion(@as(*const IMediaEvent, @ptrCast(self)), msTimeout, pEvCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEvent_CancelDefaultHandling(self: *const T, lEvCode: i32) HRESULT {
                return @as(*const IMediaEvent.VTable, @ptrCast(self.vtable)).CancelDefaultHandling(@as(*const IMediaEvent, @ptrCast(self)), lEvCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEvent_RestoreDefaultHandling(self: *const T, lEvCode: i32) HRESULT {
                return @as(*const IMediaEvent.VTable, @ptrCast(self.vtable)).RestoreDefaultHandling(@as(*const IMediaEvent, @ptrCast(self)), lEvCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEvent_FreeEventParams(self: *const T, lEvCode: i32, lParam1: isize, lParam2: isize) HRESULT {
                return @as(*const IMediaEvent.VTable, @ptrCast(self.vtable)).FreeEventParams(@as(*const IMediaEvent, @ptrCast(self)), lEvCode, lParam1, lParam2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaEventEx_Value = Guid.initString("56a868c0-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMediaEventEx = &IID_IMediaEventEx_Value;
pub const IMediaEventEx = extern struct {
    pub const VTable = extern struct {
        base: IMediaEvent.VTable,
        SetNotifyWindow: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEventEx,
                hwnd: isize,
                lMsg: i32,
                lInstanceData: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEventEx,
                hwnd: isize,
                lMsg: i32,
                lInstanceData: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetNotifyFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEventEx,
                lNoNotifyFlags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEventEx,
                lNoNotifyFlags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNotifyFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaEventEx,
                lplNoNotifyFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaEventEx,
                lplNoNotifyFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMediaEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEventEx_SetNotifyWindow(self: *const T, hwnd: isize, lMsg: i32, lInstanceData: isize) HRESULT {
                return @as(*const IMediaEventEx.VTable, @ptrCast(self.vtable)).SetNotifyWindow(@as(*const IMediaEventEx, @ptrCast(self)), hwnd, lMsg, lInstanceData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEventEx_SetNotifyFlags(self: *const T, lNoNotifyFlags: i32) HRESULT {
                return @as(*const IMediaEventEx.VTable, @ptrCast(self.vtable)).SetNotifyFlags(@as(*const IMediaEventEx, @ptrCast(self)), lNoNotifyFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaEventEx_GetNotifyFlags(self: *const T, lplNoNotifyFlags: ?*i32) HRESULT {
                return @as(*const IMediaEventEx.VTable, @ptrCast(self.vtable)).GetNotifyFlags(@as(*const IMediaEventEx, @ptrCast(self)), lplNoNotifyFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMediaPosition_Value = Guid.initString("56a868b2-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMediaPosition = &IID_IMediaPosition_Value;
pub const IMediaPosition = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Duration: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaPosition,
                plength: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaPosition,
                plength: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CurrentPosition: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaPosition,
                llTime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaPosition,
                llTime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentPosition: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaPosition,
                pllTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaPosition,
                pllTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_StopTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaPosition,
                pllTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaPosition,
                pllTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_StopTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaPosition,
                llTime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaPosition,
                llTime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PrerollTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaPosition,
                pllTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaPosition,
                pllTime: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PrerollTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaPosition,
                llTime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaPosition,
                llTime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Rate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaPosition,
                dRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaPosition,
                dRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Rate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaPosition,
                pdRate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaPosition,
                pdRate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CanSeekForward: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaPosition,
                pCanSeekForward: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaPosition,
                pCanSeekForward: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CanSeekBackward: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaPosition,
                pCanSeekBackward: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaPosition,
                pCanSeekBackward: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_get_Duration(self: *const T, plength: ?*f64) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).get_Duration(@as(*const IMediaPosition, @ptrCast(self)), plength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_put_CurrentPosition(self: *const T, llTime: f64) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).put_CurrentPosition(@as(*const IMediaPosition, @ptrCast(self)), llTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_get_CurrentPosition(self: *const T, pllTime: ?*f64) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).get_CurrentPosition(@as(*const IMediaPosition, @ptrCast(self)), pllTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_get_StopTime(self: *const T, pllTime: ?*f64) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).get_StopTime(@as(*const IMediaPosition, @ptrCast(self)), pllTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_put_StopTime(self: *const T, llTime: f64) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).put_StopTime(@as(*const IMediaPosition, @ptrCast(self)), llTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_get_PrerollTime(self: *const T, pllTime: ?*f64) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).get_PrerollTime(@as(*const IMediaPosition, @ptrCast(self)), pllTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_put_PrerollTime(self: *const T, llTime: f64) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).put_PrerollTime(@as(*const IMediaPosition, @ptrCast(self)), llTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_put_Rate(self: *const T, dRate: f64) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).put_Rate(@as(*const IMediaPosition, @ptrCast(self)), dRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_get_Rate(self: *const T, pdRate: ?*f64) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).get_Rate(@as(*const IMediaPosition, @ptrCast(self)), pdRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_CanSeekForward(self: *const T, pCanSeekForward: ?*i32) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).CanSeekForward(@as(*const IMediaPosition, @ptrCast(self)), pCanSeekForward);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaPosition_CanSeekBackward(self: *const T, pCanSeekBackward: ?*i32) HRESULT {
                return @as(*const IMediaPosition.VTable, @ptrCast(self.vtable)).CanSeekBackward(@as(*const IMediaPosition, @ptrCast(self)), pCanSeekBackward);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IBasicAudio_Value = Guid.initString("56a868b3-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IBasicAudio = &IID_IBasicAudio_Value;
pub const IBasicAudio = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Volume: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicAudio,
                lVolume: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicAudio,
                lVolume: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Volume: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicAudio,
                plVolume: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicAudio,
                plVolume: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Balance: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicAudio,
                lBalance: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicAudio,
                lBalance: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Balance: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicAudio,
                plBalance: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicAudio,
                plBalance: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicAudio_put_Volume(self: *const T, lVolume: i32) HRESULT {
                return @as(*const IBasicAudio.VTable, @ptrCast(self.vtable)).put_Volume(@as(*const IBasicAudio, @ptrCast(self)), lVolume);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicAudio_get_Volume(self: *const T, plVolume: ?*i32) HRESULT {
                return @as(*const IBasicAudio.VTable, @ptrCast(self.vtable)).get_Volume(@as(*const IBasicAudio, @ptrCast(self)), plVolume);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicAudio_put_Balance(self: *const T, lBalance: i32) HRESULT {
                return @as(*const IBasicAudio.VTable, @ptrCast(self.vtable)).put_Balance(@as(*const IBasicAudio, @ptrCast(self)), lBalance);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicAudio_get_Balance(self: *const T, plBalance: ?*i32) HRESULT {
                return @as(*const IBasicAudio.VTable, @ptrCast(self.vtable)).get_Balance(@as(*const IBasicAudio, @ptrCast(self)), plBalance);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IVideoWindow_Value = Guid.initString("56a868b4-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IVideoWindow = &IID_IVideoWindow_Value;
pub const IVideoWindow = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Caption: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                strCaption: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                strCaption: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Caption: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                strCaption: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                strCaption: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_WindowStyle: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                WindowStyle: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                WindowStyle: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WindowStyle: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                WindowStyle: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                WindowStyle: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_WindowStyleEx: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                WindowStyleEx: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                WindowStyleEx: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WindowStyleEx: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                WindowStyleEx: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                WindowStyleEx: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_AutoShow: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                AutoShow: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                AutoShow: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AutoShow: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                AutoShow: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                AutoShow: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_WindowState: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                WindowState: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                WindowState: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WindowState: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                WindowState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                WindowState: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BackgroundPalette: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                BackgroundPalette: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                BackgroundPalette: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BackgroundPalette: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                pBackgroundPalette: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                pBackgroundPalette: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Visible: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Visible: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Visible: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Visible: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                pVisible: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                pVisible: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Left: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Left: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Left: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Left: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                pLeft: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                pLeft: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Width: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Width: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Width: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Width: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                pWidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                pWidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Top: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Top: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Top: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Top: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                pTop: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                pTop: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Height: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Height: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Height: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Height: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Owner: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Owner: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Owner: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Owner: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Owner: ?*isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Owner: ?*isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MessageDrain: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Drain: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Drain: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MessageDrain: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Drain: ?*isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Drain: ?*isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BorderColor: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Color: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Color: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BorderColor: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                Color: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                Color: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FullScreenMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                FullScreenMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                FullScreenMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FullScreenMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoWindow,
                FullScreenMode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoWindow,
                FullScreenMode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetWindowForeground: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoWindow,
                Focus: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoWindow,
                Focus: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NotifyOwnerMessage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoWindow,
                hwnd: isize,
                uMsg: i32,
                wParam: isize,
                lParam: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoWindow,
                hwnd: isize,
                uMsg: i32,
                wParam: isize,
                lParam: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetWindowPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoWindow,
                Left: i32,
                Top: i32,
                Width: i32,
                Height: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoWindow,
                Left: i32,
                Top: i32,
                Width: i32,
                Height: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetWindowPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoWindow,
                pLeft: ?*i32,
                pTop: ?*i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoWindow,
                pLeft: ?*i32,
                pTop: ?*i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMinIdealImageSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoWindow,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoWindow,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMaxIdealImageSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoWindow,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoWindow,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRestorePosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoWindow,
                pLeft: ?*i32,
                pTop: ?*i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoWindow,
                pLeft: ?*i32,
                pTop: ?*i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HideCursor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoWindow,
                HideCursor: OA_BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoWindow,
                HideCursor: OA_BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsCursorHidden: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoWindow,
                CursorHidden: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoWindow,
                CursorHidden: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_Caption(self: *const T, strCaption: ?BSTR) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_Caption(@as(*const IVideoWindow, @ptrCast(self)), strCaption);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_Caption(self: *const T, strCaption: ?*?BSTR) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_Caption(@as(*const IVideoWindow, @ptrCast(self)), strCaption);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_WindowStyle(self: *const T, WindowStyle: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_WindowStyle(@as(*const IVideoWindow, @ptrCast(self)), WindowStyle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_WindowStyle(self: *const T, WindowStyle: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_WindowStyle(@as(*const IVideoWindow, @ptrCast(self)), WindowStyle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_WindowStyleEx(self: *const T, WindowStyleEx: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_WindowStyleEx(@as(*const IVideoWindow, @ptrCast(self)), WindowStyleEx);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_WindowStyleEx(self: *const T, WindowStyleEx: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_WindowStyleEx(@as(*const IVideoWindow, @ptrCast(self)), WindowStyleEx);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_AutoShow(self: *const T, AutoShow: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_AutoShow(@as(*const IVideoWindow, @ptrCast(self)), AutoShow);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_AutoShow(self: *const T, AutoShow: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_AutoShow(@as(*const IVideoWindow, @ptrCast(self)), AutoShow);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_WindowState(self: *const T, WindowState: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_WindowState(@as(*const IVideoWindow, @ptrCast(self)), WindowState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_WindowState(self: *const T, WindowState: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_WindowState(@as(*const IVideoWindow, @ptrCast(self)), WindowState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_BackgroundPalette(self: *const T, BackgroundPalette: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_BackgroundPalette(@as(*const IVideoWindow, @ptrCast(self)), BackgroundPalette);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_BackgroundPalette(self: *const T, pBackgroundPalette: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_BackgroundPalette(@as(*const IVideoWindow, @ptrCast(self)), pBackgroundPalette);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_Visible(self: *const T, Visible: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_Visible(@as(*const IVideoWindow, @ptrCast(self)), Visible);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_Visible(self: *const T, pVisible: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_Visible(@as(*const IVideoWindow, @ptrCast(self)), pVisible);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_Left(self: *const T, Left: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_Left(@as(*const IVideoWindow, @ptrCast(self)), Left);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_Left(self: *const T, pLeft: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_Left(@as(*const IVideoWindow, @ptrCast(self)), pLeft);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_Width(self: *const T, Width: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_Width(@as(*const IVideoWindow, @ptrCast(self)), Width);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_Width(self: *const T, pWidth: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_Width(@as(*const IVideoWindow, @ptrCast(self)), pWidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_Top(self: *const T, Top: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_Top(@as(*const IVideoWindow, @ptrCast(self)), Top);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_Top(self: *const T, pTop: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_Top(@as(*const IVideoWindow, @ptrCast(self)), pTop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_Height(self: *const T, Height: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_Height(@as(*const IVideoWindow, @ptrCast(self)), Height);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_Height(self: *const T, pHeight: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_Height(@as(*const IVideoWindow, @ptrCast(self)), pHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_Owner(self: *const T, Owner: isize) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_Owner(@as(*const IVideoWindow, @ptrCast(self)), Owner);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_Owner(self: *const T, Owner: ?*isize) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_Owner(@as(*const IVideoWindow, @ptrCast(self)), Owner);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_MessageDrain(self: *const T, Drain: isize) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_MessageDrain(@as(*const IVideoWindow, @ptrCast(self)), Drain);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_MessageDrain(self: *const T, Drain: ?*isize) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_MessageDrain(@as(*const IVideoWindow, @ptrCast(self)), Drain);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_BorderColor(self: *const T, Color: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_BorderColor(@as(*const IVideoWindow, @ptrCast(self)), Color);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_BorderColor(self: *const T, Color: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_BorderColor(@as(*const IVideoWindow, @ptrCast(self)), Color);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_get_FullScreenMode(self: *const T, FullScreenMode: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).get_FullScreenMode(@as(*const IVideoWindow, @ptrCast(self)), FullScreenMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_put_FullScreenMode(self: *const T, FullScreenMode: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).put_FullScreenMode(@as(*const IVideoWindow, @ptrCast(self)), FullScreenMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_SetWindowForeground(self: *const T, Focus: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).SetWindowForeground(@as(*const IVideoWindow, @ptrCast(self)), Focus);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_NotifyOwnerMessage(self: *const T, hwnd: isize, uMsg: i32, wParam: isize, lParam: isize) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).NotifyOwnerMessage(@as(*const IVideoWindow, @ptrCast(self)), hwnd, uMsg, wParam, lParam);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_SetWindowPosition(self: *const T, Left: i32, Top: i32, Width: i32, Height: i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).SetWindowPosition(@as(*const IVideoWindow, @ptrCast(self)), Left, Top, Width, Height);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_GetWindowPosition(self: *const T, pLeft: ?*i32, pTop: ?*i32, pWidth: ?*i32, pHeight: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).GetWindowPosition(@as(*const IVideoWindow, @ptrCast(self)), pLeft, pTop, pWidth, pHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_GetMinIdealImageSize(self: *const T, pWidth: ?*i32, pHeight: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).GetMinIdealImageSize(@as(*const IVideoWindow, @ptrCast(self)), pWidth, pHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_GetMaxIdealImageSize(self: *const T, pWidth: ?*i32, pHeight: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).GetMaxIdealImageSize(@as(*const IVideoWindow, @ptrCast(self)), pWidth, pHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_GetRestorePosition(self: *const T, pLeft: ?*i32, pTop: ?*i32, pWidth: ?*i32, pHeight: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).GetRestorePosition(@as(*const IVideoWindow, @ptrCast(self)), pLeft, pTop, pWidth, pHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_HideCursor(self: *const T, HideCursor: OA_BOOL) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).HideCursor(@as(*const IVideoWindow, @ptrCast(self)), HideCursor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoWindow_IsCursorHidden(self: *const T, CursorHidden: ?*i32) HRESULT {
                return @as(*const IVideoWindow.VTable, @ptrCast(self.vtable)).IsCursorHidden(@as(*const IVideoWindow, @ptrCast(self)), CursorHidden);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IBasicVideo_Value = Guid.initString("56a868b5-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IBasicVideo = &IID_IBasicVideo_Value;
pub const IBasicVideo = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AvgTimePerFrame: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pAvgTimePerFrame: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pAvgTimePerFrame: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BitRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pBitRate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pBitRate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BitErrorRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pBitErrorRate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pBitErrorRate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoWidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pVideoWidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pVideoWidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoHeight: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pVideoHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pVideoHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SourceLeft: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                SourceLeft: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                SourceLeft: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SourceLeft: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pSourceLeft: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pSourceLeft: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SourceWidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                SourceWidth: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                SourceWidth: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SourceWidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pSourceWidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pSourceWidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SourceTop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                SourceTop: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                SourceTop: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SourceTop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pSourceTop: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pSourceTop: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SourceHeight: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                SourceHeight: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                SourceHeight: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SourceHeight: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pSourceHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pSourceHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DestinationLeft: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                DestinationLeft: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                DestinationLeft: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DestinationLeft: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pDestinationLeft: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pDestinationLeft: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DestinationWidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                DestinationWidth: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                DestinationWidth: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DestinationWidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pDestinationWidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pDestinationWidth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DestinationTop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                DestinationTop: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                DestinationTop: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DestinationTop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pDestinationTop: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pDestinationTop: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DestinationHeight: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                DestinationHeight: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                DestinationHeight: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DestinationHeight: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IBasicVideo,
                pDestinationHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IBasicVideo,
                pDestinationHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSourcePosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
                Left: i32,
                Top: i32,
                Width: i32,
                Height: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
                Left: i32,
                Top: i32,
                Width: i32,
                Height: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourcePosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
                pLeft: ?*i32,
                pTop: ?*i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
                pLeft: ?*i32,
                pTop: ?*i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDefaultSourcePosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDestinationPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
                Left: i32,
                Top: i32,
                Width: i32,
                Height: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
                Left: i32,
                Top: i32,
                Width: i32,
                Height: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDestinationPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
                pLeft: ?*i32,
                pTop: ?*i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
                pLeft: ?*i32,
                pTop: ?*i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDefaultDestinationPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVideoSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
                pWidth: ?*i32,
                pHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVideoPaletteEntries: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
                StartIndex: i32,
                Entries: i32,
                pRetrieved: ?*i32,
                pPalette: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
                StartIndex: i32,
                Entries: i32,
                pRetrieved: ?*i32,
                pPalette: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentImage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
                pBufferSize: ?*i32,
                pDIBImage: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
                pBufferSize: ?*i32,
                pDIBImage: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsUsingDefaultSource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsUsingDefaultDestination: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_AvgTimePerFrame(self: *const T, pAvgTimePerFrame: ?*f64) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_AvgTimePerFrame(@as(*const IBasicVideo, @ptrCast(self)), pAvgTimePerFrame);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_BitRate(self: *const T, pBitRate: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_BitRate(@as(*const IBasicVideo, @ptrCast(self)), pBitRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_BitErrorRate(self: *const T, pBitErrorRate: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_BitErrorRate(@as(*const IBasicVideo, @ptrCast(self)), pBitErrorRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_VideoWidth(self: *const T, pVideoWidth: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_VideoWidth(@as(*const IBasicVideo, @ptrCast(self)), pVideoWidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_VideoHeight(self: *const T, pVideoHeight: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_VideoHeight(@as(*const IBasicVideo, @ptrCast(self)), pVideoHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_put_SourceLeft(self: *const T, SourceLeft: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).put_SourceLeft(@as(*const IBasicVideo, @ptrCast(self)), SourceLeft);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_SourceLeft(self: *const T, pSourceLeft: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_SourceLeft(@as(*const IBasicVideo, @ptrCast(self)), pSourceLeft);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_put_SourceWidth(self: *const T, SourceWidth: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).put_SourceWidth(@as(*const IBasicVideo, @ptrCast(self)), SourceWidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_SourceWidth(self: *const T, pSourceWidth: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_SourceWidth(@as(*const IBasicVideo, @ptrCast(self)), pSourceWidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_put_SourceTop(self: *const T, SourceTop: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).put_SourceTop(@as(*const IBasicVideo, @ptrCast(self)), SourceTop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_SourceTop(self: *const T, pSourceTop: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_SourceTop(@as(*const IBasicVideo, @ptrCast(self)), pSourceTop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_put_SourceHeight(self: *const T, SourceHeight: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).put_SourceHeight(@as(*const IBasicVideo, @ptrCast(self)), SourceHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_SourceHeight(self: *const T, pSourceHeight: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_SourceHeight(@as(*const IBasicVideo, @ptrCast(self)), pSourceHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_put_DestinationLeft(self: *const T, DestinationLeft: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).put_DestinationLeft(@as(*const IBasicVideo, @ptrCast(self)), DestinationLeft);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_DestinationLeft(self: *const T, pDestinationLeft: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_DestinationLeft(@as(*const IBasicVideo, @ptrCast(self)), pDestinationLeft);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_put_DestinationWidth(self: *const T, DestinationWidth: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).put_DestinationWidth(@as(*const IBasicVideo, @ptrCast(self)), DestinationWidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_DestinationWidth(self: *const T, pDestinationWidth: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_DestinationWidth(@as(*const IBasicVideo, @ptrCast(self)), pDestinationWidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_put_DestinationTop(self: *const T, DestinationTop: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).put_DestinationTop(@as(*const IBasicVideo, @ptrCast(self)), DestinationTop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_DestinationTop(self: *const T, pDestinationTop: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_DestinationTop(@as(*const IBasicVideo, @ptrCast(self)), pDestinationTop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_put_DestinationHeight(self: *const T, DestinationHeight: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).put_DestinationHeight(@as(*const IBasicVideo, @ptrCast(self)), DestinationHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_get_DestinationHeight(self: *const T, pDestinationHeight: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).get_DestinationHeight(@as(*const IBasicVideo, @ptrCast(self)), pDestinationHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_SetSourcePosition(self: *const T, Left: i32, Top: i32, Width: i32, Height: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).SetSourcePosition(@as(*const IBasicVideo, @ptrCast(self)), Left, Top, Width, Height);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_GetSourcePosition(self: *const T, pLeft: ?*i32, pTop: ?*i32, pWidth: ?*i32, pHeight: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).GetSourcePosition(@as(*const IBasicVideo, @ptrCast(self)), pLeft, pTop, pWidth, pHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_SetDefaultSourcePosition(self: *const T) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).SetDefaultSourcePosition(@as(*const IBasicVideo, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_SetDestinationPosition(self: *const T, Left: i32, Top: i32, Width: i32, Height: i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).SetDestinationPosition(@as(*const IBasicVideo, @ptrCast(self)), Left, Top, Width, Height);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_GetDestinationPosition(self: *const T, pLeft: ?*i32, pTop: ?*i32, pWidth: ?*i32, pHeight: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).GetDestinationPosition(@as(*const IBasicVideo, @ptrCast(self)), pLeft, pTop, pWidth, pHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_SetDefaultDestinationPosition(self: *const T) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).SetDefaultDestinationPosition(@as(*const IBasicVideo, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_GetVideoSize(self: *const T, pWidth: ?*i32, pHeight: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).GetVideoSize(@as(*const IBasicVideo, @ptrCast(self)), pWidth, pHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_GetVideoPaletteEntries(self: *const T, StartIndex: i32, Entries: i32, pRetrieved: ?*i32, pPalette: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).GetVideoPaletteEntries(@as(*const IBasicVideo, @ptrCast(self)), StartIndex, Entries, pRetrieved, pPalette);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_GetCurrentImage(self: *const T, pBufferSize: ?*i32, pDIBImage: ?*i32) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).GetCurrentImage(@as(*const IBasicVideo, @ptrCast(self)), pBufferSize, pDIBImage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_IsUsingDefaultSource(self: *const T) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).IsUsingDefaultSource(@as(*const IBasicVideo, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo_IsUsingDefaultDestination(self: *const T) HRESULT {
                return @as(*const IBasicVideo.VTable, @ptrCast(self.vtable)).IsUsingDefaultDestination(@as(*const IBasicVideo, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IBasicVideo2_Value = Guid.initString("329bb360-f6ea-11d1-9038-00a0c9697298");
pub const IID_IBasicVideo2 = &IID_IBasicVideo2_Value;
pub const IBasicVideo2 = extern struct {
    pub const VTable = extern struct {
        base: IBasicVideo.VTable,
        GetPreferredAspectRatio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBasicVideo2,
                plAspectX: ?*i32,
                plAspectY: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBasicVideo2,
                plAspectX: ?*i32,
                plAspectY: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IBasicVideo.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBasicVideo2_GetPreferredAspectRatio(self: *const T, plAspectX: ?*i32, plAspectY: ?*i32) HRESULT {
                return @as(*const IBasicVideo2.VTable, @ptrCast(self.vtable)).GetPreferredAspectRatio(@as(*const IBasicVideo2, @ptrCast(self)), plAspectX, plAspectY);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IDeferredCommand_Value = Guid.initString("56a868b8-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IDeferredCommand = &IID_IDeferredCommand_Value;
pub const IDeferredCommand = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Cancel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDeferredCommand,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDeferredCommand,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Confidence: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDeferredCommand,
                pConfidence: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDeferredCommand,
                pConfidence: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Postpone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDeferredCommand,
                newtime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDeferredCommand,
                newtime: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetHResult: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDeferredCommand,
                phrResult: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDeferredCommand,
                phrResult: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDeferredCommand_Cancel(self: *const T) HRESULT {
                return @as(*const IDeferredCommand.VTable, @ptrCast(self.vtable)).Cancel(@as(*const IDeferredCommand, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDeferredCommand_Confidence(self: *const T, pConfidence: ?*i32) HRESULT {
                return @as(*const IDeferredCommand.VTable, @ptrCast(self.vtable)).Confidence(@as(*const IDeferredCommand, @ptrCast(self)), pConfidence);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDeferredCommand_Postpone(self: *const T, newtime: f64) HRESULT {
                return @as(*const IDeferredCommand.VTable, @ptrCast(self.vtable)).Postpone(@as(*const IDeferredCommand, @ptrCast(self)), newtime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDeferredCommand_GetHResult(self: *const T, phrResult: ?*HRESULT) HRESULT {
                return @as(*const IDeferredCommand.VTable, @ptrCast(self.vtable)).GetHResult(@as(*const IDeferredCommand, @ptrCast(self)), phrResult);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IQueueCommand_Value = Guid.initString("56a868b7-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IQueueCommand = &IID_IQueueCommand_Value;
pub const IQueueCommand = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        InvokeAtStreamTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IQueueCommand,
                pCmd: ?*?*IDeferredCommand,
                time: f64,
                iid: ?*Guid,
                dispidMethod: i32,
                wFlags: i16,
                cArgs: i32,
                pDispParams: ?*VARIANT,
                pvarResult: ?*VARIANT,
                puArgErr: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IQueueCommand,
                pCmd: ?*?*IDeferredCommand,
                time: f64,
                iid: ?*Guid,
                dispidMethod: i32,
                wFlags: i16,
                cArgs: i32,
                pDispParams: ?*VARIANT,
                pvarResult: ?*VARIANT,
                puArgErr: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        InvokeAtPresentationTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IQueueCommand,
                pCmd: ?*?*IDeferredCommand,
                time: f64,
                iid: ?*Guid,
                dispidMethod: i32,
                wFlags: i16,
                cArgs: i32,
                pDispParams: ?*VARIANT,
                pvarResult: ?*VARIANT,
                puArgErr: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IQueueCommand,
                pCmd: ?*?*IDeferredCommand,
                time: f64,
                iid: ?*Guid,
                dispidMethod: i32,
                wFlags: i16,
                cArgs: i32,
                pDispParams: ?*VARIANT,
                pvarResult: ?*VARIANT,
                puArgErr: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQueueCommand_InvokeAtStreamTime(self: *const T, pCmd: ?*?*IDeferredCommand, time: f64, iid: ?*Guid, dispidMethod: i32, wFlags: i16, cArgs: i32, pDispParams: ?*VARIANT, pvarResult: ?*VARIANT, puArgErr: ?*i16) HRESULT {
                return @as(*const IQueueCommand.VTable, @ptrCast(self.vtable)).InvokeAtStreamTime(@as(*const IQueueCommand, @ptrCast(self)), pCmd, time, iid, dispidMethod, wFlags, cArgs, pDispParams, pvarResult, puArgErr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQueueCommand_InvokeAtPresentationTime(self: *const T, pCmd: ?*?*IDeferredCommand, time: f64, iid: ?*Guid, dispidMethod: i32, wFlags: i16, cArgs: i32, pDispParams: ?*VARIANT, pvarResult: ?*VARIANT, puArgErr: ?*i16) HRESULT {
                return @as(*const IQueueCommand.VTable, @ptrCast(self.vtable)).InvokeAtPresentationTime(@as(*const IQueueCommand, @ptrCast(self)), pCmd, time, iid, dispidMethod, wFlags, cArgs, pDispParams, pvarResult, puArgErr);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IFilterInfo_Value = Guid.initString("56a868ba-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IFilterInfo = &IID_IFilterInfo_Value;
pub const IFilterInfo = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        FindPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFilterInfo,
                strPinID: ?BSTR,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFilterInfo,
                strPinID: ?BSTR,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Name: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFilterInfo,
                strName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFilterInfo,
                strName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VendorInfo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFilterInfo,
                strVendorInfo: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFilterInfo,
                strVendorInfo: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Filter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFilterInfo,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFilterInfo,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Pins: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFilterInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFilterInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_IsFileSource: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFilterInfo,
                pbIsSource: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFilterInfo,
                pbIsSource: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Filename: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFilterInfo,
                pstrFilename: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFilterInfo,
                pstrFilename: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Filename: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IFilterInfo,
                strFilename: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IFilterInfo,
                strFilename: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterInfo_FindPin(self: *const T, strPinID: ?BSTR, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IFilterInfo.VTable, @ptrCast(self.vtable)).FindPin(@as(*const IFilterInfo, @ptrCast(self)), strPinID, ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterInfo_get_Name(self: *const T, strName: ?*?BSTR) HRESULT {
                return @as(*const IFilterInfo.VTable, @ptrCast(self.vtable)).get_Name(@as(*const IFilterInfo, @ptrCast(self)), strName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterInfo_get_VendorInfo(self: *const T, strVendorInfo: ?*?BSTR) HRESULT {
                return @as(*const IFilterInfo.VTable, @ptrCast(self.vtable)).get_VendorInfo(@as(*const IFilterInfo, @ptrCast(self)), strVendorInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterInfo_get_Filter(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IFilterInfo.VTable, @ptrCast(self.vtable)).get_Filter(@as(*const IFilterInfo, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterInfo_get_Pins(self: *const T, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IFilterInfo.VTable, @ptrCast(self.vtable)).get_Pins(@as(*const IFilterInfo, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterInfo_get_IsFileSource(self: *const T, pbIsSource: ?*i32) HRESULT {
                return @as(*const IFilterInfo.VTable, @ptrCast(self.vtable)).get_IsFileSource(@as(*const IFilterInfo, @ptrCast(self)), pbIsSource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterInfo_get_Filename(self: *const T, pstrFilename: ?*?BSTR) HRESULT {
                return @as(*const IFilterInfo.VTable, @ptrCast(self.vtable)).get_Filename(@as(*const IFilterInfo, @ptrCast(self)), pstrFilename);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFilterInfo_put_Filename(self: *const T, strFilename: ?BSTR) HRESULT {
                return @as(*const IFilterInfo.VTable, @ptrCast(self.vtable)).put_Filename(@as(*const IFilterInfo, @ptrCast(self)), strFilename);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IRegFilterInfo_Value = Guid.initString("56a868bb-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IRegFilterInfo = &IID_IRegFilterInfo_Value;
pub const IRegFilterInfo = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Name: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IRegFilterInfo,
                strName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IRegFilterInfo,
                strName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Filter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IRegFilterInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IRegFilterInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IRegFilterInfo_get_Name(self: *const T, strName: ?*?BSTR) HRESULT {
                return @as(*const IRegFilterInfo.VTable, @ptrCast(self.vtable)).get_Name(@as(*const IRegFilterInfo, @ptrCast(self)), strName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IRegFilterInfo_Filter(self: *const T, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IRegFilterInfo.VTable, @ptrCast(self.vtable)).Filter(@as(*const IRegFilterInfo, @ptrCast(self)), ppUnk);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMediaTypeInfo_Value = Guid.initString("56a868bc-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IMediaTypeInfo = &IID_IMediaTypeInfo_Value;
pub const IMediaTypeInfo = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Type: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaTypeInfo,
                strType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaTypeInfo,
                strType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Subtype: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMediaTypeInfo,
                strType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMediaTypeInfo,
                strType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaTypeInfo_get_Type(self: *const T, strType: ?*?BSTR) HRESULT {
                return @as(*const IMediaTypeInfo.VTable, @ptrCast(self.vtable)).get_Type(@as(*const IMediaTypeInfo, @ptrCast(self)), strType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaTypeInfo_get_Subtype(self: *const T, strType: ?*?BSTR) HRESULT {
                return @as(*const IMediaTypeInfo.VTable, @ptrCast(self.vtable)).get_Subtype(@as(*const IMediaTypeInfo, @ptrCast(self)), strType);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IPinInfo_Value = Guid.initString("56a868bd-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IPinInfo = &IID_IPinInfo_Value;
pub const IPinInfo = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Pin: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ConnectedTo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ConnectionMediaType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FilterInfo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Name: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IPinInfo,
                ppUnk: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IPinInfo,
                ppUnk: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Direction: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IPinInfo,
                ppDirection: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IPinInfo,
                ppDirection: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PinID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IPinInfo,
                strPinID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IPinInfo,
                strPinID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MediaTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IPinInfo,
                ppUnk: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Connect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinInfo,
                pPin: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinInfo,
                pPin: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConnectDirect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinInfo,
                pPin: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinInfo,
                pPin: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConnectWithType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinInfo,
                pPin: ?*IUnknown,
                pMediaType: ?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinInfo,
                pPin: ?*IUnknown,
                pMediaType: ?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Disconnect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Render: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPinInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPinInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_get_Pin(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).get_Pin(@as(*const IPinInfo, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_get_ConnectedTo(self: *const T, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).get_ConnectedTo(@as(*const IPinInfo, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_get_ConnectionMediaType(self: *const T, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).get_ConnectionMediaType(@as(*const IPinInfo, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_get_FilterInfo(self: *const T, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).get_FilterInfo(@as(*const IPinInfo, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_get_Name(self: *const T, ppUnk: ?*?BSTR) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).get_Name(@as(*const IPinInfo, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_get_Direction(self: *const T, ppDirection: ?*i32) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).get_Direction(@as(*const IPinInfo, @ptrCast(self)), ppDirection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_get_PinID(self: *const T, strPinID: ?*?BSTR) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).get_PinID(@as(*const IPinInfo, @ptrCast(self)), strPinID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_get_MediaTypes(self: *const T, ppUnk: ?*?*IDispatch) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).get_MediaTypes(@as(*const IPinInfo, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_Connect(self: *const T, pPin: ?*IUnknown) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).Connect(@as(*const IPinInfo, @ptrCast(self)), pPin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_ConnectDirect(self: *const T, pPin: ?*IUnknown) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).ConnectDirect(@as(*const IPinInfo, @ptrCast(self)), pPin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_ConnectWithType(self: *const T, pPin: ?*IUnknown, pMediaType: ?*IDispatch) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).ConnectWithType(@as(*const IPinInfo, @ptrCast(self)), pPin, pMediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_Disconnect(self: *const T) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).Disconnect(@as(*const IPinInfo, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPinInfo_Render(self: *const T) HRESULT {
                return @as(*const IPinInfo.VTable, @ptrCast(self.vtable)).Render(@as(*const IPinInfo, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAMStats_Value = Guid.initString("bc9bcf80-dcd2-11d2-abf6-00a0c905f375");
pub const IID_IAMStats = &IID_IAMStats_Value;
pub const IAMStats = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStats,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStats,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAMStats,
                plCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAMStats,
                plCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetValueByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStats,
                lIndex: i32,
                szName: ?*?BSTR,
                lCount: ?*i32,
                dLast: ?*f64,
                dAverage: ?*f64,
                dStdDev: ?*f64,
                dMin: ?*f64,
                dMax: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStats,
                lIndex: i32,
                szName: ?*?BSTR,
                lCount: ?*i32,
                dLast: ?*f64,
                dAverage: ?*f64,
                dStdDev: ?*f64,
                dMin: ?*f64,
                dMax: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetValueByName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStats,
                szName: ?BSTR,
                lIndex: ?*i32,
                lCount: ?*i32,
                dLast: ?*f64,
                dAverage: ?*f64,
                dStdDev: ?*f64,
                dMin: ?*f64,
                dMax: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStats,
                szName: ?BSTR,
                lIndex: ?*i32,
                lCount: ?*i32,
                dLast: ?*f64,
                dAverage: ?*f64,
                dStdDev: ?*f64,
                dMin: ?*f64,
                dMax: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStats,
                szName: ?BSTR,
                lCreate: i32,
                plIndex: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStats,
                szName: ?BSTR,
                lCreate: i32,
                plIndex: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddValue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMStats,
                lIndex: i32,
                dValue: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMStats,
                lIndex: i32,
                dValue: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStats_Reset(self: *const T) HRESULT {
                return @as(*const IAMStats.VTable, @ptrCast(self.vtable)).Reset(@as(*const IAMStats, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStats_get_Count(self: *const T, plCount: ?*i32) HRESULT {
                return @as(*const IAMStats.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IAMStats, @ptrCast(self)), plCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStats_GetValueByIndex(self: *const T, lIndex: i32, szName: ?*?BSTR, lCount: ?*i32, dLast: ?*f64, dAverage: ?*f64, dStdDev: ?*f64, dMin: ?*f64, dMax: ?*f64) HRESULT {
                return @as(*const IAMStats.VTable, @ptrCast(self.vtable)).GetValueByIndex(@as(*const IAMStats, @ptrCast(self)), lIndex, szName, lCount, dLast, dAverage, dStdDev, dMin, dMax);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStats_GetValueByName(self: *const T, szName: ?BSTR, lIndex: ?*i32, lCount: ?*i32, dLast: ?*f64, dAverage: ?*f64, dStdDev: ?*f64, dMin: ?*f64, dMax: ?*f64) HRESULT {
                return @as(*const IAMStats.VTable, @ptrCast(self.vtable)).GetValueByName(@as(*const IAMStats, @ptrCast(self)), szName, lIndex, lCount, dLast, dAverage, dStdDev, dMin, dMax);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStats_GetIndex(self: *const T, szName: ?BSTR, lCreate: i32, plIndex: ?*i32) HRESULT {
                return @as(*const IAMStats.VTable, @ptrCast(self.vtable)).GetIndex(@as(*const IAMStats, @ptrCast(self)), szName, lCreate, plIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMStats_AddValue(self: *const T, lIndex: i32, dValue: f64) HRESULT {
                return @as(*const IAMStats.VTable, @ptrCast(self.vtable)).AddValue(@as(*const IAMStats, @ptrCast(self)), lIndex, dValue);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AMVAUncompBufferInfo = extern struct {
    dwMinNumSurfaces: u32,
    dwMaxNumSurfaces: u32,
    ddUncompPixelFormat: DDPIXELFORMAT,
};

pub const AMVAUncompDataInfo = extern struct {
    dwUncompWidth: u32,
    dwUncompHeight: u32,
    ddUncompPixelFormat: DDPIXELFORMAT,
};

pub const AMVAInternalMemInfo = extern struct {
    dwScratchMemAlloc: u32,
};

pub const AMVACompBufferInfo = extern struct {
    dwNumCompBuffers: u32,
    dwWidthToCreate: u32,
    dwHeightToCreate: u32,
    dwBytesToAllocate: u32,
    ddCompCaps: DDSCAPS2,
    ddPixelFormat: DDPIXELFORMAT,
};

pub const AMVABeginFrameInfo = extern struct {
    dwDestSurfaceIndex: u32,
    pInputData: ?*anyopaque,
    dwSizeInputData: u32,
    pOutputData: ?*anyopaque,
    dwSizeOutputData: u32,
};

pub const AMVAEndFrameInfo = extern struct {
    dwSizeMiscData: u32,
    pMiscData: ?*anyopaque,
};

pub const AMVABUFFERINFO = extern struct {
    dwTypeIndex: u32,
    dwBufferIndex: u32,
    dwDataOffset: u32,
    dwDataSize: u32,
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMVideoAcceleratorNotify_Value = Guid.initString("256a6a21-fbad-11d1-82bf-00a0c9696c8f");
pub const IID_IAMVideoAcceleratorNotify = &IID_IAMVideoAcceleratorNotify_Value;
pub const IAMVideoAcceleratorNotify = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetUncompSurfacesInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAcceleratorNotify,
                pGuid: ?*const Guid,
                pUncompBufferInfo: ?*AMVAUncompBufferInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAcceleratorNotify,
                pGuid: ?*const Guid,
                pUncompBufferInfo: ?*AMVAUncompBufferInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetUncompSurfacesInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAcceleratorNotify,
                dwActualUncompSurfacesAllocated: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAcceleratorNotify,
                dwActualUncompSurfacesAllocated: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCreateVideoAcceleratorData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAcceleratorNotify,
                pGuid: ?*const Guid,
                pdwSizeMiscData: ?*u32,
                ppMiscData: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAcceleratorNotify,
                pGuid: ?*const Guid,
                pdwSizeMiscData: ?*u32,
                ppMiscData: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAcceleratorNotify_GetUncompSurfacesInfo(self: *const T, pGuid: ?*const Guid, pUncompBufferInfo: ?*AMVAUncompBufferInfo) HRESULT {
                return @as(*const IAMVideoAcceleratorNotify.VTable, @ptrCast(self.vtable)).GetUncompSurfacesInfo(@as(*const IAMVideoAcceleratorNotify, @ptrCast(self)), pGuid, pUncompBufferInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAcceleratorNotify_SetUncompSurfacesInfo(self: *const T, dwActualUncompSurfacesAllocated: u32) HRESULT {
                return @as(*const IAMVideoAcceleratorNotify.VTable, @ptrCast(self.vtable)).SetUncompSurfacesInfo(@as(*const IAMVideoAcceleratorNotify, @ptrCast(self)), dwActualUncompSurfacesAllocated);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAcceleratorNotify_GetCreateVideoAcceleratorData(self: *const T, pGuid: ?*const Guid, pdwSizeMiscData: ?*u32, ppMiscData: ?*?*anyopaque) HRESULT {
                return @as(*const IAMVideoAcceleratorNotify.VTable, @ptrCast(self.vtable)).GetCreateVideoAcceleratorData(@as(*const IAMVideoAcceleratorNotify, @ptrCast(self)), pGuid, pdwSizeMiscData, ppMiscData);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IAMVideoAccelerator_Value = Guid.initString("256a6a22-fbad-11d1-82bf-00a0c9696c8f");
pub const IID_IAMVideoAccelerator = &IID_IAMVideoAccelerator_Value;
pub const IAMVideoAccelerator = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetVideoAcceleratorGUIDs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                pdwNumGuidsSupported: ?*u32,
                pGuidsSupported: ?[*]Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                pdwNumGuidsSupported: ?*u32,
                pGuidsSupported: ?[*]Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetUncompFormatsSupported: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                pGuid: ?*const Guid,
                pdwNumFormatsSupported: ?*u32,
                pFormatsSupported: ?[*]DDPIXELFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                pGuid: ?*const Guid,
                pdwNumFormatsSupported: ?*u32,
                pFormatsSupported: ?[*]DDPIXELFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInternalMemInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                pGuid: ?*const Guid,
                pamvaUncompDataInfo: ?*const AMVAUncompDataInfo,
                pamvaInternalMemInfo: ?*AMVAInternalMemInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                pGuid: ?*const Guid,
                pamvaUncompDataInfo: ?*const AMVAUncompDataInfo,
                pamvaInternalMemInfo: ?*AMVAInternalMemInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCompBufferInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                pGuid: ?*const Guid,
                pamvaUncompDataInfo: ?*const AMVAUncompDataInfo,
                pdwNumTypesCompBuffers: ?*u32,
                pamvaCompBufferInfo: ?[*]AMVACompBufferInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                pGuid: ?*const Guid,
                pamvaUncompDataInfo: ?*const AMVAUncompDataInfo,
                pdwNumTypesCompBuffers: ?*u32,
                pamvaCompBufferInfo: ?[*]AMVACompBufferInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInternalCompBufferInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                pdwNumTypesCompBuffers: ?*u32,
                pamvaCompBufferInfo: ?[*]AMVACompBufferInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                pdwNumTypesCompBuffers: ?*u32,
                pamvaCompBufferInfo: ?[*]AMVACompBufferInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        BeginFrame: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                amvaBeginFrameInfo: ?*const AMVABeginFrameInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                amvaBeginFrameInfo: ?*const AMVABeginFrameInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EndFrame: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                pEndFrameInfo: ?*const AMVAEndFrameInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                pEndFrameInfo: ?*const AMVAEndFrameInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBuffer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                dwTypeIndex: u32,
                dwBufferIndex: u32,
                bReadOnly: BOOL,
                ppBuffer: ?*?*anyopaque,
                lpStride: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                dwTypeIndex: u32,
                dwBufferIndex: u32,
                bReadOnly: BOOL,
                ppBuffer: ?*?*anyopaque,
                lpStride: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleaseBuffer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                dwTypeIndex: u32,
                dwBufferIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                dwTypeIndex: u32,
                dwBufferIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Execute: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                dwFunction: u32,
                lpPrivateInputData: ?*anyopaque,
                cbPrivateInputData: u32,
                lpPrivateOutputDat: ?*anyopaque,
                cbPrivateOutputData: u32,
                dwNumBuffers: u32,
                pamvaBufferInfo: [*]const AMVABUFFERINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                dwFunction: u32,
                lpPrivateInputData: ?*anyopaque,
                cbPrivateInputData: u32,
                lpPrivateOutputDat: ?*anyopaque,
                cbPrivateOutputData: u32,
                dwNumBuffers: u32,
                pamvaBufferInfo: [*]const AMVABUFFERINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryRenderStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                dwTypeIndex: u32,
                dwBufferIndex: u32,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                dwTypeIndex: u32,
                dwBufferIndex: u32,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DisplayFrame: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMVideoAccelerator,
                dwFlipToIndex: u32,
                pMediaSample: ?*IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMVideoAccelerator,
                dwFlipToIndex: u32,
                pMediaSample: ?*IMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_GetVideoAcceleratorGUIDs(self: *const T, pdwNumGuidsSupported: ?*u32, pGuidsSupported: ?[*]Guid) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).GetVideoAcceleratorGUIDs(@as(*const IAMVideoAccelerator, @ptrCast(self)), pdwNumGuidsSupported, pGuidsSupported);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_GetUncompFormatsSupported(self: *const T, pGuid: ?*const Guid, pdwNumFormatsSupported: ?*u32, pFormatsSupported: ?[*]DDPIXELFORMAT) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).GetUncompFormatsSupported(@as(*const IAMVideoAccelerator, @ptrCast(self)), pGuid, pdwNumFormatsSupported, pFormatsSupported);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_GetInternalMemInfo(self: *const T, pGuid: ?*const Guid, pamvaUncompDataInfo: ?*const AMVAUncompDataInfo, pamvaInternalMemInfo: ?*AMVAInternalMemInfo) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).GetInternalMemInfo(@as(*const IAMVideoAccelerator, @ptrCast(self)), pGuid, pamvaUncompDataInfo, pamvaInternalMemInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_GetCompBufferInfo(self: *const T, pGuid: ?*const Guid, pamvaUncompDataInfo: ?*const AMVAUncompDataInfo, pdwNumTypesCompBuffers: ?*u32, pamvaCompBufferInfo: ?[*]AMVACompBufferInfo) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).GetCompBufferInfo(@as(*const IAMVideoAccelerator, @ptrCast(self)), pGuid, pamvaUncompDataInfo, pdwNumTypesCompBuffers, pamvaCompBufferInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_GetInternalCompBufferInfo(self: *const T, pdwNumTypesCompBuffers: ?*u32, pamvaCompBufferInfo: ?[*]AMVACompBufferInfo) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).GetInternalCompBufferInfo(@as(*const IAMVideoAccelerator, @ptrCast(self)), pdwNumTypesCompBuffers, pamvaCompBufferInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_BeginFrame(self: *const T, amvaBeginFrameInfo: ?*const AMVABeginFrameInfo) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).BeginFrame(@as(*const IAMVideoAccelerator, @ptrCast(self)), amvaBeginFrameInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_EndFrame(self: *const T, pEndFrameInfo: ?*const AMVAEndFrameInfo) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).EndFrame(@as(*const IAMVideoAccelerator, @ptrCast(self)), pEndFrameInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_GetBuffer(self: *const T, dwTypeIndex: u32, dwBufferIndex: u32, bReadOnly: BOOL, ppBuffer: ?*?*anyopaque, lpStride: ?*i32) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).GetBuffer(@as(*const IAMVideoAccelerator, @ptrCast(self)), dwTypeIndex, dwBufferIndex, bReadOnly, ppBuffer, lpStride);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_ReleaseBuffer(self: *const T, dwTypeIndex: u32, dwBufferIndex: u32) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).ReleaseBuffer(@as(*const IAMVideoAccelerator, @ptrCast(self)), dwTypeIndex, dwBufferIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_Execute(self: *const T, dwFunction: u32, lpPrivateInputData: ?*anyopaque, cbPrivateInputData: u32, lpPrivateOutputDat: ?*anyopaque, cbPrivateOutputData: u32, dwNumBuffers: u32, pamvaBufferInfo: [*]const AMVABUFFERINFO) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).Execute(@as(*const IAMVideoAccelerator, @ptrCast(self)), dwFunction, lpPrivateInputData, cbPrivateInputData, lpPrivateOutputDat, cbPrivateOutputData, dwNumBuffers, pamvaBufferInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_QueryRenderStatus(self: *const T, dwTypeIndex: u32, dwBufferIndex: u32, dwFlags: u32) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).QueryRenderStatus(@as(*const IAMVideoAccelerator, @ptrCast(self)), dwTypeIndex, dwBufferIndex, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMVideoAccelerator_DisplayFrame(self: *const T, dwFlipToIndex: u32, pMediaSample: ?*IMediaSample) HRESULT {
                return @as(*const IAMVideoAccelerator.VTable, @ptrCast(self.vtable)).DisplayFrame(@as(*const IAMVideoAccelerator, @ptrCast(self)), dwFlipToIndex, pMediaSample);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_WST_PAGE = extern struct {
    dwPageNr: u32,
    dwSubPageNr: u32,
    pucPageData: ?*u8,
};

pub const AM_WST_LEVEL = enum(i32) {
    @"5" = 0,
};
pub const AM_WST_LEVEL_1_5 = AM_WST_LEVEL.@"5";

pub const AM_WST_SERVICE = enum(i32) {
    None = 0,
    Text = 1,
    IDS = 2,
    Invalid = 3,
};
pub const AM_WST_SERVICE_None = AM_WST_SERVICE.None;
pub const AM_WST_SERVICE_Text = AM_WST_SERVICE.Text;
pub const AM_WST_SERVICE_IDS = AM_WST_SERVICE.IDS;
pub const AM_WST_SERVICE_Invalid = AM_WST_SERVICE.Invalid;

pub const AM_WST_STATE = enum(i32) {
    ff = 0,
    n = 1,
};
pub const AM_WST_STATE_Off = AM_WST_STATE.ff;
pub const AM_WST_STATE_On = AM_WST_STATE.n;

pub const AM_WST_STYLE = enum(i32) {
    None = 0,
    Invers = 1,
};
pub const AM_WST_STYLE_None = AM_WST_STYLE.None;
pub const AM_WST_STYLE_Invers = AM_WST_STYLE.Invers;

pub const AM_WST_DRAWBGMODE = enum(i32) {
    Opaque = 0,
    Transparent = 1,
};
pub const AM_WST_DRAWBGMODE_Opaque = AM_WST_DRAWBGMODE.Opaque;
pub const AM_WST_DRAWBGMODE_Transparent = AM_WST_DRAWBGMODE.Transparent;

// TODO: this type is limited to platform 'windows5.1.2600'
pub const IAMWstDecoder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetDecoderLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                lpLevel: ?*AM_WST_LEVEL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                lpLevel: ?*AM_WST_LEVEL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentService: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                lpService: ?*AM_WST_SERVICE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                lpService: ?*AM_WST_SERVICE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                lpState: ?*AM_WST_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                lpState: ?*AM_WST_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetServiceState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                State: AM_WST_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                State: AM_WST_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOutputFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                lpbmih: ?*BITMAPINFOHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                lpbmih: ?*BITMAPINFOHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOutputFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                lpbmi: ?*BITMAPINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                lpbmi: ?*BITMAPINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBackgroundColor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                pdwPhysColor: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                pdwPhysColor: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBackgroundColor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                dwPhysColor: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                dwPhysColor: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRedrawAlways: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                lpbOption: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                lpbOption: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRedrawAlways: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                bOption: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                bOption: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDrawBackgroundMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                lpMode: ?*AM_WST_DRAWBGMODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                lpMode: ?*AM_WST_DRAWBGMODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDrawBackgroundMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                Mode: AM_WST_DRAWBGMODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                Mode: AM_WST_DRAWBGMODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetAnswerMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                bAnswer: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                bAnswer: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAnswerMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                pbAnswer: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                pbAnswer: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetHoldPage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                bHoldPage: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                bHoldPage: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetHoldPage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                pbHoldPage: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                pbHoldPage: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentPage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                pWstPage: ?*AM_WST_PAGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                pWstPage: ?*AM_WST_PAGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCurrentPage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMWstDecoder,
                WstPage: AM_WST_PAGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMWstDecoder,
                WstPage: AM_WST_PAGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetDecoderLevel(self: *const T, lpLevel: ?*AM_WST_LEVEL) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetDecoderLevel(@as(*const IAMWstDecoder, @ptrCast(self)), lpLevel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetCurrentService(self: *const T, lpService: ?*AM_WST_SERVICE) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetCurrentService(@as(*const IAMWstDecoder, @ptrCast(self)), lpService);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetServiceState(self: *const T, lpState: ?*AM_WST_STATE) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetServiceState(@as(*const IAMWstDecoder, @ptrCast(self)), lpState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_SetServiceState(self: *const T, State: AM_WST_STATE) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).SetServiceState(@as(*const IAMWstDecoder, @ptrCast(self)), State);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetOutputFormat(self: *const T, lpbmih: ?*BITMAPINFOHEADER) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetOutputFormat(@as(*const IAMWstDecoder, @ptrCast(self)), lpbmih);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_SetOutputFormat(self: *const T, lpbmi: ?*BITMAPINFO) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).SetOutputFormat(@as(*const IAMWstDecoder, @ptrCast(self)), lpbmi);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetBackgroundColor(self: *const T, pdwPhysColor: ?*u32) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetBackgroundColor(@as(*const IAMWstDecoder, @ptrCast(self)), pdwPhysColor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_SetBackgroundColor(self: *const T, dwPhysColor: u32) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).SetBackgroundColor(@as(*const IAMWstDecoder, @ptrCast(self)), dwPhysColor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetRedrawAlways(self: *const T, lpbOption: ?*i32) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetRedrawAlways(@as(*const IAMWstDecoder, @ptrCast(self)), lpbOption);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_SetRedrawAlways(self: *const T, bOption: BOOL) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).SetRedrawAlways(@as(*const IAMWstDecoder, @ptrCast(self)), bOption);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetDrawBackgroundMode(self: *const T, lpMode: ?*AM_WST_DRAWBGMODE) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetDrawBackgroundMode(@as(*const IAMWstDecoder, @ptrCast(self)), lpMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_SetDrawBackgroundMode(self: *const T, Mode: AM_WST_DRAWBGMODE) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).SetDrawBackgroundMode(@as(*const IAMWstDecoder, @ptrCast(self)), Mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_SetAnswerMode(self: *const T, bAnswer: BOOL) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).SetAnswerMode(@as(*const IAMWstDecoder, @ptrCast(self)), bAnswer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetAnswerMode(self: *const T, pbAnswer: ?*BOOL) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetAnswerMode(@as(*const IAMWstDecoder, @ptrCast(self)), pbAnswer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_SetHoldPage(self: *const T, bHoldPage: BOOL) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).SetHoldPage(@as(*const IAMWstDecoder, @ptrCast(self)), bHoldPage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetHoldPage(self: *const T, pbHoldPage: ?*BOOL) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetHoldPage(@as(*const IAMWstDecoder, @ptrCast(self)), pbHoldPage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_GetCurrentPage(self: *const T, pWstPage: ?*AM_WST_PAGE) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).GetCurrentPage(@as(*const IAMWstDecoder, @ptrCast(self)), pWstPage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMWstDecoder_SetCurrentPage(self: *const T, WstPage: AM_WST_PAGE) HRESULT {
                return @as(*const IAMWstDecoder.VTable, @ptrCast(self.vtable)).SetCurrentPage(@as(*const IAMWstDecoder, @ptrCast(self)), WstPage);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IKsTopologyInfo_Value = Guid.initString("720d4ac0-7533-11d0-a5d6-28db04c10000");
pub const IID_IKsTopologyInfo = &IID_IKsTopologyInfo_Value;
pub const IKsTopologyInfo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NumCategories: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IKsTopologyInfo,
                pdwNumCategories: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IKsTopologyInfo,
                pdwNumCategories: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Category: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IKsTopologyInfo,
                dwIndex: u32,
                pCategory: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IKsTopologyInfo,
                dwIndex: u32,
                pCategory: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NumConnections: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IKsTopologyInfo,
                pdwNumConnections: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IKsTopologyInfo,
                pdwNumConnections: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ConnectionInfo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IKsTopologyInfo,
                dwIndex: u32,
                pConnectionInfo: ?*KSTOPOLOGY_CONNECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IKsTopologyInfo,
                dwIndex: u32,
                pConnectionInfo: ?*KSTOPOLOGY_CONNECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NodeName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IKsTopologyInfo,
                dwNodeId: u32,
                // TODO: what to do with BytesParamIndex 2?
                pwchNodeName: ?PWSTR,
                dwBufSize: u32,
                pdwNameLen: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IKsTopologyInfo,
                dwNodeId: u32,
                // TODO: what to do with BytesParamIndex 2?
                pwchNodeName: ?PWSTR,
                dwBufSize: u32,
                pdwNameLen: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NumNodes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IKsTopologyInfo,
                pdwNumNodes: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IKsTopologyInfo,
                pdwNumNodes: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NodeType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IKsTopologyInfo,
                dwNodeId: u32,
                pNodeType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IKsTopologyInfo,
                dwNodeId: u32,
                pNodeType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateNodeInstance: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IKsTopologyInfo,
                dwNodeId: u32,
                iid: ?*const Guid,
                ppvObject: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IKsTopologyInfo,
                dwNodeId: u32,
                iid: ?*const Guid,
                ppvObject: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsTopologyInfo_get_NumCategories(self: *const T, pdwNumCategories: ?*u32) HRESULT {
                return @as(*const IKsTopologyInfo.VTable, @ptrCast(self.vtable)).get_NumCategories(@as(*const IKsTopologyInfo, @ptrCast(self)), pdwNumCategories);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsTopologyInfo_get_Category(self: *const T, dwIndex: u32, pCategory: ?*Guid) HRESULT {
                return @as(*const IKsTopologyInfo.VTable, @ptrCast(self.vtable)).get_Category(@as(*const IKsTopologyInfo, @ptrCast(self)), dwIndex, pCategory);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsTopologyInfo_get_NumConnections(self: *const T, pdwNumConnections: ?*u32) HRESULT {
                return @as(*const IKsTopologyInfo.VTable, @ptrCast(self.vtable)).get_NumConnections(@as(*const IKsTopologyInfo, @ptrCast(self)), pdwNumConnections);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsTopologyInfo_get_ConnectionInfo(self: *const T, dwIndex: u32, pConnectionInfo: ?*KSTOPOLOGY_CONNECTION) HRESULT {
                return @as(*const IKsTopologyInfo.VTable, @ptrCast(self.vtable)).get_ConnectionInfo(@as(*const IKsTopologyInfo, @ptrCast(self)), dwIndex, pConnectionInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsTopologyInfo_get_NodeName(self: *const T, dwNodeId: u32, pwchNodeName: ?PWSTR, dwBufSize: u32, pdwNameLen: ?*u32) HRESULT {
                return @as(*const IKsTopologyInfo.VTable, @ptrCast(self.vtable)).get_NodeName(@as(*const IKsTopologyInfo, @ptrCast(self)), dwNodeId, pwchNodeName, dwBufSize, pdwNameLen);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsTopologyInfo_get_NumNodes(self: *const T, pdwNumNodes: ?*u32) HRESULT {
                return @as(*const IKsTopologyInfo.VTable, @ptrCast(self.vtable)).get_NumNodes(@as(*const IKsTopologyInfo, @ptrCast(self)), pdwNumNodes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsTopologyInfo_get_NodeType(self: *const T, dwNodeId: u32, pNodeType: ?*Guid) HRESULT {
                return @as(*const IKsTopologyInfo.VTable, @ptrCast(self.vtable)).get_NodeType(@as(*const IKsTopologyInfo, @ptrCast(self)), dwNodeId, pNodeType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsTopologyInfo_CreateNodeInstance(self: *const T, dwNodeId: u32, iid: ?*const Guid, ppvObject: ?*?*anyopaque) HRESULT {
                return @as(*const IKsTopologyInfo.VTable, @ptrCast(self.vtable)).CreateNodeInstance(@as(*const IKsTopologyInfo, @ptrCast(self)), dwNodeId, iid, ppvObject);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_ISelector_Value = Guid.initString("1abdaeca-68b6-4f83-9371-b413907c7b9f");
pub const IID_ISelector = &IID_ISelector_Value;
pub const ISelector = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NumSources: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ISelector,
                pdwNumSources: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ISelector,
                pdwNumSources: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SourceNodeId: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ISelector,
                pdwPinId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ISelector,
                pdwPinId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SourceNodeId: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ISelector,
                dwPinId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ISelector,
                dwPinId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISelector_get_NumSources(self: *const T, pdwNumSources: ?*u32) HRESULT {
                return @as(*const ISelector.VTable, @ptrCast(self.vtable)).get_NumSources(@as(*const ISelector, @ptrCast(self)), pdwNumSources);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISelector_get_SourceNodeId(self: *const T, pdwPinId: ?*u32) HRESULT {
                return @as(*const ISelector.VTable, @ptrCast(self.vtable)).get_SourceNodeId(@as(*const ISelector, @ptrCast(self)), pdwPinId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISelector_put_SourceNodeId(self: *const T, dwPinId: u32) HRESULT {
                return @as(*const ISelector.VTable, @ptrCast(self.vtable)).put_SourceNodeId(@as(*const ISelector, @ptrCast(self)), dwPinId);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_ICameraControl_Value = Guid.initString("2ba1785d-4d1b-44ef-85e8-c7f1d3f20184");
pub const IID_ICameraControl = &IID_ICameraControl_Value;
pub const ICameraControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Exposure: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Exposure: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Exposure: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Focus: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Focus: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Focus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Iris: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Iris: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Iris: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Zoom: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Zoom: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Zoom: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FocalLengths: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                plOcularFocalLength: ?*i32,
                plObjectiveFocalLengthMin: ?*i32,
                plObjectiveFocalLengthMax: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                plOcularFocalLength: ?*i32,
                plObjectiveFocalLengthMin: ?*i32,
                plObjectiveFocalLengthMax: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Pan: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Pan: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Pan: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Tilt: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Tilt: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Tilt: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PanTilt: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pPanValue: ?*i32,
                pTiltValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pPanValue: ?*i32,
                pTiltValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PanTilt: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                PanValue: i32,
                TiltValue: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                PanValue: i32,
                TiltValue: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Roll: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Roll: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Roll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ExposureRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ExposureRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_ExposureRelative: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FocusRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FocusRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_FocusRelative: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_IrisRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_IrisRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_IrisRelative: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ZoomRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ZoomRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_ZoomRelative: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PanRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PanRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TiltRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TiltRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_TiltRelative: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PanTiltRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pPanValue: ?*i32,
                pTiltValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pPanValue: ?*i32,
                pTiltValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PanTiltRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                PanValue: i32,
                TiltValue: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                PanValue: i32,
                TiltValue: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_PanRelative: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_RollRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_RollRelative: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_RollRelative: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICameraControl,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ScanMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ScanMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PrivacyMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PrivacyMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ICameraControl,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_Exposure(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_Exposure(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_Exposure(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_Exposure(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_Exposure(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_Exposure(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_Focus(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_Focus(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_Focus(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_Focus(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_Focus(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_Focus(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_Iris(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_Iris(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_Iris(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_Iris(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_Iris(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_Iris(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_Zoom(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_Zoom(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_Zoom(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_Zoom(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_Zoom(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_Zoom(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_FocalLengths(self: *const T, plOcularFocalLength: ?*i32, plObjectiveFocalLengthMin: ?*i32, plObjectiveFocalLengthMax: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_FocalLengths(@as(*const ICameraControl, @ptrCast(self)), plOcularFocalLength, plObjectiveFocalLengthMin, plObjectiveFocalLengthMax);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_Pan(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_Pan(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_Pan(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_Pan(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_Pan(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_Pan(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_Tilt(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_Tilt(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_Tilt(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_Tilt(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_Tilt(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_Tilt(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_PanTilt(self: *const T, pPanValue: ?*i32, pTiltValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_PanTilt(@as(*const ICameraControl, @ptrCast(self)), pPanValue, pTiltValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_PanTilt(self: *const T, PanValue: i32, TiltValue: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_PanTilt(@as(*const ICameraControl, @ptrCast(self)), PanValue, TiltValue, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_Roll(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_Roll(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_Roll(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_Roll(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_Roll(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_Roll(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_ExposureRelative(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_ExposureRelative(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_ExposureRelative(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_ExposureRelative(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_ExposureRelative(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_ExposureRelative(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_FocusRelative(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_FocusRelative(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_FocusRelative(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_FocusRelative(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_FocusRelative(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_FocusRelative(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_IrisRelative(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_IrisRelative(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_IrisRelative(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_IrisRelative(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_IrisRelative(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_IrisRelative(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_ZoomRelative(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_ZoomRelative(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_ZoomRelative(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_ZoomRelative(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_ZoomRelative(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_ZoomRelative(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_PanRelative(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_PanRelative(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_PanRelative(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_PanRelative(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_TiltRelative(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_TiltRelative(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_TiltRelative(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_TiltRelative(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_TiltRelative(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_TiltRelative(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_PanTiltRelative(self: *const T, pPanValue: ?*i32, pTiltValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_PanTiltRelative(@as(*const ICameraControl, @ptrCast(self)), pPanValue, pTiltValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_PanTiltRelative(self: *const T, PanValue: i32, TiltValue: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_PanTiltRelative(@as(*const ICameraControl, @ptrCast(self)), PanValue, TiltValue, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_PanRelative(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_PanRelative(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_RollRelative(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_RollRelative(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_RollRelative(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_RollRelative(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_getRange_RollRelative(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).getRange_RollRelative(@as(*const ICameraControl, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_ScanMode(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_ScanMode(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_ScanMode(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_ScanMode(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_get_PrivacyMode(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).get_PrivacyMode(@as(*const ICameraControl, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICameraControl_put_PrivacyMode(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const ICameraControl.VTable, @ptrCast(self.vtable)).put_PrivacyMode(@as(*const ICameraControl, @ptrCast(self)), Value, Flags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVideoProcAmp_Value = Guid.initString("4050560e-42a7-413a-85c2-09269a2d0f44");
pub const IID_IVideoProcAmp = &IID_IVideoProcAmp_Value;
pub const IVideoProcAmp = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BacklightCompensation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BacklightCompensation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_BacklightCompensation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Brightness: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Brightness: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Brightness: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ColorEnable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ColorEnable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_ColorEnable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Contrast: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Contrast: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Contrast: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Gamma: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Gamma: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Gamma: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Saturation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Saturation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Saturation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Sharpness: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Sharpness: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Sharpness: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WhiteBalance: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_WhiteBalance: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_WhiteBalance: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Gain: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Gain: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Gain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Hue: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Hue: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_Hue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DigitalMultiplier: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DigitalMultiplier: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_DigitalMultiplier: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PowerlineFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PowerlineFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_PowerlineFrequency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WhiteBalanceComponent: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pValue1: ?*i32,
                pValue2: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                pValue1: ?*i32,
                pValue2: ?*i32,
                pFlags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_WhiteBalanceComponent: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IVideoProcAmp,
                Value1: i32,
                Value2: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IVideoProcAmp,
                Value1: i32,
                Value2: i32,
                Flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        getRange_WhiteBalanceComponent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVideoProcAmp,
                pMin: ?*i32,
                pMax: ?*i32,
                pSteppingDelta: ?*i32,
                pDefault: ?*i32,
                pCapsFlag: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_BacklightCompensation(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_BacklightCompensation(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_BacklightCompensation(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_BacklightCompensation(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_BacklightCompensation(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_BacklightCompensation(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_Brightness(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_Brightness(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_Brightness(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_Brightness(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_Brightness(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_Brightness(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_ColorEnable(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_ColorEnable(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_ColorEnable(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_ColorEnable(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_ColorEnable(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_ColorEnable(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_Contrast(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_Contrast(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_Contrast(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_Contrast(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_Contrast(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_Contrast(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_Gamma(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_Gamma(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_Gamma(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_Gamma(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_Gamma(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_Gamma(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_Saturation(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_Saturation(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_Saturation(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_Saturation(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_Saturation(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_Saturation(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_Sharpness(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_Sharpness(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_Sharpness(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_Sharpness(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_Sharpness(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_Sharpness(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_WhiteBalance(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_WhiteBalance(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_WhiteBalance(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_WhiteBalance(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_WhiteBalance(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_WhiteBalance(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_Gain(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_Gain(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_Gain(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_Gain(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_Gain(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_Gain(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_Hue(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_Hue(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_Hue(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_Hue(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_Hue(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_Hue(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_DigitalMultiplier(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_DigitalMultiplier(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_DigitalMultiplier(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_DigitalMultiplier(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_DigitalMultiplier(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_DigitalMultiplier(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_PowerlineFrequency(self: *const T, pValue: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_PowerlineFrequency(@as(*const IVideoProcAmp, @ptrCast(self)), pValue, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_PowerlineFrequency(self: *const T, Value: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_PowerlineFrequency(@as(*const IVideoProcAmp, @ptrCast(self)), Value, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_PowerlineFrequency(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_PowerlineFrequency(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_get_WhiteBalanceComponent(self: *const T, pValue1: ?*i32, pValue2: ?*i32, pFlags: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).get_WhiteBalanceComponent(@as(*const IVideoProcAmp, @ptrCast(self)), pValue1, pValue2, pFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_put_WhiteBalanceComponent(self: *const T, Value1: i32, Value2: i32, Flags: i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).put_WhiteBalanceComponent(@as(*const IVideoProcAmp, @ptrCast(self)), Value1, Value2, Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVideoProcAmp_getRange_WhiteBalanceComponent(self: *const T, pMin: ?*i32, pMax: ?*i32, pSteppingDelta: ?*i32, pDefault: ?*i32, pCapsFlag: ?*i32) HRESULT {
                return @as(*const IVideoProcAmp.VTable, @ptrCast(self.vtable)).getRange_WhiteBalanceComponent(@as(*const IVideoProcAmp, @ptrCast(self)), pMin, pMax, pSteppingDelta, pDefault, pCapsFlag);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IKsNodeControl_Value = Guid.initString("11737c14-24a7-4bb5-81a0-0d003813b0c4");
pub const IID_IKsNodeControl = &IID_IKsNodeControl_Value;
pub const IKsNodeControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_NodeId: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IKsNodeControl,
                dwNodeId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IKsNodeControl,
                dwNodeId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_KsControl: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IKsNodeControl,
                pKsControl: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IKsNodeControl,
                pKsControl: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsNodeControl_put_NodeId(self: *const T, dwNodeId: u32) HRESULT {
                return @as(*const IKsNodeControl.VTable, @ptrCast(self.vtable)).put_NodeId(@as(*const IKsNodeControl, @ptrCast(self)), dwNodeId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IKsNodeControl_put_KsControl(self: *const T, pKsControl: ?*anyopaque) HRESULT {
                return @as(*const IKsNodeControl.VTable, @ptrCast(self.vtable)).put_KsControl(@as(*const IKsNodeControl, @ptrCast(self)), pKsControl);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IConfigAsfWriter_Value = Guid.initString("45086030-f7e4-486a-b504-826bb5792a3b");
pub const IID_IConfigAsfWriter = &IID_IConfigAsfWriter_Value;
pub const IConfigAsfWriter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        ConfigureFilterUsingProfileId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter,
                dwProfileId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter,
                dwProfileId: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentProfileId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter,
                pdwProfileId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter,
                pdwProfileId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConfigureFilterUsingProfileGuid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter,
                guidProfile: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter,
                guidProfile: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentProfileGuid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter,
                pProfileGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter,
                pProfileGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConfigureFilterUsingProfile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter,
                pProfile: ?*IWMProfile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter,
                pProfile: ?*IWMProfile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentProfile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter,
                ppProfile: ?*?*IWMProfile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter,
                ppProfile: ?*?*IWMProfile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetIndexMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter,
                bIndexFile: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter,
                bIndexFile: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetIndexMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter,
                pbIndexFile: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter,
                pbIndexFile: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter_ConfigureFilterUsingProfileId(self: *const T, dwProfileId: u32) HRESULT {
                return @as(*const IConfigAsfWriter.VTable, @ptrCast(self.vtable)).ConfigureFilterUsingProfileId(@as(*const IConfigAsfWriter, @ptrCast(self)), dwProfileId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter_GetCurrentProfileId(self: *const T, pdwProfileId: ?*u32) HRESULT {
                return @as(*const IConfigAsfWriter.VTable, @ptrCast(self.vtable)).GetCurrentProfileId(@as(*const IConfigAsfWriter, @ptrCast(self)), pdwProfileId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter_ConfigureFilterUsingProfileGuid(self: *const T, guidProfile: ?*const Guid) HRESULT {
                return @as(*const IConfigAsfWriter.VTable, @ptrCast(self.vtable)).ConfigureFilterUsingProfileGuid(@as(*const IConfigAsfWriter, @ptrCast(self)), guidProfile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter_GetCurrentProfileGuid(self: *const T, pProfileGuid: ?*Guid) HRESULT {
                return @as(*const IConfigAsfWriter.VTable, @ptrCast(self.vtable)).GetCurrentProfileGuid(@as(*const IConfigAsfWriter, @ptrCast(self)), pProfileGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter_ConfigureFilterUsingProfile(self: *const T, pProfile: ?*IWMProfile) HRESULT {
                return @as(*const IConfigAsfWriter.VTable, @ptrCast(self.vtable)).ConfigureFilterUsingProfile(@as(*const IConfigAsfWriter, @ptrCast(self)), pProfile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter_GetCurrentProfile(self: *const T, ppProfile: ?*?*IWMProfile) HRESULT {
                return @as(*const IConfigAsfWriter.VTable, @ptrCast(self.vtable)).GetCurrentProfile(@as(*const IConfigAsfWriter, @ptrCast(self)), ppProfile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter_SetIndexMode(self: *const T, bIndexFile: BOOL) HRESULT {
                return @as(*const IConfigAsfWriter.VTable, @ptrCast(self.vtable)).SetIndexMode(@as(*const IConfigAsfWriter, @ptrCast(self)), bIndexFile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter_GetIndexMode(self: *const T, pbIndexFile: ?*BOOL) HRESULT {
                return @as(*const IConfigAsfWriter.VTable, @ptrCast(self.vtable)).GetIndexMode(@as(*const IConfigAsfWriter, @ptrCast(self)), pbIndexFile);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IConfigAsfWriter2_Value = Guid.initString("7989ccaa-53f0-44f0-884a-f3b03f6ae066");
pub const IID_IConfigAsfWriter2 = &IID_IConfigAsfWriter2_Value;
pub const IConfigAsfWriter2 = extern struct {
    pub const VTable = extern struct {
        base: IConfigAsfWriter.VTable,
        StreamNumFromPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter2,
                pPin: ?*IPin,
                pwStreamNum: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter2,
                pPin: ?*IPin,
                pwStreamNum: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetParam: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter2,
                dwParam: u32,
                dwParam1: u32,
                dwParam2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter2,
                dwParam: u32,
                dwParam1: u32,
                dwParam2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParam: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter2,
                dwParam: u32,
                pdwParam1: ?*u32,
                pdwParam2: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter2,
                dwParam: u32,
                pdwParam1: ?*u32,
                pdwParam2: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ResetMultiPassState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IConfigAsfWriter2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IConfigAsfWriter2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IConfigAsfWriter.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter2_StreamNumFromPin(self: *const T, pPin: ?*IPin, pwStreamNum: ?*u16) HRESULT {
                return @as(*const IConfigAsfWriter2.VTable, @ptrCast(self.vtable)).StreamNumFromPin(@as(*const IConfigAsfWriter2, @ptrCast(self)), pPin, pwStreamNum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter2_SetParam(self: *const T, dwParam: u32, dwParam1: u32, dwParam2: u32) HRESULT {
                return @as(*const IConfigAsfWriter2.VTable, @ptrCast(self.vtable)).SetParam(@as(*const IConfigAsfWriter2, @ptrCast(self)), dwParam, dwParam1, dwParam2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter2_GetParam(self: *const T, dwParam: u32, pdwParam1: ?*u32, pdwParam2: ?*u32) HRESULT {
                return @as(*const IConfigAsfWriter2.VTable, @ptrCast(self.vtable)).GetParam(@as(*const IConfigAsfWriter2, @ptrCast(self)), dwParam, pdwParam1, pdwParam2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IConfigAsfWriter2_ResetMultiPassState(self: *const T) HRESULT {
                return @as(*const IConfigAsfWriter2.VTable, @ptrCast(self.vtable)).ResetMultiPassState(@as(*const IConfigAsfWriter2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const STREAM_TYPE = enum(i32) {
    READ = 0,
    WRITE = 1,
    TRANSFORM = 2,
};
pub const STREAMTYPE_READ = STREAM_TYPE.READ;
pub const STREAMTYPE_WRITE = STREAM_TYPE.WRITE;
pub const STREAMTYPE_TRANSFORM = STREAM_TYPE.TRANSFORM;

pub const STREAM_STATE = enum(i32) {
    STOP = 0,
    RUN = 1,
};
pub const STREAMSTATE_STOP = STREAM_STATE.STOP;
pub const STREAMSTATE_RUN = STREAM_STATE.RUN;

pub const COMPLETION_STATUS_FLAGS = enum(i32) {
    NOUPDATEOK = 1,
    WAIT = 2,
    ABORT = 4,
};
pub const COMPSTAT_NOUPDATEOK = COMPLETION_STATUS_FLAGS.NOUPDATEOK;
pub const COMPSTAT_WAIT = COMPLETION_STATUS_FLAGS.WAIT;
pub const COMPSTAT_ABORT = COMPLETION_STATUS_FLAGS.ABORT;

pub const MMSSF_GET_INFORMATION_FLAGS = enum(u32) {
    HASCLOCK = 1,
    SUPPORTSEEK = 2,
    ASYNCHRONOUS = 4,
    _,
    pub fn initFlags(o: struct {
        HASCLOCK: u1 = 0,
        SUPPORTSEEK: u1 = 0,
        ASYNCHRONOUS: u1 = 0,
    }) MMSSF_GET_INFORMATION_FLAGS {
        return @as(MMSSF_GET_INFORMATION_FLAGS, @enumFromInt((if (o.HASCLOCK == 1) @intFromEnum(MMSSF_GET_INFORMATION_FLAGS.HASCLOCK) else 0) | (if (o.SUPPORTSEEK == 1) @intFromEnum(MMSSF_GET_INFORMATION_FLAGS.SUPPORTSEEK) else 0) | (if (o.ASYNCHRONOUS == 1) @intFromEnum(MMSSF_GET_INFORMATION_FLAGS.ASYNCHRONOUS) else 0)));
    }
};
pub const MMSSF_HASCLOCK = MMSSF_GET_INFORMATION_FLAGS.HASCLOCK;
pub const MMSSF_SUPPORTSEEK = MMSSF_GET_INFORMATION_FLAGS.SUPPORTSEEK;
pub const MMSSF_ASYNCHRONOUS = MMSSF_GET_INFORMATION_FLAGS.ASYNCHRONOUS;

pub const SSUPDATE_TYPE = enum(i32) {
    ASYNC = 1,
    CONTINUOUS = 2,
};
pub const SSUPDATE_ASYNC = SSUPDATE_TYPE.ASYNC;
pub const SSUPDATE_CONTINUOUS = SSUPDATE_TYPE.CONTINUOUS;

const IID_IMultiMediaStream_Value = Guid.initString("b502d1bc-9a57-11d0-8fde-00c04fd9189d");
pub const IID_IMultiMediaStream = &IID_IMultiMediaStream_Value;
pub const IMultiMediaStream = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetInformation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMultiMediaStream,
                pdwFlags: ?*MMSSF_GET_INFORMATION_FLAGS,
                pStreamType: ?*STREAM_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMultiMediaStream,
                pdwFlags: ?*MMSSF_GET_INFORMATION_FLAGS,
                pStreamType: ?*STREAM_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMediaStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMultiMediaStream,
                idPurpose: ?*Guid,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMultiMediaStream,
                idPurpose: ?*Guid,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumMediaStreams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMultiMediaStream,
                Index: i32,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMultiMediaStream,
                Index: i32,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMultiMediaStream,
                pCurrentState: ?*STREAM_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMultiMediaStream,
                pCurrentState: ?*STREAM_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMultiMediaStream,
                NewState: STREAM_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMultiMediaStream,
                NewState: STREAM_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMultiMediaStream,
                pCurrentTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMultiMediaStream,
                pCurrentTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMultiMediaStream,
                pDuration: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMultiMediaStream,
                pDuration: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Seek: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMultiMediaStream,
                SeekTime: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMultiMediaStream,
                SeekTime: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEndOfStreamEventHandle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMultiMediaStream,
                phEOS: ?*?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMultiMediaStream,
                phEOS: ?*?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMultiMediaStream_GetInformation(self: *const T, pdwFlags: ?*MMSSF_GET_INFORMATION_FLAGS, pStreamType: ?*STREAM_TYPE) HRESULT {
                return @as(*const IMultiMediaStream.VTable, @ptrCast(self.vtable)).GetInformation(@as(*const IMultiMediaStream, @ptrCast(self)), pdwFlags, pStreamType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMultiMediaStream_GetMediaStream(self: *const T, idPurpose: ?*Guid, ppMediaStream: ?*?*IMediaStream) HRESULT {
                return @as(*const IMultiMediaStream.VTable, @ptrCast(self.vtable)).GetMediaStream(@as(*const IMultiMediaStream, @ptrCast(self)), idPurpose, ppMediaStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMultiMediaStream_EnumMediaStreams(self: *const T, Index: i32, ppMediaStream: ?*?*IMediaStream) HRESULT {
                return @as(*const IMultiMediaStream.VTable, @ptrCast(self.vtable)).EnumMediaStreams(@as(*const IMultiMediaStream, @ptrCast(self)), Index, ppMediaStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMultiMediaStream_GetState(self: *const T, pCurrentState: ?*STREAM_STATE) HRESULT {
                return @as(*const IMultiMediaStream.VTable, @ptrCast(self.vtable)).GetState(@as(*const IMultiMediaStream, @ptrCast(self)), pCurrentState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMultiMediaStream_SetState(self: *const T, NewState: STREAM_STATE) HRESULT {
                return @as(*const IMultiMediaStream.VTable, @ptrCast(self.vtable)).SetState(@as(*const IMultiMediaStream, @ptrCast(self)), NewState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMultiMediaStream_GetTime(self: *const T, pCurrentTime: ?*i64) HRESULT {
                return @as(*const IMultiMediaStream.VTable, @ptrCast(self.vtable)).GetTime(@as(*const IMultiMediaStream, @ptrCast(self)), pCurrentTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMultiMediaStream_GetDuration(self: *const T, pDuration: ?*i64) HRESULT {
                return @as(*const IMultiMediaStream.VTable, @ptrCast(self.vtable)).GetDuration(@as(*const IMultiMediaStream, @ptrCast(self)), pDuration);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMultiMediaStream_Seek(self: *const T, SeekTime: i64) HRESULT {
                return @as(*const IMultiMediaStream.VTable, @ptrCast(self.vtable)).Seek(@as(*const IMultiMediaStream, @ptrCast(self)), SeekTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMultiMediaStream_GetEndOfStreamEventHandle(self: *const T, phEOS: ?*?HANDLE) HRESULT {
                return @as(*const IMultiMediaStream.VTable, @ptrCast(self.vtable)).GetEndOfStreamEventHandle(@as(*const IMultiMediaStream, @ptrCast(self)), phEOS);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMediaStream_Value = Guid.initString("b502d1bd-9a57-11d0-8fde-00c04fd9189d");
pub const IID_IMediaStream = &IID_IMediaStream_Value;
pub const IMediaStream = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetMultiMediaStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStream,
                ppMultiMediaStream: ?*?*IMultiMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStream,
                ppMultiMediaStream: ?*?*IMultiMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInformation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStream,
                pPurposeId: ?*Guid,
                pType: ?*STREAM_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStream,
                pPurposeId: ?*Guid,
                pType: ?*STREAM_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSameFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStream,
                pStreamThatHasDesiredFormat: ?*IMediaStream,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStream,
                pStreamThatHasDesiredFormat: ?*IMediaStream,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AllocateSample: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStream,
                dwFlags: u32,
                ppSample: ?*?*IStreamSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStream,
                dwFlags: u32,
                ppSample: ?*?*IStreamSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateSharedSample: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStream,
                pExistingSample: ?*IStreamSample,
                dwFlags: u32,
                ppNewSample: ?*?*IStreamSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStream,
                pExistingSample: ?*IStreamSample,
                dwFlags: u32,
                ppNewSample: ?*?*IStreamSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendEndOfStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStream,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStream,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStream_GetMultiMediaStream(self: *const T, ppMultiMediaStream: ?*?*IMultiMediaStream) HRESULT {
                return @as(*const IMediaStream.VTable, @ptrCast(self.vtable)).GetMultiMediaStream(@as(*const IMediaStream, @ptrCast(self)), ppMultiMediaStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStream_GetInformation(self: *const T, pPurposeId: ?*Guid, pType: ?*STREAM_TYPE) HRESULT {
                return @as(*const IMediaStream.VTable, @ptrCast(self.vtable)).GetInformation(@as(*const IMediaStream, @ptrCast(self)), pPurposeId, pType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStream_SetSameFormat(self: *const T, pStreamThatHasDesiredFormat: ?*IMediaStream, dwFlags: u32) HRESULT {
                return @as(*const IMediaStream.VTable, @ptrCast(self.vtable)).SetSameFormat(@as(*const IMediaStream, @ptrCast(self)), pStreamThatHasDesiredFormat, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStream_AllocateSample(self: *const T, dwFlags: u32, ppSample: ?*?*IStreamSample) HRESULT {
                return @as(*const IMediaStream.VTable, @ptrCast(self.vtable)).AllocateSample(@as(*const IMediaStream, @ptrCast(self)), dwFlags, ppSample);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStream_CreateSharedSample(self: *const T, pExistingSample: ?*IStreamSample, dwFlags: u32, ppNewSample: ?*?*IStreamSample) HRESULT {
                return @as(*const IMediaStream.VTable, @ptrCast(self.vtable)).CreateSharedSample(@as(*const IMediaStream, @ptrCast(self)), pExistingSample, dwFlags, ppNewSample);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStream_SendEndOfStream(self: *const T, dwFlags: u32) HRESULT {
                return @as(*const IMediaStream.VTable, @ptrCast(self.vtable)).SendEndOfStream(@as(*const IMediaStream, @ptrCast(self)), dwFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IStreamSample_Value = Guid.initString("b502d1be-9a57-11d0-8fde-00c04fd9189d");
pub const IID_IStreamSample = &IID_IStreamSample_Value;
pub const IStreamSample = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetMediaStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamSample,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamSample,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSampleTimes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamSample,
                pStartTime: ?*i64,
                pEndTime: ?*i64,
                pCurrentTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamSample,
                pStartTime: ?*i64,
                pEndTime: ?*i64,
                pCurrentTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSampleTimes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamSample,
                pStartTime: ?*const i64,
                pEndTime: ?*const i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamSample,
                pStartTime: ?*const i64,
                pEndTime: ?*const i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Update: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamSample,
                dwFlags: u32,
                hEvent: ?HANDLE,
                pfnAPC: ?PAPCFUNC,
                dwAPCData: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamSample,
                dwFlags: u32,
                hEvent: ?HANDLE,
                pfnAPC: ?PAPCFUNC,
                dwAPCData: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CompletionStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamSample,
                dwFlags: u32,
                dwMilliseconds: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamSample,
                dwFlags: u32,
                dwMilliseconds: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamSample_GetMediaStream(self: *const T, ppMediaStream: ?*?*IMediaStream) HRESULT {
                return @as(*const IStreamSample.VTable, @ptrCast(self.vtable)).GetMediaStream(@as(*const IStreamSample, @ptrCast(self)), ppMediaStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamSample_GetSampleTimes(self: *const T, pStartTime: ?*i64, pEndTime: ?*i64, pCurrentTime: ?*i64) HRESULT {
                return @as(*const IStreamSample.VTable, @ptrCast(self.vtable)).GetSampleTimes(@as(*const IStreamSample, @ptrCast(self)), pStartTime, pEndTime, pCurrentTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamSample_SetSampleTimes(self: *const T, pStartTime: ?*const i64, pEndTime: ?*const i64) HRESULT {
                return @as(*const IStreamSample.VTable, @ptrCast(self.vtable)).SetSampleTimes(@as(*const IStreamSample, @ptrCast(self)), pStartTime, pEndTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamSample_Update(self: *const T, dwFlags: u32, hEvent: ?HANDLE, pfnAPC: ?PAPCFUNC, dwAPCData: usize) HRESULT {
                return @as(*const IStreamSample.VTable, @ptrCast(self.vtable)).Update(@as(*const IStreamSample, @ptrCast(self)), dwFlags, hEvent, pfnAPC, dwAPCData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamSample_CompletionStatus(self: *const T, dwFlags: u32, dwMilliseconds: u32) HRESULT {
                return @as(*const IStreamSample.VTable, @ptrCast(self.vtable)).CompletionStatus(@as(*const IStreamSample, @ptrCast(self)), dwFlags, dwMilliseconds);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DDSFF_FLAGS = enum(u32) {
    R = 1,
    _,
    pub fn initFlags(o: struct {
        R: u1 = 0,
    }) DDSFF_FLAGS {
        return @as(DDSFF_FLAGS, @enumFromInt((if (o.R == 1) @intFromEnum(DDSFF_FLAGS.R) else 0)));
    }
};
pub const DDSFF_PROGRESSIVERENDER = DDSFF_FLAGS.R;

const IID_IDirectDrawMediaStream_Value = Guid.initString("f4104fce-9a70-11d0-8fde-00c04fd9189d");
pub const IID_IDirectDrawMediaStream = &IID_IDirectDrawMediaStream_Value;
pub const IDirectDrawMediaStream = extern struct {
    pub const VTable = extern struct {
        base: IMediaStream.VTable,
        GetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawMediaStream,
                pDDSDCurrent: ?*DDSURFACEDESC,
                ppDirectDrawPalette: ?*?*IDirectDrawPalette,
                pDDSDDesired: ?*DDSURFACEDESC,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawMediaStream,
                pDDSDCurrent: ?*DDSURFACEDESC,
                ppDirectDrawPalette: ?*?*IDirectDrawPalette,
                pDDSDDesired: ?*DDSURFACEDESC,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawMediaStream,
                pDDSurfaceDesc: ?*const DDSURFACEDESC,
                pDirectDrawPalette: ?*IDirectDrawPalette,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawMediaStream,
                pDDSurfaceDesc: ?*const DDSURFACEDESC,
                pDirectDrawPalette: ?*IDirectDrawPalette,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDirectDraw: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawMediaStream,
                ppDirectDraw: ?*?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawMediaStream,
                ppDirectDraw: ?*?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDirectDraw: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawMediaStream,
                pDirectDraw: ?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawMediaStream,
                pDirectDraw: ?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateSample: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawMediaStream,
                pSurface: ?*IDirectDrawSurface,
                pRect: ?*const RECT,
                dwFlags: u32,
                ppSample: ?*?*IDirectDrawStreamSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawMediaStream,
                pSurface: ?*IDirectDrawSurface,
                pRect: ?*const RECT,
                dwFlags: u32,
                ppSample: ?*?*IDirectDrawStreamSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTimePerFrame: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawMediaStream,
                pFrameTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawMediaStream,
                pFrameTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMediaStream.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawMediaStream_GetFormat(self: *const T, pDDSDCurrent: ?*DDSURFACEDESC, ppDirectDrawPalette: ?*?*IDirectDrawPalette, pDDSDDesired: ?*DDSURFACEDESC, pdwFlags: ?*u32) HRESULT {
                return @as(*const IDirectDrawMediaStream.VTable, @ptrCast(self.vtable)).GetFormat(@as(*const IDirectDrawMediaStream, @ptrCast(self)), pDDSDCurrent, ppDirectDrawPalette, pDDSDDesired, pdwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawMediaStream_SetFormat(self: *const T, pDDSurfaceDesc: ?*const DDSURFACEDESC, pDirectDrawPalette: ?*IDirectDrawPalette) HRESULT {
                return @as(*const IDirectDrawMediaStream.VTable, @ptrCast(self.vtable)).SetFormat(@as(*const IDirectDrawMediaStream, @ptrCast(self)), pDDSurfaceDesc, pDirectDrawPalette);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawMediaStream_GetDirectDraw(self: *const T, ppDirectDraw: ?*?*IDirectDraw) HRESULT {
                return @as(*const IDirectDrawMediaStream.VTable, @ptrCast(self.vtable)).GetDirectDraw(@as(*const IDirectDrawMediaStream, @ptrCast(self)), ppDirectDraw);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawMediaStream_SetDirectDraw(self: *const T, pDirectDraw: ?*IDirectDraw) HRESULT {
                return @as(*const IDirectDrawMediaStream.VTable, @ptrCast(self.vtable)).SetDirectDraw(@as(*const IDirectDrawMediaStream, @ptrCast(self)), pDirectDraw);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawMediaStream_CreateSample(self: *const T, pSurface: ?*IDirectDrawSurface, pRect: ?*const RECT, dwFlags: u32, ppSample: ?*?*IDirectDrawStreamSample) HRESULT {
                return @as(*const IDirectDrawMediaStream.VTable, @ptrCast(self.vtable)).CreateSample(@as(*const IDirectDrawMediaStream, @ptrCast(self)), pSurface, pRect, dwFlags, ppSample);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawMediaStream_GetTimePerFrame(self: *const T, pFrameTime: ?*i64) HRESULT {
                return @as(*const IDirectDrawMediaStream.VTable, @ptrCast(self.vtable)).GetTimePerFrame(@as(*const IDirectDrawMediaStream, @ptrCast(self)), pFrameTime);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectDrawStreamSample_Value = Guid.initString("f4104fcf-9a70-11d0-8fde-00c04fd9189d");
pub const IID_IDirectDrawStreamSample = &IID_IDirectDrawStreamSample_Value;
pub const IDirectDrawStreamSample = extern struct {
    pub const VTable = extern struct {
        base: IStreamSample.VTable,
        GetSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawStreamSample,
                ppDirectDrawSurface: ?*?*IDirectDrawSurface,
                pRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawStreamSample,
                ppDirectDrawSurface: ?*?*IDirectDrawSurface,
                pRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawStreamSample,
                pRect: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawStreamSample,
                pRect: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IStreamSample.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawStreamSample_GetSurface(self: *const T, ppDirectDrawSurface: ?*?*IDirectDrawSurface, pRect: ?*RECT) HRESULT {
                return @as(*const IDirectDrawStreamSample.VTable, @ptrCast(self.vtable)).GetSurface(@as(*const IDirectDrawStreamSample, @ptrCast(self)), ppDirectDrawSurface, pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawStreamSample_SetRect(self: *const T, pRect: ?*const RECT) HRESULT {
                return @as(*const IDirectDrawStreamSample.VTable, @ptrCast(self.vtable)).SetRect(@as(*const IDirectDrawStreamSample, @ptrCast(self)), pRect);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAudioMediaStream_Value = Guid.initString("f7537560-a3be-11d0-8212-00c04fc32c45");
pub const IID_IAudioMediaStream = &IID_IAudioMediaStream_Value;
pub const IAudioMediaStream = extern struct {
    pub const VTable = extern struct {
        base: IMediaStream.VTable,
        GetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAudioMediaStream,
                pWaveFormatCurrent: ?*WAVEFORMATEX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAudioMediaStream,
                pWaveFormatCurrent: ?*WAVEFORMATEX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAudioMediaStream,
                lpWaveFormat: ?*const WAVEFORMATEX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAudioMediaStream,
                lpWaveFormat: ?*const WAVEFORMATEX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateSample: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAudioMediaStream,
                pAudioData: ?*IAudioData,
                dwFlags: u32,
                ppSample: ?*?*IAudioStreamSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAudioMediaStream,
                pAudioData: ?*IAudioData,
                dwFlags: u32,
                ppSample: ?*?*IAudioStreamSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMediaStream.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAudioMediaStream_GetFormat(self: *const T, pWaveFormatCurrent: ?*WAVEFORMATEX) HRESULT {
                return @as(*const IAudioMediaStream.VTable, @ptrCast(self.vtable)).GetFormat(@as(*const IAudioMediaStream, @ptrCast(self)), pWaveFormatCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAudioMediaStream_SetFormat(self: *const T, lpWaveFormat: ?*const WAVEFORMATEX) HRESULT {
                return @as(*const IAudioMediaStream.VTable, @ptrCast(self.vtable)).SetFormat(@as(*const IAudioMediaStream, @ptrCast(self)), lpWaveFormat);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAudioMediaStream_CreateSample(self: *const T, pAudioData: ?*IAudioData, dwFlags: u32, ppSample: ?*?*IAudioStreamSample) HRESULT {
                return @as(*const IAudioMediaStream.VTable, @ptrCast(self.vtable)).CreateSample(@as(*const IAudioMediaStream, @ptrCast(self)), pAudioData, dwFlags, ppSample);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAudioStreamSample_Value = Guid.initString("345fee00-aba5-11d0-8212-00c04fc32c45");
pub const IID_IAudioStreamSample = &IID_IAudioStreamSample_Value;
pub const IAudioStreamSample = extern struct {
    pub const VTable = extern struct {
        base: IStreamSample.VTable,
        GetAudioData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAudioStreamSample,
                ppAudio: ?*?*IAudioData,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAudioStreamSample,
                ppAudio: ?*?*IAudioData,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IStreamSample.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAudioStreamSample_GetAudioData(self: *const T, ppAudio: ?*?*IAudioData) HRESULT {
                return @as(*const IAudioStreamSample.VTable, @ptrCast(self.vtable)).GetAudioData(@as(*const IAudioStreamSample, @ptrCast(self)), ppAudio);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMemoryData_Value = Guid.initString("327fc560-af60-11d0-8212-00c04fc32c45");
pub const IID_IMemoryData = &IID_IMemoryData_Value;
pub const IMemoryData = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetBuffer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemoryData,
                cbSize: u32,
                pbData: ?*u8,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemoryData,
                cbSize: u32,
                pbData: ?*u8,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemoryData,
                pdwLength: ?*u32,
                ppbData: ?*?*u8,
                pcbActualData: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemoryData,
                pdwLength: ?*u32,
                ppbData: ?*?*u8,
                pcbActualData: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetActual: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMemoryData,
                cbDataValid: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMemoryData,
                cbDataValid: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemoryData_SetBuffer(self: *const T, cbSize: u32, pbData: ?*u8, dwFlags: u32) HRESULT {
                return @as(*const IMemoryData.VTable, @ptrCast(self.vtable)).SetBuffer(@as(*const IMemoryData, @ptrCast(self)), cbSize, pbData, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemoryData_GetInfo(self: *const T, pdwLength: ?*u32, ppbData: ?*?*u8, pcbActualData: ?*u32) HRESULT {
                return @as(*const IMemoryData.VTable, @ptrCast(self.vtable)).GetInfo(@as(*const IMemoryData, @ptrCast(self)), pdwLength, ppbData, pcbActualData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMemoryData_SetActual(self: *const T, cbDataValid: u32) HRESULT {
                return @as(*const IMemoryData.VTable, @ptrCast(self.vtable)).SetActual(@as(*const IMemoryData, @ptrCast(self)), cbDataValid);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAudioData_Value = Guid.initString("54c719c0-af60-11d0-8212-00c04fc32c45");
pub const IID_IAudioData = &IID_IAudioData_Value;
pub const IAudioData = extern struct {
    pub const VTable = extern struct {
        base: IMemoryData.VTable,
        GetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAudioData,
                pWaveFormatCurrent: ?*WAVEFORMATEX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAudioData,
                pWaveFormatCurrent: ?*WAVEFORMATEX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAudioData,
                lpWaveFormat: ?*const WAVEFORMATEX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAudioData,
                lpWaveFormat: ?*const WAVEFORMATEX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMemoryData.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAudioData_GetFormat(self: *const T, pWaveFormatCurrent: ?*WAVEFORMATEX) HRESULT {
                return @as(*const IAudioData.VTable, @ptrCast(self.vtable)).GetFormat(@as(*const IAudioData, @ptrCast(self)), pWaveFormatCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAudioData_SetFormat(self: *const T, lpWaveFormat: ?*const WAVEFORMATEX) HRESULT {
                return @as(*const IAudioData.VTable, @ptrCast(self.vtable)).SetFormat(@as(*const IAudioData, @ptrCast(self)), lpWaveFormat);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AMMSF_MMS_INIT_FLAGS = enum(u32) {
    D = 1,
    _,
    pub fn initFlags(o: struct {
        D: u1 = 0,
    }) AMMSF_MMS_INIT_FLAGS {
        return @as(AMMSF_MMS_INIT_FLAGS, @enumFromInt((if (o.D == 1) @intFromEnum(AMMSF_MMS_INIT_FLAGS.D) else 0)));
    }
};
pub const AMMSF_NOGRAPHTHREAD = AMMSF_MMS_INIT_FLAGS.D;

pub const AMMSF_MS_FLAGS = enum(u32) {
    ADDDEFAULTRENDERER = 1,
    CREATEPEER = 2,
    STOPIFNOSAMPLES = 4,
    NOSTALL = 8,
    _,
    pub fn initFlags(o: struct {
        ADDDEFAULTRENDERER: u1 = 0,
        CREATEPEER: u1 = 0,
        STOPIFNOSAMPLES: u1 = 0,
        NOSTALL: u1 = 0,
    }) AMMSF_MS_FLAGS {
        return @as(AMMSF_MS_FLAGS, @enumFromInt((if (o.ADDDEFAULTRENDERER == 1) @intFromEnum(AMMSF_MS_FLAGS.ADDDEFAULTRENDERER) else 0) | (if (o.CREATEPEER == 1) @intFromEnum(AMMSF_MS_FLAGS.CREATEPEER) else 0) | (if (o.STOPIFNOSAMPLES == 1) @intFromEnum(AMMSF_MS_FLAGS.STOPIFNOSAMPLES) else 0) | (if (o.NOSTALL == 1) @intFromEnum(AMMSF_MS_FLAGS.NOSTALL) else 0)));
    }
};
pub const AMMSF_ADDDEFAULTRENDERER = AMMSF_MS_FLAGS.ADDDEFAULTRENDERER;
pub const AMMSF_CREATEPEER = AMMSF_MS_FLAGS.CREATEPEER;
pub const AMMSF_STOPIFNOSAMPLES = AMMSF_MS_FLAGS.STOPIFNOSAMPLES;
pub const AMMSF_NOSTALL = AMMSF_MS_FLAGS.NOSTALL;

pub const AMMSF_RENDER_FLAGS = enum(u32) {
    RENDERTYPEMASK = 3,
    RENDERTOEXISTING = 0,
    RENDERALLSTREAMS = 1,
    NORENDER = 2,
    NOCLOCK = 4,
    RUN = 8,
    _,
    pub fn initFlags(o: struct {
        RENDERTYPEMASK: u1 = 0,
        RENDERTOEXISTING: u1 = 0,
        RENDERALLSTREAMS: u1 = 0,
        NORENDER: u1 = 0,
        NOCLOCK: u1 = 0,
        RUN: u1 = 0,
    }) AMMSF_RENDER_FLAGS {
        return @as(AMMSF_RENDER_FLAGS, @enumFromInt((if (o.RENDERTYPEMASK == 1) @intFromEnum(AMMSF_RENDER_FLAGS.RENDERTYPEMASK) else 0) | (if (o.RENDERTOEXISTING == 1) @intFromEnum(AMMSF_RENDER_FLAGS.RENDERTOEXISTING) else 0) | (if (o.RENDERALLSTREAMS == 1) @intFromEnum(AMMSF_RENDER_FLAGS.RENDERALLSTREAMS) else 0) | (if (o.NORENDER == 1) @intFromEnum(AMMSF_RENDER_FLAGS.NORENDER) else 0) | (if (o.NOCLOCK == 1) @intFromEnum(AMMSF_RENDER_FLAGS.NOCLOCK) else 0) | (if (o.RUN == 1) @intFromEnum(AMMSF_RENDER_FLAGS.RUN) else 0)));
    }
};
pub const AMMSF_RENDERTYPEMASK = AMMSF_RENDER_FLAGS.RENDERTYPEMASK;
pub const AMMSF_RENDERTOEXISTING = AMMSF_RENDER_FLAGS.RENDERTOEXISTING;
pub const AMMSF_RENDERALLSTREAMS = AMMSF_RENDER_FLAGS.RENDERALLSTREAMS;
pub const AMMSF_NORENDER = AMMSF_RENDER_FLAGS.NORENDER;
pub const AMMSF_NOCLOCK = AMMSF_RENDER_FLAGS.NOCLOCK;
pub const AMMSF_RUN = AMMSF_RENDER_FLAGS.RUN;

pub const OUTPUT_STATE = enum(u32) {
    Disabled = 0,
    ReadData = 1,
    RenderData = 2,
    _,
    pub fn initFlags(o: struct {
        Disabled: u1 = 0,
        ReadData: u1 = 0,
        RenderData: u1 = 0,
    }) OUTPUT_STATE {
        return @as(OUTPUT_STATE, @enumFromInt((if (o.Disabled == 1) @intFromEnum(OUTPUT_STATE.Disabled) else 0) | (if (o.ReadData == 1) @intFromEnum(OUTPUT_STATE.ReadData) else 0) | (if (o.RenderData == 1) @intFromEnum(OUTPUT_STATE.RenderData) else 0)));
    }
};
pub const Disabled = OUTPUT_STATE.Disabled;
pub const ReadData = OUTPUT_STATE.ReadData;
pub const RenderData = OUTPUT_STATE.RenderData;

const IID_IAMMultiMediaStream_Value = Guid.initString("bebe595c-9a6f-11d0-8fde-00c04fd9189d");
pub const IID_IAMMultiMediaStream = &IID_IAMMultiMediaStream_Value;
pub const IAMMultiMediaStream = extern struct {
    pub const VTable = extern struct {
        base: IMultiMediaStream.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMultiMediaStream,
                StreamType: STREAM_TYPE,
                dwFlags: AMMSF_MMS_INIT_FLAGS,
                pFilterGraph: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMultiMediaStream,
                StreamType: STREAM_TYPE,
                dwFlags: AMMSF_MMS_INIT_FLAGS,
                pFilterGraph: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFilterGraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMultiMediaStream,
                ppGraphBuilder: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMultiMediaStream,
                ppGraphBuilder: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMultiMediaStream,
                ppFilter: ?*?*IMediaStreamFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMultiMediaStream,
                ppFilter: ?*?*IMediaStreamFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddMediaStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMultiMediaStream,
                pStreamObject: ?*IUnknown,
                PurposeId: ?*const Guid,
                dwFlags: AMMSF_MS_FLAGS,
                ppNewStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMultiMediaStream,
                pStreamObject: ?*IUnknown,
                PurposeId: ?*const Guid,
                dwFlags: AMMSF_MS_FLAGS,
                ppNewStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OpenFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMultiMediaStream,
                pszFileName: ?[*:0]const u16,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMultiMediaStream,
                pszFileName: ?[*:0]const u16,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OpenMoniker: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMultiMediaStream,
                pCtx: ?*IBindCtx,
                pMoniker: ?*IMoniker,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMultiMediaStream,
                pCtx: ?*IBindCtx,
                pMoniker: ?*IMoniker,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Render: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMultiMediaStream,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMultiMediaStream,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMultiMediaStream.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMultiMediaStream_Initialize(self: *const T, StreamType: STREAM_TYPE, dwFlags: AMMSF_MMS_INIT_FLAGS, pFilterGraph: ?*IGraphBuilder) HRESULT {
                return @as(*const IAMMultiMediaStream.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IAMMultiMediaStream, @ptrCast(self)), StreamType, dwFlags, pFilterGraph);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMultiMediaStream_GetFilterGraph(self: *const T, ppGraphBuilder: ?*?*IGraphBuilder) HRESULT {
                return @as(*const IAMMultiMediaStream.VTable, @ptrCast(self.vtable)).GetFilterGraph(@as(*const IAMMultiMediaStream, @ptrCast(self)), ppGraphBuilder);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMultiMediaStream_GetFilter(self: *const T, ppFilter: ?*?*IMediaStreamFilter) HRESULT {
                return @as(*const IAMMultiMediaStream.VTable, @ptrCast(self.vtable)).GetFilter(@as(*const IAMMultiMediaStream, @ptrCast(self)), ppFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMultiMediaStream_AddMediaStream(self: *const T, pStreamObject: ?*IUnknown, PurposeId: ?*const Guid, dwFlags: AMMSF_MS_FLAGS, ppNewStream: ?*?*IMediaStream) HRESULT {
                return @as(*const IAMMultiMediaStream.VTable, @ptrCast(self.vtable)).AddMediaStream(@as(*const IAMMultiMediaStream, @ptrCast(self)), pStreamObject, PurposeId, dwFlags, ppNewStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMultiMediaStream_OpenFile(self: *const T, pszFileName: ?[*:0]const u16, dwFlags: u32) HRESULT {
                return @as(*const IAMMultiMediaStream.VTable, @ptrCast(self.vtable)).OpenFile(@as(*const IAMMultiMediaStream, @ptrCast(self)), pszFileName, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMultiMediaStream_OpenMoniker(self: *const T, pCtx: ?*IBindCtx, pMoniker: ?*IMoniker, dwFlags: u32) HRESULT {
                return @as(*const IAMMultiMediaStream.VTable, @ptrCast(self.vtable)).OpenMoniker(@as(*const IAMMultiMediaStream, @ptrCast(self)), pCtx, pMoniker, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMultiMediaStream_Render(self: *const T, dwFlags: u32) HRESULT {
                return @as(*const IAMMultiMediaStream.VTable, @ptrCast(self.vtable)).Render(@as(*const IAMMultiMediaStream, @ptrCast(self)), dwFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMMediaStream_Value = Guid.initString("bebe595d-9a6f-11d0-8fde-00c04fd9189d");
pub const IID_IAMMediaStream = &IID_IAMMediaStream_Value;
pub const IAMMediaStream = extern struct {
    pub const VTable = extern struct {
        base: IMediaStream.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaStream,
                pSourceObject: ?*IUnknown,
                dwFlags: u32,
                PurposeId: ?*Guid,
                StreamType: STREAM_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaStream,
                pSourceObject: ?*IUnknown,
                dwFlags: u32,
                PurposeId: ?*Guid,
                StreamType: STREAM_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaStream,
                State: FILTER_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaStream,
                State: FILTER_STATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        JoinAMMultiMediaStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaStream,
                pAMMultiMediaStream: ?*IAMMultiMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaStream,
                pAMMultiMediaStream: ?*IAMMultiMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        JoinFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaStream,
                pMediaStreamFilter: ?*IMediaStreamFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaStream,
                pMediaStreamFilter: ?*IMediaStreamFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        JoinFilterGraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaStream,
                pFilterGraph: ?*IFilterGraph,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaStream,
                pFilterGraph: ?*IFilterGraph,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMediaStream.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaStream_Initialize(self: *const T, pSourceObject: ?*IUnknown, dwFlags: u32, PurposeId: ?*Guid, StreamType: STREAM_TYPE) HRESULT {
                return @as(*const IAMMediaStream.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IAMMediaStream, @ptrCast(self)), pSourceObject, dwFlags, PurposeId, StreamType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaStream_SetState(self: *const T, State: FILTER_STATE) HRESULT {
                return @as(*const IAMMediaStream.VTable, @ptrCast(self.vtable)).SetState(@as(*const IAMMediaStream, @ptrCast(self)), State);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaStream_JoinAMMultiMediaStream(self: *const T, pAMMultiMediaStream: ?*IAMMultiMediaStream) HRESULT {
                return @as(*const IAMMediaStream.VTable, @ptrCast(self.vtable)).JoinAMMultiMediaStream(@as(*const IAMMediaStream, @ptrCast(self)), pAMMultiMediaStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaStream_JoinFilter(self: *const T, pMediaStreamFilter: ?*IMediaStreamFilter) HRESULT {
                return @as(*const IAMMediaStream.VTable, @ptrCast(self.vtable)).JoinFilter(@as(*const IAMMediaStream, @ptrCast(self)), pMediaStreamFilter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaStream_JoinFilterGraph(self: *const T, pFilterGraph: ?*IFilterGraph) HRESULT {
                return @as(*const IAMMediaStream.VTable, @ptrCast(self.vtable)).JoinFilterGraph(@as(*const IAMMediaStream, @ptrCast(self)), pFilterGraph);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMediaStreamFilter_Value = Guid.initString("bebe595e-9a6f-11d0-8fde-00c04fd9189d");
pub const IID_IMediaStreamFilter = &IID_IMediaStreamFilter_Value;
pub const IMediaStreamFilter = extern struct {
    pub const VTable = extern struct {
        base: IBaseFilter.VTable,
        AddMediaStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStreamFilter,
                pAMMediaStream: ?*IAMMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStreamFilter,
                pAMMediaStream: ?*IAMMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMediaStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStreamFilter,
                idPurpose: ?*Guid,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStreamFilter,
                idPurpose: ?*Guid,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumMediaStreams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStreamFilter,
                Index: i32,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStreamFilter,
                Index: i32,
                ppMediaStream: ?*?*IMediaStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SupportSeeking: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStreamFilter,
                bRenderer: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStreamFilter,
                bRenderer: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReferenceTimeToStreamTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStreamFilter,
                pTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStreamFilter,
                pTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentStreamTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStreamFilter,
                pCurrentStreamTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStreamFilter,
                pCurrentStreamTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WaitUntil: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStreamFilter,
                WaitStreamTime: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStreamFilter,
                WaitStreamTime: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Flush: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStreamFilter,
                bCancelEOS: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStreamFilter,
                bCancelEOS: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EndOfStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaStreamFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaStreamFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IBaseFilter.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStreamFilter_AddMediaStream(self: *const T, pAMMediaStream: ?*IAMMediaStream) HRESULT {
                return @as(*const IMediaStreamFilter.VTable, @ptrCast(self.vtable)).AddMediaStream(@as(*const IMediaStreamFilter, @ptrCast(self)), pAMMediaStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStreamFilter_GetMediaStream(self: *const T, idPurpose: ?*Guid, ppMediaStream: ?*?*IMediaStream) HRESULT {
                return @as(*const IMediaStreamFilter.VTable, @ptrCast(self.vtable)).GetMediaStream(@as(*const IMediaStreamFilter, @ptrCast(self)), idPurpose, ppMediaStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStreamFilter_EnumMediaStreams(self: *const T, Index: i32, ppMediaStream: ?*?*IMediaStream) HRESULT {
                return @as(*const IMediaStreamFilter.VTable, @ptrCast(self.vtable)).EnumMediaStreams(@as(*const IMediaStreamFilter, @ptrCast(self)), Index, ppMediaStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStreamFilter_SupportSeeking(self: *const T, bRenderer: BOOL) HRESULT {
                return @as(*const IMediaStreamFilter.VTable, @ptrCast(self.vtable)).SupportSeeking(@as(*const IMediaStreamFilter, @ptrCast(self)), bRenderer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStreamFilter_ReferenceTimeToStreamTime(self: *const T, pTime: ?*i64) HRESULT {
                return @as(*const IMediaStreamFilter.VTable, @ptrCast(self.vtable)).ReferenceTimeToStreamTime(@as(*const IMediaStreamFilter, @ptrCast(self)), pTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStreamFilter_GetCurrentStreamTime(self: *const T, pCurrentStreamTime: ?*i64) HRESULT {
                return @as(*const IMediaStreamFilter.VTable, @ptrCast(self.vtable)).GetCurrentStreamTime(@as(*const IMediaStreamFilter, @ptrCast(self)), pCurrentStreamTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStreamFilter_WaitUntil(self: *const T, WaitStreamTime: i64) HRESULT {
                return @as(*const IMediaStreamFilter.VTable, @ptrCast(self.vtable)).WaitUntil(@as(*const IMediaStreamFilter, @ptrCast(self)), WaitStreamTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStreamFilter_Flush(self: *const T, bCancelEOS: BOOL) HRESULT {
                return @as(*const IMediaStreamFilter.VTable, @ptrCast(self.vtable)).Flush(@as(*const IMediaStreamFilter, @ptrCast(self)), bCancelEOS);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaStreamFilter_EndOfStream(self: *const T) HRESULT {
                return @as(*const IMediaStreamFilter.VTable, @ptrCast(self.vtable)).EndOfStream(@as(*const IMediaStreamFilter, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IDirectDrawMediaSampleAllocator_Value = Guid.initString("ab6b4afc-f6e4-11d0-900d-00c04fd9189d");
pub const IID_IDirectDrawMediaSampleAllocator = &IID_IDirectDrawMediaSampleAllocator_Value;
pub const IDirectDrawMediaSampleAllocator = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetDirectDraw: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawMediaSampleAllocator,
                ppDirectDraw: ?*?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawMediaSampleAllocator,
                ppDirectDraw: ?*?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawMediaSampleAllocator_GetDirectDraw(self: *const T, ppDirectDraw: ?*?*IDirectDraw) HRESULT {
                return @as(*const IDirectDrawMediaSampleAllocator.VTable, @ptrCast(self.vtable)).GetDirectDraw(@as(*const IDirectDrawMediaSampleAllocator, @ptrCast(self)), ppDirectDraw);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IDirectDrawMediaSample_Value = Guid.initString("ab6b4afe-f6e4-11d0-900d-00c04fd9189d");
pub const IID_IDirectDrawMediaSample = &IID_IDirectDrawMediaSample_Value;
pub const IDirectDrawMediaSample = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetSurfaceAndReleaseLock: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawMediaSample,
                ppDirectDrawSurface: ?*?*IDirectDrawSurface,
                pRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawMediaSample,
                ppDirectDrawSurface: ?*?*IDirectDrawSurface,
                pRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        LockMediaSamplePointer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawMediaSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawMediaSample_GetSurfaceAndReleaseLock(self: *const T, ppDirectDrawSurface: ?*?*IDirectDrawSurface, pRect: ?*RECT) HRESULT {
                return @as(*const IDirectDrawMediaSample.VTable, @ptrCast(self.vtable)).GetSurfaceAndReleaseLock(@as(*const IDirectDrawMediaSample, @ptrCast(self)), ppDirectDrawSurface, pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawMediaSample_LockMediaSamplePointer(self: *const T) HRESULT {
                return @as(*const IDirectDrawMediaSample.VTable, @ptrCast(self.vtable)).LockMediaSamplePointer(@as(*const IDirectDrawMediaSample, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMMediaTypeStream_Value = Guid.initString("ab6b4afa-f6e4-11d0-900d-00c04fd9189d");
pub const IID_IAMMediaTypeStream = &IID_IAMMediaTypeStream_Value;
pub const IAMMediaTypeStream = extern struct {
    pub const VTable = extern struct {
        base: IMediaStream.VTable,
        GetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeStream,
                pMediaType: ?*AM_MEDIA_TYPE,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeStream,
                pMediaType: ?*AM_MEDIA_TYPE,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeStream,
                pMediaType: ?*AM_MEDIA_TYPE,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeStream,
                pMediaType: ?*AM_MEDIA_TYPE,
                dwFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateSample: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeStream,
                lSampleSize: i32,
                pbBuffer: ?*u8,
                dwFlags: u32,
                pUnkOuter: ?*IUnknown,
                ppAMMediaTypeSample: ?*?*IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeStream,
                lSampleSize: i32,
                pbBuffer: ?*u8,
                dwFlags: u32,
                pUnkOuter: ?*IUnknown,
                ppAMMediaTypeSample: ?*?*IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamAllocatorRequirements: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeStream,
                pProps: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeStream,
                pProps: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetStreamAllocatorRequirements: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeStream,
                pProps: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeStream,
                pProps: ?*ALLOCATOR_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMediaStream.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeStream_GetFormat(self: *const T, pMediaType: ?*AM_MEDIA_TYPE, dwFlags: u32) HRESULT {
                return @as(*const IAMMediaTypeStream.VTable, @ptrCast(self.vtable)).GetFormat(@as(*const IAMMediaTypeStream, @ptrCast(self)), pMediaType, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeStream_SetFormat(self: *const T, pMediaType: ?*AM_MEDIA_TYPE, dwFlags: u32) HRESULT {
                return @as(*const IAMMediaTypeStream.VTable, @ptrCast(self.vtable)).SetFormat(@as(*const IAMMediaTypeStream, @ptrCast(self)), pMediaType, dwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeStream_CreateSample(self: *const T, lSampleSize: i32, pbBuffer: ?*u8, dwFlags: u32, pUnkOuter: ?*IUnknown, ppAMMediaTypeSample: ?*?*IAMMediaTypeSample) HRESULT {
                return @as(*const IAMMediaTypeStream.VTable, @ptrCast(self.vtable)).CreateSample(@as(*const IAMMediaTypeStream, @ptrCast(self)), lSampleSize, pbBuffer, dwFlags, pUnkOuter, ppAMMediaTypeSample);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeStream_GetStreamAllocatorRequirements(self: *const T, pProps: ?*ALLOCATOR_PROPERTIES) HRESULT {
                return @as(*const IAMMediaTypeStream.VTable, @ptrCast(self.vtable)).GetStreamAllocatorRequirements(@as(*const IAMMediaTypeStream, @ptrCast(self)), pProps);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeStream_SetStreamAllocatorRequirements(self: *const T, pProps: ?*ALLOCATOR_PROPERTIES) HRESULT {
                return @as(*const IAMMediaTypeStream.VTable, @ptrCast(self.vtable)).SetStreamAllocatorRequirements(@as(*const IAMMediaTypeStream, @ptrCast(self)), pProps);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMMediaTypeSample_Value = Guid.initString("ab6b4afb-f6e4-11d0-900d-00c04fd9189d");
pub const IID_IAMMediaTypeSample = &IID_IAMMediaTypeSample_Value;
pub const IAMMediaTypeSample = extern struct {
    pub const VTable = extern struct {
        base: IStreamSample.VTable,
        SetPointer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                pBuffer: [*:0]u8,
                lSize: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                pBuffer: [*:0]u8,
                lSize: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPointer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                ppBuffer: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                ppBuffer: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) i32,
            else => *const fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) i32,
        },
        GetTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsSyncPoint: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSyncPoint: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                bIsSyncPoint: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                bIsSyncPoint: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsPreroll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetPreroll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                bIsPreroll: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                bIsPreroll: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetActualDataLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) i32,
            else => *const fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) i32,
        },
        SetActualDataLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                __MIDL__IAMMediaTypeSample0000: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                __MIDL__IAMMediaTypeSample0000: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMediaType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                ppMediaType: ?*?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                ppMediaType: ?*?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMediaType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsDiscontinuity: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDiscontinuity: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                bDiscontinuity: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                bDiscontinuity: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMediaTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMediaTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMMediaTypeSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMMediaTypeSample,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IStreamSample.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_SetPointer(self: *const T, pBuffer: [*:0]u8, lSize: i32) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).SetPointer(@as(*const IAMMediaTypeSample, @ptrCast(self)), pBuffer, lSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_GetPointer(self: *const T, ppBuffer: ?*?*u8) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).GetPointer(@as(*const IAMMediaTypeSample, @ptrCast(self)), ppBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_GetSize(self: *const T) i32 {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).GetSize(@as(*const IAMMediaTypeSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_GetTime(self: *const T, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).GetTime(@as(*const IAMMediaTypeSample, @ptrCast(self)), pTimeStart, pTimeEnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_SetTime(self: *const T, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).SetTime(@as(*const IAMMediaTypeSample, @ptrCast(self)), pTimeStart, pTimeEnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_IsSyncPoint(self: *const T) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).IsSyncPoint(@as(*const IAMMediaTypeSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_SetSyncPoint(self: *const T, bIsSyncPoint: BOOL) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).SetSyncPoint(@as(*const IAMMediaTypeSample, @ptrCast(self)), bIsSyncPoint);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_IsPreroll(self: *const T) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).IsPreroll(@as(*const IAMMediaTypeSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_SetPreroll(self: *const T, bIsPreroll: BOOL) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).SetPreroll(@as(*const IAMMediaTypeSample, @ptrCast(self)), bIsPreroll);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_GetActualDataLength(self: *const T) i32 {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).GetActualDataLength(@as(*const IAMMediaTypeSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_SetActualDataLength(self: *const T, __MIDL__IAMMediaTypeSample0000: i32) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).SetActualDataLength(@as(*const IAMMediaTypeSample, @ptrCast(self)), __MIDL__IAMMediaTypeSample0000);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_GetMediaType(self: *const T, ppMediaType: ?*?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).GetMediaType(@as(*const IAMMediaTypeSample, @ptrCast(self)), ppMediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_SetMediaType(self: *const T, pMediaType: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).SetMediaType(@as(*const IAMMediaTypeSample, @ptrCast(self)), pMediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_IsDiscontinuity(self: *const T) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).IsDiscontinuity(@as(*const IAMMediaTypeSample, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_SetDiscontinuity(self: *const T, bDiscontinuity: BOOL) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).SetDiscontinuity(@as(*const IAMMediaTypeSample, @ptrCast(self)), bDiscontinuity);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_GetMediaTime(self: *const T, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).GetMediaTime(@as(*const IAMMediaTypeSample, @ptrCast(self)), pTimeStart, pTimeEnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMMediaTypeSample_SetMediaTime(self: *const T, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IAMMediaTypeSample.VTable, @ptrCast(self.vtable)).SetMediaTime(@as(*const IAMMediaTypeSample, @ptrCast(self)), pTimeStart, pTimeEnd);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IDirectDrawVideo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetSwitches: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                pSwitches: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                pSwitches: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSwitches: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                Switches: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                Switches: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCaps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                pCaps: ?*DDCAPS_DX7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                pCaps: ?*DDCAPS_DX7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEmulatedCaps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                pCaps: ?*DDCAPS_DX7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                pCaps: ?*DDCAPS_DX7,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSurfaceDesc: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                pSurfaceDesc: ?*DDSURFACEDESC,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                pSurfaceDesc: ?*DDSURFACEDESC,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFourCCCodes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                pCount: ?*u32,
                pCodes: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                pCount: ?*u32,
                pCodes: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDirectDraw: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                pDirectDraw: ?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                pDirectDraw: ?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDirectDraw: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                ppDirectDraw: ?*?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                ppDirectDraw: ?*?*IDirectDraw,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSurfaceType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                pSurfaceType: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                pSurfaceType: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDefault: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UseScanLine: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                UseScanLine: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                UseScanLine: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CanUseScanLine: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                UseScanLine: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                UseScanLine: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UseOverlayStretch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                UseOverlayStretch: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                UseOverlayStretch: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CanUseOverlayStretch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                UseOverlayStretch: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                UseOverlayStretch: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UseWhenFullScreen: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                UseWhenFullScreen: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                UseWhenFullScreen: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WillUseFullScreen: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectDrawVideo,
                UseWhenFullScreen: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectDrawVideo,
                UseWhenFullScreen: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_GetSwitches(self: *const T, pSwitches: ?*u32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).GetSwitches(@as(*const IDirectDrawVideo, @ptrCast(self)), pSwitches);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_SetSwitches(self: *const T, Switches: u32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).SetSwitches(@as(*const IDirectDrawVideo, @ptrCast(self)), Switches);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_GetCaps(self: *const T, pCaps: ?*DDCAPS_DX7) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).GetCaps(@as(*const IDirectDrawVideo, @ptrCast(self)), pCaps);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_GetEmulatedCaps(self: *const T, pCaps: ?*DDCAPS_DX7) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).GetEmulatedCaps(@as(*const IDirectDrawVideo, @ptrCast(self)), pCaps);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_GetSurfaceDesc(self: *const T, pSurfaceDesc: ?*DDSURFACEDESC) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).GetSurfaceDesc(@as(*const IDirectDrawVideo, @ptrCast(self)), pSurfaceDesc);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_GetFourCCCodes(self: *const T, pCount: ?*u32, pCodes: ?*u32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).GetFourCCCodes(@as(*const IDirectDrawVideo, @ptrCast(self)), pCount, pCodes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_SetDirectDraw(self: *const T, pDirectDraw: ?*IDirectDraw) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).SetDirectDraw(@as(*const IDirectDrawVideo, @ptrCast(self)), pDirectDraw);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_GetDirectDraw(self: *const T, ppDirectDraw: ?*?*IDirectDraw) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).GetDirectDraw(@as(*const IDirectDrawVideo, @ptrCast(self)), ppDirectDraw);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_GetSurfaceType(self: *const T, pSurfaceType: ?*u32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).GetSurfaceType(@as(*const IDirectDrawVideo, @ptrCast(self)), pSurfaceType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_SetDefault(self: *const T) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).SetDefault(@as(*const IDirectDrawVideo, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_UseScanLine(self: *const T, UseScanLine: i32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).UseScanLine(@as(*const IDirectDrawVideo, @ptrCast(self)), UseScanLine);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_CanUseScanLine(self: *const T, UseScanLine: ?*i32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).CanUseScanLine(@as(*const IDirectDrawVideo, @ptrCast(self)), UseScanLine);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_UseOverlayStretch(self: *const T, UseOverlayStretch: i32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).UseOverlayStretch(@as(*const IDirectDrawVideo, @ptrCast(self)), UseOverlayStretch);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_CanUseOverlayStretch(self: *const T, UseOverlayStretch: ?*i32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).CanUseOverlayStretch(@as(*const IDirectDrawVideo, @ptrCast(self)), UseOverlayStretch);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_UseWhenFullScreen(self: *const T, UseWhenFullScreen: i32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).UseWhenFullScreen(@as(*const IDirectDrawVideo, @ptrCast(self)), UseWhenFullScreen);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectDrawVideo_WillUseFullScreen(self: *const T, UseWhenFullScreen: ?*i32) HRESULT {
                return @as(*const IDirectDrawVideo.VTable, @ptrCast(self.vtable)).WillUseFullScreen(@as(*const IDirectDrawVideo, @ptrCast(self)), UseWhenFullScreen);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IQualProp = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FramesDroppedInRenderer: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IQualProp,
                pcFrames: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IQualProp,
                pcFrames: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FramesDrawn: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IQualProp,
                pcFramesDrawn: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IQualProp,
                pcFramesDrawn: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AvgFrameRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IQualProp,
                piAvgFrameRate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IQualProp,
                piAvgFrameRate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Jitter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IQualProp,
                iJitter: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IQualProp,
                iJitter: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AvgSyncOffset: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IQualProp,
                piAvg: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IQualProp,
                piAvg: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DevSyncOffset: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IQualProp,
                piDev: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IQualProp,
                piDev: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQualProp_get_FramesDroppedInRenderer(self: *const T, pcFrames: ?*i32) HRESULT {
                return @as(*const IQualProp.VTable, @ptrCast(self.vtable)).get_FramesDroppedInRenderer(@as(*const IQualProp, @ptrCast(self)), pcFrames);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQualProp_get_FramesDrawn(self: *const T, pcFramesDrawn: ?*i32) HRESULT {
                return @as(*const IQualProp.VTable, @ptrCast(self.vtable)).get_FramesDrawn(@as(*const IQualProp, @ptrCast(self)), pcFramesDrawn);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQualProp_get_AvgFrameRate(self: *const T, piAvgFrameRate: ?*i32) HRESULT {
                return @as(*const IQualProp.VTable, @ptrCast(self.vtable)).get_AvgFrameRate(@as(*const IQualProp, @ptrCast(self)), piAvgFrameRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQualProp_get_Jitter(self: *const T, iJitter: ?*i32) HRESULT {
                return @as(*const IQualProp.VTable, @ptrCast(self.vtable)).get_Jitter(@as(*const IQualProp, @ptrCast(self)), iJitter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQualProp_get_AvgSyncOffset(self: *const T, piAvg: ?*i32) HRESULT {
                return @as(*const IQualProp.VTable, @ptrCast(self.vtable)).get_AvgSyncOffset(@as(*const IQualProp, @ptrCast(self)), piAvg);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IQualProp_get_DevSyncOffset(self: *const T, piDev: ?*i32) HRESULT {
                return @as(*const IQualProp.VTable, @ptrCast(self.vtable)).get_DevSyncOffset(@as(*const IQualProp, @ptrCast(self)), piDev);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const IFullScreenVideo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CountModes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                pModes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                pModes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetModeInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                Mode: i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
                pDepth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                Mode: i32,
                pWidth: ?*i32,
                pHeight: ?*i32,
                pDepth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                pMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                pMode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsModeAvailable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                Mode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                Mode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsModeEnabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                Mode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                Mode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetEnabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                Mode: i32,
                bEnabled: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                Mode: i32,
                bEnabled: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetClipFactor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                pClipFactor: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                pClipFactor: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetClipFactor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                ClipFactor: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                ClipFactor: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMessageDrain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMessageDrain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                hwnd: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                hwnd: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                Monitor: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                Monitor: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                Monitor: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                Monitor: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HideOnDeactivate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                Hide: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                Hide: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsHideOnDeactivate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCaption: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                strCaption: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                strCaption: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCaption: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
                pstrCaption: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
                pstrCaption: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDefault: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_CountModes(self: *const T, pModes: ?*i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).CountModes(@as(*const IFullScreenVideo, @ptrCast(self)), pModes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_GetModeInfo(self: *const T, Mode: i32, pWidth: ?*i32, pHeight: ?*i32, pDepth: ?*i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).GetModeInfo(@as(*const IFullScreenVideo, @ptrCast(self)), Mode, pWidth, pHeight, pDepth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_GetCurrentMode(self: *const T, pMode: ?*i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).GetCurrentMode(@as(*const IFullScreenVideo, @ptrCast(self)), pMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_IsModeAvailable(self: *const T, Mode: i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).IsModeAvailable(@as(*const IFullScreenVideo, @ptrCast(self)), Mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_IsModeEnabled(self: *const T, Mode: i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).IsModeEnabled(@as(*const IFullScreenVideo, @ptrCast(self)), Mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_SetEnabled(self: *const T, Mode: i32, bEnabled: i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).SetEnabled(@as(*const IFullScreenVideo, @ptrCast(self)), Mode, bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_GetClipFactor(self: *const T, pClipFactor: ?*i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).GetClipFactor(@as(*const IFullScreenVideo, @ptrCast(self)), pClipFactor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_SetClipFactor(self: *const T, ClipFactor: i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).SetClipFactor(@as(*const IFullScreenVideo, @ptrCast(self)), ClipFactor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_SetMessageDrain(self: *const T, hwnd: ?HWND) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).SetMessageDrain(@as(*const IFullScreenVideo, @ptrCast(self)), hwnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_GetMessageDrain(self: *const T, hwnd: ?*?HWND) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).GetMessageDrain(@as(*const IFullScreenVideo, @ptrCast(self)), hwnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_SetMonitor(self: *const T, Monitor: i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).SetMonitor(@as(*const IFullScreenVideo, @ptrCast(self)), Monitor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_GetMonitor(self: *const T, Monitor: ?*i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).GetMonitor(@as(*const IFullScreenVideo, @ptrCast(self)), Monitor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_HideOnDeactivate(self: *const T, Hide: i32) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).HideOnDeactivate(@as(*const IFullScreenVideo, @ptrCast(self)), Hide);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_IsHideOnDeactivate(self: *const T) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).IsHideOnDeactivate(@as(*const IFullScreenVideo, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_SetCaption(self: *const T, strCaption: ?BSTR) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).SetCaption(@as(*const IFullScreenVideo, @ptrCast(self)), strCaption);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_GetCaption(self: *const T, pstrCaption: ?*?BSTR) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).GetCaption(@as(*const IFullScreenVideo, @ptrCast(self)), pstrCaption);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideo_SetDefault(self: *const T) HRESULT {
                return @as(*const IFullScreenVideo.VTable, @ptrCast(self.vtable)).SetDefault(@as(*const IFullScreenVideo, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IFullScreenVideoEx = extern struct {
    pub const VTable = extern struct {
        base: IFullScreenVideo.VTable,
        SetAcceleratorTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideoEx,
                hwnd: ?HWND,
                hAccel: ?HACCEL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideoEx,
                hwnd: ?HWND,
                hAccel: ?HACCEL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAcceleratorTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideoEx,
                phwnd: ?*?HWND,
                phAccel: ?*?HACCEL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideoEx,
                phwnd: ?*?HWND,
                phAccel: ?*?HACCEL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        KeepPixelAspectRatio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideoEx,
                KeepAspect: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideoEx,
                KeepAspect: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsKeepPixelAspectRatio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IFullScreenVideoEx,
                pKeepAspect: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IFullScreenVideoEx,
                pKeepAspect: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IFullScreenVideo.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideoEx_SetAcceleratorTable(self: *const T, hwnd: ?HWND, hAccel: ?HACCEL) HRESULT {
                return @as(*const IFullScreenVideoEx.VTable, @ptrCast(self.vtable)).SetAcceleratorTable(@as(*const IFullScreenVideoEx, @ptrCast(self)), hwnd, hAccel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideoEx_GetAcceleratorTable(self: *const T, phwnd: ?*?HWND, phAccel: ?*?HACCEL) HRESULT {
                return @as(*const IFullScreenVideoEx.VTable, @ptrCast(self.vtable)).GetAcceleratorTable(@as(*const IFullScreenVideoEx, @ptrCast(self)), phwnd, phAccel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideoEx_KeepPixelAspectRatio(self: *const T, KeepAspect: i32) HRESULT {
                return @as(*const IFullScreenVideoEx.VTable, @ptrCast(self.vtable)).KeepPixelAspectRatio(@as(*const IFullScreenVideoEx, @ptrCast(self)), KeepAspect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IFullScreenVideoEx_IsKeepPixelAspectRatio(self: *const T, pKeepAspect: ?*i32) HRESULT {
                return @as(*const IFullScreenVideoEx.VTable, @ptrCast(self.vtable)).IsKeepPixelAspectRatio(@as(*const IFullScreenVideoEx, @ptrCast(self)), pKeepAspect);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const IBaseVideoMixer = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetLeadPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseVideoMixer,
                iPin: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseVideoMixer,
                iPin: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLeadPin: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseVideoMixer,
                piPin: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseVideoMixer,
                piPin: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInputPinCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseVideoMixer,
                piPinCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseVideoMixer,
                piPinCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsUsingClock: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseVideoMixer,
                pbValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseVideoMixer,
                pbValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetUsingClock: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseVideoMixer,
                bValue: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseVideoMixer,
                bValue: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetClockPeriod: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseVideoMixer,
                pbValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseVideoMixer,
                pbValue: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetClockPeriod: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBaseVideoMixer,
                bValue: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBaseVideoMixer,
                bValue: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseVideoMixer_SetLeadPin(self: *const T, iPin: i32) HRESULT {
                return @as(*const IBaseVideoMixer.VTable, @ptrCast(self.vtable)).SetLeadPin(@as(*const IBaseVideoMixer, @ptrCast(self)), iPin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseVideoMixer_GetLeadPin(self: *const T, piPin: ?*i32) HRESULT {
                return @as(*const IBaseVideoMixer.VTable, @ptrCast(self.vtable)).GetLeadPin(@as(*const IBaseVideoMixer, @ptrCast(self)), piPin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseVideoMixer_GetInputPinCount(self: *const T, piPinCount: ?*i32) HRESULT {
                return @as(*const IBaseVideoMixer.VTable, @ptrCast(self.vtable)).GetInputPinCount(@as(*const IBaseVideoMixer, @ptrCast(self)), piPinCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseVideoMixer_IsUsingClock(self: *const T, pbValue: ?*i32) HRESULT {
                return @as(*const IBaseVideoMixer.VTable, @ptrCast(self.vtable)).IsUsingClock(@as(*const IBaseVideoMixer, @ptrCast(self)), pbValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseVideoMixer_SetUsingClock(self: *const T, bValue: i32) HRESULT {
                return @as(*const IBaseVideoMixer.VTable, @ptrCast(self.vtable)).SetUsingClock(@as(*const IBaseVideoMixer, @ptrCast(self)), bValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseVideoMixer_GetClockPeriod(self: *const T, pbValue: ?*i32) HRESULT {
                return @as(*const IBaseVideoMixer.VTable, @ptrCast(self.vtable)).GetClockPeriod(@as(*const IBaseVideoMixer, @ptrCast(self)), pbValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBaseVideoMixer_SetClockPeriod(self: *const T, bValue: i32) HRESULT {
                return @as(*const IBaseVideoMixer.VTable, @ptrCast(self.vtable)).SetClockPeriod(@as(*const IBaseVideoMixer, @ptrCast(self)), bValue);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const TRUECOLORINFO = extern struct {
    dwBitMasks: [3]u32,
    bmiColors: [256]RGBQUAD,
};

pub const VIDEOINFOHEADER = extern struct {
    rcSource: RECT,
    rcTarget: RECT,
    dwBitRate: u32,
    dwBitErrorRate: u32,
    AvgTimePerFrame: i64,
    bmiHeader: BITMAPINFOHEADER,
};

pub const VIDEOINFO = extern struct {
    rcSource: RECT,
    rcTarget: RECT,
    dwBitRate: u32,
    dwBitErrorRate: u32,
    AvgTimePerFrame: i64,
    bmiHeader: BITMAPINFOHEADER,
    Anonymous: extern union {
        bmiColors: [256]RGBQUAD,
        dwBitMasks: [3]u32,
        TrueColorInfo: TRUECOLORINFO,
    },
};

pub const MPEG1VIDEOINFO = extern struct {
    hdr: VIDEOINFOHEADER,
    dwStartTimeCode: u32,
    cbSequenceHeader: u32,
    bSequenceHeader: [1]u8,
};

pub const ANALOGVIDEOINFO = extern struct {
    rcSource: RECT,
    rcTarget: RECT,
    dwActiveWidth: u32,
    dwActiveHeight: u32,
    AvgTimePerFrame: i64,
};

pub const AM_PROPERTY_FRAMESTEP = enum(i32) {
    STEP = 1,
    CANCEL = 2,
    CANSTEP = 3,
    CANSTEPMULTIPLE = 4,
};
pub const AM_PROPERTY_FRAMESTEP_STEP = AM_PROPERTY_FRAMESTEP.STEP;
pub const AM_PROPERTY_FRAMESTEP_CANCEL = AM_PROPERTY_FRAMESTEP.CANCEL;
pub const AM_PROPERTY_FRAMESTEP_CANSTEP = AM_PROPERTY_FRAMESTEP.CANSTEP;
pub const AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = AM_PROPERTY_FRAMESTEP.CANSTEPMULTIPLE;

pub const AM_FRAMESTEP_STEP = extern struct {
    dwFramesToStep: u32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDMOWrapperFilter_Value = Guid.initString("52d6f586-9f0f-4824-8fc8-e32ca04930c2");
pub const IID_IDMOWrapperFilter = &IID_IDMOWrapperFilter_Value;
pub const IDMOWrapperFilter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Init: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDMOWrapperFilter,
                clsidDMO: ?*const Guid,
                catDMO: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDMOWrapperFilter,
                clsidDMO: ?*const Guid,
                catDMO: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDMOWrapperFilter_Init(self: *const T, clsidDMO: ?*const Guid, catDMO: ?*const Guid) HRESULT {
                return @as(*const IDMOWrapperFilter.VTable, @ptrCast(self.vtable)).Init(@as(*const IDMOWrapperFilter, @ptrCast(self)), clsidDMO, catDMO);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMixerOCXNotify_Value = Guid.initString("81a3bd31-dee1-11d1-8508-00a0c91f9ca0");
pub const IID_IMixerOCXNotify = &IID_IMixerOCXNotify_Value;
pub const IMixerOCXNotify = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        OnInvalidateRect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCXNotify,
                lpcRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCXNotify,
                lpcRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OnStatusChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCXNotify,
                ulStatusFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCXNotify,
                ulStatusFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OnDataChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCXNotify,
                ulDataFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCXNotify,
                ulDataFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCXNotify_OnInvalidateRect(self: *const T, lpcRect: ?*RECT) HRESULT {
                return @as(*const IMixerOCXNotify.VTable, @ptrCast(self.vtable)).OnInvalidateRect(@as(*const IMixerOCXNotify, @ptrCast(self)), lpcRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCXNotify_OnStatusChange(self: *const T, ulStatusFlags: u32) HRESULT {
                return @as(*const IMixerOCXNotify.VTable, @ptrCast(self.vtable)).OnStatusChange(@as(*const IMixerOCXNotify, @ptrCast(self)), ulStatusFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCXNotify_OnDataChange(self: *const T, ulDataFlags: u32) HRESULT {
                return @as(*const IMixerOCXNotify.VTable, @ptrCast(self.vtable)).OnDataChange(@as(*const IMixerOCXNotify, @ptrCast(self)), ulDataFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
const IID_IMixerOCX_Value = Guid.initString("81a3bd32-dee1-11d1-8508-00a0c91f9ca0");
pub const IID_IMixerOCX = &IID_IMixerOCX_Value;
pub const IMixerOCX = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        OnDisplayChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCX,
                ulBitsPerPixel: u32,
                ulScreenWidth: u32,
                ulScreenHeight: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCX,
                ulBitsPerPixel: u32,
                ulScreenWidth: u32,
                ulScreenHeight: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAspectRatio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCX,
                pdwPictAspectRatioX: ?*u32,
                pdwPictAspectRatioY: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCX,
                pdwPictAspectRatioX: ?*u32,
                pdwPictAspectRatioY: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVideoSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCX,
                pdwVideoWidth: ?*u32,
                pdwVideoHeight: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCX,
                pdwVideoWidth: ?*u32,
                pdwVideoHeight: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCX,
                pdwStatus: ?*?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCX,
                pdwStatus: ?*?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OnDraw: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCX,
                hdcDraw: ?HDC,
                prcDraw: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCX,
                hdcDraw: ?HDC,
                prcDraw: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDrawRegion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCX,
                lpptTopLeftSC: ?*POINT,
                prcDrawCC: ?*RECT,
                lprcClip: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCX,
                lpptTopLeftSC: ?*POINT,
                prcDrawCC: ?*RECT,
                lprcClip: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Advise: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCX,
                pmdns: ?*IMixerOCXNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCX,
                pmdns: ?*IMixerOCXNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnAdvise: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerOCX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerOCX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCX_OnDisplayChange(self: *const T, ulBitsPerPixel: u32, ulScreenWidth: u32, ulScreenHeight: u32) HRESULT {
                return @as(*const IMixerOCX.VTable, @ptrCast(self.vtable)).OnDisplayChange(@as(*const IMixerOCX, @ptrCast(self)), ulBitsPerPixel, ulScreenWidth, ulScreenHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCX_GetAspectRatio(self: *const T, pdwPictAspectRatioX: ?*u32, pdwPictAspectRatioY: ?*u32) HRESULT {
                return @as(*const IMixerOCX.VTable, @ptrCast(self.vtable)).GetAspectRatio(@as(*const IMixerOCX, @ptrCast(self)), pdwPictAspectRatioX, pdwPictAspectRatioY);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCX_GetVideoSize(self: *const T, pdwVideoWidth: ?*u32, pdwVideoHeight: ?*u32) HRESULT {
                return @as(*const IMixerOCX.VTable, @ptrCast(self.vtable)).GetVideoSize(@as(*const IMixerOCX, @ptrCast(self)), pdwVideoWidth, pdwVideoHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCX_GetStatus(self: *const T, pdwStatus: ?*?*u32) HRESULT {
                return @as(*const IMixerOCX.VTable, @ptrCast(self.vtable)).GetStatus(@as(*const IMixerOCX, @ptrCast(self)), pdwStatus);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCX_OnDraw(self: *const T, hdcDraw: ?HDC, prcDraw: ?*RECT) HRESULT {
                return @as(*const IMixerOCX.VTable, @ptrCast(self.vtable)).OnDraw(@as(*const IMixerOCX, @ptrCast(self)), hdcDraw, prcDraw);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCX_SetDrawRegion(self: *const T, lpptTopLeftSC: ?*POINT, prcDrawCC: ?*RECT, lprcClip: ?*RECT) HRESULT {
                return @as(*const IMixerOCX.VTable, @ptrCast(self.vtable)).SetDrawRegion(@as(*const IMixerOCX, @ptrCast(self)), lpptTopLeftSC, prcDrawCC, lprcClip);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCX_Advise(self: *const T, pmdns: ?*IMixerOCXNotify) HRESULT {
                return @as(*const IMixerOCX.VTable, @ptrCast(self.vtable)).Advise(@as(*const IMixerOCX, @ptrCast(self)), pmdns);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerOCX_UnAdvise(self: *const T) HRESULT {
                return @as(*const IMixerOCX.VTable, @ptrCast(self.vtable)).UnAdvise(@as(*const IMixerOCX, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_ASPECT_RATIO_MODE = enum(i32) {
    STRETCHED = 0,
    LETTER_BOX = 1,
    CROP = 2,
    STRETCHED_AS_PRIMARY = 3,
};
pub const AM_ARMODE_STRETCHED = AM_ASPECT_RATIO_MODE.STRETCHED;
pub const AM_ARMODE_LETTER_BOX = AM_ASPECT_RATIO_MODE.LETTER_BOX;
pub const AM_ARMODE_CROP = AM_ASPECT_RATIO_MODE.CROP;
pub const AM_ARMODE_STRETCHED_AS_PRIMARY = AM_ASPECT_RATIO_MODE.STRETCHED_AS_PRIMARY;

// TODO: this type is limited to platform 'windows5.0'
pub const IMixerPinConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetRelativePosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                dwLeft: u32,
                dwTop: u32,
                dwRight: u32,
                dwBottom: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                dwLeft: u32,
                dwTop: u32,
                dwRight: u32,
                dwBottom: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRelativePosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                pdwLeft: ?*u32,
                pdwTop: ?*u32,
                pdwRight: ?*u32,
                pdwBottom: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                pdwLeft: ?*u32,
                pdwTop: ?*u32,
                pdwRight: ?*u32,
                pdwBottom: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetZOrder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                dwZOrder: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                dwZOrder: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetZOrder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                pdwZOrder: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                pdwZOrder: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                pColorKey: ?*COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                pColorKey: ?*COLORKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetColorKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                pColorKey: ?*COLORKEY,
                pColor: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                pColorKey: ?*COLORKEY,
                pColor: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBlendingParameter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                dwBlendingParameter: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                dwBlendingParameter: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBlendingParameter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                pdwBlendingParameter: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                pdwBlendingParameter: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                amAspectRatioMode: AM_ASPECT_RATIO_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                amAspectRatioMode: AM_ASPECT_RATIO_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                pamAspectRatioMode: ?*AM_ASPECT_RATIO_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                pamAspectRatioMode: ?*AM_ASPECT_RATIO_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetStreamTransparent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                bStreamTransparent: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                bStreamTransparent: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamTransparent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig,
                pbStreamTransparent: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig,
                pbStreamTransparent: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_SetRelativePosition(self: *const T, dwLeft: u32, dwTop: u32, dwRight: u32, dwBottom: u32) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).SetRelativePosition(@as(*const IMixerPinConfig, @ptrCast(self)), dwLeft, dwTop, dwRight, dwBottom);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_GetRelativePosition(self: *const T, pdwLeft: ?*u32, pdwTop: ?*u32, pdwRight: ?*u32, pdwBottom: ?*u32) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).GetRelativePosition(@as(*const IMixerPinConfig, @ptrCast(self)), pdwLeft, pdwTop, pdwRight, pdwBottom);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_SetZOrder(self: *const T, dwZOrder: u32) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).SetZOrder(@as(*const IMixerPinConfig, @ptrCast(self)), dwZOrder);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_GetZOrder(self: *const T, pdwZOrder: ?*u32) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).GetZOrder(@as(*const IMixerPinConfig, @ptrCast(self)), pdwZOrder);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_SetColorKey(self: *const T, pColorKey: ?*COLORKEY) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).SetColorKey(@as(*const IMixerPinConfig, @ptrCast(self)), pColorKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_GetColorKey(self: *const T, pColorKey: ?*COLORKEY, pColor: ?*u32) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).GetColorKey(@as(*const IMixerPinConfig, @ptrCast(self)), pColorKey, pColor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_SetBlendingParameter(self: *const T, dwBlendingParameter: u32) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).SetBlendingParameter(@as(*const IMixerPinConfig, @ptrCast(self)), dwBlendingParameter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_GetBlendingParameter(self: *const T, pdwBlendingParameter: ?*u32) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).GetBlendingParameter(@as(*const IMixerPinConfig, @ptrCast(self)), pdwBlendingParameter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_SetAspectRatioMode(self: *const T, amAspectRatioMode: AM_ASPECT_RATIO_MODE) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).SetAspectRatioMode(@as(*const IMixerPinConfig, @ptrCast(self)), amAspectRatioMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_GetAspectRatioMode(self: *const T, pamAspectRatioMode: ?*AM_ASPECT_RATIO_MODE) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).GetAspectRatioMode(@as(*const IMixerPinConfig, @ptrCast(self)), pamAspectRatioMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_SetStreamTransparent(self: *const T, bStreamTransparent: BOOL) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).SetStreamTransparent(@as(*const IMixerPinConfig, @ptrCast(self)), bStreamTransparent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig_GetStreamTransparent(self: *const T, pbStreamTransparent: ?*BOOL) HRESULT {
                return @as(*const IMixerPinConfig.VTable, @ptrCast(self.vtable)).GetStreamTransparent(@as(*const IMixerPinConfig, @ptrCast(self)), pbStreamTransparent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IMixerPinConfig2 = extern struct {
    pub const VTable = extern struct {
        base: IMixerPinConfig.VTable,
        SetOverlaySurfaceColorControls: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig2,
                pColorControl: ?*DDCOLORCONTROL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig2,
                pColorControl: ?*DDCOLORCONTROL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOverlaySurfaceColorControls: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMixerPinConfig2,
                pColorControl: ?*DDCOLORCONTROL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMixerPinConfig2,
                pColorControl: ?*DDCOLORCONTROL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMixerPinConfig.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig2_SetOverlaySurfaceColorControls(self: *const T, pColorControl: ?*DDCOLORCONTROL) HRESULT {
                return @as(*const IMixerPinConfig2.VTable, @ptrCast(self.vtable)).SetOverlaySurfaceColorControls(@as(*const IMixerPinConfig2, @ptrCast(self)), pColorControl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMixerPinConfig2_GetOverlaySurfaceColorControls(self: *const T, pColorControl: ?*DDCOLORCONTROL) HRESULT {
                return @as(*const IMixerPinConfig2.VTable, @ptrCast(self.vtable)).GetOverlaySurfaceColorControls(@as(*const IMixerPinConfig2, @ptrCast(self)), pColorControl);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AM_MPEGSTREAMTYPE = extern struct {
    dwStreamId: u32,
    dwReserved: u32,
    mt: AM_MEDIA_TYPE,
    bFormat: [1]u8,
};

pub const AM_MPEGSYSTEMTYPE = extern struct {
    dwBitRate: u32,
    cStreams: u32,
    Streams: [1]AM_MPEGSTREAMTYPE,
};

// TODO: this type is limited to platform 'windows5.0'
pub const IMpegAudioDecoder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FrequencyDivider: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                pDivider: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                pDivider: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FrequencyDivider: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                Divider: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                Divider: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DecoderAccuracy: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                pAccuracy: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                pAccuracy: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DecoderAccuracy: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                Accuracy: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                Accuracy: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Stereo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                pStereo: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                pStereo: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Stereo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                Stereo: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                Stereo: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DecoderWordSize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                pWordSize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                pWordSize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DecoderWordSize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                WordSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                WordSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_IntegerDecode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                pIntDecode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                pIntDecode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_IntegerDecode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                IntDecode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                IntDecode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DualMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                pIntDecode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                pIntDecode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DualMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                IntDecode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                IntDecode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioFormat: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMpegAudioDecoder,
                lpFmt: ?*MPEG1WAVEFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMpegAudioDecoder,
                lpFmt: ?*MPEG1WAVEFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_get_FrequencyDivider(self: *const T, pDivider: ?*u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).get_FrequencyDivider(@as(*const IMpegAudioDecoder, @ptrCast(self)), pDivider);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_put_FrequencyDivider(self: *const T, Divider: u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).put_FrequencyDivider(@as(*const IMpegAudioDecoder, @ptrCast(self)), Divider);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_get_DecoderAccuracy(self: *const T, pAccuracy: ?*u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).get_DecoderAccuracy(@as(*const IMpegAudioDecoder, @ptrCast(self)), pAccuracy);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_put_DecoderAccuracy(self: *const T, Accuracy: u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).put_DecoderAccuracy(@as(*const IMpegAudioDecoder, @ptrCast(self)), Accuracy);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_get_Stereo(self: *const T, pStereo: ?*u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).get_Stereo(@as(*const IMpegAudioDecoder, @ptrCast(self)), pStereo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_put_Stereo(self: *const T, Stereo: u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).put_Stereo(@as(*const IMpegAudioDecoder, @ptrCast(self)), Stereo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_get_DecoderWordSize(self: *const T, pWordSize: ?*u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).get_DecoderWordSize(@as(*const IMpegAudioDecoder, @ptrCast(self)), pWordSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_put_DecoderWordSize(self: *const T, WordSize: u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).put_DecoderWordSize(@as(*const IMpegAudioDecoder, @ptrCast(self)), WordSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_get_IntegerDecode(self: *const T, pIntDecode: ?*u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).get_IntegerDecode(@as(*const IMpegAudioDecoder, @ptrCast(self)), pIntDecode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_put_IntegerDecode(self: *const T, IntDecode: u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).put_IntegerDecode(@as(*const IMpegAudioDecoder, @ptrCast(self)), IntDecode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_get_DualMode(self: *const T, pIntDecode: ?*u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).get_DualMode(@as(*const IMpegAudioDecoder, @ptrCast(self)), pIntDecode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_put_DualMode(self: *const T, IntDecode: u32) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).put_DualMode(@as(*const IMpegAudioDecoder, @ptrCast(self)), IntDecode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpegAudioDecoder_get_AudioFormat(self: *const T, lpFmt: ?*MPEG1WAVEFORMAT) HRESULT {
                return @as(*const IMpegAudioDecoder.VTable, @ptrCast(self.vtable)).get_AudioFormat(@as(*const IMpegAudioDecoder, @ptrCast(self)), lpFmt);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9PresentationFlags = enum(i32) {
    SyncPoint = 1,
    Preroll = 2,
    Discontinuity = 4,
    TimeValid = 8,
    SrcDstRectsValid = 16,
};
pub const VMR9Sample_SyncPoint = VMR9PresentationFlags.SyncPoint;
pub const VMR9Sample_Preroll = VMR9PresentationFlags.Preroll;
pub const VMR9Sample_Discontinuity = VMR9PresentationFlags.Discontinuity;
pub const VMR9Sample_TimeValid = VMR9PresentationFlags.TimeValid;
pub const VMR9Sample_SrcDstRectsValid = VMR9PresentationFlags.SrcDstRectsValid;

pub const VMR9PresentationInfo = extern struct {
    dwFlags: u32,
    lpSurf: ?*IDirect3DSurface9,
    rtStart: i64,
    rtEnd: i64,
    szAspectRatio: SIZE,
    rcSrc: RECT,
    rcDst: RECT,
    dwReserved1: u32,
    dwReserved2: u32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRImagePresenter9_Value = Guid.initString("69188c61-12a3-40f0-8ffc-342e7b433fd7");
pub const IID_IVMRImagePresenter9 = &IID_IVMRImagePresenter9_Value;
pub const IVMRImagePresenter9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        StartPresenting: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenter9,
                dwUserID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenter9,
                dwUserID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StopPresenting: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenter9,
                dwUserID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenter9,
                dwUserID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PresentImage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenter9,
                dwUserID: usize,
                lpPresInfo: ?*VMR9PresentationInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenter9,
                dwUserID: usize,
                lpPresInfo: ?*VMR9PresentationInfo,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenter9_StartPresenting(self: *const T, dwUserID: usize) HRESULT {
                return @as(*const IVMRImagePresenter9.VTable, @ptrCast(self.vtable)).StartPresenting(@as(*const IVMRImagePresenter9, @ptrCast(self)), dwUserID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenter9_StopPresenting(self: *const T, dwUserID: usize) HRESULT {
                return @as(*const IVMRImagePresenter9.VTable, @ptrCast(self.vtable)).StopPresenting(@as(*const IVMRImagePresenter9, @ptrCast(self)), dwUserID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenter9_PresentImage(self: *const T, dwUserID: usize, lpPresInfo: ?*VMR9PresentationInfo) HRESULT {
                return @as(*const IVMRImagePresenter9.VTable, @ptrCast(self.vtable)).PresentImage(@as(*const IVMRImagePresenter9, @ptrCast(self)), dwUserID, lpPresInfo);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9SurfaceAllocationFlags = enum(i32) {
    @"3DRenderTarget" = 1,
    DXVATarget = 2,
    TextureSurface = 4,
    OffscreenSurface = 8,
    RGBDynamicSwitch = 16,
    UsageReserved = 224,
    UsageMask = 255,
};
pub const VMR9AllocFlag_3DRenderTarget = VMR9SurfaceAllocationFlags.@"3DRenderTarget";
pub const VMR9AllocFlag_DXVATarget = VMR9SurfaceAllocationFlags.DXVATarget;
pub const VMR9AllocFlag_TextureSurface = VMR9SurfaceAllocationFlags.TextureSurface;
pub const VMR9AllocFlag_OffscreenSurface = VMR9SurfaceAllocationFlags.OffscreenSurface;
pub const VMR9AllocFlag_RGBDynamicSwitch = VMR9SurfaceAllocationFlags.RGBDynamicSwitch;
pub const VMR9AllocFlag_UsageReserved = VMR9SurfaceAllocationFlags.UsageReserved;
pub const VMR9AllocFlag_UsageMask = VMR9SurfaceAllocationFlags.UsageMask;

pub const VMR9AllocationInfo = extern struct {
    dwFlags: u32,
    dwWidth: u32,
    dwHeight: u32,
    Format: D3DFORMAT,
    Pool: D3DPOOL,
    MinBuffers: u32,
    szAspectRatio: SIZE,
    szNativeSize: SIZE,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRSurfaceAllocator9_Value = Guid.initString("8d5148ea-3f5d-46cf-9df1-d1b896eedb1f");
pub const IID_IVMRSurfaceAllocator9 = &IID_IVMRSurfaceAllocator9_Value;
pub const IVMRSurfaceAllocator9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        InitializeDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocator9,
                dwUserID: usize,
                lpAllocInfo: ?*VMR9AllocationInfo,
                lpNumBuffers: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocator9,
                dwUserID: usize,
                lpAllocInfo: ?*VMR9AllocationInfo,
                lpNumBuffers: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TerminateDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocator9,
                dwID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocator9,
                dwID: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocator9,
                dwUserID: usize,
                SurfaceIndex: u32,
                SurfaceFlags: u32,
                lplpSurface: ?*?*IDirect3DSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocator9,
                dwUserID: usize,
                SurfaceIndex: u32,
                SurfaceFlags: u32,
                lplpSurface: ?*?*IDirect3DSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AdviseNotify: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocator9,
                lpIVMRSurfAllocNotify: ?*IVMRSurfaceAllocatorNotify9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocator9,
                lpIVMRSurfAllocNotify: ?*IVMRSurfaceAllocatorNotify9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocator9_InitializeDevice(self: *const T, dwUserID: usize, lpAllocInfo: ?*VMR9AllocationInfo, lpNumBuffers: ?*u32) HRESULT {
                return @as(*const IVMRSurfaceAllocator9.VTable, @ptrCast(self.vtable)).InitializeDevice(@as(*const IVMRSurfaceAllocator9, @ptrCast(self)), dwUserID, lpAllocInfo, lpNumBuffers);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocator9_TerminateDevice(self: *const T, dwID: usize) HRESULT {
                return @as(*const IVMRSurfaceAllocator9.VTable, @ptrCast(self.vtable)).TerminateDevice(@as(*const IVMRSurfaceAllocator9, @ptrCast(self)), dwID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocator9_GetSurface(self: *const T, dwUserID: usize, SurfaceIndex: u32, SurfaceFlags: u32, lplpSurface: ?*?*IDirect3DSurface9) HRESULT {
                return @as(*const IVMRSurfaceAllocator9.VTable, @ptrCast(self.vtable)).GetSurface(@as(*const IVMRSurfaceAllocator9, @ptrCast(self)), dwUserID, SurfaceIndex, SurfaceFlags, lplpSurface);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocator9_AdviseNotify(self: *const T, lpIVMRSurfAllocNotify: ?*IVMRSurfaceAllocatorNotify9) HRESULT {
                return @as(*const IVMRSurfaceAllocator9.VTable, @ptrCast(self.vtable)).AdviseNotify(@as(*const IVMRSurfaceAllocator9, @ptrCast(self)), lpIVMRSurfAllocNotify);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRSurfaceAllocatorEx9_Value = Guid.initString("6de9a68a-a928-4522-bf57-655ae3866456");
pub const IID_IVMRSurfaceAllocatorEx9 = &IID_IVMRSurfaceAllocatorEx9_Value;
pub const IVMRSurfaceAllocatorEx9 = extern struct {
    pub const VTable = extern struct {
        base: IVMRSurfaceAllocator9.VTable,
        GetSurfaceEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorEx9,
                dwUserID: usize,
                SurfaceIndex: u32,
                SurfaceFlags: u32,
                lplpSurface: ?*?*IDirect3DSurface9,
                lprcDst: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorEx9,
                dwUserID: usize,
                SurfaceIndex: u32,
                SurfaceFlags: u32,
                lplpSurface: ?*?*IDirect3DSurface9,
                lprcDst: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IVMRSurfaceAllocator9.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorEx9_GetSurfaceEx(self: *const T, dwUserID: usize, SurfaceIndex: u32, SurfaceFlags: u32, lplpSurface: ?*?*IDirect3DSurface9, lprcDst: ?*RECT) HRESULT {
                return @as(*const IVMRSurfaceAllocatorEx9.VTable, @ptrCast(self.vtable)).GetSurfaceEx(@as(*const IVMRSurfaceAllocatorEx9, @ptrCast(self)), dwUserID, SurfaceIndex, SurfaceFlags, lplpSurface, lprcDst);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRSurfaceAllocatorNotify9_Value = Guid.initString("dca3f5df-bb3a-4d03-bd81-84614bfbfa0c");
pub const IID_IVMRSurfaceAllocatorNotify9 = &IID_IVMRSurfaceAllocatorNotify9_Value;
pub const IVMRSurfaceAllocatorNotify9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AdviseSurfaceAllocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                dwUserID: usize,
                lpIVRMSurfaceAllocator: ?*IVMRSurfaceAllocator9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                dwUserID: usize,
                lpIVRMSurfaceAllocator: ?*IVMRSurfaceAllocator9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetD3DDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                lpD3DDevice: ?*IDirect3DDevice9,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                lpD3DDevice: ?*IDirect3DDevice9,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChangeD3DDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                lpD3DDevice: ?*IDirect3DDevice9,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                lpD3DDevice: ?*IDirect3DDevice9,
                hMonitor: ?HMONITOR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AllocateSurfaceHelper: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                lpAllocInfo: ?*VMR9AllocationInfo,
                lpNumBuffers: ?*u32,
                lplpSurface: ?*?*IDirect3DSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                lpAllocInfo: ?*VMR9AllocationInfo,
                lpNumBuffers: ?*u32,
                lplpSurface: ?*?*IDirect3DSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NotifyEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                EventCode: i32,
                Param1: isize,
                Param2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurfaceAllocatorNotify9,
                EventCode: i32,
                Param1: isize,
                Param2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify9_AdviseSurfaceAllocator(self: *const T, dwUserID: usize, lpIVRMSurfaceAllocator: ?*IVMRSurfaceAllocator9) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify9.VTable, @ptrCast(self.vtable)).AdviseSurfaceAllocator(@as(*const IVMRSurfaceAllocatorNotify9, @ptrCast(self)), dwUserID, lpIVRMSurfaceAllocator);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify9_SetD3DDevice(self: *const T, lpD3DDevice: ?*IDirect3DDevice9, hMonitor: ?HMONITOR) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify9.VTable, @ptrCast(self.vtable)).SetD3DDevice(@as(*const IVMRSurfaceAllocatorNotify9, @ptrCast(self)), lpD3DDevice, hMonitor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify9_ChangeD3DDevice(self: *const T, lpD3DDevice: ?*IDirect3DDevice9, hMonitor: ?HMONITOR) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify9.VTable, @ptrCast(self.vtable)).ChangeD3DDevice(@as(*const IVMRSurfaceAllocatorNotify9, @ptrCast(self)), lpD3DDevice, hMonitor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify9_AllocateSurfaceHelper(self: *const T, lpAllocInfo: ?*VMR9AllocationInfo, lpNumBuffers: ?*u32, lplpSurface: ?*?*IDirect3DSurface9) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify9.VTable, @ptrCast(self.vtable)).AllocateSurfaceHelper(@as(*const IVMRSurfaceAllocatorNotify9, @ptrCast(self)), lpAllocInfo, lpNumBuffers, lplpSurface);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurfaceAllocatorNotify9_NotifyEvent(self: *const T, EventCode: i32, Param1: isize, Param2: isize) HRESULT {
                return @as(*const IVMRSurfaceAllocatorNotify9.VTable, @ptrCast(self.vtable)).NotifyEvent(@as(*const IVMRSurfaceAllocatorNotify9, @ptrCast(self)), EventCode, Param1, Param2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9AspectRatioMode = enum(i32) {
    None = 0,
    LetterBox = 1,
};
pub const VMR9ARMode_None = VMR9AspectRatioMode.None;
pub const VMR9ARMode_LetterBox = VMR9AspectRatioMode.LetterBox;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRWindowlessControl9_Value = Guid.initString("8f537d09-f85e-4414-b23b-502e54c79927");
pub const IID_IVMRWindowlessControl9 = &IID_IVMRWindowlessControl9_Value;
pub const IVMRWindowlessControl9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetNativeVideoSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
                lpARWidth: ?*i32,
                lpARHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
                lpARWidth: ?*i32,
                lpARHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMinIdealVideoSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMaxIdealVideoSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                lpWidth: ?*i32,
                lpHeight: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetVideoPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                lpSRCRect: ?*const RECT,
                lpDSTRect: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                lpSRCRect: ?*const RECT,
                lpDSTRect: ?*const RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVideoPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                lpSRCRect: ?*RECT,
                lpDSTRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                lpSRCRect: ?*RECT,
                lpDSTRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                lpAspectRatioMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                lpAspectRatioMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                AspectRatioMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                AspectRatioMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetVideoClippingWindow: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                hwnd: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RepaintVideo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                hwnd: ?HWND,
                hdc: ?HDC,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                hwnd: ?HWND,
                hdc: ?HDC,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DisplayModeChanged: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentImage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                lpDib: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                lpDib: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBorderColor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                Clr: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                Clr: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBorderColor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRWindowlessControl9,
                lpClr: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRWindowlessControl9,
                lpClr: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_GetNativeVideoSize(self: *const T, lpWidth: ?*i32, lpHeight: ?*i32, lpARWidth: ?*i32, lpARHeight: ?*i32) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).GetNativeVideoSize(@as(*const IVMRWindowlessControl9, @ptrCast(self)), lpWidth, lpHeight, lpARWidth, lpARHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_GetMinIdealVideoSize(self: *const T, lpWidth: ?*i32, lpHeight: ?*i32) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).GetMinIdealVideoSize(@as(*const IVMRWindowlessControl9, @ptrCast(self)), lpWidth, lpHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_GetMaxIdealVideoSize(self: *const T, lpWidth: ?*i32, lpHeight: ?*i32) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).GetMaxIdealVideoSize(@as(*const IVMRWindowlessControl9, @ptrCast(self)), lpWidth, lpHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_SetVideoPosition(self: *const T, lpSRCRect: ?*const RECT, lpDSTRect: ?*const RECT) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).SetVideoPosition(@as(*const IVMRWindowlessControl9, @ptrCast(self)), lpSRCRect, lpDSTRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_GetVideoPosition(self: *const T, lpSRCRect: ?*RECT, lpDSTRect: ?*RECT) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).GetVideoPosition(@as(*const IVMRWindowlessControl9, @ptrCast(self)), lpSRCRect, lpDSTRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_GetAspectRatioMode(self: *const T, lpAspectRatioMode: ?*u32) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).GetAspectRatioMode(@as(*const IVMRWindowlessControl9, @ptrCast(self)), lpAspectRatioMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_SetAspectRatioMode(self: *const T, AspectRatioMode: u32) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).SetAspectRatioMode(@as(*const IVMRWindowlessControl9, @ptrCast(self)), AspectRatioMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_SetVideoClippingWindow(self: *const T, hwnd: ?HWND) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).SetVideoClippingWindow(@as(*const IVMRWindowlessControl9, @ptrCast(self)), hwnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_RepaintVideo(self: *const T, hwnd: ?HWND, hdc: ?HDC) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).RepaintVideo(@as(*const IVMRWindowlessControl9, @ptrCast(self)), hwnd, hdc);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_DisplayModeChanged(self: *const T) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).DisplayModeChanged(@as(*const IVMRWindowlessControl9, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_GetCurrentImage(self: *const T, lpDib: ?*?*u8) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).GetCurrentImage(@as(*const IVMRWindowlessControl9, @ptrCast(self)), lpDib);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_SetBorderColor(self: *const T, Clr: u32) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).SetBorderColor(@as(*const IVMRWindowlessControl9, @ptrCast(self)), Clr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRWindowlessControl9_GetBorderColor(self: *const T, lpClr: ?*u32) HRESULT {
                return @as(*const IVMRWindowlessControl9.VTable, @ptrCast(self.vtable)).GetBorderColor(@as(*const IVMRWindowlessControl9, @ptrCast(self)), lpClr);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9MixerPrefs = enum(i32) {
    NoDecimation = 1,
    DecimateOutput = 2,
    ARAdjustXorY = 4,
    NonSquareMixing = 8,
    DecimateMask = 15,
    BiLinearFiltering = 16,
    PointFiltering = 32,
    AnisotropicFiltering = 64,
    PyramidalQuadFiltering = 128,
    GaussianQuadFiltering = 256,
    FilteringReserved = 3584,
    FilteringMask = 4080,
    RenderTargetRGB = 4096,
    RenderTargetYUV = 8192,
    RenderTargetReserved = 1032192,
    RenderTargetMask = 1044480,
    DynamicSwitchToBOB = 1048576,
    DynamicDecimateBy2 = 2097152,
    DynamicReserved = 12582912,
    DynamicMask = 15728640,
};
pub const MixerPref9_NoDecimation = VMR9MixerPrefs.NoDecimation;
pub const MixerPref9_DecimateOutput = VMR9MixerPrefs.DecimateOutput;
pub const MixerPref9_ARAdjustXorY = VMR9MixerPrefs.ARAdjustXorY;
pub const MixerPref9_NonSquareMixing = VMR9MixerPrefs.NonSquareMixing;
pub const MixerPref9_DecimateMask = VMR9MixerPrefs.DecimateMask;
pub const MixerPref9_BiLinearFiltering = VMR9MixerPrefs.BiLinearFiltering;
pub const MixerPref9_PointFiltering = VMR9MixerPrefs.PointFiltering;
pub const MixerPref9_AnisotropicFiltering = VMR9MixerPrefs.AnisotropicFiltering;
pub const MixerPref9_PyramidalQuadFiltering = VMR9MixerPrefs.PyramidalQuadFiltering;
pub const MixerPref9_GaussianQuadFiltering = VMR9MixerPrefs.GaussianQuadFiltering;
pub const MixerPref9_FilteringReserved = VMR9MixerPrefs.FilteringReserved;
pub const MixerPref9_FilteringMask = VMR9MixerPrefs.FilteringMask;
pub const MixerPref9_RenderTargetRGB = VMR9MixerPrefs.RenderTargetRGB;
pub const MixerPref9_RenderTargetYUV = VMR9MixerPrefs.RenderTargetYUV;
pub const MixerPref9_RenderTargetReserved = VMR9MixerPrefs.RenderTargetReserved;
pub const MixerPref9_RenderTargetMask = VMR9MixerPrefs.RenderTargetMask;
pub const MixerPref9_DynamicSwitchToBOB = VMR9MixerPrefs.DynamicSwitchToBOB;
pub const MixerPref9_DynamicDecimateBy2 = VMR9MixerPrefs.DynamicDecimateBy2;
pub const MixerPref9_DynamicReserved = VMR9MixerPrefs.DynamicReserved;
pub const MixerPref9_DynamicMask = VMR9MixerPrefs.DynamicMask;

pub const VMR9NormalizedRect = extern struct {
    left: f32,
    top: f32,
    right: f32,
    bottom: f32,
};

pub const VMR9ProcAmpControlFlags = enum(i32) {
    Brightness = 1,
    Contrast = 2,
    Hue = 4,
    Saturation = 8,
    Mask = 15,
};
pub const ProcAmpControl9_Brightness = VMR9ProcAmpControlFlags.Brightness;
pub const ProcAmpControl9_Contrast = VMR9ProcAmpControlFlags.Contrast;
pub const ProcAmpControl9_Hue = VMR9ProcAmpControlFlags.Hue;
pub const ProcAmpControl9_Saturation = VMR9ProcAmpControlFlags.Saturation;
pub const ProcAmpControl9_Mask = VMR9ProcAmpControlFlags.Mask;

pub const VMR9ProcAmpControl = extern struct {
    dwSize: u32,
    dwFlags: u32,
    Brightness: f32,
    Contrast: f32,
    Hue: f32,
    Saturation: f32,
};

pub const VMR9ProcAmpControlRange = extern struct {
    dwSize: u32,
    dwProperty: VMR9ProcAmpControlFlags,
    MinValue: f32,
    MaxValue: f32,
    DefaultValue: f32,
    StepSize: f32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRMixerControl9_Value = Guid.initString("1a777eaa-47c8-4930-b2c9-8fee1c1b0f3b");
pub const IID_IVMRMixerControl9 = &IID_IVMRMixerControl9_Value;
pub const IVMRMixerControl9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetAlpha: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                Alpha: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                Alpha: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAlpha: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                pAlpha: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                pAlpha: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetZOrder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                dwZ: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                dwZ: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetZOrder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                pZ: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                pZ: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOutputRect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                pRect: ?*const VMR9NormalizedRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                pRect: ?*const VMR9NormalizedRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOutputRect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                pRect: ?*VMR9NormalizedRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                pRect: ?*VMR9NormalizedRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBackgroundClr: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                ClrBkg: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                ClrBkg: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBackgroundClr: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                lpClrBkg: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                lpClrBkg: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMixingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwMixerPrefs: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwMixerPrefs: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMixingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                pdwMixerPrefs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                pdwMixerPrefs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetProcAmpControl: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                lpClrControl: ?*VMR9ProcAmpControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                lpClrControl: ?*VMR9ProcAmpControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProcAmpControl: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                lpClrControl: ?*VMR9ProcAmpControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                lpClrControl: ?*VMR9ProcAmpControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProcAmpControlRange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                lpClrControl: ?*VMR9ProcAmpControlRange,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerControl9,
                dwStreamID: u32,
                lpClrControl: ?*VMR9ProcAmpControlRange,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_SetAlpha(self: *const T, dwStreamID: u32, Alpha: f32) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).SetAlpha(@as(*const IVMRMixerControl9, @ptrCast(self)), dwStreamID, Alpha);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_GetAlpha(self: *const T, dwStreamID: u32, pAlpha: ?*f32) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).GetAlpha(@as(*const IVMRMixerControl9, @ptrCast(self)), dwStreamID, pAlpha);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_SetZOrder(self: *const T, dwStreamID: u32, dwZ: u32) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).SetZOrder(@as(*const IVMRMixerControl9, @ptrCast(self)), dwStreamID, dwZ);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_GetZOrder(self: *const T, dwStreamID: u32, pZ: ?*u32) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).GetZOrder(@as(*const IVMRMixerControl9, @ptrCast(self)), dwStreamID, pZ);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_SetOutputRect(self: *const T, dwStreamID: u32, pRect: ?*const VMR9NormalizedRect) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).SetOutputRect(@as(*const IVMRMixerControl9, @ptrCast(self)), dwStreamID, pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_GetOutputRect(self: *const T, dwStreamID: u32, pRect: ?*VMR9NormalizedRect) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).GetOutputRect(@as(*const IVMRMixerControl9, @ptrCast(self)), dwStreamID, pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_SetBackgroundClr(self: *const T, ClrBkg: u32) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).SetBackgroundClr(@as(*const IVMRMixerControl9, @ptrCast(self)), ClrBkg);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_GetBackgroundClr(self: *const T, lpClrBkg: ?*u32) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).GetBackgroundClr(@as(*const IVMRMixerControl9, @ptrCast(self)), lpClrBkg);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_SetMixingPrefs(self: *const T, dwMixerPrefs: u32) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).SetMixingPrefs(@as(*const IVMRMixerControl9, @ptrCast(self)), dwMixerPrefs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_GetMixingPrefs(self: *const T, pdwMixerPrefs: ?*u32) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).GetMixingPrefs(@as(*const IVMRMixerControl9, @ptrCast(self)), pdwMixerPrefs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_SetProcAmpControl(self: *const T, dwStreamID: u32, lpClrControl: ?*VMR9ProcAmpControl) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).SetProcAmpControl(@as(*const IVMRMixerControl9, @ptrCast(self)), dwStreamID, lpClrControl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_GetProcAmpControl(self: *const T, dwStreamID: u32, lpClrControl: ?*VMR9ProcAmpControl) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).GetProcAmpControl(@as(*const IVMRMixerControl9, @ptrCast(self)), dwStreamID, lpClrControl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerControl9_GetProcAmpControlRange(self: *const T, dwStreamID: u32, lpClrControl: ?*VMR9ProcAmpControlRange) HRESULT {
                return @as(*const IVMRMixerControl9.VTable, @ptrCast(self.vtable)).GetProcAmpControlRange(@as(*const IVMRMixerControl9, @ptrCast(self)), dwStreamID, lpClrControl);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9AlphaBitmap = extern struct {
    dwFlags: u32,
    hdc: ?HDC,
    pDDS: ?*IDirect3DSurface9,
    rSrc: RECT,
    rDest: VMR9NormalizedRect,
    fAlpha: f32,
    clrSrcKey: u32,
    dwFilterMode: u32,
};

pub const VMR9AlphaBitmapFlags = enum(i32) {
    Disable = 1,
    hDC = 2,
    EntireDDS = 4,
    SrcColorKey = 8,
    SrcRect = 16,
    FilterMode = 32,
};
pub const VMR9AlphaBitmap_Disable = VMR9AlphaBitmapFlags.Disable;
pub const VMR9AlphaBitmap_hDC = VMR9AlphaBitmapFlags.hDC;
pub const VMR9AlphaBitmap_EntireDDS = VMR9AlphaBitmapFlags.EntireDDS;
pub const VMR9AlphaBitmap_SrcColorKey = VMR9AlphaBitmapFlags.SrcColorKey;
pub const VMR9AlphaBitmap_SrcRect = VMR9AlphaBitmapFlags.SrcRect;
pub const VMR9AlphaBitmap_FilterMode = VMR9AlphaBitmapFlags.FilterMode;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRMixerBitmap9_Value = Guid.initString("ced175e5-1935-4820-81bd-ff6ad00c9108");
pub const IID_IVMRMixerBitmap9 = &IID_IVMRMixerBitmap9_Value;
pub const IVMRMixerBitmap9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetAlphaBitmap: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerBitmap9,
                pBmpParms: ?*const VMR9AlphaBitmap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerBitmap9,
                pBmpParms: ?*const VMR9AlphaBitmap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UpdateAlphaBitmapParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerBitmap9,
                pBmpParms: ?*const VMR9AlphaBitmap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerBitmap9,
                pBmpParms: ?*const VMR9AlphaBitmap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAlphaBitmapParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMixerBitmap9,
                pBmpParms: ?*VMR9AlphaBitmap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMixerBitmap9,
                pBmpParms: ?*VMR9AlphaBitmap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerBitmap9_SetAlphaBitmap(self: *const T, pBmpParms: ?*const VMR9AlphaBitmap) HRESULT {
                return @as(*const IVMRMixerBitmap9.VTable, @ptrCast(self.vtable)).SetAlphaBitmap(@as(*const IVMRMixerBitmap9, @ptrCast(self)), pBmpParms);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerBitmap9_UpdateAlphaBitmapParameters(self: *const T, pBmpParms: ?*const VMR9AlphaBitmap) HRESULT {
                return @as(*const IVMRMixerBitmap9.VTable, @ptrCast(self.vtable)).UpdateAlphaBitmapParameters(@as(*const IVMRMixerBitmap9, @ptrCast(self)), pBmpParms);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMixerBitmap9_GetAlphaBitmapParameters(self: *const T, pBmpParms: ?*VMR9AlphaBitmap) HRESULT {
                return @as(*const IVMRMixerBitmap9.VTable, @ptrCast(self.vtable)).GetAlphaBitmapParameters(@as(*const IVMRMixerBitmap9, @ptrCast(self)), pBmpParms);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRSurface9_Value = Guid.initString("dfc581a1-6e1f-4c3a-8d0a-5e9792ea2afc");
pub const IID_IVMRSurface9 = &IID_IVMRSurface9_Value;
pub const IVMRSurface9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        IsSurfaceLocked: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        LockSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurface9,
                lpSurface: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurface9,
                lpSurface: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnlockSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRSurface9,
                lplpSurface: ?*?*IDirect3DSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRSurface9,
                lplpSurface: ?*?*IDirect3DSurface9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurface9_IsSurfaceLocked(self: *const T) HRESULT {
                return @as(*const IVMRSurface9.VTable, @ptrCast(self.vtable)).IsSurfaceLocked(@as(*const IVMRSurface9, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurface9_LockSurface(self: *const T, lpSurface: ?*?*u8) HRESULT {
                return @as(*const IVMRSurface9.VTable, @ptrCast(self.vtable)).LockSurface(@as(*const IVMRSurface9, @ptrCast(self)), lpSurface);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurface9_UnlockSurface(self: *const T) HRESULT {
                return @as(*const IVMRSurface9.VTable, @ptrCast(self.vtable)).UnlockSurface(@as(*const IVMRSurface9, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRSurface9_GetSurface(self: *const T, lplpSurface: ?*?*IDirect3DSurface9) HRESULT {
                return @as(*const IVMRSurface9.VTable, @ptrCast(self.vtable)).GetSurface(@as(*const IVMRSurface9, @ptrCast(self)), lplpSurface);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9RenderPrefs = enum(i32) {
    DoNotRenderBorder = 1,
    // Mask = 1, this enum value conflicts with DoNotRenderBorder
};
pub const RenderPrefs9_DoNotRenderBorder = VMR9RenderPrefs.DoNotRenderBorder;
pub const RenderPrefs9_Mask = VMR9RenderPrefs.DoNotRenderBorder;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRImagePresenterConfig9_Value = Guid.initString("45c15cab-6e22-420a-8043-ae1f0ac02c7d");
pub const IID_IVMRImagePresenterConfig9 = &IID_IVMRImagePresenterConfig9_Value;
pub const IVMRImagePresenterConfig9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetRenderingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenterConfig9,
                dwRenderFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenterConfig9,
                dwRenderFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRenderingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImagePresenterConfig9,
                dwRenderFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImagePresenterConfig9,
                dwRenderFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenterConfig9_SetRenderingPrefs(self: *const T, dwRenderFlags: u32) HRESULT {
                return @as(*const IVMRImagePresenterConfig9.VTable, @ptrCast(self.vtable)).SetRenderingPrefs(@as(*const IVMRImagePresenterConfig9, @ptrCast(self)), dwRenderFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImagePresenterConfig9_GetRenderingPrefs(self: *const T, dwRenderFlags: ?*u32) HRESULT {
                return @as(*const IVMRImagePresenterConfig9.VTable, @ptrCast(self.vtable)).GetRenderingPrefs(@as(*const IVMRImagePresenterConfig9, @ptrCast(self)), dwRenderFlags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRVideoStreamControl9_Value = Guid.initString("d0cfe38b-93e7-4772-8957-0400c49a4485");
pub const IID_IVMRVideoStreamControl9 = &IID_IVMRVideoStreamControl9_Value;
pub const IVMRVideoStreamControl9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetStreamActiveState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRVideoStreamControl9,
                fActive: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRVideoStreamControl9,
                fActive: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamActiveState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRVideoStreamControl9,
                lpfActive: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRVideoStreamControl9,
                lpfActive: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRVideoStreamControl9_SetStreamActiveState(self: *const T, fActive: BOOL) HRESULT {
                return @as(*const IVMRVideoStreamControl9.VTable, @ptrCast(self.vtable)).SetStreamActiveState(@as(*const IVMRVideoStreamControl9, @ptrCast(self)), fActive);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRVideoStreamControl9_GetStreamActiveState(self: *const T, lpfActive: ?*BOOL) HRESULT {
                return @as(*const IVMRVideoStreamControl9.VTable, @ptrCast(self.vtable)).GetStreamActiveState(@as(*const IVMRVideoStreamControl9, @ptrCast(self)), lpfActive);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9Mode = enum(i32) {
    Windowed = 1,
    Windowless = 2,
    Renderless = 4,
    Mask = 7,
};
pub const VMR9Mode_Windowed = VMR9Mode.Windowed;
pub const VMR9Mode_Windowless = VMR9Mode.Windowless;
pub const VMR9Mode_Renderless = VMR9Mode.Renderless;
pub const VMR9Mode_Mask = VMR9Mode.Mask;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRFilterConfig9_Value = Guid.initString("5a804648-4f66-4867-9c43-4f5c822cf1b8");
pub const IID_IVMRFilterConfig9 = &IID_IVMRFilterConfig9_Value;
pub const IVMRFilterConfig9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetImageCompositor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig9,
                lpVMRImgCompositor: ?*IVMRImageCompositor9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig9,
                lpVMRImgCompositor: ?*IVMRImageCompositor9,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetNumberOfStreams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig9,
                dwMaxStreams: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig9,
                dwMaxStreams: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumberOfStreams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig9,
                pdwMaxStreams: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig9,
                pdwMaxStreams: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRenderingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig9,
                dwRenderFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig9,
                dwRenderFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRenderingPrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig9,
                pdwRenderFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig9,
                pdwRenderFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRenderingMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig9,
                Mode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig9,
                Mode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRenderingMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRFilterConfig9,
                pMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRFilterConfig9,
                pMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig9_SetImageCompositor(self: *const T, lpVMRImgCompositor: ?*IVMRImageCompositor9) HRESULT {
                return @as(*const IVMRFilterConfig9.VTable, @ptrCast(self.vtable)).SetImageCompositor(@as(*const IVMRFilterConfig9, @ptrCast(self)), lpVMRImgCompositor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig9_SetNumberOfStreams(self: *const T, dwMaxStreams: u32) HRESULT {
                return @as(*const IVMRFilterConfig9.VTable, @ptrCast(self.vtable)).SetNumberOfStreams(@as(*const IVMRFilterConfig9, @ptrCast(self)), dwMaxStreams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig9_GetNumberOfStreams(self: *const T, pdwMaxStreams: ?*u32) HRESULT {
                return @as(*const IVMRFilterConfig9.VTable, @ptrCast(self.vtable)).GetNumberOfStreams(@as(*const IVMRFilterConfig9, @ptrCast(self)), pdwMaxStreams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig9_SetRenderingPrefs(self: *const T, dwRenderFlags: u32) HRESULT {
                return @as(*const IVMRFilterConfig9.VTable, @ptrCast(self.vtable)).SetRenderingPrefs(@as(*const IVMRFilterConfig9, @ptrCast(self)), dwRenderFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig9_GetRenderingPrefs(self: *const T, pdwRenderFlags: ?*u32) HRESULT {
                return @as(*const IVMRFilterConfig9.VTable, @ptrCast(self.vtable)).GetRenderingPrefs(@as(*const IVMRFilterConfig9, @ptrCast(self)), pdwRenderFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig9_SetRenderingMode(self: *const T, Mode: u32) HRESULT {
                return @as(*const IVMRFilterConfig9.VTable, @ptrCast(self.vtable)).SetRenderingMode(@as(*const IVMRFilterConfig9, @ptrCast(self)), Mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRFilterConfig9_GetRenderingMode(self: *const T, pMode: ?*u32) HRESULT {
                return @as(*const IVMRFilterConfig9.VTable, @ptrCast(self.vtable)).GetRenderingMode(@as(*const IVMRFilterConfig9, @ptrCast(self)), pMode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRAspectRatioControl9_Value = Guid.initString("00d96c29-bbde-4efc-9901-bb5036392146");
pub const IID_IVMRAspectRatioControl9 = &IID_IVMRAspectRatioControl9_Value;
pub const IVMRAspectRatioControl9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRAspectRatioControl9,
                lpdwARMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRAspectRatioControl9,
                lpdwARMode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetAspectRatioMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRAspectRatioControl9,
                dwARMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRAspectRatioControl9,
                dwARMode: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRAspectRatioControl9_GetAspectRatioMode(self: *const T, lpdwARMode: ?*u32) HRESULT {
                return @as(*const IVMRAspectRatioControl9.VTable, @ptrCast(self.vtable)).GetAspectRatioMode(@as(*const IVMRAspectRatioControl9, @ptrCast(self)), lpdwARMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRAspectRatioControl9_SetAspectRatioMode(self: *const T, dwARMode: u32) HRESULT {
                return @as(*const IVMRAspectRatioControl9.VTable, @ptrCast(self.vtable)).SetAspectRatioMode(@as(*const IVMRAspectRatioControl9, @ptrCast(self)), dwARMode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9MonitorInfo = extern struct {
    uDevID: u32,
    rcMonitor: RECT,
    hMon: ?HMONITOR,
    dwFlags: u32,
    szDevice: [32]u16,
    szDescription: [512]u16,
    liDriverVersion: LARGE_INTEGER,
    dwVendorId: u32,
    dwDeviceId: u32,
    dwSubSysId: u32,
    dwRevision: u32,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRMonitorConfig9_Value = Guid.initString("46c2e457-8ba0-4eef-b80b-0680f0978749");
pub const IID_IVMRMonitorConfig9 = &IID_IVMRMonitorConfig9_Value;
pub const IVMRMonitorConfig9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig9,
                uDev: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig9,
                uDev: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig9,
                puDev: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig9,
                puDev: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDefaultMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig9,
                uDev: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig9,
                uDev: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDefaultMonitor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig9,
                puDev: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig9,
                puDev: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAvailableMonitors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRMonitorConfig9,
                pInfo: [*]VMR9MonitorInfo,
                dwMaxInfoArraySize: u32,
                pdwNumDevices: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRMonitorConfig9,
                pInfo: [*]VMR9MonitorInfo,
                dwMaxInfoArraySize: u32,
                pdwNumDevices: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig9_SetMonitor(self: *const T, uDev: u32) HRESULT {
                return @as(*const IVMRMonitorConfig9.VTable, @ptrCast(self.vtable)).SetMonitor(@as(*const IVMRMonitorConfig9, @ptrCast(self)), uDev);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig9_GetMonitor(self: *const T, puDev: ?*u32) HRESULT {
                return @as(*const IVMRMonitorConfig9.VTable, @ptrCast(self.vtable)).GetMonitor(@as(*const IVMRMonitorConfig9, @ptrCast(self)), puDev);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig9_SetDefaultMonitor(self: *const T, uDev: u32) HRESULT {
                return @as(*const IVMRMonitorConfig9.VTable, @ptrCast(self.vtable)).SetDefaultMonitor(@as(*const IVMRMonitorConfig9, @ptrCast(self)), uDev);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig9_GetDefaultMonitor(self: *const T, puDev: ?*u32) HRESULT {
                return @as(*const IVMRMonitorConfig9.VTable, @ptrCast(self.vtable)).GetDefaultMonitor(@as(*const IVMRMonitorConfig9, @ptrCast(self)), puDev);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRMonitorConfig9_GetAvailableMonitors(self: *const T, pInfo: [*]VMR9MonitorInfo, dwMaxInfoArraySize: u32, pdwNumDevices: ?*u32) HRESULT {
                return @as(*const IVMRMonitorConfig9.VTable, @ptrCast(self.vtable)).GetAvailableMonitors(@as(*const IVMRMonitorConfig9, @ptrCast(self)), pInfo, dwMaxInfoArraySize, pdwNumDevices);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9DeinterlacePrefs = enum(i32) {
    NextBest = 1,
    BOB = 2,
    Weave = 4,
    Mask = 7,
};
pub const DeinterlacePref9_NextBest = VMR9DeinterlacePrefs.NextBest;
pub const DeinterlacePref9_BOB = VMR9DeinterlacePrefs.BOB;
pub const DeinterlacePref9_Weave = VMR9DeinterlacePrefs.Weave;
pub const DeinterlacePref9_Mask = VMR9DeinterlacePrefs.Mask;

pub const VMR9DeinterlaceTech = enum(i32) {
    Unknown = 0,
    BOBLineReplicate = 1,
    BOBVerticalStretch = 2,
    MedianFiltering = 4,
    EdgeFiltering = 16,
    FieldAdaptive = 32,
    PixelAdaptive = 64,
    MotionVectorSteered = 128,
};
pub const DeinterlaceTech9_Unknown = VMR9DeinterlaceTech.Unknown;
pub const DeinterlaceTech9_BOBLineReplicate = VMR9DeinterlaceTech.BOBLineReplicate;
pub const DeinterlaceTech9_BOBVerticalStretch = VMR9DeinterlaceTech.BOBVerticalStretch;
pub const DeinterlaceTech9_MedianFiltering = VMR9DeinterlaceTech.MedianFiltering;
pub const DeinterlaceTech9_EdgeFiltering = VMR9DeinterlaceTech.EdgeFiltering;
pub const DeinterlaceTech9_FieldAdaptive = VMR9DeinterlaceTech.FieldAdaptive;
pub const DeinterlaceTech9_PixelAdaptive = VMR9DeinterlaceTech.PixelAdaptive;
pub const DeinterlaceTech9_MotionVectorSteered = VMR9DeinterlaceTech.MotionVectorSteered;

pub const VMR9Frequency = extern struct {
    dwNumerator: u32,
    dwDenominator: u32,
};

pub const VMR9_SampleFormat = enum(i32) {
    Reserved = 1,
    ProgressiveFrame = 2,
    FieldInterleavedEvenFirst = 3,
    FieldInterleavedOddFirst = 4,
    FieldSingleEven = 5,
    FieldSingleOdd = 6,
};
pub const VMR9_SampleReserved = VMR9_SampleFormat.Reserved;
pub const VMR9_SampleProgressiveFrame = VMR9_SampleFormat.ProgressiveFrame;
pub const VMR9_SampleFieldInterleavedEvenFirst = VMR9_SampleFormat.FieldInterleavedEvenFirst;
pub const VMR9_SampleFieldInterleavedOddFirst = VMR9_SampleFormat.FieldInterleavedOddFirst;
pub const VMR9_SampleFieldSingleEven = VMR9_SampleFormat.FieldSingleEven;
pub const VMR9_SampleFieldSingleOdd = VMR9_SampleFormat.FieldSingleOdd;

pub const VMR9VideoDesc = extern struct {
    dwSize: u32,
    dwSampleWidth: u32,
    dwSampleHeight: u32,
    SampleFormat: VMR9_SampleFormat,
    dwFourCC: u32,
    InputSampleFreq: VMR9Frequency,
    OutputFrameFreq: VMR9Frequency,
};

pub const VMR9DeinterlaceCaps = extern struct {
    dwSize: u32,
    dwNumPreviousOutputFrames: u32,
    dwNumForwardRefSamples: u32,
    dwNumBackwardRefSamples: u32,
    DeinterlaceTechnology: VMR9DeinterlaceTech,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRDeinterlaceControl9_Value = Guid.initString("a215fb8d-13c2-4f7f-993c-003d6271a459");
pub const IID_IVMRDeinterlaceControl9 = &IID_IVMRDeinterlaceControl9_Value;
pub const IVMRDeinterlaceControl9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetNumberOfDeinterlaceModes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl9,
                lpVideoDescription: ?*VMR9VideoDesc,
                lpdwNumDeinterlaceModes: ?*u32,
                lpDeinterlaceModes: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl9,
                lpVideoDescription: ?*VMR9VideoDesc,
                lpdwNumDeinterlaceModes: ?*u32,
                lpDeinterlaceModes: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeinterlaceModeCaps: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl9,
                lpDeinterlaceMode: ?*Guid,
                lpVideoDescription: ?*VMR9VideoDesc,
                lpDeinterlaceCaps: ?*VMR9DeinterlaceCaps,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl9,
                lpDeinterlaceMode: ?*Guid,
                lpVideoDescription: ?*VMR9VideoDesc,
                lpDeinterlaceCaps: ?*VMR9DeinterlaceCaps,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeinterlaceMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl9,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl9,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDeinterlaceMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl9,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl9,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeinterlacePrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl9,
                lpdwDeinterlacePrefs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl9,
                lpdwDeinterlacePrefs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDeinterlacePrefs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl9,
                dwDeinterlacePrefs: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl9,
                dwDeinterlacePrefs: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetActualDeinterlaceMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRDeinterlaceControl9,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRDeinterlaceControl9,
                dwStreamID: u32,
                lpDeinterlaceMode: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl9_GetNumberOfDeinterlaceModes(self: *const T, lpVideoDescription: ?*VMR9VideoDesc, lpdwNumDeinterlaceModes: ?*u32, lpDeinterlaceModes: ?*Guid) HRESULT {
                return @as(*const IVMRDeinterlaceControl9.VTable, @ptrCast(self.vtable)).GetNumberOfDeinterlaceModes(@as(*const IVMRDeinterlaceControl9, @ptrCast(self)), lpVideoDescription, lpdwNumDeinterlaceModes, lpDeinterlaceModes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl9_GetDeinterlaceModeCaps(self: *const T, lpDeinterlaceMode: ?*Guid, lpVideoDescription: ?*VMR9VideoDesc, lpDeinterlaceCaps: ?*VMR9DeinterlaceCaps) HRESULT {
                return @as(*const IVMRDeinterlaceControl9.VTable, @ptrCast(self.vtable)).GetDeinterlaceModeCaps(@as(*const IVMRDeinterlaceControl9, @ptrCast(self)), lpDeinterlaceMode, lpVideoDescription, lpDeinterlaceCaps);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl9_GetDeinterlaceMode(self: *const T, dwStreamID: u32, lpDeinterlaceMode: ?*Guid) HRESULT {
                return @as(*const IVMRDeinterlaceControl9.VTable, @ptrCast(self.vtable)).GetDeinterlaceMode(@as(*const IVMRDeinterlaceControl9, @ptrCast(self)), dwStreamID, lpDeinterlaceMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl9_SetDeinterlaceMode(self: *const T, dwStreamID: u32, lpDeinterlaceMode: ?*Guid) HRESULT {
                return @as(*const IVMRDeinterlaceControl9.VTable, @ptrCast(self.vtable)).SetDeinterlaceMode(@as(*const IVMRDeinterlaceControl9, @ptrCast(self)), dwStreamID, lpDeinterlaceMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl9_GetDeinterlacePrefs(self: *const T, lpdwDeinterlacePrefs: ?*u32) HRESULT {
                return @as(*const IVMRDeinterlaceControl9.VTable, @ptrCast(self.vtable)).GetDeinterlacePrefs(@as(*const IVMRDeinterlaceControl9, @ptrCast(self)), lpdwDeinterlacePrefs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl9_SetDeinterlacePrefs(self: *const T, dwDeinterlacePrefs: u32) HRESULT {
                return @as(*const IVMRDeinterlaceControl9.VTable, @ptrCast(self.vtable)).SetDeinterlacePrefs(@as(*const IVMRDeinterlaceControl9, @ptrCast(self)), dwDeinterlacePrefs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRDeinterlaceControl9_GetActualDeinterlaceMode(self: *const T, dwStreamID: u32, lpDeinterlaceMode: ?*Guid) HRESULT {
                return @as(*const IVMRDeinterlaceControl9.VTable, @ptrCast(self.vtable)).GetActualDeinterlaceMode(@as(*const IVMRDeinterlaceControl9, @ptrCast(self)), dwStreamID, lpDeinterlaceMode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VMR9VideoStreamInfo = extern struct {
    pddsVideoSurface: ?*IDirect3DSurface9,
    dwWidth: u32,
    dwHeight: u32,
    dwStrmID: u32,
    fAlpha: f32,
    rNormal: VMR9NormalizedRect,
    rtStart: i64,
    rtEnd: i64,
    SampleFormat: VMR9_SampleFormat,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IVMRImageCompositor9_Value = Guid.initString("4a5c89eb-df51-4654-ac2a-e48e02bbabf6");
pub const IID_IVMRImageCompositor9 = &IID_IVMRImageCompositor9_Value;
pub const IVMRImageCompositor9 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        InitCompositionDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImageCompositor9,
                pD3DDevice: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImageCompositor9,
                pD3DDevice: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TermCompositionDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImageCompositor9,
                pD3DDevice: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImageCompositor9,
                pD3DDevice: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetStreamMediaType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImageCompositor9,
                dwStrmID: u32,
                pmt: ?*AM_MEDIA_TYPE,
                fTexture: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImageCompositor9,
                dwStrmID: u32,
                pmt: ?*AM_MEDIA_TYPE,
                fTexture: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CompositeImage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVMRImageCompositor9,
                pD3DDevice: ?*IUnknown,
                pddsRenderTarget: ?*IDirect3DSurface9,
                pmtRenderTarget: ?*AM_MEDIA_TYPE,
                rtStart: i64,
                rtEnd: i64,
                dwClrBkGnd: u32,
                pVideoStreamInfo: ?*VMR9VideoStreamInfo,
                cStreams: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVMRImageCompositor9,
                pD3DDevice: ?*IUnknown,
                pddsRenderTarget: ?*IDirect3DSurface9,
                pmtRenderTarget: ?*AM_MEDIA_TYPE,
                rtStart: i64,
                rtEnd: i64,
                dwClrBkGnd: u32,
                pVideoStreamInfo: ?*VMR9VideoStreamInfo,
                cStreams: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImageCompositor9_InitCompositionDevice(self: *const T, pD3DDevice: ?*IUnknown) HRESULT {
                return @as(*const IVMRImageCompositor9.VTable, @ptrCast(self.vtable)).InitCompositionDevice(@as(*const IVMRImageCompositor9, @ptrCast(self)), pD3DDevice);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImageCompositor9_TermCompositionDevice(self: *const T, pD3DDevice: ?*IUnknown) HRESULT {
                return @as(*const IVMRImageCompositor9.VTable, @ptrCast(self.vtable)).TermCompositionDevice(@as(*const IVMRImageCompositor9, @ptrCast(self)), pD3DDevice);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImageCompositor9_SetStreamMediaType(self: *const T, dwStrmID: u32, pmt: ?*AM_MEDIA_TYPE, fTexture: BOOL) HRESULT {
                return @as(*const IVMRImageCompositor9.VTable, @ptrCast(self.vtable)).SetStreamMediaType(@as(*const IVMRImageCompositor9, @ptrCast(self)), dwStrmID, pmt, fTexture);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVMRImageCompositor9_CompositeImage(self: *const T, pD3DDevice: ?*IUnknown, pddsRenderTarget: ?*IDirect3DSurface9, pmtRenderTarget: ?*AM_MEDIA_TYPE, rtStart: i64, rtEnd: i64, dwClrBkGnd: u32, pVideoStreamInfo: ?*VMR9VideoStreamInfo, cStreams: u32) HRESULT {
                return @as(*const IVMRImageCompositor9.VTable, @ptrCast(self.vtable)).CompositeImage(@as(*const IVMRImageCompositor9, @ptrCast(self)), pD3DDevice, pddsRenderTarget, pmtRenderTarget, rtStart, rtEnd, dwClrBkGnd, pVideoStreamInfo, cStreams);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IVPBaseConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetConnectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                pdwNumConnectInfo: ?*u32,
                pddVPConnectInfo: ?[*]DDVIDEOPORTCONNECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                pdwNumConnectInfo: ?*u32,
                pddVPConnectInfo: ?[*]DDVIDEOPORTCONNECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetConnectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                dwChosenEntry: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                dwChosenEntry: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVPDataInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                pamvpDataInfo: ?*AMVPDATAINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                pamvpDataInfo: ?*AMVPDATAINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMaxPixelRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                pamvpSize: ?*AMVPSIZE,
                pdwMaxPixelsPerSecond: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                pamvpSize: ?*AMVPSIZE,
                pdwMaxPixelsPerSecond: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        InformVPInputFormats: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                dwNumFormats: u32,
                pDDPixelFormats: ?*DDPIXELFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                dwNumFormats: u32,
                pDDPixelFormats: ?*DDPIXELFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVideoFormats: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                pdwNumFormats: ?*u32,
                pddPixelFormats: ?[*]DDPIXELFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                pdwNumFormats: ?*u32,
                pddPixelFormats: ?[*]DDPIXELFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetVideoFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                dwChosenEntry: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                dwChosenEntry: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetInvertPolarity: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOverlaySurface: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                ppddOverlaySurface: ?*?*IDirectDrawSurface,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                ppddOverlaySurface: ?*?*IDirectDrawSurface,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDirectDrawKernelHandle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                dwDDKernelHandle: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                dwDDKernelHandle: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetVideoPortID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                dwVideoPortID: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                dwVideoPortID: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDDSurfaceKernelHandles: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                cHandles: u32,
                rgDDKernelHandles: ?*usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                cHandles: u32,
                rgDDKernelHandles: ?*usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSurfaceParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseConfig,
                dwPitch: u32,
                dwXOrigin: u32,
                dwYOrigin: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseConfig,
                dwPitch: u32,
                dwXOrigin: u32,
                dwYOrigin: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_GetConnectInfo(self: *const T, pdwNumConnectInfo: ?*u32, pddVPConnectInfo: ?[*]DDVIDEOPORTCONNECT) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).GetConnectInfo(@as(*const IVPBaseConfig, @ptrCast(self)), pdwNumConnectInfo, pddVPConnectInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_SetConnectInfo(self: *const T, dwChosenEntry: u32) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).SetConnectInfo(@as(*const IVPBaseConfig, @ptrCast(self)), dwChosenEntry);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_GetVPDataInfo(self: *const T, pamvpDataInfo: ?*AMVPDATAINFO) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).GetVPDataInfo(@as(*const IVPBaseConfig, @ptrCast(self)), pamvpDataInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_GetMaxPixelRate(self: *const T, pamvpSize: ?*AMVPSIZE, pdwMaxPixelsPerSecond: ?*u32) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).GetMaxPixelRate(@as(*const IVPBaseConfig, @ptrCast(self)), pamvpSize, pdwMaxPixelsPerSecond);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_InformVPInputFormats(self: *const T, dwNumFormats: u32, pDDPixelFormats: ?*DDPIXELFORMAT) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).InformVPInputFormats(@as(*const IVPBaseConfig, @ptrCast(self)), dwNumFormats, pDDPixelFormats);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_GetVideoFormats(self: *const T, pdwNumFormats: ?*u32, pddPixelFormats: ?[*]DDPIXELFORMAT) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).GetVideoFormats(@as(*const IVPBaseConfig, @ptrCast(self)), pdwNumFormats, pddPixelFormats);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_SetVideoFormat(self: *const T, dwChosenEntry: u32) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).SetVideoFormat(@as(*const IVPBaseConfig, @ptrCast(self)), dwChosenEntry);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_SetInvertPolarity(self: *const T) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).SetInvertPolarity(@as(*const IVPBaseConfig, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_GetOverlaySurface(self: *const T, ppddOverlaySurface: ?*?*IDirectDrawSurface) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).GetOverlaySurface(@as(*const IVPBaseConfig, @ptrCast(self)), ppddOverlaySurface);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_SetDirectDrawKernelHandle(self: *const T, dwDDKernelHandle: usize) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).SetDirectDrawKernelHandle(@as(*const IVPBaseConfig, @ptrCast(self)), dwDDKernelHandle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_SetVideoPortID(self: *const T, dwVideoPortID: u32) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).SetVideoPortID(@as(*const IVPBaseConfig, @ptrCast(self)), dwVideoPortID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_SetDDSurfaceKernelHandles(self: *const T, cHandles: u32, rgDDKernelHandles: ?*usize) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).SetDDSurfaceKernelHandles(@as(*const IVPBaseConfig, @ptrCast(self)), cHandles, rgDDKernelHandles);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseConfig_SetSurfaceParameters(self: *const T, dwPitch: u32, dwXOrigin: u32, dwYOrigin: u32) HRESULT {
                return @as(*const IVPBaseConfig.VTable, @ptrCast(self.vtable)).SetSurfaceParameters(@as(*const IVPBaseConfig, @ptrCast(self)), dwPitch, dwXOrigin, dwYOrigin);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IVPConfig = extern struct {
    pub const VTable = extern struct {
        base: IVPBaseConfig.VTable,
        IsVPDecimationAllowed: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPConfig,
                pbIsDecimationAllowed: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPConfig,
                pbIsDecimationAllowed: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetScalingFactors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPConfig,
                pamvpSize: ?*AMVPSIZE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPConfig,
                pamvpSize: ?*AMVPSIZE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IVPBaseConfig.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPConfig_IsVPDecimationAllowed(self: *const T, pbIsDecimationAllowed: ?*i32) HRESULT {
                return @as(*const IVPConfig.VTable, @ptrCast(self.vtable)).IsVPDecimationAllowed(@as(*const IVPConfig, @ptrCast(self)), pbIsDecimationAllowed);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPConfig_SetScalingFactors(self: *const T, pamvpSize: ?*AMVPSIZE) HRESULT {
                return @as(*const IVPConfig.VTable, @ptrCast(self.vtable)).SetScalingFactors(@as(*const IVPConfig, @ptrCast(self)), pamvpSize);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const IVPVBIConfig = extern struct {
    pub const VTable = extern struct {
        base: IVPBaseConfig.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IVPBaseConfig.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IVPBaseNotify = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        RenegotiateVPParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPBaseNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPBaseNotify,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPBaseNotify_RenegotiateVPParameters(self: *const T) HRESULT {
                return @as(*const IVPBaseNotify.VTable, @ptrCast(self.vtable)).RenegotiateVPParameters(@as(*const IVPBaseNotify, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IVPNotify = extern struct {
    pub const VTable = extern struct {
        base: IVPBaseNotify.VTable,
        SetDeinterlaceMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPNotify,
                mode: AMVP_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPNotify,
                mode: AMVP_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeinterlaceMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPNotify,
                pMode: ?*AMVP_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPNotify,
                pMode: ?*AMVP_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IVPBaseNotify.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPNotify_SetDeinterlaceMode(self: *const T, mode: AMVP_MODE) HRESULT {
                return @as(*const IVPNotify.VTable, @ptrCast(self.vtable)).SetDeinterlaceMode(@as(*const IVPNotify, @ptrCast(self)), mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPNotify_GetDeinterlaceMode(self: *const T, pMode: ?*AMVP_MODE) HRESULT {
                return @as(*const IVPNotify.VTable, @ptrCast(self.vtable)).GetDeinterlaceMode(@as(*const IVPNotify, @ptrCast(self)), pMode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.0'
pub const IVPNotify2 = extern struct {
    pub const VTable = extern struct {
        base: IVPNotify.VTable,
        SetVPSyncMaster: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPNotify2,
                bVPSyncMaster: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPNotify2,
                bVPSyncMaster: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVPSyncMaster: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IVPNotify2,
                pbVPSyncMaster: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IVPNotify2,
                pbVPSyncMaster: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IVPNotify.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPNotify2_SetVPSyncMaster(self: *const T, bVPSyncMaster: BOOL) HRESULT {
                return @as(*const IVPNotify2.VTable, @ptrCast(self.vtable)).SetVPSyncMaster(@as(*const IVPNotify2, @ptrCast(self)), bVPSyncMaster);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IVPNotify2_GetVPSyncMaster(self: *const T, pbVPSyncMaster: ?*BOOL) HRESULT {
                return @as(*const IVPNotify2.VTable, @ptrCast(self.vtable)).GetVPSyncMaster(@as(*const IVPNotify2, @ptrCast(self)), pbVPSyncMaster);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const IVPVBINotify = extern struct {
    pub const VTable = extern struct {
        base: IVPBaseNotify.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IVPBaseNotify.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const RIFFCHUNK = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
};

pub const RIFFLIST = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
    fccListType: u32 align(2),
};

pub const AVIMAINHEADER = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
    dwMicroSecPerFrame: u32 align(2),
    dwMaxBytesPerSec: u32 align(2),
    dwPaddingGranularity: u32 align(2),
    dwFlags: u32 align(2),
    dwTotalFrames: u32 align(2),
    dwInitialFrames: u32 align(2),
    dwStreams: u32 align(2),
    dwSuggestedBufferSize: u32 align(2),
    dwWidth: u32 align(2),
    dwHeight: u32 align(2),
    dwReserved: [4]u32 align(2),
};

pub const AVIEXTHEADER = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
    dwGrandFrames: u32 align(2),
    dwFuture: [61]u32 align(2),
};

pub const AVISTREAMHEADER = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
    fccType: u32 align(2),
    fccHandler: u32 align(2),
    dwFlags: u32 align(2),
    wPriority: u16 align(2),
    wLanguage: u16 align(2),
    dwInitialFrames: u32 align(2),
    dwScale: u32 align(2),
    dwRate: u32 align(2),
    dwStart: u32 align(2),
    dwLength: u32 align(2),
    dwSuggestedBufferSize: u32 align(2),
    dwQuality: u32 align(2),
    dwSampleSize: u32 align(2),
    rcFrame: extern struct {
        left: i16,
        top: i16,
        right: i16,
        bottom: i16,
    } align(2),
};

pub const AVIOLDINDEX = extern struct {
    pub const _avioldindex_entry = extern struct {
        dwChunkId: u32 align(2),
        dwFlags: u32 align(2),
        dwOffset: u32 align(2),
        dwSize: u32 align(2),
    };
    fcc: u32 align(2),
    cb: u32 align(2),
    aIndex: [1]_avioldindex_entry align(2),
};

pub const TIMECODEDATA = extern struct {
    time: TIMECODE align(2),
    dwSMPTEflags: u32 align(2),
    dwUser: u32 align(2),
};

pub const AVIMETAINDEX = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
    wLongsPerEntry: u16 align(2),
    bIndexSubType: u8 align(2),
    bIndexType: u8 align(2),
    nEntriesInUse: u32 align(2),
    dwChunkId: u32 align(2),
    dwReserved: [3]u32 align(2),
    adwIndex: [1]u32 align(2),
};

pub const AVISUPERINDEX = extern struct {
    pub const _avisuperindex_entry = extern struct {
        qwOffset: u64 align(2),
        dwSize: u32 align(2),
        dwDuration: u32 align(2),
    };
    fcc: u32 align(2),
    cb: u32 align(2),
    wLongsPerEntry: u16 align(2),
    bIndexSubType: u8 align(2),
    bIndexType: u8 align(2),
    nEntriesInUse: u32 align(2),
    dwChunkId: u32 align(2),
    dwReserved: [3]u32 align(2),
    aIndex: [1022]_avisuperindex_entry align(2),
};

pub const AVISTDINDEX_ENTRY = extern struct {
    dwOffset: u32 align(2),
    dwSize: u32 align(2),
};

pub const AVISTDINDEX = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
    wLongsPerEntry: u16 align(2),
    bIndexSubType: u8 align(2),
    bIndexType: u8 align(2),
    nEntriesInUse: u32 align(2),
    dwChunkId: u32 align(2),
    qwBaseOffset: u64 align(2),
    dwReserved_3: u32 align(2),
    aIndex: [2044]AVISTDINDEX_ENTRY align(2),
};

pub const AVITIMEDINDEX_ENTRY = extern struct {
    dwOffset: u32 align(2),
    dwSize: u32 align(2),
    dwDuration: u32 align(2),
};

pub const _avitimedindex = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
    wLongsPerEntry: u16 align(2),
    bIndexSubType: u8 align(2),
    bIndexType: u8 align(2),
    nEntriesInUse: u32 align(2),
    dwChunkId: u32 align(2),
    qwBaseOffset: u64 align(2),
    dwReserved_3: u32 align(2),
    aIndex: [1362]AVITIMEDINDEX_ENTRY align(2),
    adwTrailingFill: [2734]u32 align(2),
};

pub const AVITIMECODEINDEX = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
    wLongsPerEntry: u16 align(2),
    bIndexSubType: u8 align(2),
    bIndexType: u8 align(2),
    nEntriesInUse: u32 align(2),
    dwChunkId: u32 align(2),
    dwReserved: [3]u32 align(2),
    aIndex: [1022]TIMECODEDATA align(2),
};

pub const AVITCDLINDEX_ENTRY = extern struct {
    dwTick: u32 align(2),
    time: TIMECODE align(2),
    dwSMPTEflags: u32 align(2),
    dwUser: u32 align(2),
    szReelId: [12]i8 align(2),
};

pub const _avitcdlindex = extern struct {
    fcc: u32 align(2),
    cb: u32 align(2),
    wLongsPerEntry: u16 align(2),
    bIndexSubType: u8 align(2),
    bIndexType: u8 align(2),
    nEntriesInUse: u32 align(2),
    dwChunkId: u32 align(2),
    dwReserved: [3]u32 align(2),
    aIndex: [584]AVITCDLINDEX_ENTRY align(2),
    adwTrailingFill: [3512]u32 align(2),
};

pub const AVIFIELDINDEX = extern struct {
    pub const _avifieldindex_entry = extern struct {
        dwOffset: u32 align(2),
        dwSize: u32 align(2),
        dwOffsetField2: u32 align(2),
    };
    fcc: u32 align(2),
    cb: u32 align(2),
    wLongsPerEntry: u16 align(2),
    bIndexSubType: u8 align(2),
    bIndexType: u8 align(2),
    nEntriesInUse: u32 align(2),
    dwChunkId: u32 align(2),
    qwBaseOffset: u64 align(2),
    dwReserved3: u32 align(2),
    aIndex: [1]_avifieldindex_entry align(2),
};

pub const MainAVIHeader = extern struct {
    dwMicroSecPerFrame: u32,
    dwMaxBytesPerSec: u32,
    dwPaddingGranularity: u32,
    dwFlags: u32,
    dwTotalFrames: u32,
    dwInitialFrames: u32,
    dwStreams: u32,
    dwSuggestedBufferSize: u32,
    dwWidth: u32,
    dwHeight: u32,
    dwReserved: [4]u32,
};

pub const AVIStreamHeader = extern struct {
    fccType: u32,
    fccHandler: u32,
    dwFlags: u32,
    wPriority: u16,
    wLanguage: u16,
    dwInitialFrames: u32,
    dwScale: u32,
    dwRate: u32,
    dwStart: u32,
    dwLength: u32,
    dwSuggestedBufferSize: u32,
    dwQuality: u32,
    dwSampleSize: u32,
    rcFrame: RECT,
};

pub const AVIINDEXENTRY = extern struct {
    ckid: u32,
    dwFlags: u32,
    dwChunkOffset: u32,
    dwChunkLength: u32,
};

pub const AVIPALCHANGE = extern struct {
    bFirstEntry: u8,
    bNumEntries: u8,
    wFlags: u16,
    peNew: [1]PALETTEENTRY,
};

pub const AM_PROPERTY_AC3 = enum(i32) {
    ERROR_CONCEALMENT = 1,
    ALTERNATE_AUDIO = 2,
    DOWNMIX = 3,
    BIT_STREAM_MODE = 4,
    DIALOGUE_LEVEL = 5,
    LANGUAGE_CODE = 6,
    ROOM_TYPE = 7,
};
pub const AM_PROPERTY_AC3_ERROR_CONCEALMENT = AM_PROPERTY_AC3.ERROR_CONCEALMENT;
pub const AM_PROPERTY_AC3_ALTERNATE_AUDIO = AM_PROPERTY_AC3.ALTERNATE_AUDIO;
pub const AM_PROPERTY_AC3_DOWNMIX = AM_PROPERTY_AC3.DOWNMIX;
pub const AM_PROPERTY_AC3_BIT_STREAM_MODE = AM_PROPERTY_AC3.BIT_STREAM_MODE;
pub const AM_PROPERTY_AC3_DIALOGUE_LEVEL = AM_PROPERTY_AC3.DIALOGUE_LEVEL;
pub const AM_PROPERTY_AC3_LANGUAGE_CODE = AM_PROPERTY_AC3.LANGUAGE_CODE;
pub const AM_PROPERTY_AC3_ROOM_TYPE = AM_PROPERTY_AC3.ROOM_TYPE;

pub const AM_AC3_ERROR_CONCEALMENT = extern struct {
    fRepeatPreviousBlock: BOOL,
    fErrorInCurrentBlock: BOOL,
};

pub const AM_AC3_ALTERNATE_AUDIO = extern struct {
    fStereo: BOOL,
    DualMode: u32,
};

pub const AM_AC3_DOWNMIX = extern struct {
    fDownMix: BOOL,
    fDolbySurround: BOOL,
};

pub const AM_AC3_BIT_STREAM_MODE = extern struct {
    BitStreamMode: i32,
};

pub const AM_AC3_DIALOGUE_LEVEL = extern struct {
    DialogueLevel: u32,
};

pub const AM_AC3_ROOM_TYPE = extern struct {
    fLargeRoom: BOOL,
};

pub const AM_PROPERTY_DVDSUBPIC = enum(i32) {
    PALETTE = 0,
    HLI = 1,
    COMPOSIT_ON = 2,
};
pub const AM_PROPERTY_DVDSUBPIC_PALETTE = AM_PROPERTY_DVDSUBPIC.PALETTE;
pub const AM_PROPERTY_DVDSUBPIC_HLI = AM_PROPERTY_DVDSUBPIC.HLI;
pub const AM_PROPERTY_DVDSUBPIC_COMPOSIT_ON = AM_PROPERTY_DVDSUBPIC.COMPOSIT_ON;

pub const AM_DVD_YUV = extern struct {
    Reserved: u8,
    Y: u8,
    U: u8,
    V: u8,
};

pub const AM_PROPERTY_SPPAL = extern struct {
    sppal: [16]AM_DVD_YUV,
};

pub const AM_COLCON = extern struct {
    _bitfield1: u8,
    _bitfield2: u8,
    _bitfield3: u8,
    _bitfield4: u8,
};

pub const AM_PROPERTY_SPHLI = extern struct {
    HLISS: u16,
    Reserved: u16,
    StartPTM: u32,
    EndPTM: u32,
    StartX: u16,
    StartY: u16,
    StopX: u16,
    StopY: u16,
    ColCon: AM_COLCON,
};

pub const AM_PROPERTY_DVDCOPYPROT = enum(i32) {
    DVDCOPY_CHLG_KEY = 1,
    DVDCOPY_DVD_KEY1 = 2,
    DVDCOPY_DEC_KEY2 = 3,
    DVDCOPY_TITLE_KEY = 4,
    COPY_MACROVISION = 5,
    DVDCOPY_REGION = 6,
    DVDCOPY_SET_COPY_STATE = 7,
    COPY_ANALOG_COMPONENT = 8,
    COPY_DIGITAL_CP = 9,
    COPY_DVD_SRM = 10,
    DVDCOPY_SUPPORTS_NEW_KEYCOUNT = 11,
    DVDCOPY_DISC_KEY = 128,
};
pub const AM_PROPERTY_DVDCOPY_CHLG_KEY = AM_PROPERTY_DVDCOPYPROT.DVDCOPY_CHLG_KEY;
pub const AM_PROPERTY_DVDCOPY_DVD_KEY1 = AM_PROPERTY_DVDCOPYPROT.DVDCOPY_DVD_KEY1;
pub const AM_PROPERTY_DVDCOPY_DEC_KEY2 = AM_PROPERTY_DVDCOPYPROT.DVDCOPY_DEC_KEY2;
pub const AM_PROPERTY_DVDCOPY_TITLE_KEY = AM_PROPERTY_DVDCOPYPROT.DVDCOPY_TITLE_KEY;
pub const AM_PROPERTY_COPY_MACROVISION = AM_PROPERTY_DVDCOPYPROT.COPY_MACROVISION;
pub const AM_PROPERTY_DVDCOPY_REGION = AM_PROPERTY_DVDCOPYPROT.DVDCOPY_REGION;
pub const AM_PROPERTY_DVDCOPY_SET_COPY_STATE = AM_PROPERTY_DVDCOPYPROT.DVDCOPY_SET_COPY_STATE;
pub const AM_PROPERTY_COPY_ANALOG_COMPONENT = AM_PROPERTY_DVDCOPYPROT.COPY_ANALOG_COMPONENT;
pub const AM_PROPERTY_COPY_DIGITAL_CP = AM_PROPERTY_DVDCOPYPROT.COPY_DIGITAL_CP;
pub const AM_PROPERTY_COPY_DVD_SRM = AM_PROPERTY_DVDCOPYPROT.COPY_DVD_SRM;
pub const AM_PROPERTY_DVDCOPY_SUPPORTS_NEW_KEYCOUNT = AM_PROPERTY_DVDCOPYPROT.DVDCOPY_SUPPORTS_NEW_KEYCOUNT;
pub const AM_PROPERTY_DVDCOPY_DISC_KEY = AM_PROPERTY_DVDCOPYPROT.DVDCOPY_DISC_KEY;

pub const AM_DIGITAL_CP = enum(i32) {
    OFF = 0,
    ON = 1,
    DVD_COMPLIANT = 2,
};
pub const AM_DIGITAL_CP_OFF = AM_DIGITAL_CP.OFF;
pub const AM_DIGITAL_CP_ON = AM_DIGITAL_CP.ON;
pub const AM_DIGITAL_CP_DVD_COMPLIANT = AM_DIGITAL_CP.DVD_COMPLIANT;

pub const AM_DVDCOPY_CHLGKEY = extern struct {
    ChlgKey: [10]u8,
    Reserved: [2]u8,
};

pub const AM_DVDCOPY_BUSKEY = extern struct {
    BusKey: [5]u8,
    Reserved: [1]u8,
};

pub const AM_DVDCOPY_DISCKEY = extern struct {
    DiscKey: [2048]u8,
};

pub const AM_DVDCOPY_TITLEKEY = extern struct {
    KeyFlags: u32,
    Reserved1: [2]u32,
    TitleKey: [6]u8,
    Reserved2: [2]u8,
};

pub const AM_COPY_MACROVISION = extern struct {
    MACROVISIONLevel: u32,
};

pub const AM_DVDCOPY_SET_COPY_STATE = extern struct {
    DVDCopyState: u32,
};

pub const AM_DVDCOPYSTATE = enum(i32) {
    INITIALIZE = 0,
    INITIALIZE_TITLE = 1,
    AUTHENTICATION_NOT_REQUIRED = 2,
    AUTHENTICATION_REQUIRED = 3,
    DONE = 4,
};
pub const AM_DVDCOPYSTATE_INITIALIZE = AM_DVDCOPYSTATE.INITIALIZE;
pub const AM_DVDCOPYSTATE_INITIALIZE_TITLE = AM_DVDCOPYSTATE.INITIALIZE_TITLE;
pub const AM_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED = AM_DVDCOPYSTATE.AUTHENTICATION_NOT_REQUIRED;
pub const AM_DVDCOPYSTATE_AUTHENTICATION_REQUIRED = AM_DVDCOPYSTATE.AUTHENTICATION_REQUIRED;
pub const AM_DVDCOPYSTATE_DONE = AM_DVDCOPYSTATE.DONE;

pub const AM_COPY_MACROVISION_LEVEL = enum(i32) {
    DISABLED = 0,
    LEVEL1 = 1,
    LEVEL2 = 2,
    LEVEL3 = 3,
};
pub const AM_MACROVISION_DISABLED = AM_COPY_MACROVISION_LEVEL.DISABLED;
pub const AM_MACROVISION_LEVEL1 = AM_COPY_MACROVISION_LEVEL.LEVEL1;
pub const AM_MACROVISION_LEVEL2 = AM_COPY_MACROVISION_LEVEL.LEVEL2;
pub const AM_MACROVISION_LEVEL3 = AM_COPY_MACROVISION_LEVEL.LEVEL3;

pub const DVD_REGION = extern struct {
    CopySystem: u8,
    RegionData: u8,
    SystemRegion: u8,
    ResetCount: u8,
};

pub const AM_MPEG2Level = enum(i32) {
    Low = 1,
    Main = 2,
    High1440 = 3,
    High = 4,
};
pub const AM_MPEG2Level_Low = AM_MPEG2Level.Low;
pub const AM_MPEG2Level_Main = AM_MPEG2Level.Main;
pub const AM_MPEG2Level_High1440 = AM_MPEG2Level.High1440;
pub const AM_MPEG2Level_High = AM_MPEG2Level.High;

pub const AM_MPEG2Profile = enum(i32) {
    Simple = 1,
    Main = 2,
    SNRScalable = 3,
    SpatiallyScalable = 4,
    High = 5,
};
pub const AM_MPEG2Profile_Simple = AM_MPEG2Profile.Simple;
pub const AM_MPEG2Profile_Main = AM_MPEG2Profile.Main;
pub const AM_MPEG2Profile_SNRScalable = AM_MPEG2Profile.SNRScalable;
pub const AM_MPEG2Profile_SpatiallyScalable = AM_MPEG2Profile.SpatiallyScalable;
pub const AM_MPEG2Profile_High = AM_MPEG2Profile.High;

pub const VIDEOINFOHEADER2 = extern struct {
    rcSource: RECT,
    rcTarget: RECT,
    dwBitRate: u32,
    dwBitErrorRate: u32,
    AvgTimePerFrame: i64,
    dwInterlaceFlags: u32,
    dwCopyProtectFlags: u32,
    dwPictAspectRatioX: u32,
    dwPictAspectRatioY: u32,
    Anonymous: extern union {
        dwControlFlags: u32,
        dwReserved1: u32,
    },
    dwReserved2: u32,
    bmiHeader: BITMAPINFOHEADER,
};

pub const MPEG2VIDEOINFO = extern struct {
    hdr: VIDEOINFOHEADER2,
    dwStartTimeCode: u32,
    cbSequenceHeader: u32,
    dwProfile: u32,
    dwLevel: u32,
    dwFlags: MPEG2VIDEOINFO_FLAGS,
    dwSequenceHeader: [1]u32,
};

pub const AM_DvdKaraokeData = extern struct {
    dwDownmix: u32,
    dwSpeakerAssignment: u32,
};

pub const AM_PROPERTY_DVDKARAOKE = enum(i32) {
    ENABLE = 0,
    DATA = 1,
};
pub const AM_PROPERTY_DVDKARAOKE_ENABLE = AM_PROPERTY_DVDKARAOKE.ENABLE;
pub const AM_PROPERTY_DVDKARAOKE_DATA = AM_PROPERTY_DVDKARAOKE.DATA;

pub const AM_PROPERTY_TS_RATE_CHANGE = enum(i32) {
    SimpleRateChange = 1,
    ExactRateChange = 2,
    MaxFullDataRate = 3,
    Step = 4,
    UseRateVersion = 5,
    QueryFullFrameRate = 6,
    QueryLastRateSegPTS = 7,
    CorrectTS = 8,
    ReverseMaxFullDataRate = 9,
    ResetOnTimeDisc = 10,
    QueryMapping = 11,
};
pub const AM_RATE_SimpleRateChange = AM_PROPERTY_TS_RATE_CHANGE.SimpleRateChange;
pub const AM_RATE_ExactRateChange = AM_PROPERTY_TS_RATE_CHANGE.ExactRateChange;
pub const AM_RATE_MaxFullDataRate = AM_PROPERTY_TS_RATE_CHANGE.MaxFullDataRate;
pub const AM_RATE_Step = AM_PROPERTY_TS_RATE_CHANGE.Step;
pub const AM_RATE_UseRateVersion = AM_PROPERTY_TS_RATE_CHANGE.UseRateVersion;
pub const AM_RATE_QueryFullFrameRate = AM_PROPERTY_TS_RATE_CHANGE.QueryFullFrameRate;
pub const AM_RATE_QueryLastRateSegPTS = AM_PROPERTY_TS_RATE_CHANGE.QueryLastRateSegPTS;
pub const AM_RATE_CorrectTS = AM_PROPERTY_TS_RATE_CHANGE.CorrectTS;
pub const AM_RATE_ReverseMaxFullDataRate = AM_PROPERTY_TS_RATE_CHANGE.ReverseMaxFullDataRate;
pub const AM_RATE_ResetOnTimeDisc = AM_PROPERTY_TS_RATE_CHANGE.ResetOnTimeDisc;
pub const AM_RATE_QueryMapping = AM_PROPERTY_TS_RATE_CHANGE.QueryMapping;

pub const AM_PROPERTY_DVD_RATE_CHANGE = enum(i32) {
    ChangeRate = 1,
    FullDataRateMax = 2,
    ReverseDecode = 3,
    DecoderPosition = 4,
    DecoderVersion = 5,
};
pub const AM_RATE_ChangeRate = AM_PROPERTY_DVD_RATE_CHANGE.ChangeRate;
pub const AM_RATE_FullDataRateMax = AM_PROPERTY_DVD_RATE_CHANGE.FullDataRateMax;
pub const AM_RATE_ReverseDecode = AM_PROPERTY_DVD_RATE_CHANGE.ReverseDecode;
pub const AM_RATE_DecoderPosition = AM_PROPERTY_DVD_RATE_CHANGE.DecoderPosition;
pub const AM_RATE_DecoderVersion = AM_PROPERTY_DVD_RATE_CHANGE.DecoderVersion;

pub const AM_SimpleRateChange = extern struct {
    StartTime: i64,
    Rate: i32,
};

pub const AM_QueryRate = extern struct {
    lMaxForwardFullFrame: i32,
    lMaxReverseFullFrame: i32,
};

pub const AM_ExactRateChange = extern struct {
    OutputZeroTime: i64,
    Rate: i32,
};

pub const AM_DVD_ChangeRate = extern struct {
    StartInTime: i64,
    StartOutTime: i64,
    Rate: i32,
};

pub const DVD_PLAY_DIRECTION = enum(i32) {
    FORWARD = 0,
    BACKWARD = 1,
};
pub const DVD_DIR_FORWARD = DVD_PLAY_DIRECTION.FORWARD;
pub const DVD_DIR_BACKWARD = DVD_PLAY_DIRECTION.BACKWARD;

pub const DVD_ERROR = enum(i32) {
    Unexpected = 1,
    CopyProtectFail = 2,
    InvalidDVD1_0Disc = 3,
    InvalidDiscRegion = 4,
    LowParentalLevel = 5,
    MacrovisionFail = 6,
    IncompatibleSystemAndDecoderRegions = 7,
    IncompatibleDiscAndDecoderRegions = 8,
    CopyProtectOutputFail = 9,
    CopyProtectOutputNotSupported = 10,
};
pub const DVD_ERROR_Unexpected = DVD_ERROR.Unexpected;
pub const DVD_ERROR_CopyProtectFail = DVD_ERROR.CopyProtectFail;
pub const DVD_ERROR_InvalidDVD1_0Disc = DVD_ERROR.InvalidDVD1_0Disc;
pub const DVD_ERROR_InvalidDiscRegion = DVD_ERROR.InvalidDiscRegion;
pub const DVD_ERROR_LowParentalLevel = DVD_ERROR.LowParentalLevel;
pub const DVD_ERROR_MacrovisionFail = DVD_ERROR.MacrovisionFail;
pub const DVD_ERROR_IncompatibleSystemAndDecoderRegions = DVD_ERROR.IncompatibleSystemAndDecoderRegions;
pub const DVD_ERROR_IncompatibleDiscAndDecoderRegions = DVD_ERROR.IncompatibleDiscAndDecoderRegions;
pub const DVD_ERROR_CopyProtectOutputFail = DVD_ERROR.CopyProtectOutputFail;
pub const DVD_ERROR_CopyProtectOutputNotSupported = DVD_ERROR.CopyProtectOutputNotSupported;

pub const DVD_WARNING = enum(i32) {
    InvalidDVD1_0Disc = 1,
    FormatNotSupported = 2,
    IllegalNavCommand = 3,
    Open = 4,
    Seek = 5,
    Read = 6,
};
pub const DVD_WARNING_InvalidDVD1_0Disc = DVD_WARNING.InvalidDVD1_0Disc;
pub const DVD_WARNING_FormatNotSupported = DVD_WARNING.FormatNotSupported;
pub const DVD_WARNING_IllegalNavCommand = DVD_WARNING.IllegalNavCommand;
pub const DVD_WARNING_Open = DVD_WARNING.Open;
pub const DVD_WARNING_Seek = DVD_WARNING.Seek;
pub const DVD_WARNING_Read = DVD_WARNING.Read;

pub const DVD_PB_STOPPED = enum(i32) {
    Other = 0,
    NoBranch = 1,
    NoFirstPlayDomain = 2,
    StopCommand = 3,
    Reset = 4,
    DiscEjected = 5,
    IllegalNavCommand = 6,
    PlayPeriodAutoStop = 7,
    PlayChapterAutoStop = 8,
    ParentalFailure = 9,
    RegionFailure = 10,
    MacrovisionFailure = 11,
    DiscReadError = 12,
    CopyProtectFailure = 13,
    CopyProtectOutputFailure = 14,
    CopyProtectOutputNotSupported = 15,
};
pub const DVD_PB_STOPPED_Other = DVD_PB_STOPPED.Other;
pub const DVD_PB_STOPPED_NoBranch = DVD_PB_STOPPED.NoBranch;
pub const DVD_PB_STOPPED_NoFirstPlayDomain = DVD_PB_STOPPED.NoFirstPlayDomain;
pub const DVD_PB_STOPPED_StopCommand = DVD_PB_STOPPED.StopCommand;
pub const DVD_PB_STOPPED_Reset = DVD_PB_STOPPED.Reset;
pub const DVD_PB_STOPPED_DiscEjected = DVD_PB_STOPPED.DiscEjected;
pub const DVD_PB_STOPPED_IllegalNavCommand = DVD_PB_STOPPED.IllegalNavCommand;
pub const DVD_PB_STOPPED_PlayPeriodAutoStop = DVD_PB_STOPPED.PlayPeriodAutoStop;
pub const DVD_PB_STOPPED_PlayChapterAutoStop = DVD_PB_STOPPED.PlayChapterAutoStop;
pub const DVD_PB_STOPPED_ParentalFailure = DVD_PB_STOPPED.ParentalFailure;
pub const DVD_PB_STOPPED_RegionFailure = DVD_PB_STOPPED.RegionFailure;
pub const DVD_PB_STOPPED_MacrovisionFailure = DVD_PB_STOPPED.MacrovisionFailure;
pub const DVD_PB_STOPPED_DiscReadError = DVD_PB_STOPPED.DiscReadError;
pub const DVD_PB_STOPPED_CopyProtectFailure = DVD_PB_STOPPED.CopyProtectFailure;
pub const DVD_PB_STOPPED_CopyProtectOutputFailure = DVD_PB_STOPPED.CopyProtectOutputFailure;
pub const DVD_PB_STOPPED_CopyProtectOutputNotSupported = DVD_PB_STOPPED.CopyProtectOutputNotSupported;

pub const AMGETERRORTEXTPROCA = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: HRESULT,
        param1: ?PSTR,
        param2: u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: HRESULT,
        param1: ?PSTR,
        param2: u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const AMGETERRORTEXTPROCW = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: HRESULT,
        param1: ?PWSTR,
        param2: u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: HRESULT,
        param1: ?PWSTR,
        param2: u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const SNDDEV_ERR = enum(i32) {
    Open = 1,
    Close = 2,
    GetCaps = 3,
    PrepareHeader = 4,
    UnprepareHeader = 5,
    Reset = 6,
    Restart = 7,
    GetPosition = 8,
    Write = 9,
    Pause = 10,
    Stop = 11,
    Start = 12,
    AddBuffer = 13,
    Query = 14,
};
pub const SNDDEV_ERROR_Open = SNDDEV_ERR.Open;
pub const SNDDEV_ERROR_Close = SNDDEV_ERR.Close;
pub const SNDDEV_ERROR_GetCaps = SNDDEV_ERR.GetCaps;
pub const SNDDEV_ERROR_PrepareHeader = SNDDEV_ERR.PrepareHeader;
pub const SNDDEV_ERROR_UnprepareHeader = SNDDEV_ERR.UnprepareHeader;
pub const SNDDEV_ERROR_Reset = SNDDEV_ERR.Reset;
pub const SNDDEV_ERROR_Restart = SNDDEV_ERR.Restart;
pub const SNDDEV_ERROR_GetPosition = SNDDEV_ERR.GetPosition;
pub const SNDDEV_ERROR_Write = SNDDEV_ERR.Write;
pub const SNDDEV_ERROR_Pause = SNDDEV_ERR.Pause;
pub const SNDDEV_ERROR_Stop = SNDDEV_ERR.Stop;
pub const SNDDEV_ERROR_Start = SNDDEV_ERR.Start;
pub const SNDDEV_ERROR_AddBuffer = SNDDEV_ERR.AddBuffer;
pub const SNDDEV_ERROR_Query = SNDDEV_ERR.Query;

pub const MP_TYPE = enum(i32) {
    INT = 0,
    FLOAT = 1,
    BOOL = 2,
    ENUM = 3,
    MAX = 4,
};
pub const MPT_INT = MP_TYPE.INT;
pub const MPT_FLOAT = MP_TYPE.FLOAT;
pub const MPT_BOOL = MP_TYPE.BOOL;
pub const MPT_ENUM = MP_TYPE.ENUM;
pub const MPT_MAX = MP_TYPE.MAX;

pub const MP_CURVE_TYPE = enum(i32) {
    JUMP = 1,
    LINEAR = 2,
    SQUARE = 4,
    INVSQUARE = 8,
    SINE = 16,
};
pub const MP_CURVE_JUMP = MP_CURVE_TYPE.JUMP;
pub const MP_CURVE_LINEAR = MP_CURVE_TYPE.LINEAR;
pub const MP_CURVE_SQUARE = MP_CURVE_TYPE.SQUARE;
pub const MP_CURVE_INVSQUARE = MP_CURVE_TYPE.INVSQUARE;
pub const MP_CURVE_SINE = MP_CURVE_TYPE.SINE;

pub const MP_PARAMINFO = extern struct {
    mpType: MP_TYPE,
    mopCaps: u32,
    mpdMinValue: f32,
    mpdMaxValue: f32,
    mpdNeutralValue: f32,
    szUnitText: [32]u16,
    szLabel: [32]u16,
};

pub const MP_ENVELOPE_SEGMENT = extern struct {
    rtStart: i64,
    rtEnd: i64,
    valStart: f32,
    valEnd: f32,
    iCurve: MP_CURVE_TYPE,
    flags: u32,
};

const IID_IMediaParamInfo_Value = Guid.initString("6d6cbb60-a223-44aa-842f-a2f06750be6d");
pub const IID_IMediaParamInfo = &IID_IMediaParamInfo_Value;
pub const IMediaParamInfo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetParamCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParamInfo,
                pdwParams: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParamInfo,
                pdwParams: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParamInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParamInfo,
                dwParamIndex: u32,
                pInfo: ?*MP_PARAMINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParamInfo,
                dwParamIndex: u32,
                pInfo: ?*MP_PARAMINFO,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParamText: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParamInfo,
                dwParamIndex: u32,
                ppwchText: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParamInfo,
                dwParamIndex: u32,
                ppwchText: ?*?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumTimeFormats: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParamInfo,
                pdwNumTimeFormats: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParamInfo,
                pdwNumTimeFormats: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSupportedTimeFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParamInfo,
                dwFormatIndex: u32,
                pguidTimeFormat: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParamInfo,
                dwFormatIndex: u32,
                pguidTimeFormat: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentTimeFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParamInfo,
                pguidTimeFormat: ?*Guid,
                pTimeData: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParamInfo,
                pguidTimeFormat: ?*Guid,
                pTimeData: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParamInfo_GetParamCount(self: *const T, pdwParams: ?*u32) HRESULT {
                return @as(*const IMediaParamInfo.VTable, @ptrCast(self.vtable)).GetParamCount(@as(*const IMediaParamInfo, @ptrCast(self)), pdwParams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParamInfo_GetParamInfo(self: *const T, dwParamIndex: u32, pInfo: ?*MP_PARAMINFO) HRESULT {
                return @as(*const IMediaParamInfo.VTable, @ptrCast(self.vtable)).GetParamInfo(@as(*const IMediaParamInfo, @ptrCast(self)), dwParamIndex, pInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParamInfo_GetParamText(self: *const T, dwParamIndex: u32, ppwchText: ?*?*u16) HRESULT {
                return @as(*const IMediaParamInfo.VTable, @ptrCast(self.vtable)).GetParamText(@as(*const IMediaParamInfo, @ptrCast(self)), dwParamIndex, ppwchText);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParamInfo_GetNumTimeFormats(self: *const T, pdwNumTimeFormats: ?*u32) HRESULT {
                return @as(*const IMediaParamInfo.VTable, @ptrCast(self.vtable)).GetNumTimeFormats(@as(*const IMediaParamInfo, @ptrCast(self)), pdwNumTimeFormats);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParamInfo_GetSupportedTimeFormat(self: *const T, dwFormatIndex: u32, pguidTimeFormat: ?*Guid) HRESULT {
                return @as(*const IMediaParamInfo.VTable, @ptrCast(self.vtable)).GetSupportedTimeFormat(@as(*const IMediaParamInfo, @ptrCast(self)), dwFormatIndex, pguidTimeFormat);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParamInfo_GetCurrentTimeFormat(self: *const T, pguidTimeFormat: ?*Guid, pTimeData: ?*u32) HRESULT {
                return @as(*const IMediaParamInfo.VTable, @ptrCast(self.vtable)).GetCurrentTimeFormat(@as(*const IMediaParamInfo, @ptrCast(self)), pguidTimeFormat, pTimeData);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMediaParams_Value = Guid.initString("6d6cbb61-a223-44aa-842f-a2f06750be6e");
pub const IID_IMediaParams = &IID_IMediaParams_Value;
pub const IMediaParams = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetParam: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParams,
                dwParamIndex: u32,
                pValue: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParams,
                dwParamIndex: u32,
                pValue: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetParam: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParams,
                dwParamIndex: u32,
                value: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParams,
                dwParamIndex: u32,
                value: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddEnvelope: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParams,
                dwParamIndex: u32,
                cSegments: u32,
                pEnvelopeSegments: ?*MP_ENVELOPE_SEGMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParams,
                dwParamIndex: u32,
                cSegments: u32,
                pEnvelopeSegments: ?*MP_ENVELOPE_SEGMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FlushEnvelope: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParams,
                dwParamIndex: u32,
                refTimeStart: i64,
                refTimeEnd: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParams,
                dwParamIndex: u32,
                refTimeStart: i64,
                refTimeEnd: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTimeFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMediaParams,
                guidTimeFormat: Guid,
                mpTimeData: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMediaParams,
                guidTimeFormat: Guid,
                mpTimeData: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParams_GetParam(self: *const T, dwParamIndex: u32, pValue: ?*f32) HRESULT {
                return @as(*const IMediaParams.VTable, @ptrCast(self.vtable)).GetParam(@as(*const IMediaParams, @ptrCast(self)), dwParamIndex, pValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParams_SetParam(self: *const T, dwParamIndex: u32, value: f32) HRESULT {
                return @as(*const IMediaParams.VTable, @ptrCast(self.vtable)).SetParam(@as(*const IMediaParams, @ptrCast(self)), dwParamIndex, value);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParams_AddEnvelope(self: *const T, dwParamIndex: u32, cSegments: u32, pEnvelopeSegments: ?*MP_ENVELOPE_SEGMENT) HRESULT {
                return @as(*const IMediaParams.VTable, @ptrCast(self.vtable)).AddEnvelope(@as(*const IMediaParams, @ptrCast(self)), dwParamIndex, cSegments, pEnvelopeSegments);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParams_FlushEnvelope(self: *const T, dwParamIndex: u32, refTimeStart: i64, refTimeEnd: i64) HRESULT {
                return @as(*const IMediaParams.VTable, @ptrCast(self.vtable)).FlushEnvelope(@as(*const IMediaParams, @ptrCast(self)), dwParamIndex, refTimeStart, refTimeEnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMediaParams_SetTimeFormat(self: *const T, guidTimeFormat: Guid, mpTimeData: u32) HRESULT {
                return @as(*const IMediaParams.VTable, @ptrCast(self.vtable)).SetTimeFormat(@as(*const IMediaParams, @ptrCast(self)), guidTimeFormat, mpTimeData);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const VFW_FILTERLIST = extern struct {
    cFilters: u32,
    aClsId: [1]Guid,
};

pub const DXVA2_SampleFlags = enum(i32) {
    _Palette_Changed = 1,
    _SrcRect_Changed = 2,
    _DstRect_Changed = 4,
    _ColorData_Changed = 8,
    _PlanarAlpha_Changed = 16,
    _RFF = 65536,
    _TFF = 131072,
    _RFF_TFF_Present = 262144,
    sMask = -65505,
};
pub const DXVA2_SampleFlag_Palette_Changed = DXVA2_SampleFlags._Palette_Changed;
pub const DXVA2_SampleFlag_SrcRect_Changed = DXVA2_SampleFlags._SrcRect_Changed;
pub const DXVA2_SampleFlag_DstRect_Changed = DXVA2_SampleFlags._DstRect_Changed;
pub const DXVA2_SampleFlag_ColorData_Changed = DXVA2_SampleFlags._ColorData_Changed;
pub const DXVA2_SampleFlag_PlanarAlpha_Changed = DXVA2_SampleFlags._PlanarAlpha_Changed;
pub const DXVA2_SampleFlag_RFF = DXVA2_SampleFlags._RFF;
pub const DXVA2_SampleFlag_TFF = DXVA2_SampleFlags._TFF;
pub const DXVA2_SampleFlag_RFF_TFF_Present = DXVA2_SampleFlags._RFF_TFF_Present;
pub const DXVA2_SampleFlagsMask = DXVA2_SampleFlags.sMask;

pub const DXVA2_DestinationFlags = enum(i32) {
    _Background_Changed = 1,
    _TargetRect_Changed = 2,
    _ColorData_Changed = 4,
    _Alpha_Changed = 8,
    _RFF = 65536,
    _TFF = 131072,
    _RFF_TFF_Present = 262144,
    Mask = -65521,
};
pub const DXVA2_DestinationFlag_Background_Changed = DXVA2_DestinationFlags._Background_Changed;
pub const DXVA2_DestinationFlag_TargetRect_Changed = DXVA2_DestinationFlags._TargetRect_Changed;
pub const DXVA2_DestinationFlag_ColorData_Changed = DXVA2_DestinationFlags._ColorData_Changed;
pub const DXVA2_DestinationFlag_Alpha_Changed = DXVA2_DestinationFlags._Alpha_Changed;
pub const DXVA2_DestinationFlag_RFF = DXVA2_DestinationFlags._RFF;
pub const DXVA2_DestinationFlag_TFF = DXVA2_DestinationFlags._TFF;
pub const DXVA2_DestinationFlag_RFF_TFF_Present = DXVA2_DestinationFlags._RFF_TFF_Present;
pub const DXVA2_DestinationFlagMask = DXVA2_DestinationFlags.Mask;

pub const DXVA2_VIDEOSAMPLE = extern struct {
    Start: i64,
    End: i64,
    SampleFormat: DXVA2_ExtendedFormat,
    SampleFlags: u32,
    SrcResource: ?*anyopaque,
    SrcRect: RECT,
    DstRect: RECT,
    Pal: [16]DXVA2_AYUVSample8,
    PlanarAlpha: DXVA2_Fixed32,
};

pub const DXVA2_VIDEOPROCESSBLT = extern struct {
    TargetFrame: i64,
    TargetRect: RECT,
    ConstrictionSize: SIZE,
    StreamingFlags: u32,
    BackgroundColor: DXVA2_AYUVSample16,
    DestFormat: DXVA2_ExtendedFormat,
    DestFlags: u32,
    ProcAmpValues: DXVA2_ProcAmpValues,
    Alpha: DXVA2_Fixed32,
    NoiseFilterLuma: DXVA2_FilterValues,
    NoiseFilterChroma: DXVA2_FilterValues,
    DetailFilterLuma: DXVA2_FilterValues,
    DetailFilterChroma: DXVA2_FilterValues,
    pSrcSurfaces: ?*DXVA2_VIDEOSAMPLE,
    NumSrcSurfaces: u32,
};

pub const PDXVA2SW_GETVIDEOPROCESSORRENDERTARGETCOUNT = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        pCount: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        pCount: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_GETVIDEOPROCESSORRENDERTARGETS = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        Count: u32,
        pFormats: [*]D3DFORMAT,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        Count: u32,
        pFormats: [*]D3DFORMAT,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_GETVIDEOPROCESSORCAPS = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        pCaps: ?*DXVA2_VideoProcessorCaps,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        pCaps: ?*DXVA2_VideoProcessorCaps,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_GETVIDEOPROCESSORSUBSTREAMFORMATCOUNT = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        pCount: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        pCount: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_GETVIDEOPROCESSORSUBSTREAMFORMATS = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        Count: u32,
        pFormats: [*]D3DFORMAT,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        Count: u32,
        pFormats: [*]D3DFORMAT,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_GETPROCAMPRANGE = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        ProcAmpCap: u32,
        pRange: ?*DXVA2_ValueRange,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        ProcAmpCap: u32,
        pRange: ?*DXVA2_ValueRange,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_GETFILTERPROPERTYRANGE = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        FilterSetting: u32,
        pRange: ?*DXVA2_ValueRange,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        FilterSetting: u32,
        pRange: ?*DXVA2_ValueRange,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_CREATEVIDEOPROCESSDEVICE = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        pD3DD9: ?*IDirect3DDevice9,
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        MaxSubStreams: u32,
        phDevice: ?*?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        pD3DD9: ?*IDirect3DDevice9,
        pVideoDesc: ?*const DXVA2_VideoDesc,
        RenderTargetFormat: D3DFORMAT,
        MaxSubStreams: u32,
        phDevice: ?*?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_DESTROYVIDEOPROCESSDEVICE = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hDevice: ?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        hDevice: ?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_VIDEOPROCESSBEGINFRAME = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hDevice: ?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        hDevice: ?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_VIDEOPROCESSENDFRAME = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hDevice: ?HANDLE,
        pHandleComplete: ?*?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        hDevice: ?HANDLE,
        pHandleComplete: ?*?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_VIDEOPROCESSSETRENDERTARGET = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hDevice: ?HANDLE,
        pRenderTarget: ?*IDirect3DSurface9,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        hDevice: ?HANDLE,
        pRenderTarget: ?*IDirect3DSurface9,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const PDXVA2SW_VIDEOPROCESSBLT = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hDevice: ?HANDLE,
        pBlt: ?*const DXVA2_VIDEOPROCESSBLT,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
    else => *const fn (
        hDevice: ?HANDLE,
        pBlt: ?*const DXVA2_VIDEOPROCESSBLT,
    ) callconv(@import("std").os.windows.WINAPI) HRESULT,
};

pub const DXVA2SW_CALLBACKS = extern struct {
    Size: u32,
    GetVideoProcessorRenderTargetCount: ?PDXVA2SW_GETVIDEOPROCESSORRENDERTARGETCOUNT,
    GetVideoProcessorRenderTargets: ?PDXVA2SW_GETVIDEOPROCESSORRENDERTARGETS,
    GetVideoProcessorCaps: ?PDXVA2SW_GETVIDEOPROCESSORCAPS,
    GetVideoProcessorSubStreamFormatCount: ?PDXVA2SW_GETVIDEOPROCESSORSUBSTREAMFORMATCOUNT,
    GetVideoProcessorSubStreamFormats: ?PDXVA2SW_GETVIDEOPROCESSORSUBSTREAMFORMATS,
    GetProcAmpRange: ?PDXVA2SW_GETPROCAMPRANGE,
    GetFilterPropertyRange: ?PDXVA2SW_GETFILTERPROPERTYRANGE,
    CreateVideoProcessDevice: ?PDXVA2SW_CREATEVIDEOPROCESSDEVICE,
    DestroyVideoProcessDevice: ?PDXVA2SW_DESTROYVIDEOPROCESSDEVICE,
    VideoProcessBeginFrame: ?PDXVA2SW_VIDEOPROCESSBEGINFRAME,
    VideoProcessEndFrame: ?PDXVA2SW_VIDEOPROCESSENDFRAME,
    VideoProcessSetRenderTarget: ?PDXVA2SW_VIDEOPROCESSSETRENDERTARGET,
    VideoProcessBlt: ?PDXVA2SW_VIDEOPROCESSBLT,
};

pub const DXVA2Trace_DecodeDevCreatedData = extern struct {
    wmiHeader: EVENT_TRACE_HEADER,
    pObject: u64,
    pD3DDevice: u64,
    DeviceGuid: Guid,
    Width: u32,
    Height: u32,
    Enter: BOOL,
};

pub const DXVA2Trace_DecodeDeviceData = extern struct {
    wmiHeader: EVENT_TRACE_HEADER,
    pObject: u64,
    Enter: BOOL,
};

pub const DXVA2Trace_DecodeDevBeginFrameData = extern struct {
    wmiHeader: EVENT_TRACE_HEADER,
    pObject: u64,
    pRenderTarget: u64,
    Enter: BOOL,
};

pub const DXVA2Trace_DecodeDevGetBufferData = extern struct {
    wmiHeader: EVENT_TRACE_HEADER,
    pObject: u64,
    BufferType: u32,
    Enter: BOOL,
};

pub const DXVA2Trace_VideoProcessDevCreatedData = extern struct {
    wmiHeader: EVENT_TRACE_HEADER,
    pObject: u64,
    pD3DDevice: u64,
    DeviceGuid: Guid,
    RTFourCC: u32,
    Width: u32,
    Height: u32,
    Enter: BOOL,
};

pub const DXVA2Trace_VideoProcessDeviceData = extern struct {
    wmiHeader: EVENT_TRACE_HEADER,
    pObject: u64,
    Enter: BOOL,
};

pub const DXVA2TraceVideoProcessBltData = extern struct {
    wmiHeader: EVENT_TRACE_HEADER,
    pObject: u64,
    pRenderTarget: u64,
    TargetFrameTime: u64,
    TargetRect: RECT,
    Enter: BOOL,
};

pub const AMPlayListItemFlags = enum(i32) {
    SKIP = 1,
    BIND = 2,
};
pub const AMPLAYLISTITEM_CANSKIP = AMPlayListItemFlags.SKIP;
pub const AMPLAYLISTITEM_CANBIND = AMPlayListItemFlags.BIND;

const IID_IAMPlayListItem_Value = Guid.initString("56a868ff-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IAMPlayListItem = &IID_IAMPlayListItem_Value;
pub const IAMPlayListItem = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourceCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                pdwSources: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                pdwSources: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourceURL: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pbstrURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pbstrURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourceStart: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                prtStart: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                prtStart: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourceDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                prtDuration: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                prtDuration: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourceStartMarker: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pdwMarker: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pdwMarker: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourceEndMarker: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pdwMarker: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pdwMarker: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourceStartMarkerName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pbstrStartMarker: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pbstrStartMarker: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourceEndMarkerName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pbstrEndMarker: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                pbstrEndMarker: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLinkURL: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                pbstrURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                pbstrURL: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetScanDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                prtScanDuration: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayListItem,
                dwSourceIndex: u32,
                prtScanDuration: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetFlags(self: *const T, pdwFlags: ?*u32) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetFlags(@as(*const IAMPlayListItem, @ptrCast(self)), pdwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetSourceCount(self: *const T, pdwSources: ?*u32) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetSourceCount(@as(*const IAMPlayListItem, @ptrCast(self)), pdwSources);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetSourceURL(self: *const T, dwSourceIndex: u32, pbstrURL: ?*?BSTR) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetSourceURL(@as(*const IAMPlayListItem, @ptrCast(self)), dwSourceIndex, pbstrURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetSourceStart(self: *const T, dwSourceIndex: u32, prtStart: ?*i64) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetSourceStart(@as(*const IAMPlayListItem, @ptrCast(self)), dwSourceIndex, prtStart);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetSourceDuration(self: *const T, dwSourceIndex: u32, prtDuration: ?*i64) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetSourceDuration(@as(*const IAMPlayListItem, @ptrCast(self)), dwSourceIndex, prtDuration);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetSourceStartMarker(self: *const T, dwSourceIndex: u32, pdwMarker: ?*u32) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetSourceStartMarker(@as(*const IAMPlayListItem, @ptrCast(self)), dwSourceIndex, pdwMarker);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetSourceEndMarker(self: *const T, dwSourceIndex: u32, pdwMarker: ?*u32) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetSourceEndMarker(@as(*const IAMPlayListItem, @ptrCast(self)), dwSourceIndex, pdwMarker);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetSourceStartMarkerName(self: *const T, dwSourceIndex: u32, pbstrStartMarker: ?*?BSTR) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetSourceStartMarkerName(@as(*const IAMPlayListItem, @ptrCast(self)), dwSourceIndex, pbstrStartMarker);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetSourceEndMarkerName(self: *const T, dwSourceIndex: u32, pbstrEndMarker: ?*?BSTR) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetSourceEndMarkerName(@as(*const IAMPlayListItem, @ptrCast(self)), dwSourceIndex, pbstrEndMarker);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetLinkURL(self: *const T, pbstrURL: ?*?BSTR) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetLinkURL(@as(*const IAMPlayListItem, @ptrCast(self)), pbstrURL);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayListItem_GetScanDuration(self: *const T, dwSourceIndex: u32, prtScanDuration: ?*i64) HRESULT {
                return @as(*const IAMPlayListItem.VTable, @ptrCast(self.vtable)).GetScanDuration(@as(*const IAMPlayListItem, @ptrCast(self)), dwSourceIndex, prtScanDuration);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const AMPlayListFlags = enum(i32) {
    STARTINSCANMODE = 1,
    FORCEBANNER = 2,
};
pub const AMPLAYLIST_STARTINSCANMODE = AMPlayListFlags.STARTINSCANMODE;
pub const AMPLAYLIST_FORCEBANNER = AMPlayListFlags.FORCEBANNER;

pub const AMPlayListEventFlags = enum(i32) {
    RESUME = 0,
    BREAK = 1,
    NEXT = 2,
    MASK = 15,
    REFRESH = 16,
};
pub const AMPLAYLISTEVENT_RESUME = AMPlayListEventFlags.RESUME;
pub const AMPLAYLISTEVENT_BREAK = AMPlayListEventFlags.BREAK;
pub const AMPLAYLISTEVENT_NEXT = AMPlayListEventFlags.NEXT;
pub const AMPLAYLISTEVENT_MASK = AMPlayListEventFlags.MASK;
pub const AMPLAYLISTEVENT_REFRESH = AMPlayListEventFlags.REFRESH;

const IID_IAMPlayList_Value = Guid.initString("56a868fe-0ad4-11ce-b03a-0020af0ba770");
pub const IID_IAMPlayList = &IID_IAMPlayList_Value;
pub const IAMPlayList = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayList,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayList,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetItemCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayList,
                pdwItems: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayList,
                pdwItems: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetItem: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayList,
                dwItemIndex: u32,
                ppItem: ?*?*IAMPlayListItem,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayList,
                dwItemIndex: u32,
                ppItem: ?*?*IAMPlayListItem,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNamedEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayList,
                pwszEventName: ?PWSTR,
                dwItemIndex: u32,
                ppItem: ?*?*IAMPlayListItem,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayList,
                pwszEventName: ?PWSTR,
                dwItemIndex: u32,
                ppItem: ?*?*IAMPlayListItem,
                pdwFlags: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRepeatInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMPlayList,
                pdwRepeatCount: ?*u32,
                pdwRepeatStart: ?*u32,
                pdwRepeatEnd: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMPlayList,
                pdwRepeatCount: ?*u32,
                pdwRepeatStart: ?*u32,
                pdwRepeatEnd: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayList_GetFlags(self: *const T, pdwFlags: ?*u32) HRESULT {
                return @as(*const IAMPlayList.VTable, @ptrCast(self.vtable)).GetFlags(@as(*const IAMPlayList, @ptrCast(self)), pdwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayList_GetItemCount(self: *const T, pdwItems: ?*u32) HRESULT {
                return @as(*const IAMPlayList.VTable, @ptrCast(self.vtable)).GetItemCount(@as(*const IAMPlayList, @ptrCast(self)), pdwItems);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayList_GetItem(self: *const T, dwItemIndex: u32, ppItem: ?*?*IAMPlayListItem) HRESULT {
                return @as(*const IAMPlayList.VTable, @ptrCast(self.vtable)).GetItem(@as(*const IAMPlayList, @ptrCast(self)), dwItemIndex, ppItem);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayList_GetNamedEvent(self: *const T, pwszEventName: ?PWSTR, dwItemIndex: u32, ppItem: ?*?*IAMPlayListItem, pdwFlags: ?*u32) HRESULT {
                return @as(*const IAMPlayList.VTable, @ptrCast(self.vtable)).GetNamedEvent(@as(*const IAMPlayList, @ptrCast(self)), pwszEventName, dwItemIndex, ppItem, pdwFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMPlayList_GetRepeatInfo(self: *const T, pdwRepeatCount: ?*u32, pdwRepeatStart: ?*u32, pdwRepeatEnd: ?*u32) HRESULT {
                return @as(*const IAMPlayList.VTable, @ptrCast(self.vtable)).GetRepeatInfo(@as(*const IAMPlayList, @ptrCast(self)), pdwRepeatCount, pdwRepeatStart, pdwRepeatEnd);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ISpecifyParticularPages_Value = Guid.initString("4c437b91-6e9e-11d1-a704-006097c4e476");
pub const IID_ISpecifyParticularPages = &IID_ISpecifyParticularPages_Value;
pub const ISpecifyParticularPages = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetPages: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISpecifyParticularPages,
                guidWhatPages: ?*const Guid,
                pPages: ?*CAUUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISpecifyParticularPages,
                guidWhatPages: ?*const Guid,
                pPages: ?*CAUUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISpecifyParticularPages_GetPages(self: *const T, guidWhatPages: ?*const Guid, pPages: ?*CAUUID) HRESULT {
                return @as(*const ISpecifyParticularPages.VTable, @ptrCast(self.vtable)).GetPages(@as(*const ISpecifyParticularPages, @ptrCast(self)), guidWhatPages, pPages);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAMRebuild_Value = Guid.initString("02ef04dd-7580-11d1-bece-00c04fb6e937");
pub const IID_IAMRebuild = &IID_IAMRebuild_Value;
pub const IAMRebuild = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        RebuildNow: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAMRebuild,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAMRebuild,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAMRebuild_RebuildNow(self: *const T) HRESULT {
                return @as(*const IAMRebuild.VTable, @ptrCast(self.vtable)).RebuildNow(@as(*const IAMRebuild, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBufferingTime_Value = Guid.initString("1e00486a-78dd-11d2-8dd3-006097c9a2b2");
pub const IID_IBufferingTime = &IID_IBufferingTime_Value;
pub const IBufferingTime = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetBufferingTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBufferingTime,
                pdwMilliseconds: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBufferingTime,
                pdwMilliseconds: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBufferingTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBufferingTime,
                dwMilliseconds: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBufferingTime,
                dwMilliseconds: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBufferingTime_GetBufferingTime(self: *const T, pdwMilliseconds: ?*u32) HRESULT {
                return @as(*const IBufferingTime.VTable, @ptrCast(self.vtable)).GetBufferingTime(@as(*const IBufferingTime, @ptrCast(self)), pdwMilliseconds);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBufferingTime_SetBufferingTime(self: *const T, dwMilliseconds: u32) HRESULT {
                return @as(*const IBufferingTime.VTable, @ptrCast(self.vtable)).SetBufferingTime(@as(*const IBufferingTime, @ptrCast(self)), dwMilliseconds);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const CLSID_SystemTuningSpaces_Value = Guid.initString("d02aac50-027e-11d3-9d8e-00c04f72d980");
pub const CLSID_SystemTuningSpaces = &CLSID_SystemTuningSpaces_Value;

const CLSID_TuningSpace_Value = Guid.initString("5ffdc5e6-b83a-4b55-b6e8-c69e765fe9db");
pub const CLSID_TuningSpace = &CLSID_TuningSpace_Value;

const CLSID_ChannelIDTuningSpace_Value = Guid.initString("cc829a2f-3365-463f-af13-81dbb6f3a555");
pub const CLSID_ChannelIDTuningSpace = &CLSID_ChannelIDTuningSpace_Value;

const CLSID_ATSCTuningSpace_Value = Guid.initString("a2e30750-6c3d-11d3-b653-00c04f79498e");
pub const CLSID_ATSCTuningSpace = &CLSID_ATSCTuningSpace_Value;

const CLSID_DigitalCableTuningSpace_Value = Guid.initString("d9bb4cee-b87a-47f1-ac92-b08d9c7813fc");
pub const CLSID_DigitalCableTuningSpace = &CLSID_DigitalCableTuningSpace_Value;

const CLSID_AnalogRadioTuningSpace_Value = Guid.initString("8a674b4c-1f63-11d3-b64c-00c04f79498e");
pub const CLSID_AnalogRadioTuningSpace = &CLSID_AnalogRadioTuningSpace_Value;

const CLSID_AuxInTuningSpace_Value = Guid.initString("f9769a06-7aca-4e39-9cfb-97bb35f0e77e");
pub const CLSID_AuxInTuningSpace = &CLSID_AuxInTuningSpace_Value;

const CLSID_AnalogTVTuningSpace_Value = Guid.initString("8a674b4d-1f63-11d3-b64c-00c04f79498e");
pub const CLSID_AnalogTVTuningSpace = &CLSID_AnalogTVTuningSpace_Value;

const CLSID_DVBTuningSpace_Value = Guid.initString("c6b14b32-76aa-4a86-a7ac-5c79aaf58da7");
pub const CLSID_DVBTuningSpace = &CLSID_DVBTuningSpace_Value;

const CLSID_DVBSTuningSpace_Value = Guid.initString("b64016f3-c9a2-4066-96f0-bd9563314726");
pub const CLSID_DVBSTuningSpace = &CLSID_DVBSTuningSpace_Value;

const CLSID_ComponentTypes_Value = Guid.initString("a1a2b1c4-0e3a-11d3-9d8e-00c04f72d980");
pub const CLSID_ComponentTypes = &CLSID_ComponentTypes_Value;

const CLSID_ComponentType_Value = Guid.initString("823535a0-0318-11d3-9d8e-00c04f72d980");
pub const CLSID_ComponentType = &CLSID_ComponentType_Value;

const CLSID_LanguageComponentType_Value = Guid.initString("1be49f30-0e1b-11d3-9d8e-00c04f72d980");
pub const CLSID_LanguageComponentType = &CLSID_LanguageComponentType_Value;

const CLSID_MPEG2ComponentType_Value = Guid.initString("418008f3-cf67-4668-9628-10dc52be1d08");
pub const CLSID_MPEG2ComponentType = &CLSID_MPEG2ComponentType_Value;

const CLSID_ATSCComponentType_Value = Guid.initString("a8dcf3d5-0780-4ef4-8a83-2cffaacb8ace");
pub const CLSID_ATSCComponentType = &CLSID_ATSCComponentType_Value;

const CLSID_Components_Value = Guid.initString("809b6661-94c4-49e6-b6ec-3f0f862215aa");
pub const CLSID_Components = &CLSID_Components_Value;

const CLSID_Component_Value = Guid.initString("59dc47a8-116c-11d3-9d8e-00c04f72d980");
pub const CLSID_Component = &CLSID_Component_Value;

const CLSID_MPEG2Component_Value = Guid.initString("055cb2d7-2969-45cd-914b-76890722f112");
pub const CLSID_MPEG2Component = &CLSID_MPEG2Component_Value;

const CLSID_AnalogAudioComponentType_Value = Guid.initString("28ab0005-e845-4ffa-aa9b-f4665236141c");
pub const CLSID_AnalogAudioComponentType = &CLSID_AnalogAudioComponentType_Value;

const CLSID_TuneRequest_Value = Guid.initString("b46e0d38-ab35-4a06-a137-70576b01b39f");
pub const CLSID_TuneRequest = &CLSID_TuneRequest_Value;

const CLSID_ChannelIDTuneRequest_Value = Guid.initString("3a9428a7-31a4-45e9-9efb-e055bf7bb3db");
pub const CLSID_ChannelIDTuneRequest = &CLSID_ChannelIDTuneRequest_Value;

const CLSID_ChannelTuneRequest_Value = Guid.initString("0369b4e5-45b6-11d3-b650-00c04f79498e");
pub const CLSID_ChannelTuneRequest = &CLSID_ChannelTuneRequest_Value;

const CLSID_ATSCChannelTuneRequest_Value = Guid.initString("0369b4e6-45b6-11d3-b650-00c04f79498e");
pub const CLSID_ATSCChannelTuneRequest = &CLSID_ATSCChannelTuneRequest_Value;

const CLSID_DigitalCableTuneRequest_Value = Guid.initString("26ec0b63-aa90-458a-8df4-5659f2c8a18a");
pub const CLSID_DigitalCableTuneRequest = &CLSID_DigitalCableTuneRequest_Value;

const CLSID_MPEG2TuneRequest_Value = Guid.initString("0955ac62-bf2e-4cba-a2b9-a63f772d46cf");
pub const CLSID_MPEG2TuneRequest = &CLSID_MPEG2TuneRequest_Value;

const CLSID_MPEG2TuneRequestFactory_Value = Guid.initString("2c63e4eb-4cea-41b8-919c-e947ea19a77c");
pub const CLSID_MPEG2TuneRequestFactory = &CLSID_MPEG2TuneRequestFactory_Value;

const CLSID_Locator_Value = Guid.initString("0888c883-ac4f-4943-b516-2c38d9b34562");
pub const CLSID_Locator = &CLSID_Locator_Value;

const CLSID_DigitalLocator_Value = Guid.initString("6e50cc0d-c19b-4bf6-810b-5bd60761f5cc");
pub const CLSID_DigitalLocator = &CLSID_DigitalLocator_Value;

const CLSID_AnalogLocator_Value = Guid.initString("49638b91-48ab-48b7-a47a-7d0e75a08ede");
pub const CLSID_AnalogLocator = &CLSID_AnalogLocator_Value;

const CLSID_ATSCLocator_Value = Guid.initString("8872ff1b-98fa-4d7a-8d93-c9f1055f85bb");
pub const CLSID_ATSCLocator = &CLSID_ATSCLocator_Value;

const CLSID_DigitalCableLocator_Value = Guid.initString("03c06416-d127-407a-ab4c-fdd279abbe5d");
pub const CLSID_DigitalCableLocator = &CLSID_DigitalCableLocator_Value;

const CLSID_DVBTLocator_Value = Guid.initString("9cd64701-bdf3-4d14-8e03-f12983d86664");
pub const CLSID_DVBTLocator = &CLSID_DVBTLocator_Value;

const CLSID_DVBTLocator2_Value = Guid.initString("efe3fa02-45d7-4920-be96-53fa7f35b0e6");
pub const CLSID_DVBTLocator2 = &CLSID_DVBTLocator2_Value;

const CLSID_DVBSLocator_Value = Guid.initString("1df7d126-4050-47f0-a7cf-4c4ca9241333");
pub const CLSID_DVBSLocator = &CLSID_DVBSLocator_Value;

const CLSID_DVBCLocator_Value = Guid.initString("c531d9fd-9685-4028-8b68-6e1232079f1e");
pub const CLSID_DVBCLocator = &CLSID_DVBCLocator_Value;

const CLSID_ISDBSLocator_Value = Guid.initString("6504afed-a629-455c-a7f1-04964dea5cc4");
pub const CLSID_ISDBSLocator = &CLSID_ISDBSLocator_Value;

const CLSID_DVBTuneRequest_Value = Guid.initString("15d6504a-5494-499c-886c-973c9e53b9f1");
pub const CLSID_DVBTuneRequest = &CLSID_DVBTuneRequest_Value;

const CLSID_CreatePropBagOnRegKey_Value = Guid.initString("8a674b49-1f63-11d3-b64c-00c04f79498e");
pub const CLSID_CreatePropBagOnRegKey = &CLSID_CreatePropBagOnRegKey_Value;

const CLSID_BroadcastEventService_Value = Guid.initString("0b3ffb92-0919-4934-9d5b-619c719d0202");
pub const CLSID_BroadcastEventService = &CLSID_BroadcastEventService_Value;

const CLSID_TunerMarshaler_Value = Guid.initString("6438570b-0c08-4a25-9504-8012bb4d50cf");
pub const CLSID_TunerMarshaler = &CLSID_TunerMarshaler_Value;

const CLSID_PersistTuneXmlUtility_Value = Guid.initString("e77026b0-b97f-4cbb-b7fb-f4f03ad69f11");
pub const CLSID_PersistTuneXmlUtility = &CLSID_PersistTuneXmlUtility_Value;

const CLSID_ESEventService_Value = Guid.initString("c20447fc-ec60-475e-813f-d2b0a6decefe");
pub const CLSID_ESEventService = &CLSID_ESEventService_Value;

const CLSID_ESEventFactory_Value = Guid.initString("8e8a07da-71f8-40c1-a929-5e3a868ac2c6");
pub const CLSID_ESEventFactory = &CLSID_ESEventFactory_Value;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_ICreatePropBagOnRegKey_Value = Guid.initString("8a674b48-1f63-11d3-b64c-00c04f79498e");
pub const IID_ICreatePropBagOnRegKey = &IID_ICreatePropBagOnRegKey_Value;
pub const ICreatePropBagOnRegKey = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Create: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICreatePropBagOnRegKey,
                hkey: ?HKEY,
                subkey: ?[*:0]const u16,
                ulOptions: u32,
                samDesired: u32,
                iid: ?*const Guid,
                ppBag: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICreatePropBagOnRegKey,
                hkey: ?HKEY,
                subkey: ?[*:0]const u16,
                ulOptions: u32,
                samDesired: u32,
                iid: ?*const Guid,
                ppBag: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICreatePropBagOnRegKey_Create(self: *const T, hkey: ?HKEY, subkey: ?[*:0]const u16, ulOptions: u32, samDesired: u32, iid: ?*const Guid, ppBag: ?*?*anyopaque) HRESULT {
                return @as(*const ICreatePropBagOnRegKey.VTable, @ptrCast(self.vtable)).Create(@as(*const ICreatePropBagOnRegKey, @ptrCast(self)), hkey, subkey, ulOptions, samDesired, iid, ppBag);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DISPID_TUNER = enum(i32) {
    TUNER_TS_UNIQUENAME = 1,
    TUNER_TS_FRIENDLYNAME = 2,
    TUNER_TS_CLSID = 3,
    TUNER_TS_NETWORKTYPE = 4,
    TUNER_TS__NETWORKTYPE = 5,
    TUNER_TS_CREATETUNEREQUEST = 6,
    TUNER_TS_ENUMCATEGORYGUIDS = 7,
    TUNER_TS_ENUMDEVICEMONIKERS = 8,
    TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES = 9,
    TUNER_TS_FREQMAP = 10,
    TUNER_TS_DEFLOCATOR = 11,
    TUNER_TS_CLONE = 12,
    // TUNER_TR_TUNINGSPACE = 1, this enum value conflicts with TUNER_TS_UNIQUENAME
    // TUNER_TR_COMPONENTS = 2, this enum value conflicts with TUNER_TS_FRIENDLYNAME
    // TUNER_TR_CLONE = 3, this enum value conflicts with TUNER_TS_CLSID
    // TUNER_TR_LOCATOR = 4, this enum value conflicts with TUNER_TS_NETWORKTYPE
    // TUNER_CT_CATEGORY = 1, this enum value conflicts with TUNER_TS_UNIQUENAME
    // TUNER_CT_MEDIAMAJORTYPE = 2, this enum value conflicts with TUNER_TS_FRIENDLYNAME
    // TUNER_CT__MEDIAMAJORTYPE = 3, this enum value conflicts with TUNER_TS_CLSID
    // TUNER_CT_MEDIASUBTYPE = 4, this enum value conflicts with TUNER_TS_NETWORKTYPE
    // TUNER_CT__MEDIASUBTYPE = 5, this enum value conflicts with TUNER_TS__NETWORKTYPE
    // TUNER_CT_MEDIAFORMATTYPE = 6, this enum value conflicts with TUNER_TS_CREATETUNEREQUEST
    // TUNER_CT__MEDIAFORMATTYPE = 7, this enum value conflicts with TUNER_TS_ENUMCATEGORYGUIDS
    // TUNER_CT_MEDIATYPE = 8, this enum value conflicts with TUNER_TS_ENUMDEVICEMONIKERS
    // TUNER_CT_CLONE = 9, this enum value conflicts with TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES
    TUNER_LCT_LANGID = 100,
    TUNER_MP2CT_TYPE = 200,
    TUNER_ATSCCT_FLAGS = 300,
    // TUNER_L_CARRFREQ = 1, this enum value conflicts with TUNER_TS_UNIQUENAME
    // TUNER_L_INNERFECMETHOD = 2, this enum value conflicts with TUNER_TS_FRIENDLYNAME
    // TUNER_L_INNERFECRATE = 3, this enum value conflicts with TUNER_TS_CLSID
    // TUNER_L_OUTERFECMETHOD = 4, this enum value conflicts with TUNER_TS_NETWORKTYPE
    // TUNER_L_OUTERFECRATE = 5, this enum value conflicts with TUNER_TS__NETWORKTYPE
    // TUNER_L_MOD = 6, this enum value conflicts with TUNER_TS_CREATETUNEREQUEST
    // TUNER_L_SYMRATE = 7, this enum value conflicts with TUNER_TS_ENUMCATEGORYGUIDS
    // TUNER_L_CLONE = 8, this enum value conflicts with TUNER_TS_ENUMDEVICEMONIKERS
    TUNER_L_ATSC_PHYS_CHANNEL = 201,
    TUNER_L_ATSC_TSID = 202,
    TUNER_L_ATSC_MP2_PROGNO = 203,
    TUNER_L_DVBT_BANDWIDTH = 301,
    TUNER_L_DVBT_LPINNERFECMETHOD = 302,
    TUNER_L_DVBT_LPINNERFECRATE = 303,
    TUNER_L_DVBT_GUARDINTERVAL = 304,
    TUNER_L_DVBT_HALPHA = 305,
    TUNER_L_DVBT_TRANSMISSIONMODE = 306,
    TUNER_L_DVBT_INUSE = 307,
    TUNER_L_DVBT2_PHYSICALLAYERPIPEID = 351,
    TUNER_L_DVBS_POLARISATION = 401,
    TUNER_L_DVBS_WEST = 402,
    TUNER_L_DVBS_ORBITAL = 403,
    TUNER_L_DVBS_AZIMUTH = 404,
    TUNER_L_DVBS_ELEVATION = 405,
    TUNER_L_DVBS2_DISEQ_LNB_SOURCE = 406,
    TUNER_TS_DVBS2_LOW_OSC_FREQ_OVERRIDE = 407,
    TUNER_TS_DVBS2_HI_OSC_FREQ_OVERRIDE = 408,
    TUNER_TS_DVBS2_LNB_SWITCH_FREQ_OVERRIDE = 409,
    TUNER_TS_DVBS2_SPECTRAL_INVERSION_OVERRIDE = 410,
    TUNER_L_DVBS2_ROLLOFF = 411,
    TUNER_L_DVBS2_PILOT = 412,
    TUNER_L_ANALOG_STANDARD = 601,
    TUNER_L_DTV_O_MAJOR_CHANNEL = 701,
    // TUNER_C_TYPE = 1, this enum value conflicts with TUNER_TS_UNIQUENAME
    // TUNER_C_STATUS = 2, this enum value conflicts with TUNER_TS_FRIENDLYNAME
    // TUNER_C_LANGID = 3, this enum value conflicts with TUNER_TS_CLSID
    // TUNER_C_DESCRIPTION = 4, this enum value conflicts with TUNER_TS_NETWORKTYPE
    // TUNER_C_CLONE = 5, this enum value conflicts with TUNER_TS__NETWORKTYPE
    TUNER_C_MP2_PID = 101,
    TUNER_C_MP2_PCRPID = 102,
    TUNER_C_MP2_PROGNO = 103,
    // TUNER_C_ANALOG_AUDIO = 201, this enum value conflicts with TUNER_L_ATSC_PHYS_CHANNEL
    // TUNER_TS_DVB_SYSTEMTYPE = 101, this enum value conflicts with TUNER_C_MP2_PID
    // TUNER_TS_DVB2_NETWORK_ID = 102, this enum value conflicts with TUNER_C_MP2_PCRPID
    TUNER_TS_DVBS_LOW_OSC_FREQ = 1001,
    TUNER_TS_DVBS_HI_OSC_FREQ = 1002,
    TUNER_TS_DVBS_LNB_SWITCH_FREQ = 1003,
    TUNER_TS_DVBS_INPUT_RANGE = 1004,
    TUNER_TS_DVBS_SPECTRAL_INVERSION = 1005,
    // TUNER_TS_AR_MINFREQUENCY = 101, this enum value conflicts with TUNER_C_MP2_PID
    // TUNER_TS_AR_MAXFREQUENCY = 102, this enum value conflicts with TUNER_C_MP2_PCRPID
    // TUNER_TS_AR_STEP = 103, this enum value conflicts with TUNER_C_MP2_PROGNO
    TUNER_TS_AR_COUNTRYCODE = 104,
    // TUNER_TS_AUX_COUNTRYCODE = 101, this enum value conflicts with TUNER_C_MP2_PID
    // TUNER_TS_ATV_MINCHANNEL = 101, this enum value conflicts with TUNER_C_MP2_PID
    // TUNER_TS_ATV_MAXCHANNEL = 102, this enum value conflicts with TUNER_C_MP2_PCRPID
    // TUNER_TS_ATV_INPUTTYPE = 103, this enum value conflicts with TUNER_C_MP2_PROGNO
    // TUNER_TS_ATV_COUNTRYCODE = 104, this enum value conflicts with TUNER_TS_AR_COUNTRYCODE
    // TUNER_TS_ATSC_MINMINORCHANNEL = 201, this enum value conflicts with TUNER_L_ATSC_PHYS_CHANNEL
    // TUNER_TS_ATSC_MAXMINORCHANNEL = 202, this enum value conflicts with TUNER_L_ATSC_TSID
    // TUNER_TS_ATSC_MINPHYSCHANNEL = 203, this enum value conflicts with TUNER_L_ATSC_MP2_PROGNO
    TUNER_TS_ATSC_MAXPHYSCHANNEL = 204,
    // TUNER_TS_DC_MINMAJORCHANNEL = 301, this enum value conflicts with TUNER_L_DVBT_BANDWIDTH
    // TUNER_TS_DC_MAXMAJORCHANNEL = 302, this enum value conflicts with TUNER_L_DVBT_LPINNERFECMETHOD
    // TUNER_TS_DC_MINSOURCEID = 303, this enum value conflicts with TUNER_L_DVBT_LPINNERFECRATE
    // TUNER_TS_DC_MAXSOURCEID = 304, this enum value conflicts with TUNER_L_DVBT_GUARDINTERVAL
    // CHTUNER_ATVAC_CHANNEL = 101, this enum value conflicts with TUNER_C_MP2_PID
    // CHTUNER_ATVDC_SYSTEM = 101, this enum value conflicts with TUNER_C_MP2_PID
    // CHTUNER_ATVDC_CONTENT = 102, this enum value conflicts with TUNER_C_MP2_PCRPID
    // CHTUNER_CIDTR_CHANNELID = 101, this enum value conflicts with TUNER_C_MP2_PID
    // CHTUNER_CTR_CHANNEL = 101, this enum value conflicts with TUNER_C_MP2_PID
    // CHTUNER_ACTR_MINOR_CHANNEL = 201, this enum value conflicts with TUNER_L_ATSC_PHYS_CHANNEL
    // CHTUNER_DCTR_MAJOR_CHANNEL = 301, this enum value conflicts with TUNER_L_DVBT_BANDWIDTH
    // CHTUNER_DCTR_SRCID = 302, this enum value conflicts with TUNER_L_DVBT_LPINNERFECMETHOD
    // DVBTUNER_DVBC_ATTRIBUTESVALID = 101, this enum value conflicts with TUNER_C_MP2_PID
    // DVBTUNER_DVBC_PID = 102, this enum value conflicts with TUNER_C_MP2_PCRPID
    // DVBTUNER_DVBC_TAG = 103, this enum value conflicts with TUNER_C_MP2_PROGNO
    // DVBTUNER_DVBC_COMPONENTTYPE = 104, this enum value conflicts with TUNER_TS_AR_COUNTRYCODE
    // DVBTUNER_ONID = 101, this enum value conflicts with TUNER_C_MP2_PID
    // DVBTUNER_TSID = 102, this enum value conflicts with TUNER_C_MP2_PCRPID
    // DVBTUNER_SID = 103, this enum value conflicts with TUNER_C_MP2_PROGNO
    // MP2TUNER_TSID = 101, this enum value conflicts with TUNER_C_MP2_PID
    // MP2TUNER_PROGNO = 102, this enum value conflicts with TUNER_C_MP2_PCRPID
    // MP2TUNERFACTORY_CREATETUNEREQUEST = 1, this enum value conflicts with TUNER_TS_UNIQUENAME
};
pub const DISPID_TUNER_TS_UNIQUENAME = DISPID_TUNER.TUNER_TS_UNIQUENAME;
pub const DISPID_TUNER_TS_FRIENDLYNAME = DISPID_TUNER.TUNER_TS_FRIENDLYNAME;
pub const DISPID_TUNER_TS_CLSID = DISPID_TUNER.TUNER_TS_CLSID;
pub const DISPID_TUNER_TS_NETWORKTYPE = DISPID_TUNER.TUNER_TS_NETWORKTYPE;
pub const DISPID_TUNER_TS__NETWORKTYPE = DISPID_TUNER.TUNER_TS__NETWORKTYPE;
pub const DISPID_TUNER_TS_CREATETUNEREQUEST = DISPID_TUNER.TUNER_TS_CREATETUNEREQUEST;
pub const DISPID_TUNER_TS_ENUMCATEGORYGUIDS = DISPID_TUNER.TUNER_TS_ENUMCATEGORYGUIDS;
pub const DISPID_TUNER_TS_ENUMDEVICEMONIKERS = DISPID_TUNER.TUNER_TS_ENUMDEVICEMONIKERS;
pub const DISPID_TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES = DISPID_TUNER.TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES;
pub const DISPID_TUNER_TS_FREQMAP = DISPID_TUNER.TUNER_TS_FREQMAP;
pub const DISPID_TUNER_TS_DEFLOCATOR = DISPID_TUNER.TUNER_TS_DEFLOCATOR;
pub const DISPID_TUNER_TS_CLONE = DISPID_TUNER.TUNER_TS_CLONE;
pub const DISPID_TUNER_TR_TUNINGSPACE = DISPID_TUNER.TUNER_TS_UNIQUENAME;
pub const DISPID_TUNER_TR_COMPONENTS = DISPID_TUNER.TUNER_TS_FRIENDLYNAME;
pub const DISPID_TUNER_TR_CLONE = DISPID_TUNER.TUNER_TS_CLSID;
pub const DISPID_TUNER_TR_LOCATOR = DISPID_TUNER.TUNER_TS_NETWORKTYPE;
pub const DISPID_TUNER_CT_CATEGORY = DISPID_TUNER.TUNER_TS_UNIQUENAME;
pub const DISPID_TUNER_CT_MEDIAMAJORTYPE = DISPID_TUNER.TUNER_TS_FRIENDLYNAME;
pub const DISPID_TUNER_CT__MEDIAMAJORTYPE = DISPID_TUNER.TUNER_TS_CLSID;
pub const DISPID_TUNER_CT_MEDIASUBTYPE = DISPID_TUNER.TUNER_TS_NETWORKTYPE;
pub const DISPID_TUNER_CT__MEDIASUBTYPE = DISPID_TUNER.TUNER_TS__NETWORKTYPE;
pub const DISPID_TUNER_CT_MEDIAFORMATTYPE = DISPID_TUNER.TUNER_TS_CREATETUNEREQUEST;
pub const DISPID_TUNER_CT__MEDIAFORMATTYPE = DISPID_TUNER.TUNER_TS_ENUMCATEGORYGUIDS;
pub const DISPID_TUNER_CT_MEDIATYPE = DISPID_TUNER.TUNER_TS_ENUMDEVICEMONIKERS;
pub const DISPID_TUNER_CT_CLONE = DISPID_TUNER.TUNER_TS_DEFAULTPREFERREDCOMPONENTTYPES;
pub const DISPID_TUNER_LCT_LANGID = DISPID_TUNER.TUNER_LCT_LANGID;
pub const DISPID_TUNER_MP2CT_TYPE = DISPID_TUNER.TUNER_MP2CT_TYPE;
pub const DISPID_TUNER_ATSCCT_FLAGS = DISPID_TUNER.TUNER_ATSCCT_FLAGS;
pub const DISPID_TUNER_L_CARRFREQ = DISPID_TUNER.TUNER_TS_UNIQUENAME;
pub const DISPID_TUNER_L_INNERFECMETHOD = DISPID_TUNER.TUNER_TS_FRIENDLYNAME;
pub const DISPID_TUNER_L_INNERFECRATE = DISPID_TUNER.TUNER_TS_CLSID;
pub const DISPID_TUNER_L_OUTERFECMETHOD = DISPID_TUNER.TUNER_TS_NETWORKTYPE;
pub const DISPID_TUNER_L_OUTERFECRATE = DISPID_TUNER.TUNER_TS__NETWORKTYPE;
pub const DISPID_TUNER_L_MOD = DISPID_TUNER.TUNER_TS_CREATETUNEREQUEST;
pub const DISPID_TUNER_L_SYMRATE = DISPID_TUNER.TUNER_TS_ENUMCATEGORYGUIDS;
pub const DISPID_TUNER_L_CLONE = DISPID_TUNER.TUNER_TS_ENUMDEVICEMONIKERS;
pub const DISPID_TUNER_L_ATSC_PHYS_CHANNEL = DISPID_TUNER.TUNER_L_ATSC_PHYS_CHANNEL;
pub const DISPID_TUNER_L_ATSC_TSID = DISPID_TUNER.TUNER_L_ATSC_TSID;
pub const DISPID_TUNER_L_ATSC_MP2_PROGNO = DISPID_TUNER.TUNER_L_ATSC_MP2_PROGNO;
pub const DISPID_TUNER_L_DVBT_BANDWIDTH = DISPID_TUNER.TUNER_L_DVBT_BANDWIDTH;
pub const DISPID_TUNER_L_DVBT_LPINNERFECMETHOD = DISPID_TUNER.TUNER_L_DVBT_LPINNERFECMETHOD;
pub const DISPID_TUNER_L_DVBT_LPINNERFECRATE = DISPID_TUNER.TUNER_L_DVBT_LPINNERFECRATE;
pub const DISPID_TUNER_L_DVBT_GUARDINTERVAL = DISPID_TUNER.TUNER_L_DVBT_GUARDINTERVAL;
pub const DISPID_TUNER_L_DVBT_HALPHA = DISPID_TUNER.TUNER_L_DVBT_HALPHA;
pub const DISPID_TUNER_L_DVBT_TRANSMISSIONMODE = DISPID_TUNER.TUNER_L_DVBT_TRANSMISSIONMODE;
pub const DISPID_TUNER_L_DVBT_INUSE = DISPID_TUNER.TUNER_L_DVBT_INUSE;
pub const DISPID_TUNER_L_DVBT2_PHYSICALLAYERPIPEID = DISPID_TUNER.TUNER_L_DVBT2_PHYSICALLAYERPIPEID;
pub const DISPID_TUNER_L_DVBS_POLARISATION = DISPID_TUNER.TUNER_L_DVBS_POLARISATION;
pub const DISPID_TUNER_L_DVBS_WEST = DISPID_TUNER.TUNER_L_DVBS_WEST;
pub const DISPID_TUNER_L_DVBS_ORBITAL = DISPID_TUNER.TUNER_L_DVBS_ORBITAL;
pub const DISPID_TUNER_L_DVBS_AZIMUTH = DISPID_TUNER.TUNER_L_DVBS_AZIMUTH;
pub const DISPID_TUNER_L_DVBS_ELEVATION = DISPID_TUNER.TUNER_L_DVBS_ELEVATION;
pub const DISPID_TUNER_L_DVBS2_DISEQ_LNB_SOURCE = DISPID_TUNER.TUNER_L_DVBS2_DISEQ_LNB_SOURCE;
pub const DISPID_TUNER_TS_DVBS2_LOW_OSC_FREQ_OVERRIDE = DISPID_TUNER.TUNER_TS_DVBS2_LOW_OSC_FREQ_OVERRIDE;
pub const DISPID_TUNER_TS_DVBS2_HI_OSC_FREQ_OVERRIDE = DISPID_TUNER.TUNER_TS_DVBS2_HI_OSC_FREQ_OVERRIDE;
pub const DISPID_TUNER_TS_DVBS2_LNB_SWITCH_FREQ_OVERRIDE = DISPID_TUNER.TUNER_TS_DVBS2_LNB_SWITCH_FREQ_OVERRIDE;
pub const DISPID_TUNER_TS_DVBS2_SPECTRAL_INVERSION_OVERRIDE = DISPID_TUNER.TUNER_TS_DVBS2_SPECTRAL_INVERSION_OVERRIDE;
pub const DISPID_TUNER_L_DVBS2_ROLLOFF = DISPID_TUNER.TUNER_L_DVBS2_ROLLOFF;
pub const DISPID_TUNER_L_DVBS2_PILOT = DISPID_TUNER.TUNER_L_DVBS2_PILOT;
pub const DISPID_TUNER_L_ANALOG_STANDARD = DISPID_TUNER.TUNER_L_ANALOG_STANDARD;
pub const DISPID_TUNER_L_DTV_O_MAJOR_CHANNEL = DISPID_TUNER.TUNER_L_DTV_O_MAJOR_CHANNEL;
pub const DISPID_TUNER_C_TYPE = DISPID_TUNER.TUNER_TS_UNIQUENAME;
pub const DISPID_TUNER_C_STATUS = DISPID_TUNER.TUNER_TS_FRIENDLYNAME;
pub const DISPID_TUNER_C_LANGID = DISPID_TUNER.TUNER_TS_CLSID;
pub const DISPID_TUNER_C_DESCRIPTION = DISPID_TUNER.TUNER_TS_NETWORKTYPE;
pub const DISPID_TUNER_C_CLONE = DISPID_TUNER.TUNER_TS__NETWORKTYPE;
pub const DISPID_TUNER_C_MP2_PID = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_TUNER_C_MP2_PCRPID = DISPID_TUNER.TUNER_C_MP2_PCRPID;
pub const DISPID_TUNER_C_MP2_PROGNO = DISPID_TUNER.TUNER_C_MP2_PROGNO;
pub const DISPID_TUNER_C_ANALOG_AUDIO = DISPID_TUNER.TUNER_L_ATSC_PHYS_CHANNEL;
pub const DISPID_TUNER_TS_DVB_SYSTEMTYPE = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_TUNER_TS_DVB2_NETWORK_ID = DISPID_TUNER.TUNER_C_MP2_PCRPID;
pub const DISPID_TUNER_TS_DVBS_LOW_OSC_FREQ = DISPID_TUNER.TUNER_TS_DVBS_LOW_OSC_FREQ;
pub const DISPID_TUNER_TS_DVBS_HI_OSC_FREQ = DISPID_TUNER.TUNER_TS_DVBS_HI_OSC_FREQ;
pub const DISPID_TUNER_TS_DVBS_LNB_SWITCH_FREQ = DISPID_TUNER.TUNER_TS_DVBS_LNB_SWITCH_FREQ;
pub const DISPID_TUNER_TS_DVBS_INPUT_RANGE = DISPID_TUNER.TUNER_TS_DVBS_INPUT_RANGE;
pub const DISPID_TUNER_TS_DVBS_SPECTRAL_INVERSION = DISPID_TUNER.TUNER_TS_DVBS_SPECTRAL_INVERSION;
pub const DISPID_TUNER_TS_AR_MINFREQUENCY = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_TUNER_TS_AR_MAXFREQUENCY = DISPID_TUNER.TUNER_C_MP2_PCRPID;
pub const DISPID_TUNER_TS_AR_STEP = DISPID_TUNER.TUNER_C_MP2_PROGNO;
pub const DISPID_TUNER_TS_AR_COUNTRYCODE = DISPID_TUNER.TUNER_TS_AR_COUNTRYCODE;
pub const DISPID_TUNER_TS_AUX_COUNTRYCODE = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_TUNER_TS_ATV_MINCHANNEL = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_TUNER_TS_ATV_MAXCHANNEL = DISPID_TUNER.TUNER_C_MP2_PCRPID;
pub const DISPID_TUNER_TS_ATV_INPUTTYPE = DISPID_TUNER.TUNER_C_MP2_PROGNO;
pub const DISPID_TUNER_TS_ATV_COUNTRYCODE = DISPID_TUNER.TUNER_TS_AR_COUNTRYCODE;
pub const DISPID_TUNER_TS_ATSC_MINMINORCHANNEL = DISPID_TUNER.TUNER_L_ATSC_PHYS_CHANNEL;
pub const DISPID_TUNER_TS_ATSC_MAXMINORCHANNEL = DISPID_TUNER.TUNER_L_ATSC_TSID;
pub const DISPID_TUNER_TS_ATSC_MINPHYSCHANNEL = DISPID_TUNER.TUNER_L_ATSC_MP2_PROGNO;
pub const DISPID_TUNER_TS_ATSC_MAXPHYSCHANNEL = DISPID_TUNER.TUNER_TS_ATSC_MAXPHYSCHANNEL;
pub const DISPID_TUNER_TS_DC_MINMAJORCHANNEL = DISPID_TUNER.TUNER_L_DVBT_BANDWIDTH;
pub const DISPID_TUNER_TS_DC_MAXMAJORCHANNEL = DISPID_TUNER.TUNER_L_DVBT_LPINNERFECMETHOD;
pub const DISPID_TUNER_TS_DC_MINSOURCEID = DISPID_TUNER.TUNER_L_DVBT_LPINNERFECRATE;
pub const DISPID_TUNER_TS_DC_MAXSOURCEID = DISPID_TUNER.TUNER_L_DVBT_GUARDINTERVAL;
pub const DISPID_CHTUNER_ATVAC_CHANNEL = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_CHTUNER_ATVDC_SYSTEM = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_CHTUNER_ATVDC_CONTENT = DISPID_TUNER.TUNER_C_MP2_PCRPID;
pub const DISPID_CHTUNER_CIDTR_CHANNELID = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_CHTUNER_CTR_CHANNEL = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_CHTUNER_ACTR_MINOR_CHANNEL = DISPID_TUNER.TUNER_L_ATSC_PHYS_CHANNEL;
pub const DISPID_CHTUNER_DCTR_MAJOR_CHANNEL = DISPID_TUNER.TUNER_L_DVBT_BANDWIDTH;
pub const DISPID_CHTUNER_DCTR_SRCID = DISPID_TUNER.TUNER_L_DVBT_LPINNERFECMETHOD;
pub const DISPID_DVBTUNER_DVBC_ATTRIBUTESVALID = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_DVBTUNER_DVBC_PID = DISPID_TUNER.TUNER_C_MP2_PCRPID;
pub const DISPID_DVBTUNER_DVBC_TAG = DISPID_TUNER.TUNER_C_MP2_PROGNO;
pub const DISPID_DVBTUNER_DVBC_COMPONENTTYPE = DISPID_TUNER.TUNER_TS_AR_COUNTRYCODE;
pub const DISPID_DVBTUNER_ONID = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_DVBTUNER_TSID = DISPID_TUNER.TUNER_C_MP2_PCRPID;
pub const DISPID_DVBTUNER_SID = DISPID_TUNER.TUNER_C_MP2_PROGNO;
pub const DISPID_MP2TUNER_TSID = DISPID_TUNER.TUNER_C_MP2_PID;
pub const DISPID_MP2TUNER_PROGNO = DISPID_TUNER.TUNER_C_MP2_PCRPID;
pub const DISPID_MP2TUNERFACTORY_CREATETUNEREQUEST = DISPID_TUNER.TUNER_TS_UNIQUENAME;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_ITuningSpaces_Value = Guid.initString("901284e4-33fe-4b69-8d63-634a596f3756");
pub const IID_ITuningSpaces = &IID_ITuningSpaces_Value;
pub const ITuningSpaces = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaces,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaces,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaces,
                NewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaces,
                NewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaces,
                varIndex: VARIANT,
                TuningSpace: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaces,
                varIndex: VARIANT,
                TuningSpace: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EnumTuningSpaces: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaces,
                NewEnum: ?*?*IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaces,
                NewEnum: ?*?*IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaces_get_Count(self: *const T, Count: ?*i32) HRESULT {
                return @as(*const ITuningSpaces.VTable, @ptrCast(self.vtable)).get_Count(@as(*const ITuningSpaces, @ptrCast(self)), Count);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaces_get__NewEnum(self: *const T, NewEnum: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const ITuningSpaces.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const ITuningSpaces, @ptrCast(self)), NewEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaces_get_Item(self: *const T, varIndex: VARIANT, TuningSpace: ?*?*ITuningSpace) HRESULT {
                return @as(*const ITuningSpaces.VTable, @ptrCast(self.vtable)).get_Item(@as(*const ITuningSpaces, @ptrCast(self)), varIndex, TuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaces_get_EnumTuningSpaces(self: *const T, NewEnum: ?*?*IEnumTuningSpaces) HRESULT {
                return @as(*const ITuningSpaces.VTable, @ptrCast(self.vtable)).get_EnumTuningSpaces(@as(*const ITuningSpaces, @ptrCast(self)), NewEnum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_ITuningSpaceContainer_Value = Guid.initString("5b692e84-e2f1-11d2-9493-00c04f72d980");
pub const IID_ITuningSpaceContainer = &IID_ITuningSpaceContainer_Value;
pub const ITuningSpaceContainer = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaceContainer,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                NewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaceContainer,
                NewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                varIndex: VARIANT,
                TuningSpace: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaceContainer,
                varIndex: VARIANT,
                TuningSpace: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                varIndex: VARIANT,
                TuningSpace: ?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaceContainer,
                varIndex: VARIANT,
                TuningSpace: ?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TuningSpacesForCLSID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                SpaceCLSID: ?BSTR,
                NewColl: ?*?*ITuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpaceContainer,
                SpaceCLSID: ?BSTR,
                NewColl: ?*?*ITuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        _TuningSpacesForCLSID2: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                SpaceCLSID: ?*const Guid,
                NewColl: ?*?*ITuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpaceContainer,
                SpaceCLSID: ?*const Guid,
                NewColl: ?*?*ITuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TuningSpacesForName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                Name: ?BSTR,
                NewColl: ?*?*ITuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpaceContainer,
                Name: ?BSTR,
                NewColl: ?*?*ITuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                TuningSpace: ?*ITuningSpace,
                ID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpaceContainer,
                TuningSpace: ?*ITuningSpace,
                ID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Add: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                TuningSpace: ?*ITuningSpace,
                NewIndex: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpaceContainer,
                TuningSpace: ?*ITuningSpace,
                NewIndex: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EnumTuningSpaces: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                ppEnum: ?*?*IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaceContainer,
                ppEnum: ?*?*IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Remove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                Index: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpaceContainer,
                Index: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaxCount: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                MaxCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaceContainer,
                MaxCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MaxCount: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpaceContainer,
                MaxCount: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpaceContainer,
                MaxCount: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_get_Count(self: *const T, Count: ?*i32) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).get_Count(@as(*const ITuningSpaceContainer, @ptrCast(self)), Count);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_get__NewEnum(self: *const T, NewEnum: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const ITuningSpaceContainer, @ptrCast(self)), NewEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_get_Item(self: *const T, varIndex: VARIANT, TuningSpace: ?*?*ITuningSpace) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).get_Item(@as(*const ITuningSpaceContainer, @ptrCast(self)), varIndex, TuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_put_Item(self: *const T, varIndex: VARIANT, TuningSpace: ?*ITuningSpace) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).put_Item(@as(*const ITuningSpaceContainer, @ptrCast(self)), varIndex, TuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_TuningSpacesForCLSID(self: *const T, SpaceCLSID: ?BSTR, NewColl: ?*?*ITuningSpaces) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).TuningSpacesForCLSID(@as(*const ITuningSpaceContainer, @ptrCast(self)), SpaceCLSID, NewColl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer__TuningSpacesForCLSID2(self: *const T, SpaceCLSID: ?*const Guid, NewColl: ?*?*ITuningSpaces) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable))._TuningSpacesForCLSID2(@as(*const ITuningSpaceContainer, @ptrCast(self)), SpaceCLSID, NewColl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_TuningSpacesForName(self: *const T, Name: ?BSTR, NewColl: ?*?*ITuningSpaces) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).TuningSpacesForName(@as(*const ITuningSpaceContainer, @ptrCast(self)), Name, NewColl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_FindID(self: *const T, TuningSpace: ?*ITuningSpace, ID: ?*i32) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).FindID(@as(*const ITuningSpaceContainer, @ptrCast(self)), TuningSpace, ID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_Add(self: *const T, TuningSpace: ?*ITuningSpace, NewIndex: ?*VARIANT) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).Add(@as(*const ITuningSpaceContainer, @ptrCast(self)), TuningSpace, NewIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_get_EnumTuningSpaces(self: *const T, ppEnum: ?*?*IEnumTuningSpaces) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).get_EnumTuningSpaces(@as(*const ITuningSpaceContainer, @ptrCast(self)), ppEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_Remove(self: *const T, Index: VARIANT) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).Remove(@as(*const ITuningSpaceContainer, @ptrCast(self)), Index);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_get_MaxCount(self: *const T, MaxCount: ?*i32) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).get_MaxCount(@as(*const ITuningSpaceContainer, @ptrCast(self)), MaxCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpaceContainer_put_MaxCount(self: *const T, MaxCount: i32) HRESULT {
                return @as(*const ITuningSpaceContainer.VTable, @ptrCast(self.vtable)).put_MaxCount(@as(*const ITuningSpaceContainer, @ptrCast(self)), MaxCount);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_ITuningSpace_Value = Guid.initString("061c6e30-e622-11d2-9493-00c04f72d980");
pub const IID_ITuningSpace = &IID_ITuningSpace_Value;
pub const ITuningSpace = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_UniqueName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                Name: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                Name: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_UniqueName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                Name: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                Name: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FriendlyName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                Name: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                Name: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FriendlyName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                Name: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                Name: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CLSID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                SpaceCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                SpaceCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NetworkType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                NetworkTypeGuid: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                NetworkTypeGuid: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_NetworkType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                NetworkTypeGuid: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                NetworkTypeGuid: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NetworkType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                NetworkTypeGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                NetworkTypeGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__NetworkType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                NetworkTypeGuid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                NetworkTypeGuid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateTuneRequest: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpace,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpace,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumCategoryGUIDs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpace,
                ppEnum: ?*?*IEnumGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpace,
                ppEnum: ?*?*IEnumGUID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumDeviceMonikers: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpace,
                ppEnum: ?*?*IEnumMoniker,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpace,
                ppEnum: ?*?*IEnumMoniker,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultPreferredComponentTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                ComponentTypes: ?*?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                ComponentTypes: ?*?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DefaultPreferredComponentTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                NewComponentTypes: ?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                NewComponentTypes: ?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FrequencyMapping: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                pMapping: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                pMapping: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FrequencyMapping: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                Mapping: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                Mapping: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultLocator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                LocatorVal: ?*?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                LocatorVal: ?*?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DefaultLocator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuningSpace,
                LocatorVal: ?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuningSpace,
                LocatorVal: ?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuningSpace,
                NewTS: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuningSpace,
                NewTS: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_get_UniqueName(self: *const T, Name: ?*?BSTR) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).get_UniqueName(@as(*const ITuningSpace, @ptrCast(self)), Name);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_put_UniqueName(self: *const T, Name: ?BSTR) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).put_UniqueName(@as(*const ITuningSpace, @ptrCast(self)), Name);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_get_FriendlyName(self: *const T, Name: ?*?BSTR) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).get_FriendlyName(@as(*const ITuningSpace, @ptrCast(self)), Name);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_put_FriendlyName(self: *const T, Name: ?BSTR) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).put_FriendlyName(@as(*const ITuningSpace, @ptrCast(self)), Name);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_get_CLSID(self: *const T, SpaceCLSID: ?*?BSTR) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).get_CLSID(@as(*const ITuningSpace, @ptrCast(self)), SpaceCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_get_NetworkType(self: *const T, NetworkTypeGuid: ?*?BSTR) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).get_NetworkType(@as(*const ITuningSpace, @ptrCast(self)), NetworkTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_put_NetworkType(self: *const T, NetworkTypeGuid: ?BSTR) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).put_NetworkType(@as(*const ITuningSpace, @ptrCast(self)), NetworkTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_get__NetworkType(self: *const T, NetworkTypeGuid: ?*Guid) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).get__NetworkType(@as(*const ITuningSpace, @ptrCast(self)), NetworkTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_put__NetworkType(self: *const T, NetworkTypeGuid: ?*const Guid) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).put__NetworkType(@as(*const ITuningSpace, @ptrCast(self)), NetworkTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_CreateTuneRequest(self: *const T, TuneRequest: ?*?*ITuneRequest) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).CreateTuneRequest(@as(*const ITuningSpace, @ptrCast(self)), TuneRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_EnumCategoryGUIDs(self: *const T, ppEnum: ?*?*IEnumGUID) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).EnumCategoryGUIDs(@as(*const ITuningSpace, @ptrCast(self)), ppEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_EnumDeviceMonikers(self: *const T, ppEnum: ?*?*IEnumMoniker) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).EnumDeviceMonikers(@as(*const ITuningSpace, @ptrCast(self)), ppEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_get_DefaultPreferredComponentTypes(self: *const T, ComponentTypes: ?*?*IComponentTypes) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).get_DefaultPreferredComponentTypes(@as(*const ITuningSpace, @ptrCast(self)), ComponentTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_put_DefaultPreferredComponentTypes(self: *const T, NewComponentTypes: ?*IComponentTypes) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).put_DefaultPreferredComponentTypes(@as(*const ITuningSpace, @ptrCast(self)), NewComponentTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_get_FrequencyMapping(self: *const T, pMapping: ?*?BSTR) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).get_FrequencyMapping(@as(*const ITuningSpace, @ptrCast(self)), pMapping);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_put_FrequencyMapping(self: *const T, Mapping: ?BSTR) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).put_FrequencyMapping(@as(*const ITuningSpace, @ptrCast(self)), Mapping);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_get_DefaultLocator(self: *const T, LocatorVal: ?*?*ILocator) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).get_DefaultLocator(@as(*const ITuningSpace, @ptrCast(self)), LocatorVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_put_DefaultLocator(self: *const T, LocatorVal: ?*ILocator) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).put_DefaultLocator(@as(*const ITuningSpace, @ptrCast(self)), LocatorVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuningSpace_Clone(self: *const T, NewTS: ?*?*ITuningSpace) HRESULT {
                return @as(*const ITuningSpace.VTable, @ptrCast(self.vtable)).Clone(@as(*const ITuningSpace, @ptrCast(self)), NewTS);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IEnumTuningSpaces_Value = Guid.initString("8b8eb248-fc2b-11d2-9d8c-00c04f72d980");
pub const IID_IEnumTuningSpaces = &IID_IEnumTuningSpaces_Value;
pub const IEnumTuningSpaces = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumTuningSpaces,
                celt: u32,
                rgelt: [*]?*ITuningSpace,
                pceltFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumTuningSpaces,
                celt: u32,
                rgelt: [*]?*ITuningSpace,
                pceltFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumTuningSpaces,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumTuningSpaces,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumTuningSpaces,
                ppEnum: ?*?*IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumTuningSpaces,
                ppEnum: ?*?*IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumTuningSpaces_Next(self: *const T, celt: u32, rgelt: [*]?*ITuningSpace, pceltFetched: ?*u32) HRESULT {
                return @as(*const IEnumTuningSpaces.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumTuningSpaces, @ptrCast(self)), celt, rgelt, pceltFetched);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumTuningSpaces_Skip(self: *const T, celt: u32) HRESULT {
                return @as(*const IEnumTuningSpaces.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumTuningSpaces, @ptrCast(self)), celt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumTuningSpaces_Reset(self: *const T) HRESULT {
                return @as(*const IEnumTuningSpaces.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumTuningSpaces, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumTuningSpaces_Clone(self: *const T, ppEnum: ?*?*IEnumTuningSpaces) HRESULT {
                return @as(*const IEnumTuningSpaces.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumTuningSpaces, @ptrCast(self)), ppEnum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDVBTuningSpace_Value = Guid.initString("ada0b268-3b19-4e5b-acc4-49f852be13ba");
pub const IID_IDVBTuningSpace = &IID_IDVBTuningSpace_Value;
pub const IDVBTuningSpace = extern struct {
    pub const VTable = extern struct {
        base: ITuningSpace.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SystemType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuningSpace,
                SysType: ?*DVBSystemType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuningSpace,
                SysType: ?*DVBSystemType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SystemType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuningSpace,
                SysType: DVBSystemType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuningSpace,
                SysType: DVBSystemType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuningSpace.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuningSpace_get_SystemType(self: *const T, SysType: ?*DVBSystemType) HRESULT {
                return @as(*const IDVBTuningSpace.VTable, @ptrCast(self.vtable)).get_SystemType(@as(*const IDVBTuningSpace, @ptrCast(self)), SysType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuningSpace_put_SystemType(self: *const T, SysType: DVBSystemType) HRESULT {
                return @as(*const IDVBTuningSpace.VTable, @ptrCast(self.vtable)).put_SystemType(@as(*const IDVBTuningSpace, @ptrCast(self)), SysType);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDVBTuningSpace2_Value = Guid.initString("843188b4-ce62-43db-966b-8145a094e040");
pub const IID_IDVBTuningSpace2 = &IID_IDVBTuningSpace2_Value;
pub const IDVBTuningSpace2 = extern struct {
    pub const VTable = extern struct {
        base: IDVBTuningSpace.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NetworkID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuningSpace2,
                NetworkID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuningSpace2,
                NetworkID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_NetworkID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuningSpace2,
                NetworkID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuningSpace2,
                NetworkID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDVBTuningSpace.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuningSpace2_get_NetworkID(self: *const T, NetworkID: ?*i32) HRESULT {
                return @as(*const IDVBTuningSpace2.VTable, @ptrCast(self.vtable)).get_NetworkID(@as(*const IDVBTuningSpace2, @ptrCast(self)), NetworkID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuningSpace2_put_NetworkID(self: *const T, NetworkID: i32) HRESULT {
                return @as(*const IDVBTuningSpace2.VTable, @ptrCast(self.vtable)).put_NetworkID(@as(*const IDVBTuningSpace2, @ptrCast(self)), NetworkID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDVBSTuningSpace_Value = Guid.initString("cdf7be60-d954-42fd-a972-78971958e470");
pub const IID_IDVBSTuningSpace = &IID_IDVBSTuningSpace_Value;
pub const IDVBSTuningSpace = extern struct {
    pub const VTable = extern struct {
        base: IDVBTuningSpace2.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LowOscillator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                LowOscillator: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                LowOscillator: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LowOscillator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                LowOscillator: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                LowOscillator: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_HighOscillator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                HighOscillator: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                HighOscillator: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_HighOscillator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                HighOscillator: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                HighOscillator: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LNBSwitch: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                LNBSwitch: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                LNBSwitch: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LNBSwitch: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                LNBSwitch: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                LNBSwitch: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_InputRange: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                InputRange: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                InputRange: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_InputRange: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                InputRange: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                InputRange: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SpectralInversion: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                SpectralInversionVal: ?*SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                SpectralInversionVal: ?*SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SpectralInversion: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSTuningSpace,
                SpectralInversionVal: SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSTuningSpace,
                SpectralInversionVal: SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDVBTuningSpace2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_get_LowOscillator(self: *const T, LowOscillator: ?*i32) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).get_LowOscillator(@as(*const IDVBSTuningSpace, @ptrCast(self)), LowOscillator);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_put_LowOscillator(self: *const T, LowOscillator: i32) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).put_LowOscillator(@as(*const IDVBSTuningSpace, @ptrCast(self)), LowOscillator);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_get_HighOscillator(self: *const T, HighOscillator: ?*i32) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).get_HighOscillator(@as(*const IDVBSTuningSpace, @ptrCast(self)), HighOscillator);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_put_HighOscillator(self: *const T, HighOscillator: i32) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).put_HighOscillator(@as(*const IDVBSTuningSpace, @ptrCast(self)), HighOscillator);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_get_LNBSwitch(self: *const T, LNBSwitch: ?*i32) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).get_LNBSwitch(@as(*const IDVBSTuningSpace, @ptrCast(self)), LNBSwitch);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_put_LNBSwitch(self: *const T, LNBSwitch: i32) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).put_LNBSwitch(@as(*const IDVBSTuningSpace, @ptrCast(self)), LNBSwitch);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_get_InputRange(self: *const T, InputRange: ?*?BSTR) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).get_InputRange(@as(*const IDVBSTuningSpace, @ptrCast(self)), InputRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_put_InputRange(self: *const T, InputRange: ?BSTR) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).put_InputRange(@as(*const IDVBSTuningSpace, @ptrCast(self)), InputRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_get_SpectralInversion(self: *const T, SpectralInversionVal: ?*SpectralInversion) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).get_SpectralInversion(@as(*const IDVBSTuningSpace, @ptrCast(self)), SpectralInversionVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSTuningSpace_put_SpectralInversion(self: *const T, SpectralInversionVal: SpectralInversion) HRESULT {
                return @as(*const IDVBSTuningSpace.VTable, @ptrCast(self.vtable)).put_SpectralInversion(@as(*const IDVBSTuningSpace, @ptrCast(self)), SpectralInversionVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAuxInTuningSpace_Value = Guid.initString("e48244b8-7e17-4f76-a763-5090ff1e2f30");
pub const IID_IAuxInTuningSpace = &IID_IAuxInTuningSpace_Value;
pub const IAuxInTuningSpace = extern struct {
    pub const VTable = extern struct {
        base: ITuningSpace.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuningSpace.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAuxInTuningSpace2_Value = Guid.initString("b10931ed-8bfe-4ab0-9dce-e469c29a9729");
pub const IID_IAuxInTuningSpace2 = &IID_IAuxInTuningSpace2_Value;
pub const IAuxInTuningSpace2 = extern struct {
    pub const VTable = extern struct {
        base: IAuxInTuningSpace.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAuxInTuningSpace2,
                CountryCodeVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAuxInTuningSpace2,
                CountryCodeVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAuxInTuningSpace2,
                NewCountryCodeVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAuxInTuningSpace2,
                NewCountryCodeVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IAuxInTuningSpace.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAuxInTuningSpace2_get_CountryCode(self: *const T, CountryCodeVal: ?*i32) HRESULT {
                return @as(*const IAuxInTuningSpace2.VTable, @ptrCast(self.vtable)).get_CountryCode(@as(*const IAuxInTuningSpace2, @ptrCast(self)), CountryCodeVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAuxInTuningSpace2_put_CountryCode(self: *const T, NewCountryCodeVal: i32) HRESULT {
                return @as(*const IAuxInTuningSpace2.VTable, @ptrCast(self.vtable)).put_CountryCode(@as(*const IAuxInTuningSpace2, @ptrCast(self)), NewCountryCodeVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAnalogTVTuningSpace_Value = Guid.initString("2a6e293c-2595-11d3-b64c-00c04f79498e");
pub const IID_IAnalogTVTuningSpace = &IID_IAnalogTVTuningSpace_Value;
pub const IAnalogTVTuningSpace = extern struct {
    pub const VTable = extern struct {
        base: ITuningSpace.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MinChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogTVTuningSpace,
                MinChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogTVTuningSpace,
                MinChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MinChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogTVTuningSpace,
                NewMinChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogTVTuningSpace,
                NewMinChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaxChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogTVTuningSpace,
                MaxChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogTVTuningSpace,
                MaxChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MaxChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogTVTuningSpace,
                NewMaxChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogTVTuningSpace,
                NewMaxChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_InputType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogTVTuningSpace,
                InputTypeVal: ?*TunerInputType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogTVTuningSpace,
                InputTypeVal: ?*TunerInputType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_InputType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogTVTuningSpace,
                NewInputTypeVal: TunerInputType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogTVTuningSpace,
                NewInputTypeVal: TunerInputType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogTVTuningSpace,
                CountryCodeVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogTVTuningSpace,
                CountryCodeVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogTVTuningSpace,
                NewCountryCodeVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogTVTuningSpace,
                NewCountryCodeVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuningSpace.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogTVTuningSpace_get_MinChannel(self: *const T, MinChannelVal: ?*i32) HRESULT {
                return @as(*const IAnalogTVTuningSpace.VTable, @ptrCast(self.vtable)).get_MinChannel(@as(*const IAnalogTVTuningSpace, @ptrCast(self)), MinChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogTVTuningSpace_put_MinChannel(self: *const T, NewMinChannelVal: i32) HRESULT {
                return @as(*const IAnalogTVTuningSpace.VTable, @ptrCast(self.vtable)).put_MinChannel(@as(*const IAnalogTVTuningSpace, @ptrCast(self)), NewMinChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogTVTuningSpace_get_MaxChannel(self: *const T, MaxChannelVal: ?*i32) HRESULT {
                return @as(*const IAnalogTVTuningSpace.VTable, @ptrCast(self.vtable)).get_MaxChannel(@as(*const IAnalogTVTuningSpace, @ptrCast(self)), MaxChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogTVTuningSpace_put_MaxChannel(self: *const T, NewMaxChannelVal: i32) HRESULT {
                return @as(*const IAnalogTVTuningSpace.VTable, @ptrCast(self.vtable)).put_MaxChannel(@as(*const IAnalogTVTuningSpace, @ptrCast(self)), NewMaxChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogTVTuningSpace_get_InputType(self: *const T, InputTypeVal: ?*TunerInputType) HRESULT {
                return @as(*const IAnalogTVTuningSpace.VTable, @ptrCast(self.vtable)).get_InputType(@as(*const IAnalogTVTuningSpace, @ptrCast(self)), InputTypeVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogTVTuningSpace_put_InputType(self: *const T, NewInputTypeVal: TunerInputType) HRESULT {
                return @as(*const IAnalogTVTuningSpace.VTable, @ptrCast(self.vtable)).put_InputType(@as(*const IAnalogTVTuningSpace, @ptrCast(self)), NewInputTypeVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogTVTuningSpace_get_CountryCode(self: *const T, CountryCodeVal: ?*i32) HRESULT {
                return @as(*const IAnalogTVTuningSpace.VTable, @ptrCast(self.vtable)).get_CountryCode(@as(*const IAnalogTVTuningSpace, @ptrCast(self)), CountryCodeVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogTVTuningSpace_put_CountryCode(self: *const T, NewCountryCodeVal: i32) HRESULT {
                return @as(*const IAnalogTVTuningSpace.VTable, @ptrCast(self.vtable)).put_CountryCode(@as(*const IAnalogTVTuningSpace, @ptrCast(self)), NewCountryCodeVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IATSCTuningSpace_Value = Guid.initString("0369b4e2-45b6-11d3-b650-00c04f79498e");
pub const IID_IATSCTuningSpace = &IID_IATSCTuningSpace_Value;
pub const IATSCTuningSpace = extern struct {
    pub const VTable = extern struct {
        base: IAnalogTVTuningSpace.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MinMinorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCTuningSpace,
                MinMinorChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCTuningSpace,
                MinMinorChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MinMinorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCTuningSpace,
                NewMinMinorChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCTuningSpace,
                NewMinMinorChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaxMinorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCTuningSpace,
                MaxMinorChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCTuningSpace,
                MaxMinorChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MaxMinorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCTuningSpace,
                NewMaxMinorChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCTuningSpace,
                NewMaxMinorChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MinPhysicalChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCTuningSpace,
                MinPhysicalChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCTuningSpace,
                MinPhysicalChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MinPhysicalChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCTuningSpace,
                NewMinPhysicalChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCTuningSpace,
                NewMinPhysicalChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaxPhysicalChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCTuningSpace,
                MaxPhysicalChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCTuningSpace,
                MaxPhysicalChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MaxPhysicalChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCTuningSpace,
                NewMaxPhysicalChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCTuningSpace,
                NewMaxPhysicalChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IAnalogTVTuningSpace.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCTuningSpace_get_MinMinorChannel(self: *const T, MinMinorChannelVal: ?*i32) HRESULT {
                return @as(*const IATSCTuningSpace.VTable, @ptrCast(self.vtable)).get_MinMinorChannel(@as(*const IATSCTuningSpace, @ptrCast(self)), MinMinorChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCTuningSpace_put_MinMinorChannel(self: *const T, NewMinMinorChannelVal: i32) HRESULT {
                return @as(*const IATSCTuningSpace.VTable, @ptrCast(self.vtable)).put_MinMinorChannel(@as(*const IATSCTuningSpace, @ptrCast(self)), NewMinMinorChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCTuningSpace_get_MaxMinorChannel(self: *const T, MaxMinorChannelVal: ?*i32) HRESULT {
                return @as(*const IATSCTuningSpace.VTable, @ptrCast(self.vtable)).get_MaxMinorChannel(@as(*const IATSCTuningSpace, @ptrCast(self)), MaxMinorChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCTuningSpace_put_MaxMinorChannel(self: *const T, NewMaxMinorChannelVal: i32) HRESULT {
                return @as(*const IATSCTuningSpace.VTable, @ptrCast(self.vtable)).put_MaxMinorChannel(@as(*const IATSCTuningSpace, @ptrCast(self)), NewMaxMinorChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCTuningSpace_get_MinPhysicalChannel(self: *const T, MinPhysicalChannelVal: ?*i32) HRESULT {
                return @as(*const IATSCTuningSpace.VTable, @ptrCast(self.vtable)).get_MinPhysicalChannel(@as(*const IATSCTuningSpace, @ptrCast(self)), MinPhysicalChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCTuningSpace_put_MinPhysicalChannel(self: *const T, NewMinPhysicalChannelVal: i32) HRESULT {
                return @as(*const IATSCTuningSpace.VTable, @ptrCast(self.vtable)).put_MinPhysicalChannel(@as(*const IATSCTuningSpace, @ptrCast(self)), NewMinPhysicalChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCTuningSpace_get_MaxPhysicalChannel(self: *const T, MaxPhysicalChannelVal: ?*i32) HRESULT {
                return @as(*const IATSCTuningSpace.VTable, @ptrCast(self.vtable)).get_MaxPhysicalChannel(@as(*const IATSCTuningSpace, @ptrCast(self)), MaxPhysicalChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCTuningSpace_put_MaxPhysicalChannel(self: *const T, NewMaxPhysicalChannelVal: i32) HRESULT {
                return @as(*const IATSCTuningSpace.VTable, @ptrCast(self.vtable)).put_MaxPhysicalChannel(@as(*const IATSCTuningSpace, @ptrCast(self)), NewMaxPhysicalChannelVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IDigitalCableTuningSpace_Value = Guid.initString("013f9f9c-b449-4ec7-a6d2-9d4f2fc70ae5");
pub const IID_IDigitalCableTuningSpace = &IID_IDigitalCableTuningSpace_Value;
pub const IDigitalCableTuningSpace = extern struct {
    pub const VTable = extern struct {
        base: IATSCTuningSpace.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MinMajorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuningSpace,
                MinMajorChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuningSpace,
                MinMajorChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MinMajorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuningSpace,
                NewMinMajorChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuningSpace,
                NewMinMajorChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaxMajorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuningSpace,
                MaxMajorChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuningSpace,
                MaxMajorChannelVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MaxMajorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuningSpace,
                NewMaxMajorChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuningSpace,
                NewMaxMajorChannelVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MinSourceID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuningSpace,
                MinSourceIDVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuningSpace,
                MinSourceIDVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MinSourceID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuningSpace,
                NewMinSourceIDVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuningSpace,
                NewMinSourceIDVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaxSourceID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuningSpace,
                MaxSourceIDVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuningSpace,
                MaxSourceIDVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MaxSourceID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuningSpace,
                NewMaxSourceIDVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuningSpace,
                NewMaxSourceIDVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IATSCTuningSpace.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuningSpace_get_MinMajorChannel(self: *const T, MinMajorChannelVal: ?*i32) HRESULT {
                return @as(*const IDigitalCableTuningSpace.VTable, @ptrCast(self.vtable)).get_MinMajorChannel(@as(*const IDigitalCableTuningSpace, @ptrCast(self)), MinMajorChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuningSpace_put_MinMajorChannel(self: *const T, NewMinMajorChannelVal: i32) HRESULT {
                return @as(*const IDigitalCableTuningSpace.VTable, @ptrCast(self.vtable)).put_MinMajorChannel(@as(*const IDigitalCableTuningSpace, @ptrCast(self)), NewMinMajorChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuningSpace_get_MaxMajorChannel(self: *const T, MaxMajorChannelVal: ?*i32) HRESULT {
                return @as(*const IDigitalCableTuningSpace.VTable, @ptrCast(self.vtable)).get_MaxMajorChannel(@as(*const IDigitalCableTuningSpace, @ptrCast(self)), MaxMajorChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuningSpace_put_MaxMajorChannel(self: *const T, NewMaxMajorChannelVal: i32) HRESULT {
                return @as(*const IDigitalCableTuningSpace.VTable, @ptrCast(self.vtable)).put_MaxMajorChannel(@as(*const IDigitalCableTuningSpace, @ptrCast(self)), NewMaxMajorChannelVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuningSpace_get_MinSourceID(self: *const T, MinSourceIDVal: ?*i32) HRESULT {
                return @as(*const IDigitalCableTuningSpace.VTable, @ptrCast(self.vtable)).get_MinSourceID(@as(*const IDigitalCableTuningSpace, @ptrCast(self)), MinSourceIDVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuningSpace_put_MinSourceID(self: *const T, NewMinSourceIDVal: i32) HRESULT {
                return @as(*const IDigitalCableTuningSpace.VTable, @ptrCast(self.vtable)).put_MinSourceID(@as(*const IDigitalCableTuningSpace, @ptrCast(self)), NewMinSourceIDVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuningSpace_get_MaxSourceID(self: *const T, MaxSourceIDVal: ?*i32) HRESULT {
                return @as(*const IDigitalCableTuningSpace.VTable, @ptrCast(self.vtable)).get_MaxSourceID(@as(*const IDigitalCableTuningSpace, @ptrCast(self)), MaxSourceIDVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuningSpace_put_MaxSourceID(self: *const T, NewMaxSourceIDVal: i32) HRESULT {
                return @as(*const IDigitalCableTuningSpace.VTable, @ptrCast(self.vtable)).put_MaxSourceID(@as(*const IDigitalCableTuningSpace, @ptrCast(self)), NewMaxSourceIDVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IAnalogRadioTuningSpace_Value = Guid.initString("2a6e293b-2595-11d3-b64c-00c04f79498e");
pub const IID_IAnalogRadioTuningSpace = &IID_IAnalogRadioTuningSpace_Value;
pub const IAnalogRadioTuningSpace = extern struct {
    pub const VTable = extern struct {
        base: ITuningSpace.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MinFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogRadioTuningSpace,
                MinFrequencyVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogRadioTuningSpace,
                MinFrequencyVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MinFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogRadioTuningSpace,
                NewMinFrequencyVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogRadioTuningSpace,
                NewMinFrequencyVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaxFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogRadioTuningSpace,
                MaxFrequencyVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogRadioTuningSpace,
                MaxFrequencyVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MaxFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogRadioTuningSpace,
                NewMaxFrequencyVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogRadioTuningSpace,
                NewMaxFrequencyVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Step: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogRadioTuningSpace,
                StepVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogRadioTuningSpace,
                StepVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Step: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogRadioTuningSpace,
                NewStepVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogRadioTuningSpace,
                NewStepVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuningSpace.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogRadioTuningSpace_get_MinFrequency(self: *const T, MinFrequencyVal: ?*i32) HRESULT {
                return @as(*const IAnalogRadioTuningSpace.VTable, @ptrCast(self.vtable)).get_MinFrequency(@as(*const IAnalogRadioTuningSpace, @ptrCast(self)), MinFrequencyVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogRadioTuningSpace_put_MinFrequency(self: *const T, NewMinFrequencyVal: i32) HRESULT {
                return @as(*const IAnalogRadioTuningSpace.VTable, @ptrCast(self.vtable)).put_MinFrequency(@as(*const IAnalogRadioTuningSpace, @ptrCast(self)), NewMinFrequencyVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogRadioTuningSpace_get_MaxFrequency(self: *const T, MaxFrequencyVal: ?*i32) HRESULT {
                return @as(*const IAnalogRadioTuningSpace.VTable, @ptrCast(self.vtable)).get_MaxFrequency(@as(*const IAnalogRadioTuningSpace, @ptrCast(self)), MaxFrequencyVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogRadioTuningSpace_put_MaxFrequency(self: *const T, NewMaxFrequencyVal: i32) HRESULT {
                return @as(*const IAnalogRadioTuningSpace.VTable, @ptrCast(self.vtable)).put_MaxFrequency(@as(*const IAnalogRadioTuningSpace, @ptrCast(self)), NewMaxFrequencyVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogRadioTuningSpace_get_Step(self: *const T, StepVal: ?*i32) HRESULT {
                return @as(*const IAnalogRadioTuningSpace.VTable, @ptrCast(self.vtable)).get_Step(@as(*const IAnalogRadioTuningSpace, @ptrCast(self)), StepVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogRadioTuningSpace_put_Step(self: *const T, NewStepVal: i32) HRESULT {
                return @as(*const IAnalogRadioTuningSpace.VTable, @ptrCast(self.vtable)).put_Step(@as(*const IAnalogRadioTuningSpace, @ptrCast(self)), NewStepVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAnalogRadioTuningSpace2_Value = Guid.initString("39dd45da-2da8-46ba-8a8a-87e2b73d983a");
pub const IID_IAnalogRadioTuningSpace2 = &IID_IAnalogRadioTuningSpace2_Value;
pub const IAnalogRadioTuningSpace2 = extern struct {
    pub const VTable = extern struct {
        base: IAnalogRadioTuningSpace.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogRadioTuningSpace2,
                CountryCodeVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogRadioTuningSpace2,
                CountryCodeVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogRadioTuningSpace2,
                NewCountryCodeVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogRadioTuningSpace2,
                NewCountryCodeVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IAnalogRadioTuningSpace.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogRadioTuningSpace2_get_CountryCode(self: *const T, CountryCodeVal: ?*i32) HRESULT {
                return @as(*const IAnalogRadioTuningSpace2.VTable, @ptrCast(self.vtable)).get_CountryCode(@as(*const IAnalogRadioTuningSpace2, @ptrCast(self)), CountryCodeVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogRadioTuningSpace2_put_CountryCode(self: *const T, NewCountryCodeVal: i32) HRESULT {
                return @as(*const IAnalogRadioTuningSpace2.VTable, @ptrCast(self.vtable)).put_CountryCode(@as(*const IAnalogRadioTuningSpace2, @ptrCast(self)), NewCountryCodeVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_ITuneRequest_Value = Guid.initString("07ddc146-fc3d-11d2-9d8c-00c04f72d980");
pub const IID_ITuneRequest = &IID_ITuneRequest_Value;
pub const ITuneRequest = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TuningSpace: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuneRequest,
                TuningSpace: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuneRequest,
                TuningSpace: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Components: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuneRequest,
                Components: ?*?*IComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuneRequest,
                Components: ?*?*IComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuneRequest,
                NewTuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuneRequest,
                NewTuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Locator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuneRequest,
                Locator: ?*?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuneRequest,
                Locator: ?*?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Locator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuneRequest,
                Locator: ?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuneRequest,
                Locator: ?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequest_get_TuningSpace(self: *const T, TuningSpace: ?*?*ITuningSpace) HRESULT {
                return @as(*const ITuneRequest.VTable, @ptrCast(self.vtable)).get_TuningSpace(@as(*const ITuneRequest, @ptrCast(self)), TuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequest_get_Components(self: *const T, Components: ?*?*IComponents) HRESULT {
                return @as(*const ITuneRequest.VTable, @ptrCast(self.vtable)).get_Components(@as(*const ITuneRequest, @ptrCast(self)), Components);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequest_Clone(self: *const T, NewTuneRequest: ?*?*ITuneRequest) HRESULT {
                return @as(*const ITuneRequest.VTable, @ptrCast(self.vtable)).Clone(@as(*const ITuneRequest, @ptrCast(self)), NewTuneRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequest_get_Locator(self: *const T, Locator: ?*?*ILocator) HRESULT {
                return @as(*const ITuneRequest.VTable, @ptrCast(self.vtable)).get_Locator(@as(*const ITuneRequest, @ptrCast(self)), Locator);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequest_put_Locator(self: *const T, Locator: ?*ILocator) HRESULT {
                return @as(*const ITuneRequest.VTable, @ptrCast(self.vtable)).put_Locator(@as(*const ITuneRequest, @ptrCast(self)), Locator);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IChannelIDTuneRequest_Value = Guid.initString("156eff60-86f4-4e28-89fc-109799fd57ee");
pub const IID_IChannelIDTuneRequest = &IID_IChannelIDTuneRequest_Value;
pub const IChannelIDTuneRequest = extern struct {
    pub const VTable = extern struct {
        base: ITuneRequest.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ChannelID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IChannelIDTuneRequest,
                ChannelID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IChannelIDTuneRequest,
                ChannelID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ChannelID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IChannelIDTuneRequest,
                ChannelID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IChannelIDTuneRequest,
                ChannelID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuneRequest.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IChannelIDTuneRequest_get_ChannelID(self: *const T, ChannelID: ?*?BSTR) HRESULT {
                return @as(*const IChannelIDTuneRequest.VTable, @ptrCast(self.vtable)).get_ChannelID(@as(*const IChannelIDTuneRequest, @ptrCast(self)), ChannelID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IChannelIDTuneRequest_put_ChannelID(self: *const T, ChannelID: ?BSTR) HRESULT {
                return @as(*const IChannelIDTuneRequest.VTable, @ptrCast(self.vtable)).put_ChannelID(@as(*const IChannelIDTuneRequest, @ptrCast(self)), ChannelID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IChannelTuneRequest_Value = Guid.initString("0369b4e0-45b6-11d3-b650-00c04f79498e");
pub const IID_IChannelTuneRequest = &IID_IChannelTuneRequest_Value;
pub const IChannelTuneRequest = extern struct {
    pub const VTable = extern struct {
        base: ITuneRequest.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Channel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IChannelTuneRequest,
                Channel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IChannelTuneRequest,
                Channel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Channel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IChannelTuneRequest,
                Channel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IChannelTuneRequest,
                Channel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuneRequest.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IChannelTuneRequest_get_Channel(self: *const T, Channel: ?*i32) HRESULT {
                return @as(*const IChannelTuneRequest.VTable, @ptrCast(self.vtable)).get_Channel(@as(*const IChannelTuneRequest, @ptrCast(self)), Channel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IChannelTuneRequest_put_Channel(self: *const T, Channel: i32) HRESULT {
                return @as(*const IChannelTuneRequest.VTable, @ptrCast(self.vtable)).put_Channel(@as(*const IChannelTuneRequest, @ptrCast(self)), Channel);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IATSCChannelTuneRequest_Value = Guid.initString("0369b4e1-45b6-11d3-b650-00c04f79498e");
pub const IID_IATSCChannelTuneRequest = &IID_IATSCChannelTuneRequest_Value;
pub const IATSCChannelTuneRequest = extern struct {
    pub const VTable = extern struct {
        base: IChannelTuneRequest.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MinorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCChannelTuneRequest,
                MinorChannel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCChannelTuneRequest,
                MinorChannel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MinorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCChannelTuneRequest,
                MinorChannel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCChannelTuneRequest,
                MinorChannel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IChannelTuneRequest.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCChannelTuneRequest_get_MinorChannel(self: *const T, MinorChannel: ?*i32) HRESULT {
                return @as(*const IATSCChannelTuneRequest.VTable, @ptrCast(self.vtable)).get_MinorChannel(@as(*const IATSCChannelTuneRequest, @ptrCast(self)), MinorChannel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCChannelTuneRequest_put_MinorChannel(self: *const T, MinorChannel: i32) HRESULT {
                return @as(*const IATSCChannelTuneRequest.VTable, @ptrCast(self.vtable)).put_MinorChannel(@as(*const IATSCChannelTuneRequest, @ptrCast(self)), MinorChannel);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IDigitalCableTuneRequest_Value = Guid.initString("bad7753b-6b37-4810-ae57-3ce0c4a9e6cb");
pub const IID_IDigitalCableTuneRequest = &IID_IDigitalCableTuneRequest_Value;
pub const IDigitalCableTuneRequest = extern struct {
    pub const VTable = extern struct {
        base: IATSCChannelTuneRequest.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MajorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuneRequest,
                pMajorChannel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuneRequest,
                pMajorChannel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MajorChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuneRequest,
                MajorChannel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuneRequest,
                MajorChannel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SourceID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuneRequest,
                pSourceID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuneRequest,
                pSourceID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SourceID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDigitalCableTuneRequest,
                SourceID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDigitalCableTuneRequest,
                SourceID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IATSCChannelTuneRequest.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuneRequest_get_MajorChannel(self: *const T, pMajorChannel: ?*i32) HRESULT {
                return @as(*const IDigitalCableTuneRequest.VTable, @ptrCast(self.vtable)).get_MajorChannel(@as(*const IDigitalCableTuneRequest, @ptrCast(self)), pMajorChannel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuneRequest_put_MajorChannel(self: *const T, MajorChannel: i32) HRESULT {
                return @as(*const IDigitalCableTuneRequest.VTable, @ptrCast(self.vtable)).put_MajorChannel(@as(*const IDigitalCableTuneRequest, @ptrCast(self)), MajorChannel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuneRequest_get_SourceID(self: *const T, pSourceID: ?*i32) HRESULT {
                return @as(*const IDigitalCableTuneRequest.VTable, @ptrCast(self.vtable)).get_SourceID(@as(*const IDigitalCableTuneRequest, @ptrCast(self)), pSourceID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDigitalCableTuneRequest_put_SourceID(self: *const T, SourceID: i32) HRESULT {
                return @as(*const IDigitalCableTuneRequest.VTable, @ptrCast(self.vtable)).put_SourceID(@as(*const IDigitalCableTuneRequest, @ptrCast(self)), SourceID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDVBTuneRequest_Value = Guid.initString("0d6f567e-a636-42bb-83ba-ce4c1704afa2");
pub const IID_IDVBTuneRequest = &IID_IDVBTuneRequest_Value;
pub const IDVBTuneRequest = extern struct {
    pub const VTable = extern struct {
        base: ITuneRequest.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ONID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuneRequest,
                ONID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuneRequest,
                ONID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ONID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuneRequest,
                ONID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuneRequest,
                ONID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TSID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuneRequest,
                TSID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuneRequest,
                TSID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TSID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuneRequest,
                TSID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuneRequest,
                TSID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuneRequest,
                SID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuneRequest,
                SID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTuneRequest,
                SID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTuneRequest,
                SID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuneRequest.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuneRequest_get_ONID(self: *const T, ONID: ?*i32) HRESULT {
                return @as(*const IDVBTuneRequest.VTable, @ptrCast(self.vtable)).get_ONID(@as(*const IDVBTuneRequest, @ptrCast(self)), ONID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuneRequest_put_ONID(self: *const T, ONID: i32) HRESULT {
                return @as(*const IDVBTuneRequest.VTable, @ptrCast(self.vtable)).put_ONID(@as(*const IDVBTuneRequest, @ptrCast(self)), ONID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuneRequest_get_TSID(self: *const T, TSID: ?*i32) HRESULT {
                return @as(*const IDVBTuneRequest.VTable, @ptrCast(self.vtable)).get_TSID(@as(*const IDVBTuneRequest, @ptrCast(self)), TSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuneRequest_put_TSID(self: *const T, TSID: i32) HRESULT {
                return @as(*const IDVBTuneRequest.VTable, @ptrCast(self.vtable)).put_TSID(@as(*const IDVBTuneRequest, @ptrCast(self)), TSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuneRequest_get_SID(self: *const T, SID: ?*i32) HRESULT {
                return @as(*const IDVBTuneRequest.VTable, @ptrCast(self.vtable)).get_SID(@as(*const IDVBTuneRequest, @ptrCast(self)), SID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTuneRequest_put_SID(self: *const T, SID: i32) HRESULT {
                return @as(*const IDVBTuneRequest.VTable, @ptrCast(self.vtable)).put_SID(@as(*const IDVBTuneRequest, @ptrCast(self)), SID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMPEG2TuneRequest_Value = Guid.initString("eb7d987f-8a01-42ad-b8ae-574deee44d1a");
pub const IID_IMPEG2TuneRequest = &IID_IMPEG2TuneRequest_Value;
pub const IMPEG2TuneRequest = extern struct {
    pub const VTable = extern struct {
        base: ITuneRequest.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TSID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2TuneRequest,
                TSID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2TuneRequest,
                TSID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TSID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2TuneRequest,
                TSID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2TuneRequest,
                TSID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ProgNo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2TuneRequest,
                ProgNo: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2TuneRequest,
                ProgNo: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ProgNo: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2TuneRequest,
                ProgNo: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2TuneRequest,
                ProgNo: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuneRequest.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2TuneRequest_get_TSID(self: *const T, TSID: ?*i32) HRESULT {
                return @as(*const IMPEG2TuneRequest.VTable, @ptrCast(self.vtable)).get_TSID(@as(*const IMPEG2TuneRequest, @ptrCast(self)), TSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2TuneRequest_put_TSID(self: *const T, TSID: i32) HRESULT {
                return @as(*const IMPEG2TuneRequest.VTable, @ptrCast(self.vtable)).put_TSID(@as(*const IMPEG2TuneRequest, @ptrCast(self)), TSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2TuneRequest_get_ProgNo(self: *const T, ProgNo: ?*i32) HRESULT {
                return @as(*const IMPEG2TuneRequest.VTable, @ptrCast(self.vtable)).get_ProgNo(@as(*const IMPEG2TuneRequest, @ptrCast(self)), ProgNo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2TuneRequest_put_ProgNo(self: *const T, ProgNo: i32) HRESULT {
                return @as(*const IMPEG2TuneRequest.VTable, @ptrCast(self.vtable)).put_ProgNo(@as(*const IMPEG2TuneRequest, @ptrCast(self)), ProgNo);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMPEG2TuneRequestFactory_Value = Guid.initString("14e11abd-ee37-4893-9ea1-6964de933e39");
pub const IID_IMPEG2TuneRequestFactory = &IID_IMPEG2TuneRequestFactory_Value;
pub const IMPEG2TuneRequestFactory = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        CreateTuneRequest: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2TuneRequestFactory,
                TuningSpace: ?*ITuningSpace,
                TuneRequest: ?*?*IMPEG2TuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2TuneRequestFactory,
                TuningSpace: ?*ITuningSpace,
                TuneRequest: ?*?*IMPEG2TuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2TuneRequestFactory_CreateTuneRequest(self: *const T, TuningSpace: ?*ITuningSpace, TuneRequest: ?*?*IMPEG2TuneRequest) HRESULT {
                return @as(*const IMPEG2TuneRequestFactory.VTable, @ptrCast(self.vtable)).CreateTuneRequest(@as(*const IMPEG2TuneRequestFactory, @ptrCast(self)), TuningSpace, TuneRequest);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMPEG2TuneRequestSupport_Value = Guid.initString("1b9d5fc3-5bbc-4b6c-bb18-b9d10e3eeebf");
pub const IID_IMPEG2TuneRequestSupport = &IID_IMPEG2TuneRequestSupport_Value;
pub const IMPEG2TuneRequestSupport = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ITunerCap_Value = Guid.initString("e60dfa45-8d56-4e65-a8ab-d6be9412c249");
pub const IID_ITunerCap = &IID_ITunerCap_Value;
pub const ITunerCap = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SupportedNetworkTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITunerCap,
                ulcNetworkTypesMax: u32,
                pulcNetworkTypes: ?*u32,
                pguidNetworkTypes: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITunerCap,
                ulcNetworkTypesMax: u32,
                pulcNetworkTypes: ?*u32,
                pguidNetworkTypes: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SupportedVideoFormats: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITunerCap,
                pulAMTunerModeType: ?*u32,
                pulAnalogVideoStandard: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITunerCap,
                pulAMTunerModeType: ?*u32,
                pulAnalogVideoStandard: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AuxInputCount: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITunerCap,
                pulCompositeCount: ?*u32,
                pulSvideoCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITunerCap,
                pulCompositeCount: ?*u32,
                pulSvideoCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITunerCap_get_SupportedNetworkTypes(self: *const T, ulcNetworkTypesMax: u32, pulcNetworkTypes: ?*u32, pguidNetworkTypes: ?*Guid) HRESULT {
                return @as(*const ITunerCap.VTable, @ptrCast(self.vtable)).get_SupportedNetworkTypes(@as(*const ITunerCap, @ptrCast(self)), ulcNetworkTypesMax, pulcNetworkTypes, pguidNetworkTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITunerCap_get_SupportedVideoFormats(self: *const T, pulAMTunerModeType: ?*u32, pulAnalogVideoStandard: ?*u32) HRESULT {
                return @as(*const ITunerCap.VTable, @ptrCast(self.vtable)).get_SupportedVideoFormats(@as(*const ITunerCap, @ptrCast(self)), pulAMTunerModeType, pulAnalogVideoStandard);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITunerCap_get_AuxInputCount(self: *const T, pulCompositeCount: ?*u32, pulSvideoCount: ?*u32) HRESULT {
                return @as(*const ITunerCap.VTable, @ptrCast(self.vtable)).get_AuxInputCount(@as(*const ITunerCap, @ptrCast(self)), pulCompositeCount, pulSvideoCount);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_ITunerCapEx_Value = Guid.initString("ed3e0c66-18c8-4ea6-9300-f6841fdd35dc");
pub const IID_ITunerCapEx = &IID_ITunerCapEx_Value;
pub const ITunerCapEx = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Has608_708Caption: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITunerCapEx,
                pbHasCaption: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITunerCapEx,
                pbHasCaption: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITunerCapEx_get_Has608_708Caption(self: *const T, pbHasCaption: ?*i16) HRESULT {
                return @as(*const ITunerCapEx.VTable, @ptrCast(self.vtable)).get_Has608_708Caption(@as(*const ITunerCapEx, @ptrCast(self)), pbHasCaption);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ITuner_Value = Guid.initString("28c52640-018a-11d3-9d8e-00c04f72d980");
pub const IID_ITuner = &IID_ITuner_Value;
pub const ITuner = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TuningSpace: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuner,
                TuningSpace: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuner,
                TuningSpace: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TuningSpace: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuner,
                TuningSpace: ?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuner,
                TuningSpace: ?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumTuningSpaces: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuner,
                ppEnum: ?*?*IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuner,
                ppEnum: ?*?*IEnumTuningSpaces,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TuneRequest: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuner,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuner,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TuneRequest: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuner,
                TuneRequest: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuner,
                TuneRequest: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Validate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuner,
                TuneRequest: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuner,
                TuneRequest: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PreferredComponentTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuner,
                ComponentTypes: ?*?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuner,
                ComponentTypes: ?*?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PreferredComponentTypes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuner,
                ComponentTypes: ?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuner,
                ComponentTypes: ?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SignalStrength: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ITuner,
                Strength: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ITuner,
                Strength: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TriggerSignalEvents: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuner,
                Interval: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuner,
                Interval: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_get_TuningSpace(self: *const T, TuningSpace: ?*?*ITuningSpace) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).get_TuningSpace(@as(*const ITuner, @ptrCast(self)), TuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_put_TuningSpace(self: *const T, TuningSpace: ?*ITuningSpace) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).put_TuningSpace(@as(*const ITuner, @ptrCast(self)), TuningSpace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_EnumTuningSpaces(self: *const T, ppEnum: ?*?*IEnumTuningSpaces) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).EnumTuningSpaces(@as(*const ITuner, @ptrCast(self)), ppEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_get_TuneRequest(self: *const T, TuneRequest: ?*?*ITuneRequest) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).get_TuneRequest(@as(*const ITuner, @ptrCast(self)), TuneRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_put_TuneRequest(self: *const T, TuneRequest: ?*ITuneRequest) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).put_TuneRequest(@as(*const ITuner, @ptrCast(self)), TuneRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_Validate(self: *const T, TuneRequest: ?*ITuneRequest) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).Validate(@as(*const ITuner, @ptrCast(self)), TuneRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_get_PreferredComponentTypes(self: *const T, ComponentTypes: ?*?*IComponentTypes) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).get_PreferredComponentTypes(@as(*const ITuner, @ptrCast(self)), ComponentTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_put_PreferredComponentTypes(self: *const T, ComponentTypes: ?*IComponentTypes) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).put_PreferredComponentTypes(@as(*const ITuner, @ptrCast(self)), ComponentTypes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_get_SignalStrength(self: *const T, Strength: ?*i32) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).get_SignalStrength(@as(*const ITuner, @ptrCast(self)), Strength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuner_TriggerSignalEvents(self: *const T, Interval: i32) HRESULT {
                return @as(*const ITuner.VTable, @ptrCast(self.vtable)).TriggerSignalEvents(@as(*const ITuner, @ptrCast(self)), Interval);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IScanningTuner_Value = Guid.initString("1dfd0a5c-0284-11d3-9d8e-00c04f72d980");
pub const IID_IScanningTuner = &IID_IScanningTuner_Value;
pub const IScanningTuner = extern struct {
    pub const VTable = extern struct {
        base: ITuner.VTable,
        SeekUp: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SeekDown: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ScanUp: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTuner,
                MillisecondsPause: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTuner,
                MillisecondsPause: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ScanDown: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTuner,
                MillisecondsPause: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTuner,
                MillisecondsPause: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AutoProgram: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuner.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTuner_SeekUp(self: *const T) HRESULT {
                return @as(*const IScanningTuner.VTable, @ptrCast(self.vtable)).SeekUp(@as(*const IScanningTuner, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTuner_SeekDown(self: *const T) HRESULT {
                return @as(*const IScanningTuner.VTable, @ptrCast(self.vtable)).SeekDown(@as(*const IScanningTuner, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTuner_ScanUp(self: *const T, MillisecondsPause: i32) HRESULT {
                return @as(*const IScanningTuner.VTable, @ptrCast(self.vtable)).ScanUp(@as(*const IScanningTuner, @ptrCast(self)), MillisecondsPause);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTuner_ScanDown(self: *const T, MillisecondsPause: i32) HRESULT {
                return @as(*const IScanningTuner.VTable, @ptrCast(self.vtable)).ScanDown(@as(*const IScanningTuner, @ptrCast(self)), MillisecondsPause);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTuner_AutoProgram(self: *const T) HRESULT {
                return @as(*const IScanningTuner.VTable, @ptrCast(self.vtable)).AutoProgram(@as(*const IScanningTuner, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IScanningTunerEx_Value = Guid.initString("04bbd195-0e2d-4593-9bd5-4f908bc33cf5");
pub const IID_IScanningTunerEx = &IID_IScanningTunerEx_Value;
pub const IScanningTunerEx = extern struct {
    pub const VTable = extern struct {
        base: IScanningTuner.VTable,
        GetCurrentLocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTunerEx,
                pILocator: ?*?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTunerEx,
                pILocator: ?*?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PerformExhaustiveScan: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTunerEx,
                dwLowerFreq: i32,
                dwHigherFreq: i32,
                bFineTune: i16,
                hEvent: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTunerEx,
                dwLowerFreq: i32,
                dwHigherFreq: i32,
                bFineTune: i16,
                hEvent: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TerminateCurrentScan: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTunerEx,
                pcurrentFreq: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTunerEx,
                pcurrentFreq: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ResumeCurrentScan: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTunerEx,
                hEvent: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTunerEx,
                hEvent: usize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTunerScanningCapability: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTunerEx,
                HardwareAssistedScanning: ?*i32,
                NumStandardsSupported: ?*i32,
                BroadcastStandards: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTunerEx,
                HardwareAssistedScanning: ?*i32,
                NumStandardsSupported: ?*i32,
                BroadcastStandards: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTunerStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTunerEx,
                SecondsLeft: ?*i32,
                CurrentLockType: ?*i32,
                AutoDetect: ?*i32,
                CurrentFreq: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTunerEx,
                SecondsLeft: ?*i32,
                CurrentLockType: ?*i32,
                AutoDetect: ?*i32,
                CurrentFreq: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentTunerStandardCapability: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTunerEx,
                CurrentBroadcastStandard: Guid,
                SettlingTime: ?*i32,
                TvStandardsSupported: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTunerEx,
                CurrentBroadcastStandard: Guid,
                SettlingTime: ?*i32,
                TvStandardsSupported: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetScanSignalTypeFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IScanningTunerEx,
                ScanModulationTypes: i32,
                AnalogVideoStandard: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IScanningTunerEx,
                ScanModulationTypes: i32,
                AnalogVideoStandard: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IScanningTuner.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTunerEx_GetCurrentLocator(self: *const T, pILocator: ?*?*ILocator) HRESULT {
                return @as(*const IScanningTunerEx.VTable, @ptrCast(self.vtable)).GetCurrentLocator(@as(*const IScanningTunerEx, @ptrCast(self)), pILocator);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTunerEx_PerformExhaustiveScan(self: *const T, dwLowerFreq: i32, dwHigherFreq: i32, bFineTune: i16, hEvent: usize) HRESULT {
                return @as(*const IScanningTunerEx.VTable, @ptrCast(self.vtable)).PerformExhaustiveScan(@as(*const IScanningTunerEx, @ptrCast(self)), dwLowerFreq, dwHigherFreq, bFineTune, hEvent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTunerEx_TerminateCurrentScan(self: *const T, pcurrentFreq: ?*i32) HRESULT {
                return @as(*const IScanningTunerEx.VTable, @ptrCast(self.vtable)).TerminateCurrentScan(@as(*const IScanningTunerEx, @ptrCast(self)), pcurrentFreq);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTunerEx_ResumeCurrentScan(self: *const T, hEvent: usize) HRESULT {
                return @as(*const IScanningTunerEx.VTable, @ptrCast(self.vtable)).ResumeCurrentScan(@as(*const IScanningTunerEx, @ptrCast(self)), hEvent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTunerEx_GetTunerScanningCapability(self: *const T, HardwareAssistedScanning: ?*i32, NumStandardsSupported: ?*i32, BroadcastStandards: ?*Guid) HRESULT {
                return @as(*const IScanningTunerEx.VTable, @ptrCast(self.vtable)).GetTunerScanningCapability(@as(*const IScanningTunerEx, @ptrCast(self)), HardwareAssistedScanning, NumStandardsSupported, BroadcastStandards);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTunerEx_GetTunerStatus(self: *const T, SecondsLeft: ?*i32, CurrentLockType: ?*i32, AutoDetect: ?*i32, CurrentFreq: ?*i32) HRESULT {
                return @as(*const IScanningTunerEx.VTable, @ptrCast(self.vtable)).GetTunerStatus(@as(*const IScanningTunerEx, @ptrCast(self)), SecondsLeft, CurrentLockType, AutoDetect, CurrentFreq);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTunerEx_GetCurrentTunerStandardCapability(self: *const T, CurrentBroadcastStandard: Guid, SettlingTime: ?*i32, TvStandardsSupported: ?*i32) HRESULT {
                return @as(*const IScanningTunerEx.VTable, @ptrCast(self.vtable)).GetCurrentTunerStandardCapability(@as(*const IScanningTunerEx, @ptrCast(self)), CurrentBroadcastStandard, SettlingTime, TvStandardsSupported);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IScanningTunerEx_SetScanSignalTypeFilter(self: *const T, _param_ScanModulationTypes: i32, _param_AnalogVideoStandard: i32) HRESULT {
                return @as(*const IScanningTunerEx.VTable, @ptrCast(self.vtable)).SetScanSignalTypeFilter(@as(*const IScanningTunerEx, @ptrCast(self)), _param_ScanModulationTypes, _param_AnalogVideoStandard);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IComponentType_Value = Guid.initString("6a340dc0-0311-11d3-9d8e-00c04f72d980");
pub const IID_IComponentType = &IID_IComponentType_Value;
pub const IComponentType = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Category: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                Category: ?*ComponentCategory,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                Category: ?*ComponentCategory,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Category: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                Category: ComponentCategory,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                Category: ComponentCategory,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MediaMajorType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaMajorType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaMajorType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MediaMajorType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaMajorType: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaMajorType: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__MediaMajorType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaMajorTypeGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaMajorTypeGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__MediaMajorType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaMajorTypeGuid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaMajorTypeGuid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MediaSubType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaSubType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaSubType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MediaSubType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaSubType: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaSubType: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__MediaSubType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaSubTypeGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaSubTypeGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__MediaSubType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaSubTypeGuid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaSubTypeGuid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MediaFormatType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaFormatType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaFormatType: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MediaFormatType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaFormatType: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaFormatType: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__MediaFormatType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaFormatTypeGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaFormatTypeGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__MediaFormatType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaFormatTypeGuid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaFormatTypeGuid: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MediaType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MediaType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentType,
                MediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentType,
                MediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponentType,
                NewCT: ?*?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponentType,
                NewCT: ?*?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_get_Category(self: *const T, Category: ?*ComponentCategory) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).get_Category(@as(*const IComponentType, @ptrCast(self)), Category);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_put_Category(self: *const T, Category: ComponentCategory) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).put_Category(@as(*const IComponentType, @ptrCast(self)), Category);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_get_MediaMajorType(self: *const T, MediaMajorType: ?*?BSTR) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).get_MediaMajorType(@as(*const IComponentType, @ptrCast(self)), MediaMajorType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_put_MediaMajorType(self: *const T, MediaMajorType: ?BSTR) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).put_MediaMajorType(@as(*const IComponentType, @ptrCast(self)), MediaMajorType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_get__MediaMajorType(self: *const T, MediaMajorTypeGuid: ?*Guid) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).get__MediaMajorType(@as(*const IComponentType, @ptrCast(self)), MediaMajorTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_put__MediaMajorType(self: *const T, MediaMajorTypeGuid: ?*const Guid) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).put__MediaMajorType(@as(*const IComponentType, @ptrCast(self)), MediaMajorTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_get_MediaSubType(self: *const T, MediaSubType: ?*?BSTR) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).get_MediaSubType(@as(*const IComponentType, @ptrCast(self)), MediaSubType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_put_MediaSubType(self: *const T, MediaSubType: ?BSTR) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).put_MediaSubType(@as(*const IComponentType, @ptrCast(self)), MediaSubType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_get__MediaSubType(self: *const T, MediaSubTypeGuid: ?*Guid) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).get__MediaSubType(@as(*const IComponentType, @ptrCast(self)), MediaSubTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_put__MediaSubType(self: *const T, MediaSubTypeGuid: ?*const Guid) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).put__MediaSubType(@as(*const IComponentType, @ptrCast(self)), MediaSubTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_get_MediaFormatType(self: *const T, MediaFormatType: ?*?BSTR) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).get_MediaFormatType(@as(*const IComponentType, @ptrCast(self)), MediaFormatType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_put_MediaFormatType(self: *const T, MediaFormatType: ?BSTR) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).put_MediaFormatType(@as(*const IComponentType, @ptrCast(self)), MediaFormatType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_get__MediaFormatType(self: *const T, MediaFormatTypeGuid: ?*Guid) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).get__MediaFormatType(@as(*const IComponentType, @ptrCast(self)), MediaFormatTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_put__MediaFormatType(self: *const T, MediaFormatTypeGuid: ?*const Guid) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).put__MediaFormatType(@as(*const IComponentType, @ptrCast(self)), MediaFormatTypeGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_get_MediaType(self: *const T, MediaType: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).get_MediaType(@as(*const IComponentType, @ptrCast(self)), MediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_put_MediaType(self: *const T, MediaType: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).put_MediaType(@as(*const IComponentType, @ptrCast(self)), MediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentType_Clone(self: *const T, NewCT: ?*?*IComponentType) HRESULT {
                return @as(*const IComponentType.VTable, @ptrCast(self.vtable)).Clone(@as(*const IComponentType, @ptrCast(self)), NewCT);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_ILanguageComponentType_Value = Guid.initString("b874c8ba-0fa2-11d3-9d8e-00c04f72d980");
pub const IID_ILanguageComponentType = &IID_ILanguageComponentType_Value;
pub const ILanguageComponentType = extern struct {
    pub const VTable = extern struct {
        base: IComponentType.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LangID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILanguageComponentType,
                LangID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILanguageComponentType,
                LangID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LangID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILanguageComponentType,
                LangID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILanguageComponentType,
                LangID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IComponentType.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILanguageComponentType_get_LangID(self: *const T, LangID: ?*i32) HRESULT {
                return @as(*const ILanguageComponentType.VTable, @ptrCast(self.vtable)).get_LangID(@as(*const ILanguageComponentType, @ptrCast(self)), LangID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILanguageComponentType_put_LangID(self: *const T, LangID: i32) HRESULT {
                return @as(*const ILanguageComponentType.VTable, @ptrCast(self.vtable)).put_LangID(@as(*const ILanguageComponentType, @ptrCast(self)), LangID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMPEG2ComponentType_Value = Guid.initString("2c073d84-b51c-48c9-aa9f-68971e1f6e38");
pub const IID_IMPEG2ComponentType = &IID_IMPEG2ComponentType_Value;
pub const IMPEG2ComponentType = extern struct {
    pub const VTable = extern struct {
        base: ILanguageComponentType.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_StreamType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2ComponentType,
                MP2StreamType: ?*MPEG2StreamType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2ComponentType,
                MP2StreamType: ?*MPEG2StreamType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_StreamType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2ComponentType,
                MP2StreamType: MPEG2StreamType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2ComponentType,
                MP2StreamType: MPEG2StreamType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ILanguageComponentType.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2ComponentType_get_StreamType(self: *const T, MP2StreamType: ?*MPEG2StreamType) HRESULT {
                return @as(*const IMPEG2ComponentType.VTable, @ptrCast(self.vtable)).get_StreamType(@as(*const IMPEG2ComponentType, @ptrCast(self)), MP2StreamType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2ComponentType_put_StreamType(self: *const T, MP2StreamType: MPEG2StreamType) HRESULT {
                return @as(*const IMPEG2ComponentType.VTable, @ptrCast(self.vtable)).put_StreamType(@as(*const IMPEG2ComponentType, @ptrCast(self)), MP2StreamType);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IATSCComponentType_Value = Guid.initString("fc189e4d-7bd4-4125-b3b3-3a76a332cc96");
pub const IID_IATSCComponentType = &IID_IATSCComponentType_Value;
pub const IATSCComponentType = extern struct {
    pub const VTable = extern struct {
        base: IMPEG2ComponentType.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Flags: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCComponentType,
                Flags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCComponentType,
                Flags: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Flags: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCComponentType,
                flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCComponentType,
                flags: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMPEG2ComponentType.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCComponentType_get_Flags(self: *const T, Flags: ?*i32) HRESULT {
                return @as(*const IATSCComponentType.VTable, @ptrCast(self.vtable)).get_Flags(@as(*const IATSCComponentType, @ptrCast(self)), Flags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCComponentType_put_Flags(self: *const T, flags: i32) HRESULT {
                return @as(*const IATSCComponentType.VTable, @ptrCast(self.vtable)).put_Flags(@as(*const IATSCComponentType, @ptrCast(self)), flags);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IEnumComponentTypes_Value = Guid.initString("8a674b4a-1f63-11d3-b64c-00c04f79498e");
pub const IID_IEnumComponentTypes = &IID_IEnumComponentTypes_Value;
pub const IEnumComponentTypes = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumComponentTypes,
                celt: u32,
                rgelt: [*]?*IComponentType,
                pceltFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumComponentTypes,
                celt: u32,
                rgelt: [*]?*IComponentType,
                pceltFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumComponentTypes,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumComponentTypes,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumComponentTypes,
                ppEnum: ?*?*IEnumComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumComponentTypes,
                ppEnum: ?*?*IEnumComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumComponentTypes_Next(self: *const T, celt: u32, rgelt: [*]?*IComponentType, pceltFetched: ?*u32) HRESULT {
                return @as(*const IEnumComponentTypes.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumComponentTypes, @ptrCast(self)), celt, rgelt, pceltFetched);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumComponentTypes_Skip(self: *const T, celt: u32) HRESULT {
                return @as(*const IEnumComponentTypes.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumComponentTypes, @ptrCast(self)), celt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumComponentTypes_Reset(self: *const T) HRESULT {
                return @as(*const IEnumComponentTypes.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumComponentTypes, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumComponentTypes_Clone(self: *const T, ppEnum: ?*?*IEnumComponentTypes) HRESULT {
                return @as(*const IEnumComponentTypes.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumComponentTypes, @ptrCast(self)), ppEnum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IComponentTypes_Value = Guid.initString("0dc13d4a-0313-11d3-9d8e-00c04f72d980");
pub const IID_IComponentTypes = &IID_IComponentTypes_Value;
pub const IComponentTypes = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentTypes,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentTypes,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentTypes,
                ppNewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentTypes,
                ppNewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumComponentTypes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponentTypes,
                ppNewEnum: ?*?*IEnumComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponentTypes,
                ppNewEnum: ?*?*IEnumComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentTypes,
                Index: VARIANT,
                ComponentType: ?*?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentTypes,
                Index: VARIANT,
                ComponentType: ?*?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentTypes,
                Index: VARIANT,
                ComponentType: ?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentTypes,
                Index: VARIANT,
                ComponentType: ?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Add: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponentTypes,
                ComponentType: ?*IComponentType,
                NewIndex: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponentTypes,
                ComponentType: ?*IComponentType,
                NewIndex: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Remove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponentTypes,
                Index: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponentTypes,
                Index: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponentTypes,
                NewList: ?*?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponentTypes,
                NewList: ?*?*IComponentTypes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentTypes_get_Count(self: *const T, Count: ?*i32) HRESULT {
                return @as(*const IComponentTypes.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IComponentTypes, @ptrCast(self)), Count);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentTypes_get__NewEnum(self: *const T, ppNewEnum: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IComponentTypes.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const IComponentTypes, @ptrCast(self)), ppNewEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentTypes_EnumComponentTypes(self: *const T, ppNewEnum: ?*?*IEnumComponentTypes) HRESULT {
                return @as(*const IComponentTypes.VTable, @ptrCast(self.vtable)).EnumComponentTypes(@as(*const IComponentTypes, @ptrCast(self)), ppNewEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentTypes_get_Item(self: *const T, Index: VARIANT, ComponentType: ?*?*IComponentType) HRESULT {
                return @as(*const IComponentTypes.VTable, @ptrCast(self.vtable)).get_Item(@as(*const IComponentTypes, @ptrCast(self)), Index, ComponentType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentTypes_put_Item(self: *const T, Index: VARIANT, ComponentType: ?*IComponentType) HRESULT {
                return @as(*const IComponentTypes.VTable, @ptrCast(self.vtable)).put_Item(@as(*const IComponentTypes, @ptrCast(self)), Index, ComponentType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentTypes_Add(self: *const T, ComponentType: ?*IComponentType, NewIndex: ?*VARIANT) HRESULT {
                return @as(*const IComponentTypes.VTable, @ptrCast(self.vtable)).Add(@as(*const IComponentTypes, @ptrCast(self)), ComponentType, NewIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentTypes_Remove(self: *const T, Index: VARIANT) HRESULT {
                return @as(*const IComponentTypes.VTable, @ptrCast(self.vtable)).Remove(@as(*const IComponentTypes, @ptrCast(self)), Index);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentTypes_Clone(self: *const T, NewList: ?*?*IComponentTypes) HRESULT {
                return @as(*const IComponentTypes.VTable, @ptrCast(self.vtable)).Clone(@as(*const IComponentTypes, @ptrCast(self)), NewList);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IComponent_Value = Guid.initString("1a5576fc-0e19-11d3-9d8e-00c04f72d980");
pub const IID_IComponent = &IID_IComponent_Value;
pub const IComponent = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Type: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponent,
                CT: ?*?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponent,
                CT: ?*?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Type: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponent,
                CT: ?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponent,
                CT: ?*IComponentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DescLangID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponent,
                LangID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponent,
                LangID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DescLangID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponent,
                LangID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponent,
                LangID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Status: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponent,
                Status: ?*ComponentStatus,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponent,
                Status: ?*ComponentStatus,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Status: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponent,
                Status: ComponentStatus,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponent,
                Status: ComponentStatus,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Description: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponent,
                Description: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponent,
                Description: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Description: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponent,
                Description: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponent,
                Description: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponent,
                NewComponent: ?*?*IComponent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponent,
                NewComponent: ?*?*IComponent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponent_get_Type(self: *const T, CT: ?*?*IComponentType) HRESULT {
                return @as(*const IComponent.VTable, @ptrCast(self.vtable)).get_Type(@as(*const IComponent, @ptrCast(self)), CT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponent_put_Type(self: *const T, CT: ?*IComponentType) HRESULT {
                return @as(*const IComponent.VTable, @ptrCast(self.vtable)).put_Type(@as(*const IComponent, @ptrCast(self)), CT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponent_get_DescLangID(self: *const T, LangID: ?*i32) HRESULT {
                return @as(*const IComponent.VTable, @ptrCast(self.vtable)).get_DescLangID(@as(*const IComponent, @ptrCast(self)), LangID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponent_put_DescLangID(self: *const T, LangID: i32) HRESULT {
                return @as(*const IComponent.VTable, @ptrCast(self.vtable)).put_DescLangID(@as(*const IComponent, @ptrCast(self)), LangID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponent_get_Status(self: *const T, Status: ?*ComponentStatus) HRESULT {
                return @as(*const IComponent.VTable, @ptrCast(self.vtable)).get_Status(@as(*const IComponent, @ptrCast(self)), Status);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponent_put_Status(self: *const T, Status: ComponentStatus) HRESULT {
                return @as(*const IComponent.VTable, @ptrCast(self.vtable)).put_Status(@as(*const IComponent, @ptrCast(self)), Status);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponent_get_Description(self: *const T, Description: ?*?BSTR) HRESULT {
                return @as(*const IComponent.VTable, @ptrCast(self.vtable)).get_Description(@as(*const IComponent, @ptrCast(self)), Description);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponent_put_Description(self: *const T, Description: ?BSTR) HRESULT {
                return @as(*const IComponent.VTable, @ptrCast(self.vtable)).put_Description(@as(*const IComponent, @ptrCast(self)), Description);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponent_Clone(self: *const T, NewComponent: ?*?*IComponent) HRESULT {
                return @as(*const IComponent.VTable, @ptrCast(self.vtable)).Clone(@as(*const IComponent, @ptrCast(self)), NewComponent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IAnalogAudioComponentType_Value = Guid.initString("2cfeb2a8-1787-4a24-a941-c6eaec39c842");
pub const IID_IAnalogAudioComponentType = &IID_IAnalogAudioComponentType_Value;
pub const IAnalogAudioComponentType = extern struct {
    pub const VTable = extern struct {
        base: IComponentType.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AnalogAudioMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogAudioComponentType,
                Mode: ?*TVAudioMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogAudioComponentType,
                Mode: ?*TVAudioMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_AnalogAudioMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogAudioComponentType,
                Mode: TVAudioMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogAudioComponentType,
                Mode: TVAudioMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IComponentType.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogAudioComponentType_get_AnalogAudioMode(self: *const T, Mode: ?*TVAudioMode) HRESULT {
                return @as(*const IAnalogAudioComponentType.VTable, @ptrCast(self.vtable)).get_AnalogAudioMode(@as(*const IAnalogAudioComponentType, @ptrCast(self)), Mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogAudioComponentType_put_AnalogAudioMode(self: *const T, Mode: TVAudioMode) HRESULT {
                return @as(*const IAnalogAudioComponentType.VTable, @ptrCast(self.vtable)).put_AnalogAudioMode(@as(*const IAnalogAudioComponentType, @ptrCast(self)), Mode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMPEG2Component_Value = Guid.initString("1493e353-1eb6-473c-802d-8e6b8ec9d2a9");
pub const IID_IMPEG2Component = &IID_IMPEG2Component_Value;
pub const IMPEG2Component = extern struct {
    pub const VTable = extern struct {
        base: IComponent.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2Component,
                PID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2Component,
                PID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2Component,
                PID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2Component,
                PID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PCRPID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2Component,
                PCRPID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2Component,
                PCRPID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PCRPID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2Component,
                PCRPID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2Component,
                PCRPID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ProgramNumber: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2Component,
                ProgramNumber: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2Component,
                ProgramNumber: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ProgramNumber: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMPEG2Component,
                ProgramNumber: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMPEG2Component,
                ProgramNumber: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IComponent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2Component_get_PID(self: *const T, PID: ?*i32) HRESULT {
                return @as(*const IMPEG2Component.VTable, @ptrCast(self.vtable)).get_PID(@as(*const IMPEG2Component, @ptrCast(self)), PID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2Component_put_PID(self: *const T, PID: i32) HRESULT {
                return @as(*const IMPEG2Component.VTable, @ptrCast(self.vtable)).put_PID(@as(*const IMPEG2Component, @ptrCast(self)), PID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2Component_get_PCRPID(self: *const T, PCRPID: ?*i32) HRESULT {
                return @as(*const IMPEG2Component.VTable, @ptrCast(self.vtable)).get_PCRPID(@as(*const IMPEG2Component, @ptrCast(self)), PCRPID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2Component_put_PCRPID(self: *const T, PCRPID: i32) HRESULT {
                return @as(*const IMPEG2Component.VTable, @ptrCast(self.vtable)).put_PCRPID(@as(*const IMPEG2Component, @ptrCast(self)), PCRPID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2Component_get_ProgramNumber(self: *const T, ProgramNumber: ?*i32) HRESULT {
                return @as(*const IMPEG2Component.VTable, @ptrCast(self.vtable)).get_ProgramNumber(@as(*const IMPEG2Component, @ptrCast(self)), ProgramNumber);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2Component_put_ProgramNumber(self: *const T, ProgramNumber: i32) HRESULT {
                return @as(*const IMPEG2Component.VTable, @ptrCast(self.vtable)).put_ProgramNumber(@as(*const IMPEG2Component, @ptrCast(self)), ProgramNumber);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IEnumComponents_Value = Guid.initString("2a6e2939-2595-11d3-b64c-00c04f79498e");
pub const IID_IEnumComponents = &IID_IEnumComponents_Value;
pub const IEnumComponents = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumComponents,
                celt: u32,
                rgelt: [*]?*IComponent,
                pceltFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumComponents,
                celt: u32,
                rgelt: [*]?*IComponent,
                pceltFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumComponents,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumComponents,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumComponents,
                ppEnum: ?*?*IEnumComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumComponents,
                ppEnum: ?*?*IEnumComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumComponents_Next(self: *const T, celt: u32, rgelt: [*]?*IComponent, pceltFetched: ?*u32) HRESULT {
                return @as(*const IEnumComponents.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumComponents, @ptrCast(self)), celt, rgelt, pceltFetched);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumComponents_Skip(self: *const T, celt: u32) HRESULT {
                return @as(*const IEnumComponents.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumComponents, @ptrCast(self)), celt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumComponents_Reset(self: *const T) HRESULT {
                return @as(*const IEnumComponents.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumComponents, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumComponents_Clone(self: *const T, ppEnum: ?*?*IEnumComponents) HRESULT {
                return @as(*const IEnumComponents.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumComponents, @ptrCast(self)), ppEnum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IComponents_Value = Guid.initString("39a48091-fffe-4182-a161-3ff802640e26");
pub const IID_IComponents = &IID_IComponents_Value;
pub const IComponents = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponents,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponents,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponents,
                ppNewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponents,
                ppNewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumComponents: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponents,
                ppNewEnum: ?*?*IEnumComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponents,
                ppNewEnum: ?*?*IEnumComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponents,
                Index: VARIANT,
                ppComponent: ?*?*IComponent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponents,
                Index: VARIANT,
                ppComponent: ?*?*IComponent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Add: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponents,
                Component: ?*IComponent,
                NewIndex: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponents,
                Component: ?*IComponent,
                NewIndex: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Remove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponents,
                Index: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponents,
                Index: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponents,
                NewList: ?*?*IComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponents,
                NewList: ?*?*IComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponents,
                Index: VARIANT,
                ppComponent: ?*IComponent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponents,
                Index: VARIANT,
                ppComponent: ?*IComponent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponents_get_Count(self: *const T, Count: ?*i32) HRESULT {
                return @as(*const IComponents.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IComponents, @ptrCast(self)), Count);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponents_get__NewEnum(self: *const T, ppNewEnum: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IComponents.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const IComponents, @ptrCast(self)), ppNewEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponents_EnumComponents(self: *const T, ppNewEnum: ?*?*IEnumComponents) HRESULT {
                return @as(*const IComponents.VTable, @ptrCast(self.vtable)).EnumComponents(@as(*const IComponents, @ptrCast(self)), ppNewEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponents_get_Item(self: *const T, Index: VARIANT, ppComponent: ?*?*IComponent) HRESULT {
                return @as(*const IComponents.VTable, @ptrCast(self.vtable)).get_Item(@as(*const IComponents, @ptrCast(self)), Index, ppComponent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponents_Add(self: *const T, Component: ?*IComponent, NewIndex: ?*VARIANT) HRESULT {
                return @as(*const IComponents.VTable, @ptrCast(self.vtable)).Add(@as(*const IComponents, @ptrCast(self)), Component, NewIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponents_Remove(self: *const T, Index: VARIANT) HRESULT {
                return @as(*const IComponents.VTable, @ptrCast(self.vtable)).Remove(@as(*const IComponents, @ptrCast(self)), Index);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponents_Clone(self: *const T, NewList: ?*?*IComponents) HRESULT {
                return @as(*const IComponents.VTable, @ptrCast(self.vtable)).Clone(@as(*const IComponents, @ptrCast(self)), NewList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponents_put_Item(self: *const T, Index: VARIANT, ppComponent: ?*IComponent) HRESULT {
                return @as(*const IComponents.VTable, @ptrCast(self.vtable)).put_Item(@as(*const IComponents, @ptrCast(self)), Index, ppComponent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IComponentsOld_Value = Guid.initString("fcd01846-0e19-11d3-9d8e-00c04f72d980");
pub const IID_IComponentsOld = &IID_IComponentsOld_Value;
pub const IComponentsOld = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentsOld,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentsOld,
                Count: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentsOld,
                ppNewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentsOld,
                ppNewEnum: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumComponents: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponentsOld,
                ppNewEnum: ?*?*IEnumComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponentsOld,
                ppNewEnum: ?*?*IEnumComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IComponentsOld,
                Index: VARIANT,
                ppComponent: ?*?*IComponent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IComponentsOld,
                Index: VARIANT,
                ppComponent: ?*?*IComponent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Add: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponentsOld,
                Component: ?*IComponent,
                NewIndex: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponentsOld,
                Component: ?*IComponent,
                NewIndex: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Remove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponentsOld,
                Index: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponentsOld,
                Index: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IComponentsOld,
                NewList: ?*?*IComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IComponentsOld,
                NewList: ?*?*IComponents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentsOld_get_Count(self: *const T, Count: ?*i32) HRESULT {
                return @as(*const IComponentsOld.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IComponentsOld, @ptrCast(self)), Count);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentsOld_get__NewEnum(self: *const T, ppNewEnum: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IComponentsOld.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const IComponentsOld, @ptrCast(self)), ppNewEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentsOld_EnumComponents(self: *const T, ppNewEnum: ?*?*IEnumComponents) HRESULT {
                return @as(*const IComponentsOld.VTable, @ptrCast(self.vtable)).EnumComponents(@as(*const IComponentsOld, @ptrCast(self)), ppNewEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentsOld_get_Item(self: *const T, Index: VARIANT, ppComponent: ?*?*IComponent) HRESULT {
                return @as(*const IComponentsOld.VTable, @ptrCast(self.vtable)).get_Item(@as(*const IComponentsOld, @ptrCast(self)), Index, ppComponent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentsOld_Add(self: *const T, Component: ?*IComponent, NewIndex: ?*VARIANT) HRESULT {
                return @as(*const IComponentsOld.VTable, @ptrCast(self.vtable)).Add(@as(*const IComponentsOld, @ptrCast(self)), Component, NewIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentsOld_Remove(self: *const T, Index: VARIANT) HRESULT {
                return @as(*const IComponentsOld.VTable, @ptrCast(self.vtable)).Remove(@as(*const IComponentsOld, @ptrCast(self)), Index);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IComponentsOld_Clone(self: *const T, NewList: ?*?*IComponents) HRESULT {
                return @as(*const IComponentsOld.VTable, @ptrCast(self.vtable)).Clone(@as(*const IComponentsOld, @ptrCast(self)), NewList);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_ILocator_Value = Guid.initString("286d7f89-760c-4f89-80c4-66841d2507aa");
pub const IID_ILocator = &IID_ILocator_Value;
pub const ILocator = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CarrierFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                Frequency: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                Frequency: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CarrierFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                Frequency: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                Frequency: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_InnerFEC: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                FEC: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                FEC: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_InnerFEC: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                FEC: FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                FEC: FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_InnerFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                FEC: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                FEC: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_InnerFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                FEC: BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                FEC: BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OuterFEC: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                FEC: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                FEC: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_OuterFEC: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                FEC: FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                FEC: FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OuterFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                FEC: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                FEC: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_OuterFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                FEC: BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                FEC: BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Modulation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                Modulation: ?*ModulationType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                Modulation: ?*ModulationType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Modulation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                Modulation: ModulationType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                Modulation: ModulationType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SymbolRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                Rate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                Rate: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SymbolRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const ILocator,
                Rate: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const ILocator,
                Rate: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ILocator,
                NewLocator: ?*?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ILocator,
                NewLocator: ?*?*ILocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_get_CarrierFrequency(self: *const T, Frequency: ?*i32) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).get_CarrierFrequency(@as(*const ILocator, @ptrCast(self)), Frequency);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_put_CarrierFrequency(self: *const T, Frequency: i32) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).put_CarrierFrequency(@as(*const ILocator, @ptrCast(self)), Frequency);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_get_InnerFEC(self: *const T, FEC: ?*FECMethod) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).get_InnerFEC(@as(*const ILocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_put_InnerFEC(self: *const T, FEC: FECMethod) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).put_InnerFEC(@as(*const ILocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_get_InnerFECRate(self: *const T, FEC: ?*BinaryConvolutionCodeRate) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).get_InnerFECRate(@as(*const ILocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_put_InnerFECRate(self: *const T, FEC: BinaryConvolutionCodeRate) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).put_InnerFECRate(@as(*const ILocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_get_OuterFEC(self: *const T, FEC: ?*FECMethod) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).get_OuterFEC(@as(*const ILocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_put_OuterFEC(self: *const T, FEC: FECMethod) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).put_OuterFEC(@as(*const ILocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_get_OuterFECRate(self: *const T, FEC: ?*BinaryConvolutionCodeRate) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).get_OuterFECRate(@as(*const ILocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_put_OuterFECRate(self: *const T, FEC: BinaryConvolutionCodeRate) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).put_OuterFECRate(@as(*const ILocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_get_Modulation(self: *const T, Modulation: ?*ModulationType) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).get_Modulation(@as(*const ILocator, @ptrCast(self)), Modulation);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_put_Modulation(self: *const T, Modulation: ModulationType) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).put_Modulation(@as(*const ILocator, @ptrCast(self)), Modulation);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_get_SymbolRate(self: *const T, Rate: ?*i32) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).get_SymbolRate(@as(*const ILocator, @ptrCast(self)), Rate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_put_SymbolRate(self: *const T, Rate: i32) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).put_SymbolRate(@as(*const ILocator, @ptrCast(self)), Rate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ILocator_Clone(self: *const T, NewLocator: ?*?*ILocator) HRESULT {
                return @as(*const ILocator.VTable, @ptrCast(self.vtable)).Clone(@as(*const ILocator, @ptrCast(self)), NewLocator);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IAnalogLocator_Value = Guid.initString("34d1f26b-e339-430d-abce-738cb48984dc");
pub const IID_IAnalogLocator = &IID_IAnalogLocator_Value;
pub const IAnalogLocator = extern struct {
    pub const VTable = extern struct {
        base: ILocator.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoStandard: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogLocator,
                AVS: ?*AnalogVideoStandard,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogLocator,
                AVS: ?*AnalogVideoStandard,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_VideoStandard: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IAnalogLocator,
                AVS: AnalogVideoStandard,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IAnalogLocator,
                AVS: AnalogVideoStandard,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ILocator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogLocator_get_VideoStandard(self: *const T, AVS: ?*AnalogVideoStandard) HRESULT {
                return @as(*const IAnalogLocator.VTable, @ptrCast(self.vtable)).get_VideoStandard(@as(*const IAnalogLocator, @ptrCast(self)), AVS);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAnalogLocator_put_VideoStandard(self: *const T, AVS: AnalogVideoStandard) HRESULT {
                return @as(*const IAnalogLocator.VTable, @ptrCast(self.vtable)).put_VideoStandard(@as(*const IAnalogLocator, @ptrCast(self)), AVS);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IDigitalLocator_Value = Guid.initString("19b595d8-839a-47f0-96df-4f194f3c768c");
pub const IID_IDigitalLocator = &IID_IDigitalLocator_Value;
pub const IDigitalLocator = extern struct {
    pub const VTable = extern struct {
        base: ILocator.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ILocator.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IATSCLocator_Value = Guid.initString("bf8d986f-8c2b-4131-94d7-4d3d9fcc21ef");
pub const IID_IATSCLocator = &IID_IATSCLocator_Value;
pub const IATSCLocator = extern struct {
    pub const VTable = extern struct {
        base: IDigitalLocator.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PhysicalChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCLocator,
                PhysicalChannel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCLocator,
                PhysicalChannel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PhysicalChannel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCLocator,
                PhysicalChannel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCLocator,
                PhysicalChannel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TSID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCLocator,
                TSID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCLocator,
                TSID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TSID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCLocator,
                TSID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCLocator,
                TSID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDigitalLocator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCLocator_get_PhysicalChannel(self: *const T, PhysicalChannel: ?*i32) HRESULT {
                return @as(*const IATSCLocator.VTable, @ptrCast(self.vtable)).get_PhysicalChannel(@as(*const IATSCLocator, @ptrCast(self)), PhysicalChannel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCLocator_put_PhysicalChannel(self: *const T, PhysicalChannel: i32) HRESULT {
                return @as(*const IATSCLocator.VTable, @ptrCast(self.vtable)).put_PhysicalChannel(@as(*const IATSCLocator, @ptrCast(self)), PhysicalChannel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCLocator_get_TSID(self: *const T, TSID: ?*i32) HRESULT {
                return @as(*const IATSCLocator.VTable, @ptrCast(self.vtable)).get_TSID(@as(*const IATSCLocator, @ptrCast(self)), TSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCLocator_put_TSID(self: *const T, TSID: i32) HRESULT {
                return @as(*const IATSCLocator.VTable, @ptrCast(self.vtable)).put_TSID(@as(*const IATSCLocator, @ptrCast(self)), TSID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IATSCLocator2_Value = Guid.initString("612aa885-66cf-4090-ba0a-566f5312e4ca");
pub const IID_IATSCLocator2 = &IID_IATSCLocator2_Value;
pub const IATSCLocator2 = extern struct {
    pub const VTable = extern struct {
        base: IATSCLocator.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ProgramNumber: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCLocator2,
                ProgramNumber: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCLocator2,
                ProgramNumber: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ProgramNumber: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IATSCLocator2,
                ProgramNumber: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IATSCLocator2,
                ProgramNumber: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IATSCLocator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCLocator2_get_ProgramNumber(self: *const T, ProgramNumber: ?*i32) HRESULT {
                return @as(*const IATSCLocator2.VTable, @ptrCast(self.vtable)).get_ProgramNumber(@as(*const IATSCLocator2, @ptrCast(self)), ProgramNumber);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSCLocator2_put_ProgramNumber(self: *const T, ProgramNumber: i32) HRESULT {
                return @as(*const IATSCLocator2.VTable, @ptrCast(self.vtable)).put_ProgramNumber(@as(*const IATSCLocator2, @ptrCast(self)), ProgramNumber);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IDigitalCableLocator_Value = Guid.initString("48f66a11-171a-419a-9525-beeecd51584c");
pub const IID_IDigitalCableLocator = &IID_IDigitalCableLocator_Value;
pub const IDigitalCableLocator = extern struct {
    pub const VTable = extern struct {
        base: IATSCLocator2.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IATSCLocator2.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDVBTLocator_Value = Guid.initString("8664da16-dda2-42ac-926a-c18f9127c302");
pub const IID_IDVBTLocator = &IID_IDVBTLocator_Value;
pub const IDVBTLocator = extern struct {
    pub const VTable = extern struct {
        base: IDigitalLocator.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Bandwidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                BandWidthVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                BandWidthVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Bandwidth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                BandwidthVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                BandwidthVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LPInnerFEC: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                FEC: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                FEC: ?*FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LPInnerFEC: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                FEC: FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                FEC: FECMethod,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LPInnerFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                FEC: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                FEC: ?*BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LPInnerFECRate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                FEC: BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                FEC: BinaryConvolutionCodeRate,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_HAlpha: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                Alpha: ?*HierarchyAlpha,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                Alpha: ?*HierarchyAlpha,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_HAlpha: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                Alpha: HierarchyAlpha,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                Alpha: HierarchyAlpha,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Guard: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                GI: ?*GuardInterval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                GI: ?*GuardInterval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Guard: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                GI: GuardInterval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                GI: GuardInterval,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Mode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                mode: ?*TransmissionMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                mode: ?*TransmissionMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Mode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                mode: TransmissionMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                mode: TransmissionMode,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OtherFrequencyInUse: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                OtherFrequencyInUseVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                OtherFrequencyInUseVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_OtherFrequencyInUse: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator,
                OtherFrequencyInUseVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator,
                OtherFrequencyInUseVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDigitalLocator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_get_Bandwidth(self: *const T, BandWidthVal: ?*i32) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).get_Bandwidth(@as(*const IDVBTLocator, @ptrCast(self)), BandWidthVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_put_Bandwidth(self: *const T, BandwidthVal: i32) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).put_Bandwidth(@as(*const IDVBTLocator, @ptrCast(self)), BandwidthVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_get_LPInnerFEC(self: *const T, FEC: ?*FECMethod) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).get_LPInnerFEC(@as(*const IDVBTLocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_put_LPInnerFEC(self: *const T, FEC: FECMethod) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).put_LPInnerFEC(@as(*const IDVBTLocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_get_LPInnerFECRate(self: *const T, FEC: ?*BinaryConvolutionCodeRate) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).get_LPInnerFECRate(@as(*const IDVBTLocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_put_LPInnerFECRate(self: *const T, FEC: BinaryConvolutionCodeRate) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).put_LPInnerFECRate(@as(*const IDVBTLocator, @ptrCast(self)), FEC);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_get_HAlpha(self: *const T, Alpha: ?*HierarchyAlpha) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).get_HAlpha(@as(*const IDVBTLocator, @ptrCast(self)), Alpha);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_put_HAlpha(self: *const T, Alpha: HierarchyAlpha) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).put_HAlpha(@as(*const IDVBTLocator, @ptrCast(self)), Alpha);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_get_Guard(self: *const T, GI: ?*GuardInterval) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).get_Guard(@as(*const IDVBTLocator, @ptrCast(self)), GI);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_put_Guard(self: *const T, GI: GuardInterval) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).put_Guard(@as(*const IDVBTLocator, @ptrCast(self)), GI);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_get_Mode(self: *const T, mode: ?*TransmissionMode) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).get_Mode(@as(*const IDVBTLocator, @ptrCast(self)), mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_put_Mode(self: *const T, mode: TransmissionMode) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).put_Mode(@as(*const IDVBTLocator, @ptrCast(self)), mode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_get_OtherFrequencyInUse(self: *const T, OtherFrequencyInUseVal: ?*i16) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).get_OtherFrequencyInUse(@as(*const IDVBTLocator, @ptrCast(self)), OtherFrequencyInUseVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator_put_OtherFrequencyInUse(self: *const T, OtherFrequencyInUseVal: i16) HRESULT {
                return @as(*const IDVBTLocator.VTable, @ptrCast(self.vtable)).put_OtherFrequencyInUse(@as(*const IDVBTLocator, @ptrCast(self)), OtherFrequencyInUseVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDVBTLocator2_Value = Guid.initString("448a2edf-ae95-4b43-a3cc-747843c453d4");
pub const IID_IDVBTLocator2 = &IID_IDVBTLocator2_Value;
pub const IDVBTLocator2 = extern struct {
    pub const VTable = extern struct {
        base: IDVBTLocator.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PhysicalLayerPipeId: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator2,
                PhysicalLayerPipeIdVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator2,
                PhysicalLayerPipeIdVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PhysicalLayerPipeId: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBTLocator2,
                PhysicalLayerPipeIdVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBTLocator2,
                PhysicalLayerPipeIdVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDVBTLocator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator2_get_PhysicalLayerPipeId(self: *const T, PhysicalLayerPipeIdVal: ?*i32) HRESULT {
                return @as(*const IDVBTLocator2.VTable, @ptrCast(self.vtable)).get_PhysicalLayerPipeId(@as(*const IDVBTLocator2, @ptrCast(self)), PhysicalLayerPipeIdVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBTLocator2_put_PhysicalLayerPipeId(self: *const T, PhysicalLayerPipeIdVal: i32) HRESULT {
                return @as(*const IDVBTLocator2.VTable, @ptrCast(self.vtable)).put_PhysicalLayerPipeId(@as(*const IDVBTLocator2, @ptrCast(self)), PhysicalLayerPipeIdVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDVBSLocator_Value = Guid.initString("3d7c353c-0d04-45f1-a742-f97cc1188dc8");
pub const IID_IDVBSLocator = &IID_IDVBSLocator_Value;
pub const IDVBSLocator = extern struct {
    pub const VTable = extern struct {
        base: IDigitalLocator.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SignalPolarisation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                PolarisationVal: ?*Polarisation,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                PolarisationVal: ?*Polarisation,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SignalPolarisation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                PolarisationVal: Polarisation,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                PolarisationVal: Polarisation,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WestPosition: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                WestLongitude: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                WestLongitude: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_WestPosition: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                WestLongitude: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                WestLongitude: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OrbitalPosition: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                longitude: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                longitude: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_OrbitalPosition: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                longitude: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                longitude: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Azimuth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                Azimuth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                Azimuth: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Azimuth: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                Azimuth: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                Azimuth: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Elevation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                Elevation: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                Elevation: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Elevation: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator,
                Elevation: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator,
                Elevation: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDigitalLocator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_get_SignalPolarisation(self: *const T, PolarisationVal: ?*Polarisation) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).get_SignalPolarisation(@as(*const IDVBSLocator, @ptrCast(self)), PolarisationVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_put_SignalPolarisation(self: *const T, PolarisationVal: Polarisation) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).put_SignalPolarisation(@as(*const IDVBSLocator, @ptrCast(self)), PolarisationVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_get_WestPosition(self: *const T, WestLongitude: ?*i16) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).get_WestPosition(@as(*const IDVBSLocator, @ptrCast(self)), WestLongitude);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_put_WestPosition(self: *const T, WestLongitude: i16) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).put_WestPosition(@as(*const IDVBSLocator, @ptrCast(self)), WestLongitude);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_get_OrbitalPosition(self: *const T, longitude: ?*i32) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).get_OrbitalPosition(@as(*const IDVBSLocator, @ptrCast(self)), longitude);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_put_OrbitalPosition(self: *const T, longitude: i32) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).put_OrbitalPosition(@as(*const IDVBSLocator, @ptrCast(self)), longitude);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_get_Azimuth(self: *const T, Azimuth: ?*i32) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).get_Azimuth(@as(*const IDVBSLocator, @ptrCast(self)), Azimuth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_put_Azimuth(self: *const T, Azimuth: i32) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).put_Azimuth(@as(*const IDVBSLocator, @ptrCast(self)), Azimuth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_get_Elevation(self: *const T, Elevation: ?*i32) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).get_Elevation(@as(*const IDVBSLocator, @ptrCast(self)), Elevation);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator_put_Elevation(self: *const T, Elevation: i32) HRESULT {
                return @as(*const IDVBSLocator.VTable, @ptrCast(self.vtable)).put_Elevation(@as(*const IDVBSLocator, @ptrCast(self)), Elevation);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDVBSLocator2_Value = Guid.initString("6044634a-1733-4f99-b982-5fb12afce4f0");
pub const IID_IDVBSLocator2 = &IID_IDVBSLocator2_Value;
pub const IDVBSLocator2 = extern struct {
    pub const VTable = extern struct {
        base: IDVBSLocator.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DiseqLNBSource: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                DiseqLNBSourceVal: ?*LNB_Source,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                DiseqLNBSourceVal: ?*LNB_Source,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DiseqLNBSource: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                DiseqLNBSourceVal: LNB_Source,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                DiseqLNBSourceVal: LNB_Source,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LocalOscillatorOverrideLow: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                LocalOscillatorOverrideLowVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                LocalOscillatorOverrideLowVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LocalOscillatorOverrideLow: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                LocalOscillatorOverrideLowVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                LocalOscillatorOverrideLowVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LocalOscillatorOverrideHigh: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                LocalOscillatorOverrideHighVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                LocalOscillatorOverrideHighVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LocalOscillatorOverrideHigh: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                LocalOscillatorOverrideHighVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                LocalOscillatorOverrideHighVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LocalLNBSwitchOverride: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                LocalLNBSwitchOverrideVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                LocalLNBSwitchOverrideVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LocalLNBSwitchOverride: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                LocalLNBSwitchOverrideVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                LocalLNBSwitchOverrideVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LocalSpectralInversionOverride: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                LocalSpectralInversionOverrideVal: ?*SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                LocalSpectralInversionOverrideVal: ?*SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_LocalSpectralInversionOverride: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                LocalSpectralInversionOverrideVal: SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                LocalSpectralInversionOverrideVal: SpectralInversion,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SignalRollOff: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                RollOffVal: ?*RollOff,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                RollOffVal: ?*RollOff,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SignalRollOff: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                RollOffVal: RollOff,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                RollOffVal: RollOff,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SignalPilot: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                PilotVal: ?*Pilot,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                PilotVal: ?*Pilot,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SignalPilot: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDVBSLocator2,
                PilotVal: Pilot,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDVBSLocator2,
                PilotVal: Pilot,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDVBSLocator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_get_DiseqLNBSource(self: *const T, DiseqLNBSourceVal: ?*LNB_Source) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).get_DiseqLNBSource(@as(*const IDVBSLocator2, @ptrCast(self)), DiseqLNBSourceVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_put_DiseqLNBSource(self: *const T, DiseqLNBSourceVal: LNB_Source) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).put_DiseqLNBSource(@as(*const IDVBSLocator2, @ptrCast(self)), DiseqLNBSourceVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_get_LocalOscillatorOverrideLow(self: *const T, LocalOscillatorOverrideLowVal: ?*i32) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).get_LocalOscillatorOverrideLow(@as(*const IDVBSLocator2, @ptrCast(self)), LocalOscillatorOverrideLowVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_put_LocalOscillatorOverrideLow(self: *const T, LocalOscillatorOverrideLowVal: i32) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).put_LocalOscillatorOverrideLow(@as(*const IDVBSLocator2, @ptrCast(self)), LocalOscillatorOverrideLowVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_get_LocalOscillatorOverrideHigh(self: *const T, LocalOscillatorOverrideHighVal: ?*i32) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).get_LocalOscillatorOverrideHigh(@as(*const IDVBSLocator2, @ptrCast(self)), LocalOscillatorOverrideHighVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_put_LocalOscillatorOverrideHigh(self: *const T, LocalOscillatorOverrideHighVal: i32) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).put_LocalOscillatorOverrideHigh(@as(*const IDVBSLocator2, @ptrCast(self)), LocalOscillatorOverrideHighVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_get_LocalLNBSwitchOverride(self: *const T, LocalLNBSwitchOverrideVal: ?*i32) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).get_LocalLNBSwitchOverride(@as(*const IDVBSLocator2, @ptrCast(self)), LocalLNBSwitchOverrideVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_put_LocalLNBSwitchOverride(self: *const T, LocalLNBSwitchOverrideVal: i32) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).put_LocalLNBSwitchOverride(@as(*const IDVBSLocator2, @ptrCast(self)), LocalLNBSwitchOverrideVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_get_LocalSpectralInversionOverride(self: *const T, LocalSpectralInversionOverrideVal: ?*SpectralInversion) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).get_LocalSpectralInversionOverride(@as(*const IDVBSLocator2, @ptrCast(self)), LocalSpectralInversionOverrideVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_put_LocalSpectralInversionOverride(self: *const T, LocalSpectralInversionOverrideVal: SpectralInversion) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).put_LocalSpectralInversionOverride(@as(*const IDVBSLocator2, @ptrCast(self)), LocalSpectralInversionOverrideVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_get_SignalRollOff(self: *const T, RollOffVal: ?*RollOff) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).get_SignalRollOff(@as(*const IDVBSLocator2, @ptrCast(self)), RollOffVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_put_SignalRollOff(self: *const T, RollOffVal: RollOff) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).put_SignalRollOff(@as(*const IDVBSLocator2, @ptrCast(self)), RollOffVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_get_SignalPilot(self: *const T, PilotVal: ?*Pilot) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).get_SignalPilot(@as(*const IDVBSLocator2, @ptrCast(self)), PilotVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVBSLocator2_put_SignalPilot(self: *const T, PilotVal: Pilot) HRESULT {
                return @as(*const IDVBSLocator2.VTable, @ptrCast(self.vtable)).put_SignalPilot(@as(*const IDVBSLocator2, @ptrCast(self)), PilotVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDVBCLocator_Value = Guid.initString("6e42f36e-1dd2-43c4-9f78-69d25ae39034");
pub const IID_IDVBCLocator = &IID_IDVBCLocator_Value;
pub const IDVBCLocator = extern struct {
    pub const VTable = extern struct {
        base: IDigitalLocator.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDigitalLocator.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IISDBSLocator_Value = Guid.initString("c9897087-e29c-473f-9e4b-7072123dea14");
pub const IID_IISDBSLocator = &IID_IISDBSLocator_Value;
pub const IISDBSLocator = extern struct {
    pub const VTable = extern struct {
        base: IDVBSLocator.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDVBSLocator.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESOpenMmiEvent_Value = Guid.initString("ba4b6526-1a35-4635-8b56-3ec612746a8c");
pub const IID_IESOpenMmiEvent = &IID_IESOpenMmiEvent_Value;
pub const IESOpenMmiEvent = extern struct {
    pub const VTable = extern struct {
        base: IESEvent.VTable,
        GetDialogNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESOpenMmiEvent,
                pDialogRequest: ?*u32,
                pDialogNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESOpenMmiEvent,
                pDialogRequest: ?*u32,
                pDialogNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDialogType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESOpenMmiEvent,
                guidDialogType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESOpenMmiEvent,
                guidDialogType: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDialogData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESOpenMmiEvent,
                pbData: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESOpenMmiEvent,
                pbData: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDialogStringData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESOpenMmiEvent,
                pbstrBaseUrl: ?*?BSTR,
                pbstrData: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESOpenMmiEvent,
                pbstrBaseUrl: ?*?BSTR,
                pbstrData: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IESEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESOpenMmiEvent_GetDialogNumber(self: *const T, pDialogRequest: ?*u32, pDialogNumber: ?*u32) HRESULT {
                return @as(*const IESOpenMmiEvent.VTable, @ptrCast(self.vtable)).GetDialogNumber(@as(*const IESOpenMmiEvent, @ptrCast(self)), pDialogRequest, pDialogNumber);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESOpenMmiEvent_GetDialogType(self: *const T, guidDialogType: ?*Guid) HRESULT {
                return @as(*const IESOpenMmiEvent.VTable, @ptrCast(self.vtable)).GetDialogType(@as(*const IESOpenMmiEvent, @ptrCast(self)), guidDialogType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESOpenMmiEvent_GetDialogData(self: *const T, pbData: ?*?*SAFEARRAY) HRESULT {
                return @as(*const IESOpenMmiEvent.VTable, @ptrCast(self.vtable)).GetDialogData(@as(*const IESOpenMmiEvent, @ptrCast(self)), pbData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESOpenMmiEvent_GetDialogStringData(self: *const T, pbstrBaseUrl: ?*?BSTR, pbstrData: ?*?BSTR) HRESULT {
                return @as(*const IESOpenMmiEvent.VTable, @ptrCast(self.vtable)).GetDialogStringData(@as(*const IESOpenMmiEvent, @ptrCast(self)), pbstrBaseUrl, pbstrData);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESCloseMmiEvent_Value = Guid.initString("6b80e96f-55e2-45aa-b754-0c23c8e7d5c1");
pub const IID_IESCloseMmiEvent = &IID_IESCloseMmiEvent_Value;
pub const IESCloseMmiEvent = extern struct {
    pub const VTable = extern struct {
        base: IESEvent.VTable,
        GetDialogNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESCloseMmiEvent,
                pDialogNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESCloseMmiEvent,
                pDialogNumber: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IESEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESCloseMmiEvent_GetDialogNumber(self: *const T, pDialogNumber: ?*u32) HRESULT {
                return @as(*const IESCloseMmiEvent.VTable, @ptrCast(self.vtable)).GetDialogNumber(@as(*const IESCloseMmiEvent, @ptrCast(self)), pDialogNumber);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESValueUpdatedEvent_Value = Guid.initString("8a24c46e-bb63-4664-8602-5d9c718c146d");
pub const IID_IESValueUpdatedEvent = &IID_IESValueUpdatedEvent_Value;
pub const IESValueUpdatedEvent = extern struct {
    pub const VTable = extern struct {
        base: IESEvent.VTable,
        GetValueNames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESValueUpdatedEvent,
                pbstrNames: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESValueUpdatedEvent,
                pbstrNames: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IESEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESValueUpdatedEvent_GetValueNames(self: *const T, pbstrNames: ?*?*SAFEARRAY) HRESULT {
                return @as(*const IESValueUpdatedEvent.VTable, @ptrCast(self.vtable)).GetValueNames(@as(*const IESValueUpdatedEvent, @ptrCast(self)), pbstrNames);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESRequestTunerEvent_Value = Guid.initString("54c7a5e8-c3bb-4f51-af14-e0e2c0e34c6d");
pub const IID_IESRequestTunerEvent = &IID_IESRequestTunerEvent_Value;
pub const IESRequestTunerEvent = extern struct {
    pub const VTable = extern struct {
        base: IESEvent.VTable,
        GetPriority: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESRequestTunerEvent,
                pbyPriority: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESRequestTunerEvent,
                pbyPriority: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetReason: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESRequestTunerEvent,
                pbyReason: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESRequestTunerEvent,
                pbyReason: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetConsequences: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESRequestTunerEvent,
                pbyConsequences: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESRequestTunerEvent,
                pbyConsequences: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEstimatedTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESRequestTunerEvent,
                pdwEstimatedTime: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESRequestTunerEvent,
                pdwEstimatedTime: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IESEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESRequestTunerEvent_GetPriority(self: *const T, pbyPriority: ?*u8) HRESULT {
                return @as(*const IESRequestTunerEvent.VTable, @ptrCast(self.vtable)).GetPriority(@as(*const IESRequestTunerEvent, @ptrCast(self)), pbyPriority);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESRequestTunerEvent_GetReason(self: *const T, pbyReason: ?*u8) HRESULT {
                return @as(*const IESRequestTunerEvent.VTable, @ptrCast(self.vtable)).GetReason(@as(*const IESRequestTunerEvent, @ptrCast(self)), pbyReason);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESRequestTunerEvent_GetConsequences(self: *const T, pbyConsequences: ?*u8) HRESULT {
                return @as(*const IESRequestTunerEvent.VTable, @ptrCast(self.vtable)).GetConsequences(@as(*const IESRequestTunerEvent, @ptrCast(self)), pbyConsequences);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESRequestTunerEvent_GetEstimatedTime(self: *const T, pdwEstimatedTime: ?*u32) HRESULT {
                return @as(*const IESRequestTunerEvent.VTable, @ptrCast(self.vtable)).GetEstimatedTime(@as(*const IESRequestTunerEvent, @ptrCast(self)), pdwEstimatedTime);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESIsdbCasResponseEvent_Value = Guid.initString("2017cb03-dc0f-4c24-83ca-36307b2cd19f");
pub const IID_IESIsdbCasResponseEvent = &IID_IESIsdbCasResponseEvent_Value;
pub const IESIsdbCasResponseEvent = extern struct {
    pub const VTable = extern struct {
        base: IESEvent.VTable,
        GetRequestId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESIsdbCasResponseEvent,
                pRequestId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESIsdbCasResponseEvent,
                pRequestId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESIsdbCasResponseEvent,
                pStatus: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESIsdbCasResponseEvent,
                pStatus: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDataLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESIsdbCasResponseEvent,
                pRequestLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESIsdbCasResponseEvent,
                pRequestLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetResponseData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESIsdbCasResponseEvent,
                pbData: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESIsdbCasResponseEvent,
                pbData: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IESEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESIsdbCasResponseEvent_GetRequestId(self: *const T, pRequestId: ?*u32) HRESULT {
                return @as(*const IESIsdbCasResponseEvent.VTable, @ptrCast(self.vtable)).GetRequestId(@as(*const IESIsdbCasResponseEvent, @ptrCast(self)), pRequestId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESIsdbCasResponseEvent_GetStatus(self: *const T, pStatus: ?*u32) HRESULT {
                return @as(*const IESIsdbCasResponseEvent.VTable, @ptrCast(self.vtable)).GetStatus(@as(*const IESIsdbCasResponseEvent, @ptrCast(self)), pStatus);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESIsdbCasResponseEvent_GetDataLength(self: *const T, pRequestLength: ?*u32) HRESULT {
                return @as(*const IESIsdbCasResponseEvent.VTable, @ptrCast(self.vtable)).GetDataLength(@as(*const IESIsdbCasResponseEvent, @ptrCast(self)), pRequestLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESIsdbCasResponseEvent_GetResponseData(self: *const T, pbData: ?*?*SAFEARRAY) HRESULT {
                return @as(*const IESIsdbCasResponseEvent.VTable, @ptrCast(self.vtable)).GetResponseData(@as(*const IESIsdbCasResponseEvent, @ptrCast(self)), pbData);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IGpnvsCommonBase_Value = Guid.initString("907e0b5c-e42d-4f04-91f0-26f401f36907");
pub const IID_IGpnvsCommonBase = &IID_IGpnvsCommonBase_Value;
pub const IGpnvsCommonBase = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetValueUpdateName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGpnvsCommonBase,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGpnvsCommonBase,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGpnvsCommonBase_GetValueUpdateName(self: *const T, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IGpnvsCommonBase.VTable, @ptrCast(self.vtable)).GetValueUpdateName(@as(*const IGpnvsCommonBase, @ptrCast(self)), pbstrName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IESEventFactory_Value = Guid.initString("506a09b8-7f86-4e04-ac05-3303bfe8fc49");
pub const IID_IESEventFactory = &IID_IESEventFactory_Value;
pub const IESEventFactory = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateESEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEventFactory,
                pServiceProvider: ?*IUnknown,
                dwEventId: u32,
                guidEventType: Guid,
                dwEventDataLength: u32,
                pEventData: [*:0]u8,
                bstrBaseUrl: ?BSTR,
                pInitContext: ?*IUnknown,
                ppESEvent: ?*?*IESEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEventFactory,
                pServiceProvider: ?*IUnknown,
                dwEventId: u32,
                guidEventType: Guid,
                dwEventDataLength: u32,
                pEventData: [*:0]u8,
                bstrBaseUrl: ?BSTR,
                pInitContext: ?*IUnknown,
                ppESEvent: ?*?*IESEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEventFactory_CreateESEvent(self: *const T, pServiceProvider: ?*IUnknown, dwEventId: u32, guidEventType: Guid, dwEventDataLength: u32, pEventData: [*:0]u8, bstrBaseUrl: ?BSTR, pInitContext: ?*IUnknown, ppESEvent: ?*?*IESEvent) HRESULT {
                return @as(*const IESEventFactory.VTable, @ptrCast(self.vtable)).CreateESEvent(@as(*const IESEventFactory, @ptrCast(self)), pServiceProvider, dwEventId, guidEventType, dwEventDataLength, pEventData, bstrBaseUrl, pInitContext, ppESEvent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESLicenseRenewalResultEvent_Value = Guid.initString("d5a48ef5-a81b-4df0-acaa-5e35e7ea45d4");
pub const IID_IESLicenseRenewalResultEvent = &IID_IESLicenseRenewalResultEvent_Value;
pub const IESLicenseRenewalResultEvent = extern struct {
    pub const VTable = extern struct {
        base: IESEvent.VTable,
        GetCallersId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pdwCallersId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pdwCallersId: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFileName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pbstrFilename: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pbstrFilename: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsRenewalSuccessful: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pfRenewalSuccessful: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pfRenewalSuccessful: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsCheckEntitlementCallRequired: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pfCheckEntTokenCallNeeded: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pfCheckEntTokenCallNeeded: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDescrambledStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pDescrambledStatus: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pDescrambledStatus: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRenewalResultCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pdwRenewalResultCode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pdwRenewalResultCode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCASFailureCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pdwCASFailureCode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pdwCASFailureCode: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRenewalHResult: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                phr: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                phr: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEntitlementTokenLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pdwLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pdwLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEntitlementToken: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pbData: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pbData: ?*?*SAFEARRAY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetExpiryDate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESLicenseRenewalResultEvent,
                pqwExpiryDate: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESLicenseRenewalResultEvent,
                pqwExpiryDate: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IESEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_GetCallersId(self: *const T, pdwCallersId: ?*u32) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).GetCallersId(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pdwCallersId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_GetFileName(self: *const T, pbstrFilename: ?*?BSTR) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).GetFileName(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pbstrFilename);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_IsRenewalSuccessful(self: *const T, pfRenewalSuccessful: ?*BOOL) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).IsRenewalSuccessful(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pfRenewalSuccessful);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_IsCheckEntitlementCallRequired(self: *const T, pfCheckEntTokenCallNeeded: ?*BOOL) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).IsCheckEntitlementCallRequired(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pfCheckEntTokenCallNeeded);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_GetDescrambledStatus(self: *const T, pDescrambledStatus: ?*u32) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).GetDescrambledStatus(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pDescrambledStatus);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_GetRenewalResultCode(self: *const T, pdwRenewalResultCode: ?*u32) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).GetRenewalResultCode(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pdwRenewalResultCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_GetCASFailureCode(self: *const T, pdwCASFailureCode: ?*u32) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).GetCASFailureCode(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pdwCASFailureCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_GetRenewalHResult(self: *const T, phr: ?*HRESULT) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).GetRenewalHResult(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), phr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_GetEntitlementTokenLength(self: *const T, pdwLength: ?*u32) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).GetEntitlementTokenLength(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pdwLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_GetEntitlementToken(self: *const T, pbData: ?*?*SAFEARRAY) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).GetEntitlementToken(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pbData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESLicenseRenewalResultEvent_GetExpiryDate(self: *const T, pqwExpiryDate: ?*u64) HRESULT {
                return @as(*const IESLicenseRenewalResultEvent.VTable, @ptrCast(self.vtable)).GetExpiryDate(@as(*const IESLicenseRenewalResultEvent, @ptrCast(self)), pqwExpiryDate);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESFileExpiryDateEvent_Value = Guid.initString("ba9edcb6-4d36-4cfe-8c56-87a6b0ca48e1");
pub const IID_IESFileExpiryDateEvent = &IID_IESFileExpiryDateEvent_Value;
pub const IESFileExpiryDateEvent = extern struct {
    pub const VTable = extern struct {
        base: IESEvent.VTable,
        GetTunerId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESFileExpiryDateEvent,
                pguidTunerId: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESFileExpiryDateEvent,
                pguidTunerId: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetExpiryDate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESFileExpiryDateEvent,
                pqwExpiryDate: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESFileExpiryDateEvent,
                pqwExpiryDate: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFinalExpiryDate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESFileExpiryDateEvent,
                pqwExpiryDate: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESFileExpiryDateEvent,
                pqwExpiryDate: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMaxRenewalCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESFileExpiryDateEvent,
                dwMaxRenewalCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESFileExpiryDateEvent,
                dwMaxRenewalCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsEntitlementTokenPresent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESFileExpiryDateEvent,
                pfEntTokenPresent: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESFileExpiryDateEvent,
                pfEntTokenPresent: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DoesExpireAfterFirstUse: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESFileExpiryDateEvent,
                pfExpireAfterFirstUse: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESFileExpiryDateEvent,
                pfExpireAfterFirstUse: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IESEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESFileExpiryDateEvent_GetTunerId(self: *const T, pguidTunerId: ?*Guid) HRESULT {
                return @as(*const IESFileExpiryDateEvent.VTable, @ptrCast(self.vtable)).GetTunerId(@as(*const IESFileExpiryDateEvent, @ptrCast(self)), pguidTunerId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESFileExpiryDateEvent_GetExpiryDate(self: *const T, pqwExpiryDate: ?*u64) HRESULT {
                return @as(*const IESFileExpiryDateEvent.VTable, @ptrCast(self.vtable)).GetExpiryDate(@as(*const IESFileExpiryDateEvent, @ptrCast(self)), pqwExpiryDate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESFileExpiryDateEvent_GetFinalExpiryDate(self: *const T, pqwExpiryDate: ?*u64) HRESULT {
                return @as(*const IESFileExpiryDateEvent.VTable, @ptrCast(self.vtable)).GetFinalExpiryDate(@as(*const IESFileExpiryDateEvent, @ptrCast(self)), pqwExpiryDate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESFileExpiryDateEvent_GetMaxRenewalCount(self: *const T, dwMaxRenewalCount: ?*u32) HRESULT {
                return @as(*const IESFileExpiryDateEvent.VTable, @ptrCast(self.vtable)).GetMaxRenewalCount(@as(*const IESFileExpiryDateEvent, @ptrCast(self)), dwMaxRenewalCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESFileExpiryDateEvent_IsEntitlementTokenPresent(self: *const T, pfEntTokenPresent: ?*BOOL) HRESULT {
                return @as(*const IESFileExpiryDateEvent.VTable, @ptrCast(self.vtable)).IsEntitlementTokenPresent(@as(*const IESFileExpiryDateEvent, @ptrCast(self)), pfEntTokenPresent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESFileExpiryDateEvent_DoesExpireAfterFirstUse(self: *const T, pfExpireAfterFirstUse: ?*BOOL) HRESULT {
                return @as(*const IESFileExpiryDateEvent.VTable, @ptrCast(self.vtable)).DoesExpireAfterFirstUse(@as(*const IESFileExpiryDateEvent, @ptrCast(self)), pfExpireAfterFirstUse);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESEventService_Value = Guid.initString("ed89a619-4c06-4b2f-99eb-c7669b13047c");
pub const IID_IESEventService = &IID_IESEventService_Value;
pub const IESEventService = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        FireESEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEventService,
                pESEvent: ?*IESEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEventService,
                pESEvent: ?*IESEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEventService_FireESEvent(self: *const T, pESEvent: ?*IESEvent) HRESULT {
                return @as(*const IESEventService.VTable, @ptrCast(self.vtable)).FireESEvent(@as(*const IESEventService, @ptrCast(self)), pESEvent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IESEventServiceConfiguration_Value = Guid.initString("33b9daae-9309-491d-a051-bcad2a70cd66");
pub const IID_IESEventServiceConfiguration = &IID_IESEventServiceConfiguration_Value;
pub const IESEventServiceConfiguration = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetParent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEventServiceConfiguration,
                pEventService: ?*IESEventService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEventServiceConfiguration,
                pEventService: ?*IESEventService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveParent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEventServiceConfiguration,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEventServiceConfiguration,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOwner: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEventServiceConfiguration,
                pESEvents: ?*IESEvents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEventServiceConfiguration,
                pESEvents: ?*IESEvents,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveOwner: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEventServiceConfiguration,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEventServiceConfiguration,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetGraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEventServiceConfiguration,
                pGraph: ?*IFilterGraph,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEventServiceConfiguration,
                pGraph: ?*IFilterGraph,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveGraph: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IESEventServiceConfiguration,
                pGraph: ?*IFilterGraph,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IESEventServiceConfiguration,
                pGraph: ?*IFilterGraph,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEventServiceConfiguration_SetParent(self: *const T, pEventService: ?*IESEventService) HRESULT {
                return @as(*const IESEventServiceConfiguration.VTable, @ptrCast(self.vtable)).SetParent(@as(*const IESEventServiceConfiguration, @ptrCast(self)), pEventService);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEventServiceConfiguration_RemoveParent(self: *const T) HRESULT {
                return @as(*const IESEventServiceConfiguration.VTable, @ptrCast(self.vtable)).RemoveParent(@as(*const IESEventServiceConfiguration, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEventServiceConfiguration_SetOwner(self: *const T, pESEvents: ?*IESEvents) HRESULT {
                return @as(*const IESEventServiceConfiguration.VTable, @ptrCast(self.vtable)).SetOwner(@as(*const IESEventServiceConfiguration, @ptrCast(self)), pESEvents);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEventServiceConfiguration_RemoveOwner(self: *const T) HRESULT {
                return @as(*const IESEventServiceConfiguration.VTable, @ptrCast(self.vtable)).RemoveOwner(@as(*const IESEventServiceConfiguration, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEventServiceConfiguration_SetGraph(self: *const T, pGraph: ?*IFilterGraph) HRESULT {
                return @as(*const IESEventServiceConfiguration.VTable, @ptrCast(self.vtable)).SetGraph(@as(*const IESEventServiceConfiguration, @ptrCast(self)), pGraph);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IESEventServiceConfiguration_RemoveGraph(self: *const T, pGraph: ?*IFilterGraph) HRESULT {
                return @as(*const IESEventServiceConfiguration.VTable, @ptrCast(self.vtable)).RemoveGraph(@as(*const IESEventServiceConfiguration, @ptrCast(self)), pGraph);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IRegisterTuner_Value = Guid.initString("359b3901-572c-4854-bb49-cdef66606a25");
pub const IID_IRegisterTuner = &IID_IRegisterTuner_Value;
pub const IRegisterTuner = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Register: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IRegisterTuner,
                pTuner: ?*ITuner,
                pGraph: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IRegisterTuner,
                pTuner: ?*ITuner,
                pGraph: ?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unregister: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IRegisterTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IRegisterTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IRegisterTuner_Register(self: *const T, pTuner: ?*ITuner, pGraph: ?*IGraphBuilder) HRESULT {
                return @as(*const IRegisterTuner.VTable, @ptrCast(self.vtable)).Register(@as(*const IRegisterTuner, @ptrCast(self)), pTuner, pGraph);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IRegisterTuner_Unregister(self: *const T) HRESULT {
                return @as(*const IRegisterTuner.VTable, @ptrCast(self.vtable)).Unregister(@as(*const IRegisterTuner, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDAComparable_Value = Guid.initString("b34505e0-2f0e-497b-80bc-d43f3b24ed7f");
pub const IID_IBDAComparable = &IID_IBDAComparable_Value;
pub const IBDAComparable = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CompareExact: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDAComparable,
                CompareTo: ?*IDispatch,
                Result: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDAComparable,
                CompareTo: ?*IDispatch,
                Result: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CompareEquivalent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDAComparable,
                CompareTo: ?*IDispatch,
                dwFlags: u32,
                Result: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDAComparable,
                CompareTo: ?*IDispatch,
                dwFlags: u32,
                Result: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HashExact: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDAComparable,
                Result: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDAComparable,
                Result: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HashExactIncremental: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDAComparable,
                PartialResult: i64,
                Result: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDAComparable,
                PartialResult: i64,
                Result: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HashEquivalent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDAComparable,
                dwFlags: u32,
                Result: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDAComparable,
                dwFlags: u32,
                Result: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HashEquivalentIncremental: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDAComparable,
                PartialResult: i64,
                dwFlags: u32,
                Result: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDAComparable,
                PartialResult: i64,
                dwFlags: u32,
                Result: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDAComparable_CompareExact(self: *const T, CompareTo: ?*IDispatch, Result: ?*i32) HRESULT {
                return @as(*const IBDAComparable.VTable, @ptrCast(self.vtable)).CompareExact(@as(*const IBDAComparable, @ptrCast(self)), CompareTo, Result);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDAComparable_CompareEquivalent(self: *const T, CompareTo: ?*IDispatch, dwFlags: u32, Result: ?*i32) HRESULT {
                return @as(*const IBDAComparable.VTable, @ptrCast(self.vtable)).CompareEquivalent(@as(*const IBDAComparable, @ptrCast(self)), CompareTo, dwFlags, Result);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDAComparable_HashExact(self: *const T, Result: ?*i64) HRESULT {
                return @as(*const IBDAComparable.VTable, @ptrCast(self.vtable)).HashExact(@as(*const IBDAComparable, @ptrCast(self)), Result);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDAComparable_HashExactIncremental(self: *const T, PartialResult: i64, Result: ?*i64) HRESULT {
                return @as(*const IBDAComparable.VTable, @ptrCast(self.vtable)).HashExactIncremental(@as(*const IBDAComparable, @ptrCast(self)), PartialResult, Result);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDAComparable_HashEquivalent(self: *const T, dwFlags: u32, Result: ?*i64) HRESULT {
                return @as(*const IBDAComparable.VTable, @ptrCast(self.vtable)).HashEquivalent(@as(*const IBDAComparable, @ptrCast(self)), dwFlags, Result);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDAComparable_HashEquivalentIncremental(self: *const T, PartialResult: i64, dwFlags: u32, Result: ?*i64) HRESULT {
                return @as(*const IBDAComparable.VTable, @ptrCast(self.vtable)).HashEquivalentIncremental(@as(*const IBDAComparable, @ptrCast(self)), PartialResult, dwFlags, Result);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IPersistTuneXml_Value = Guid.initString("0754cd31-8d15-47a9-8215-d20064157244");
pub const IID_IPersistTuneXml = &IID_IPersistTuneXml_Value;
pub const IPersistTuneXml = extern struct {
    pub const VTable = extern struct {
        base: IPersist.VTable,
        InitNew: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPersistTuneXml,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPersistTuneXml,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Load: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPersistTuneXml,
                varValue: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPersistTuneXml,
                varValue: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Save: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPersistTuneXml,
                pvarFragment: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPersistTuneXml,
                pvarFragment: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IPersist.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPersistTuneXml_InitNew(self: *const T) HRESULT {
                return @as(*const IPersistTuneXml.VTable, @ptrCast(self.vtable)).InitNew(@as(*const IPersistTuneXml, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPersistTuneXml_Load(self: *const T, varValue: VARIANT) HRESULT {
                return @as(*const IPersistTuneXml.VTable, @ptrCast(self.vtable)).Load(@as(*const IPersistTuneXml, @ptrCast(self)), varValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPersistTuneXml_Save(self: *const T, pvarFragment: ?*VARIANT) HRESULT {
                return @as(*const IPersistTuneXml.VTable, @ptrCast(self.vtable)).Save(@as(*const IPersistTuneXml, @ptrCast(self)), pvarFragment);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IPersistTuneXmlUtility_Value = Guid.initString("990237ae-ac11-4614-be8f-dd217a4cb4cb");
pub const IID_IPersistTuneXmlUtility = &IID_IPersistTuneXmlUtility_Value;
pub const IPersistTuneXmlUtility = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Deserialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPersistTuneXmlUtility,
                varValue: VARIANT,
                ppObject: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPersistTuneXmlUtility,
                varValue: VARIANT,
                ppObject: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPersistTuneXmlUtility_Deserialize(self: *const T, varValue: VARIANT, ppObject: ?*?*IUnknown) HRESULT {
                return @as(*const IPersistTuneXmlUtility.VTable, @ptrCast(self.vtable)).Deserialize(@as(*const IPersistTuneXmlUtility, @ptrCast(self)), varValue, ppObject);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IPersistTuneXmlUtility2_Value = Guid.initString("992e165f-ea24-4b2f-9a1d-009d92120451");
pub const IID_IPersistTuneXmlUtility2 = &IID_IPersistTuneXmlUtility2_Value;
pub const IPersistTuneXmlUtility2 = extern struct {
    pub const VTable = extern struct {
        base: IPersistTuneXmlUtility.VTable,
        Serialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPersistTuneXmlUtility2,
                piTuneRequest: ?*ITuneRequest,
                pString: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPersistTuneXmlUtility2,
                piTuneRequest: ?*ITuneRequest,
                pString: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IPersistTuneXmlUtility.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPersistTuneXmlUtility2_Serialize(self: *const T, piTuneRequest: ?*ITuneRequest, pString: ?*?BSTR) HRESULT {
                return @as(*const IPersistTuneXmlUtility2.VTable, @ptrCast(self.vtable)).Serialize(@as(*const IPersistTuneXmlUtility2, @ptrCast(self)), piTuneRequest, pString);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IBDACreateTuneRequestEx_Value = Guid.initString("c0a4a1d4-2b3c-491a-ba22-499fbadd4d12");
pub const IID_IBDACreateTuneRequestEx = &IID_IBDACreateTuneRequestEx_Value;
pub const IBDACreateTuneRequestEx = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateTuneRequestEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDACreateTuneRequestEx,
                TuneRequestIID: ?*const Guid,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDACreateTuneRequestEx,
                TuneRequestIID: ?*const Guid,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDACreateTuneRequestEx_CreateTuneRequestEx(self: *const T, TuneRequestIID: ?*const Guid, TuneRequest: ?*?*ITuneRequest) HRESULT {
                return @as(*const IBDACreateTuneRequestEx.VTable, @ptrCast(self.vtable)).CreateTuneRequestEx(@as(*const IBDACreateTuneRequestEx, @ptrCast(self)), TuneRequestIID, TuneRequest);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const CLSID_XDSToRat_Value = Guid.initString("c5c5c5f0-3abc-11d6-b25b-00c04fa0c026");
pub const CLSID_XDSToRat = &CLSID_XDSToRat_Value;

const CLSID_EvalRat_Value = Guid.initString("c5c5c5f1-3abc-11d6-b25b-00c04fa0c026");
pub const CLSID_EvalRat = &CLSID_EvalRat_Value;

const CLSID_ETFilter_Value = Guid.initString("c4c4c4f1-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_ETFilter = &CLSID_ETFilter_Value;

const CLSID_DTFilter_Value = Guid.initString("c4c4c4f2-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_DTFilter = &CLSID_DTFilter_Value;

const CLSID_XDSCodec_Value = Guid.initString("c4c4c4f3-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_XDSCodec = &CLSID_XDSCodec_Value;

const CLSID_CXDSData_Value = Guid.initString("c4c4c4f4-0049-4e2b-98fb-9537f6ce516d");
pub const CLSID_CXDSData = &CLSID_CXDSData_Value;

pub const EnTvRat_System = enum(i32) {
    MPAA = 0,
    US_TV = 1,
    Canadian_English = 2,
    Canadian_French = 3,
    Reserved4 = 4,
    System5 = 5,
    System6 = 6,
    Reserved7 = 7,
    PBDA = 8,
    AgeBased = 9,
    TvRat_kSystems = 10,
    TvRat_SystemDontKnow = 255,
};
pub const MPAA = EnTvRat_System.MPAA;
pub const US_TV = EnTvRat_System.US_TV;
pub const Canadian_English = EnTvRat_System.Canadian_English;
pub const Canadian_French = EnTvRat_System.Canadian_French;
pub const Reserved4 = EnTvRat_System.Reserved4;
pub const System5 = EnTvRat_System.System5;
pub const System6 = EnTvRat_System.System6;
pub const Reserved7 = EnTvRat_System.Reserved7;
pub const PBDA = EnTvRat_System.PBDA;
pub const AgeBased = EnTvRat_System.AgeBased;
pub const TvRat_kSystems = EnTvRat_System.TvRat_kSystems;
pub const TvRat_SystemDontKnow = EnTvRat_System.TvRat_SystemDontKnow;

pub const EnTvRat_GenericLevel = enum(i32) {
    @"0" = 0,
    @"1" = 1,
    @"2" = 2,
    @"3" = 3,
    @"4" = 4,
    @"5" = 5,
    @"6" = 6,
    @"7" = 7,
    @"8" = 8,
    @"9" = 9,
    @"10" = 10,
    @"11" = 11,
    @"12" = 12,
    @"13" = 13,
    @"14" = 14,
    @"15" = 15,
    @"16" = 16,
    @"17" = 17,
    @"18" = 18,
    @"19" = 19,
    @"20" = 20,
    @"21" = 21,
    kLevels = 22,
    Unblock = -1,
    LevelDontKnow = 255,
};
pub const TvRat_0 = EnTvRat_GenericLevel.@"0";
pub const TvRat_1 = EnTvRat_GenericLevel.@"1";
pub const TvRat_2 = EnTvRat_GenericLevel.@"2";
pub const TvRat_3 = EnTvRat_GenericLevel.@"3";
pub const TvRat_4 = EnTvRat_GenericLevel.@"4";
pub const TvRat_5 = EnTvRat_GenericLevel.@"5";
pub const TvRat_6 = EnTvRat_GenericLevel.@"6";
pub const TvRat_7 = EnTvRat_GenericLevel.@"7";
pub const TvRat_8 = EnTvRat_GenericLevel.@"8";
pub const TvRat_9 = EnTvRat_GenericLevel.@"9";
pub const TvRat_10 = EnTvRat_GenericLevel.@"10";
pub const TvRat_11 = EnTvRat_GenericLevel.@"11";
pub const TvRat_12 = EnTvRat_GenericLevel.@"12";
pub const TvRat_13 = EnTvRat_GenericLevel.@"13";
pub const TvRat_14 = EnTvRat_GenericLevel.@"14";
pub const TvRat_15 = EnTvRat_GenericLevel.@"15";
pub const TvRat_16 = EnTvRat_GenericLevel.@"16";
pub const TvRat_17 = EnTvRat_GenericLevel.@"17";
pub const TvRat_18 = EnTvRat_GenericLevel.@"18";
pub const TvRat_19 = EnTvRat_GenericLevel.@"19";
pub const TvRat_20 = EnTvRat_GenericLevel.@"20";
pub const TvRat_21 = EnTvRat_GenericLevel.@"21";
pub const TvRat_kLevels = EnTvRat_GenericLevel.kLevels;
pub const TvRat_Unblock = EnTvRat_GenericLevel.Unblock;
pub const TvRat_LevelDontKnow = EnTvRat_GenericLevel.LevelDontKnow;

pub const EnTvRat_MPAA = enum(i32) {
    NotApplicable = 0,
    G = 1,
    PG = 2,
    PG13 = 3,
    R = 4,
    NC17 = 5,
    X = 6,
    NotRated = 7,
};
pub const MPAA_NotApplicable = EnTvRat_MPAA.NotApplicable;
pub const MPAA_G = EnTvRat_MPAA.G;
pub const MPAA_PG = EnTvRat_MPAA.PG;
pub const MPAA_PG13 = EnTvRat_MPAA.PG13;
pub const MPAA_R = EnTvRat_MPAA.R;
pub const MPAA_NC17 = EnTvRat_MPAA.NC17;
pub const MPAA_X = EnTvRat_MPAA.X;
pub const MPAA_NotRated = EnTvRat_MPAA.NotRated;

pub const EnTvRat_US_TV = enum(i32) {
    None = 0,
    Y = 1,
    Y7 = 2,
    G = 3,
    PG = 4,
    @"14" = 5,
    MA = 6,
    None7 = 7,
};
pub const US_TV_None = EnTvRat_US_TV.None;
pub const US_TV_Y = EnTvRat_US_TV.Y;
pub const US_TV_Y7 = EnTvRat_US_TV.Y7;
pub const US_TV_G = EnTvRat_US_TV.G;
pub const US_TV_PG = EnTvRat_US_TV.PG;
pub const US_TV_14 = EnTvRat_US_TV.@"14";
pub const US_TV_MA = EnTvRat_US_TV.MA;
pub const US_TV_None7 = EnTvRat_US_TV.None7;

pub const EnTvRat_CAE_TV = enum(i32) {
    Exempt = 0,
    C = 1,
    C8 = 2,
    G = 3,
    PG = 4,
    @"14" = 5,
    @"18" = 6,
    Reserved = 7,
};
pub const CAE_TV_Exempt = EnTvRat_CAE_TV.Exempt;
pub const CAE_TV_C = EnTvRat_CAE_TV.C;
pub const CAE_TV_C8 = EnTvRat_CAE_TV.C8;
pub const CAE_TV_G = EnTvRat_CAE_TV.G;
pub const CAE_TV_PG = EnTvRat_CAE_TV.PG;
pub const CAE_TV_14 = EnTvRat_CAE_TV.@"14";
pub const CAE_TV_18 = EnTvRat_CAE_TV.@"18";
pub const CAE_TV_Reserved = EnTvRat_CAE_TV.Reserved;

pub const EnTvRat_CAF_TV = enum(i32) {
    Exempt = 0,
    G = 1,
    @"8" = 2,
    @"13" = 3,
    @"16" = 4,
    @"18" = 5,
    Reserved6 = 6,
    Reserved = 7,
};
pub const CAF_TV_Exempt = EnTvRat_CAF_TV.Exempt;
pub const CAF_TV_G = EnTvRat_CAF_TV.G;
pub const CAF_TV_8 = EnTvRat_CAF_TV.@"8";
pub const CAF_TV_13 = EnTvRat_CAF_TV.@"13";
pub const CAF_TV_16 = EnTvRat_CAF_TV.@"16";
pub const CAF_TV_18 = EnTvRat_CAF_TV.@"18";
pub const CAF_TV_Reserved6 = EnTvRat_CAF_TV.Reserved6;
pub const CAF_TV_Reserved = EnTvRat_CAF_TV.Reserved;

pub const BfEnTvRat_GenericAttributes = enum(i32) {
    AttrNone = 0,
    IsBlocked = 1,
    IsAttr_1 = 2,
    IsAttr_2 = 4,
    IsAttr_3 = 8,
    IsAttr_4 = 16,
    IsAttr_5 = 32,
    IsAttr_6 = 64,
    IsAttr_7 = 128,
    ValidAttrSubmask = 255,
};
pub const BfAttrNone = BfEnTvRat_GenericAttributes.AttrNone;
pub const BfIsBlocked = BfEnTvRat_GenericAttributes.IsBlocked;
pub const BfIsAttr_1 = BfEnTvRat_GenericAttributes.IsAttr_1;
pub const BfIsAttr_2 = BfEnTvRat_GenericAttributes.IsAttr_2;
pub const BfIsAttr_3 = BfEnTvRat_GenericAttributes.IsAttr_3;
pub const BfIsAttr_4 = BfEnTvRat_GenericAttributes.IsAttr_4;
pub const BfIsAttr_5 = BfEnTvRat_GenericAttributes.IsAttr_5;
pub const BfIsAttr_6 = BfEnTvRat_GenericAttributes.IsAttr_6;
pub const BfIsAttr_7 = BfEnTvRat_GenericAttributes.IsAttr_7;
pub const BfValidAttrSubmask = BfEnTvRat_GenericAttributes.ValidAttrSubmask;

pub const BfEnTvRat_Attributes_US_TV = enum(i32) {
    IsBlocked = 1,
    IsViolent = 2,
    IsSexualSituation = 4,
    IsAdultLanguage = 8,
    IsSexuallySuggestiveDialog = 16,
    ValidAttrSubmask = 31,
};
pub const US_TV_IsBlocked = BfEnTvRat_Attributes_US_TV.IsBlocked;
pub const US_TV_IsViolent = BfEnTvRat_Attributes_US_TV.IsViolent;
pub const US_TV_IsSexualSituation = BfEnTvRat_Attributes_US_TV.IsSexualSituation;
pub const US_TV_IsAdultLanguage = BfEnTvRat_Attributes_US_TV.IsAdultLanguage;
pub const US_TV_IsSexuallySuggestiveDialog = BfEnTvRat_Attributes_US_TV.IsSexuallySuggestiveDialog;
pub const US_TV_ValidAttrSubmask = BfEnTvRat_Attributes_US_TV.ValidAttrSubmask;

pub const BfEnTvRat_Attributes_MPAA = enum(i32) {
    IsBlocked = 1,
    // ValidAttrSubmask = 1, this enum value conflicts with IsBlocked
};
pub const MPAA_IsBlocked = BfEnTvRat_Attributes_MPAA.IsBlocked;
pub const MPAA_ValidAttrSubmask = BfEnTvRat_Attributes_MPAA.IsBlocked;

pub const BfEnTvRat_Attributes_CAE_TV = enum(i32) {
    IsBlocked = 1,
    // ValidAttrSubmask = 1, this enum value conflicts with IsBlocked
};
pub const CAE_IsBlocked = BfEnTvRat_Attributes_CAE_TV.IsBlocked;
pub const CAE_ValidAttrSubmask = BfEnTvRat_Attributes_CAE_TV.IsBlocked;

pub const BfEnTvRat_Attributes_CAF_TV = enum(i32) {
    IsBlocked = 1,
    // ValidAttrSubmask = 1, this enum value conflicts with IsBlocked
};
pub const CAF_IsBlocked = BfEnTvRat_Attributes_CAF_TV.IsBlocked;
pub const CAF_ValidAttrSubmask = BfEnTvRat_Attributes_CAF_TV.IsBlocked;

pub const FormatNotSupportedEvents = enum(i32) {
    CLEAR = 0,
    NOTSUPPORTED = 1,
};
pub const FORMATNOTSUPPORTED_CLEAR = FormatNotSupportedEvents.CLEAR;
pub const FORMATNOTSUPPORTED_NOTSUPPORTED = FormatNotSupportedEvents.NOTSUPPORTED;

pub const WMDRMProtectionInfo = extern struct {
    wszKID: [25]u16 align(1),
    qwCounter: u64 align(1),
    qwIndex: u64 align(1),
    bOffset: u8 align(1),
};

pub const BadSampleInfo = extern struct {
    hrReason: HRESULT align(1),
};

pub const ProtType = enum(i32) {
    FREE = 1,
    ONCE = 2,
    NEVER = 3,
    NEVER_REALLY = 4,
    NO_MORE = 5,
    FREE_CIT = 6,
    BF = 7,
    CN_RECORDING_STOP = 8,
    FREE_SECURE = 9,
    INVALID = 50,
};
pub const PROT_COPY_FREE = ProtType.FREE;
pub const PROT_COPY_ONCE = ProtType.ONCE;
pub const PROT_COPY_NEVER = ProtType.NEVER;
pub const PROT_COPY_NEVER_REALLY = ProtType.NEVER_REALLY;
pub const PROT_COPY_NO_MORE = ProtType.NO_MORE;
pub const PROT_COPY_FREE_CIT = ProtType.FREE_CIT;
pub const PROT_COPY_BF = ProtType.BF;
pub const PROT_COPY_CN_RECORDING_STOP = ProtType.CN_RECORDING_STOP;
pub const PROT_COPY_FREE_SECURE = ProtType.FREE_SECURE;
pub const PROT_COPY_INVALID = ProtType.INVALID;

pub const EncDecEvents = enum(i32) {
    CPEVENT = 0,
    RECORDING_STATUS = 1,
};
pub const ENCDEC_CPEVENT = EncDecEvents.CPEVENT;
pub const ENCDEC_RECORDING_STATUS = EncDecEvents.RECORDING_STATUS;

pub const CPRecordingStatus = enum(i32) {
    OPPED = 0,
    ARTED = 1,
};
pub const RECORDING_STOPPED = CPRecordingStatus.OPPED;
pub const RECORDING_STARTED = CPRecordingStatus.ARTED;

pub const CPEventBitShift = enum(i32) {
    RATINGS = 0,
    COPP = 1,
    LICENSE = 2,
    ROLLBACK = 3,
    SAC = 4,
    DOWNRES = 5,
    STUBLIB = 6,
    UNTRUSTEDGRAPH = 7,
    PENDING_CERTIFICATE = 8,
    NO_PLAYREADY = 9,
};
pub const CPEVENT_BITSHIFT_RATINGS = CPEventBitShift.RATINGS;
pub const CPEVENT_BITSHIFT_COPP = CPEventBitShift.COPP;
pub const CPEVENT_BITSHIFT_LICENSE = CPEventBitShift.LICENSE;
pub const CPEVENT_BITSHIFT_ROLLBACK = CPEventBitShift.ROLLBACK;
pub const CPEVENT_BITSHIFT_SAC = CPEventBitShift.SAC;
pub const CPEVENT_BITSHIFT_DOWNRES = CPEventBitShift.DOWNRES;
pub const CPEVENT_BITSHIFT_STUBLIB = CPEventBitShift.STUBLIB;
pub const CPEVENT_BITSHIFT_UNTRUSTEDGRAPH = CPEventBitShift.UNTRUSTEDGRAPH;
pub const CPEVENT_BITSHIFT_PENDING_CERTIFICATE = CPEventBitShift.PENDING_CERTIFICATE;
pub const CPEVENT_BITSHIFT_NO_PLAYREADY = CPEventBitShift.NO_PLAYREADY;

pub const CPEvents = enum(i32) {
    NONE = 0,
    RATINGS = 1,
    COPP = 2,
    LICENSE = 3,
    ROLLBACK = 4,
    SAC = 5,
    DOWNRES = 6,
    STUBLIB = 7,
    UNTRUSTEDGRAPH = 8,
    PROTECTWINDOWED = 9,
};
pub const CPEVENT_NONE = CPEvents.NONE;
pub const CPEVENT_RATINGS = CPEvents.RATINGS;
pub const CPEVENT_COPP = CPEvents.COPP;
pub const CPEVENT_LICENSE = CPEvents.LICENSE;
pub const CPEVENT_ROLLBACK = CPEvents.ROLLBACK;
pub const CPEVENT_SAC = CPEvents.SAC;
pub const CPEVENT_DOWNRES = CPEvents.DOWNRES;
pub const CPEVENT_STUBLIB = CPEvents.STUBLIB;
pub const CPEVENT_UNTRUSTEDGRAPH = CPEvents.UNTRUSTEDGRAPH;
pub const CPEVENT_PROTECTWINDOWED = CPEvents.PROTECTWINDOWED;

pub const RevokedComponent = enum(i32) {
    COPP = 0,
    SAC = 1,
    APP_STUB = 2,
    SECURE_PIPELINE = 3,
    MAX_TYPES = 4,
};
pub const REVOKED_COPP = RevokedComponent.COPP;
pub const REVOKED_SAC = RevokedComponent.SAC;
pub const REVOKED_APP_STUB = RevokedComponent.APP_STUB;
pub const REVOKED_SECURE_PIPELINE = RevokedComponent.SECURE_PIPELINE;
pub const REVOKED_MAX_TYPES = RevokedComponent.MAX_TYPES;

pub const EnTag_Mode = enum(i32) {
    Remove = 0,
    Once = 1,
    Repeat = 2,
};
pub const EnTag_Remove = EnTag_Mode.Remove;
pub const EnTag_Once = EnTag_Mode.Once;
pub const EnTag_Repeat = EnTag_Mode.Repeat;

pub const COPPEventBlockReason = enum(i32) {
    Unknown = -1,
    BadDriver = 0,
    NoCardHDCPSupport = 1,
    NoMonitorHDCPSupport = 2,
    BadCertificate = 3,
    InvalidBusProtection = 4,
    AeroGlassOff = 5,
    RogueApp = 6,
    ForbiddenVideo = 7,
    Activate = 8,
    DigitalAudioUnprotected = 9,
};
pub const COPP_Unknown = COPPEventBlockReason.Unknown;
pub const COPP_BadDriver = COPPEventBlockReason.BadDriver;
pub const COPP_NoCardHDCPSupport = COPPEventBlockReason.NoCardHDCPSupport;
pub const COPP_NoMonitorHDCPSupport = COPPEventBlockReason.NoMonitorHDCPSupport;
pub const COPP_BadCertificate = COPPEventBlockReason.BadCertificate;
pub const COPP_InvalidBusProtection = COPPEventBlockReason.InvalidBusProtection;
pub const COPP_AeroGlassOff = COPPEventBlockReason.AeroGlassOff;
pub const COPP_RogueApp = COPPEventBlockReason.RogueApp;
pub const COPP_ForbiddenVideo = COPPEventBlockReason.ForbiddenVideo;
pub const COPP_Activate = COPPEventBlockReason.Activate;
pub const COPP_DigitalAudioUnprotected = COPPEventBlockReason.DigitalAudioUnprotected;

pub const LicenseEventBlockReason = enum(i32) {
    BadLicense = 0,
    NeedIndiv = 1,
    Expired = 2,
    NeedActivation = 3,
    ExtenderBlocked = 4,
};
pub const LIC_BadLicense = LicenseEventBlockReason.BadLicense;
pub const LIC_NeedIndiv = LicenseEventBlockReason.NeedIndiv;
pub const LIC_Expired = LicenseEventBlockReason.Expired;
pub const LIC_NeedActivation = LicenseEventBlockReason.NeedActivation;
pub const LIC_ExtenderBlocked = LicenseEventBlockReason.ExtenderBlocked;

pub const DownResEventParam = enum(i32) {
    Always = 0,
    InWindowOnly = 1,
    Undefined = 2,
};
pub const DOWNRES_Always = DownResEventParam.Always;
pub const DOWNRES_InWindowOnly = DownResEventParam.InWindowOnly;
pub const DOWNRES_Undefined = DownResEventParam.Undefined;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IETFilterConfig_Value = Guid.initString("c4c4c4d1-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IETFilterConfig = &IID_IETFilterConfig_Value;
pub const IETFilterConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        InitLicense: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IETFilterConfig,
                LicenseId: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IETFilterConfig,
                LicenseId: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSecureChannelObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IETFilterConfig,
                ppUnkDRMSecureChannel: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IETFilterConfig,
                ppUnkDRMSecureChannel: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IETFilterConfig_InitLicense(self: *const T, LicenseId: i32) HRESULT {
                return @as(*const IETFilterConfig.VTable, @ptrCast(self.vtable)).InitLicense(@as(*const IETFilterConfig, @ptrCast(self)), LicenseId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IETFilterConfig_GetSecureChannelObject(self: *const T, ppUnkDRMSecureChannel: ?*?*IUnknown) HRESULT {
                return @as(*const IETFilterConfig.VTable, @ptrCast(self.vtable)).GetSecureChannelObject(@as(*const IETFilterConfig, @ptrCast(self)), ppUnkDRMSecureChannel);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDTFilterConfig_Value = Guid.initString("c4c4c4d2-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IDTFilterConfig = &IID_IDTFilterConfig_Value;
pub const IDTFilterConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetSecureChannelObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDTFilterConfig,
                ppUnkDRMSecureChannel: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDTFilterConfig,
                ppUnkDRMSecureChannel: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilterConfig_GetSecureChannelObject(self: *const T, ppUnkDRMSecureChannel: ?*?*IUnknown) HRESULT {
                return @as(*const IDTFilterConfig.VTable, @ptrCast(self.vtable)).GetSecureChannelObject(@as(*const IDTFilterConfig, @ptrCast(self)), ppUnkDRMSecureChannel);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IXDSCodecConfig_Value = Guid.initString("c4c4c4d3-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IXDSCodecConfig = &IID_IXDSCodecConfig_Value;
pub const IXDSCodecConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetSecureChannelObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IXDSCodecConfig,
                ppUnkDRMSecureChannel: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IXDSCodecConfig,
                ppUnkDRMSecureChannel: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetPauseBufferTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IXDSCodecConfig,
                dwPauseBufferTime: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IXDSCodecConfig,
                dwPauseBufferTime: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSCodecConfig_GetSecureChannelObject(self: *const T, ppUnkDRMSecureChannel: ?*?*IUnknown) HRESULT {
                return @as(*const IXDSCodecConfig.VTable, @ptrCast(self.vtable)).GetSecureChannelObject(@as(*const IXDSCodecConfig, @ptrCast(self)), ppUnkDRMSecureChannel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSCodecConfig_SetPauseBufferTime(self: *const T, dwPauseBufferTime: u32) HRESULT {
                return @as(*const IXDSCodecConfig.VTable, @ptrCast(self.vtable)).SetPauseBufferTime(@as(*const IXDSCodecConfig, @ptrCast(self)), dwPauseBufferTime);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDTFilterLicenseRenewal_Value = Guid.initString("8a78b317-e405-4a43-994a-620d8f5ce25e");
pub const IID_IDTFilterLicenseRenewal = &IID_IDTFilterLicenseRenewal_Value;
pub const IDTFilterLicenseRenewal = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetLicenseRenewalData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDTFilterLicenseRenewal,
                ppwszFileName: ?*?PWSTR,
                ppwszExpiredKid: ?*?PWSTR,
                ppwszTunerId: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDTFilterLicenseRenewal,
                ppwszFileName: ?*?PWSTR,
                ppwszExpiredKid: ?*?PWSTR,
                ppwszTunerId: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilterLicenseRenewal_GetLicenseRenewalData(self: *const T, ppwszFileName: ?*?PWSTR, ppwszExpiredKid: ?*?PWSTR, ppwszTunerId: ?*?PWSTR) HRESULT {
                return @as(*const IDTFilterLicenseRenewal.VTable, @ptrCast(self.vtable)).GetLicenseRenewalData(@as(*const IDTFilterLicenseRenewal, @ptrCast(self)), ppwszFileName, ppwszExpiredKid, ppwszTunerId);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IPTFilterLicenseRenewal_Value = Guid.initString("26d836a5-0c15-44c7-ac59-b0da8728f240");
pub const IID_IPTFilterLicenseRenewal = &IID_IPTFilterLicenseRenewal_Value;
pub const IPTFilterLicenseRenewal = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        RenewLicenses: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPTFilterLicenseRenewal,
                wszFileName: ?PWSTR,
                wszExpiredKid: ?PWSTR,
                dwCallersId: u32,
                bHighPriority: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPTFilterLicenseRenewal,
                wszFileName: ?PWSTR,
                wszExpiredKid: ?PWSTR,
                dwCallersId: u32,
                bHighPriority: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CancelLicenseRenewal: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPTFilterLicenseRenewal,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPTFilterLicenseRenewal,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPTFilterLicenseRenewal_RenewLicenses(self: *const T, wszFileName: ?PWSTR, wszExpiredKid: ?PWSTR, dwCallersId: u32, bHighPriority: BOOL) HRESULT {
                return @as(*const IPTFilterLicenseRenewal.VTable, @ptrCast(self.vtable)).RenewLicenses(@as(*const IPTFilterLicenseRenewal, @ptrCast(self)), wszFileName, wszExpiredKid, dwCallersId, bHighPriority);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPTFilterLicenseRenewal_CancelLicenseRenewal(self: *const T) HRESULT {
                return @as(*const IPTFilterLicenseRenewal.VTable, @ptrCast(self.vtable)).CancelLicenseRenewal(@as(*const IPTFilterLicenseRenewal, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMceBurnerControl_Value = Guid.initString("5a86b91a-e71e-46c1-88a9-9bb338710552");
pub const IID_IMceBurnerControl = &IID_IMceBurnerControl_Value;
pub const IMceBurnerControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetBurnerNoDecryption: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMceBurnerControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMceBurnerControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMceBurnerControl_GetBurnerNoDecryption(self: *const T) HRESULT {
                return @as(*const IMceBurnerControl.VTable, @ptrCast(self.vtable)).GetBurnerNoDecryption(@as(*const IMceBurnerControl, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IETFilter_Value = Guid.initString("c4c4c4b1-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IETFilter = &IID_IETFilter_Value;
pub const IETFilter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EvalRatObjOK: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IETFilter,
                pHrCoCreateRetVal: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IETFilter,
                pHrCoCreateRetVal: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrRating: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IETFilter,
                pEnSystem: ?*EnTvRat_System,
                pEnRating: ?*EnTvRat_GenericLevel,
                plbfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IETFilter,
                pEnSystem: ?*EnTvRat_System,
                pEnRating: ?*EnTvRat_GenericLevel,
                plbfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrLicenseExpDate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IETFilter,
                protType: ?*ProtType,
                lpDateTime: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IETFilter,
                protType: ?*ProtType,
                lpDateTime: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastErrorCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IETFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IETFilter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRecordingOn: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IETFilter,
                fRecState: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IETFilter,
                fRecState: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IETFilter_get_EvalRatObjOK(self: *const T, pHrCoCreateRetVal: ?*HRESULT) HRESULT {
                return @as(*const IETFilter.VTable, @ptrCast(self.vtable)).get_EvalRatObjOK(@as(*const IETFilter, @ptrCast(self)), pHrCoCreateRetVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IETFilter_GetCurrRating(self: *const T, pEnSystem: ?*EnTvRat_System, pEnRating: ?*EnTvRat_GenericLevel, plbfEnAttr: ?*i32) HRESULT {
                return @as(*const IETFilter.VTable, @ptrCast(self.vtable)).GetCurrRating(@as(*const IETFilter, @ptrCast(self)), pEnSystem, pEnRating, plbfEnAttr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IETFilter_GetCurrLicenseExpDate(self: *const T, protType: ?*ProtType, lpDateTime: ?*i32) HRESULT {
                return @as(*const IETFilter.VTable, @ptrCast(self.vtable)).GetCurrLicenseExpDate(@as(*const IETFilter, @ptrCast(self)), protType, lpDateTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IETFilter_GetLastErrorCode(self: *const T) HRESULT {
                return @as(*const IETFilter.VTable, @ptrCast(self.vtable)).GetLastErrorCode(@as(*const IETFilter, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IETFilter_SetRecordingOn(self: *const T, fRecState: BOOL) HRESULT {
                return @as(*const IETFilter.VTable, @ptrCast(self.vtable)).SetRecordingOn(@as(*const IETFilter, @ptrCast(self)), fRecState);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IETFilterEvents_Value = Guid.initString("c4c4c4c1-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IETFilterEvents = &IID_IETFilterEvents_Value;
pub const IETFilterEvents = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDTFilter_Value = Guid.initString("c4c4c4b2-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IDTFilter = &IID_IDTFilter_Value;
pub const IDTFilter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EvalRatObjOK: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDTFilter,
                pHrCoCreateRetVal: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDTFilter,
                pHrCoCreateRetVal: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrRating: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDTFilter,
                pEnSystem: ?*EnTvRat_System,
                pEnRating: ?*EnTvRat_GenericLevel,
                plbfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDTFilter,
                pEnSystem: ?*EnTvRat_System,
                pEnRating: ?*EnTvRat_GenericLevel,
                plbfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BlockedRatingAttributes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDTFilter,
                enSystem: EnTvRat_System,
                enLevel: EnTvRat_GenericLevel,
                plbfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDTFilter,
                enSystem: EnTvRat_System,
                enLevel: EnTvRat_GenericLevel,
                plbfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BlockedRatingAttributes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDTFilter,
                enSystem: EnTvRat_System,
                enLevel: EnTvRat_GenericLevel,
                lbfAttrs: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDTFilter,
                enSystem: EnTvRat_System,
                enLevel: EnTvRat_GenericLevel,
                lbfAttrs: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BlockUnRated: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDTFilter,
                pfBlockUnRatedShows: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDTFilter,
                pfBlockUnRatedShows: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BlockUnRated: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDTFilter,
                fBlockUnRatedShows: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDTFilter,
                fBlockUnRatedShows: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BlockUnRatedDelay: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDTFilter,
                pmsecsDelayBeforeBlock: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDTFilter,
                pmsecsDelayBeforeBlock: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BlockUnRatedDelay: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDTFilter,
                msecsDelayBeforeBlock: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDTFilter,
                msecsDelayBeforeBlock: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter_get_EvalRatObjOK(self: *const T, pHrCoCreateRetVal: ?*HRESULT) HRESULT {
                return @as(*const IDTFilter.VTable, @ptrCast(self.vtable)).get_EvalRatObjOK(@as(*const IDTFilter, @ptrCast(self)), pHrCoCreateRetVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter_GetCurrRating(self: *const T, pEnSystem: ?*EnTvRat_System, pEnRating: ?*EnTvRat_GenericLevel, plbfEnAttr: ?*i32) HRESULT {
                return @as(*const IDTFilter.VTable, @ptrCast(self.vtable)).GetCurrRating(@as(*const IDTFilter, @ptrCast(self)), pEnSystem, pEnRating, plbfEnAttr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter_get_BlockedRatingAttributes(self: *const T, enSystem: EnTvRat_System, enLevel: EnTvRat_GenericLevel, plbfEnAttr: ?*i32) HRESULT {
                return @as(*const IDTFilter.VTable, @ptrCast(self.vtable)).get_BlockedRatingAttributes(@as(*const IDTFilter, @ptrCast(self)), enSystem, enLevel, plbfEnAttr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter_put_BlockedRatingAttributes(self: *const T, enSystem: EnTvRat_System, enLevel: EnTvRat_GenericLevel, lbfAttrs: i32) HRESULT {
                return @as(*const IDTFilter.VTable, @ptrCast(self.vtable)).put_BlockedRatingAttributes(@as(*const IDTFilter, @ptrCast(self)), enSystem, enLevel, lbfAttrs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter_get_BlockUnRated(self: *const T, pfBlockUnRatedShows: ?*BOOL) HRESULT {
                return @as(*const IDTFilter.VTable, @ptrCast(self.vtable)).get_BlockUnRated(@as(*const IDTFilter, @ptrCast(self)), pfBlockUnRatedShows);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter_put_BlockUnRated(self: *const T, fBlockUnRatedShows: BOOL) HRESULT {
                return @as(*const IDTFilter.VTable, @ptrCast(self.vtable)).put_BlockUnRated(@as(*const IDTFilter, @ptrCast(self)), fBlockUnRatedShows);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter_get_BlockUnRatedDelay(self: *const T, pmsecsDelayBeforeBlock: ?*i32) HRESULT {
                return @as(*const IDTFilter.VTable, @ptrCast(self.vtable)).get_BlockUnRatedDelay(@as(*const IDTFilter, @ptrCast(self)), pmsecsDelayBeforeBlock);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter_put_BlockUnRatedDelay(self: *const T, msecsDelayBeforeBlock: i32) HRESULT {
                return @as(*const IDTFilter.VTable, @ptrCast(self.vtable)).put_BlockUnRatedDelay(@as(*const IDTFilter, @ptrCast(self)), msecsDelayBeforeBlock);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IDTFilter2_Value = Guid.initString("c4c4c4b4-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IDTFilter2 = &IID_IDTFilter2_Value;
pub const IDTFilter2 = extern struct {
    pub const VTable = extern struct {
        base: IDTFilter.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ChallengeUrl: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IDTFilter2,
                pbstrChallengeUrl: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IDTFilter2,
                pbstrChallengeUrl: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrLicenseExpDate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDTFilter2,
                protType: ?*ProtType,
                lpDateTime: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDTFilter2,
                protType: ?*ProtType,
                lpDateTime: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastErrorCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDTFilter2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDTFilter2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDTFilter.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter2_get_ChallengeUrl(self: *const T, pbstrChallengeUrl: ?*?BSTR) HRESULT {
                return @as(*const IDTFilter2.VTable, @ptrCast(self.vtable)).get_ChallengeUrl(@as(*const IDTFilter2, @ptrCast(self)), pbstrChallengeUrl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter2_GetCurrLicenseExpDate(self: *const T, protType: ?*ProtType, lpDateTime: ?*i32) HRESULT {
                return @as(*const IDTFilter2.VTable, @ptrCast(self.vtable)).GetCurrLicenseExpDate(@as(*const IDTFilter2, @ptrCast(self)), protType, lpDateTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter2_GetLastErrorCode(self: *const T) HRESULT {
                return @as(*const IDTFilter2.VTable, @ptrCast(self.vtable)).GetLastErrorCode(@as(*const IDTFilter2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IDTFilter3_Value = Guid.initString("513998cc-e929-4cdf-9fbd-bad1e0314866");
pub const IID_IDTFilter3 = &IID_IDTFilter3_Value;
pub const IDTFilter3 = extern struct {
    pub const VTable = extern struct {
        base: IDTFilter2.VTable,
        GetProtectionType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDTFilter3,
                pProtectionType: ?*ProtType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDTFilter3,
                pProtectionType: ?*ProtType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        LicenseHasExpirationDate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDTFilter3,
                pfLicenseHasExpirationDate: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDTFilter3,
                pfLicenseHasExpirationDate: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetRights: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDTFilter3,
                bstrRights: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDTFilter3,
                bstrRights: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDTFilter2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter3_GetProtectionType(self: *const T, pProtectionType: ?*ProtType) HRESULT {
                return @as(*const IDTFilter3.VTable, @ptrCast(self.vtable)).GetProtectionType(@as(*const IDTFilter3, @ptrCast(self)), pProtectionType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter3_LicenseHasExpirationDate(self: *const T, pfLicenseHasExpirationDate: ?*BOOL) HRESULT {
                return @as(*const IDTFilter3.VTable, @ptrCast(self.vtable)).LicenseHasExpirationDate(@as(*const IDTFilter3, @ptrCast(self)), pfLicenseHasExpirationDate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDTFilter3_SetRights(self: *const T, bstrRights: ?BSTR) HRESULT {
                return @as(*const IDTFilter3.VTable, @ptrCast(self.vtable)).SetRights(@as(*const IDTFilter3, @ptrCast(self)), bstrRights);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDTFilterEvents_Value = Guid.initString("c4c4c4c2-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IDTFilterEvents = &IID_IDTFilterEvents_Value;
pub const IDTFilterEvents = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IXDSCodec_Value = Guid.initString("c4c4c4b3-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IXDSCodec = &IID_IXDSCodec_Value;
pub const IXDSCodec = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_XDSToRatObjOK: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IXDSCodec,
                pHrCoCreateRetVal: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IXDSCodec,
                pHrCoCreateRetVal: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CCSubstreamService: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IXDSCodec,
                SubstreamMask: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IXDSCodec,
                SubstreamMask: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CCSubstreamService: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IXDSCodec,
                pSubstreamMask: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IXDSCodec,
                pSubstreamMask: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetContentAdvisoryRating: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IXDSCodec,
                pRat: ?*i32,
                pPktSeqID: ?*i32,
                pCallSeqID: ?*i32,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IXDSCodec,
                pRat: ?*i32,
                pPktSeqID: ?*i32,
                pCallSeqID: ?*i32,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetXDSPacket: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IXDSCodec,
                pXDSClassPkt: ?*i32,
                pXDSTypePkt: ?*i32,
                pBstrXDSPkt: ?*?BSTR,
                pPktSeqID: ?*i32,
                pCallSeqID: ?*i32,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IXDSCodec,
                pXDSClassPkt: ?*i32,
                pXDSTypePkt: ?*i32,
                pBstrXDSPkt: ?*?BSTR,
                pPktSeqID: ?*i32,
                pCallSeqID: ?*i32,
                pTimeStart: ?*i64,
                pTimeEnd: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrLicenseExpDate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IXDSCodec,
                protType: ?*ProtType,
                lpDateTime: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IXDSCodec,
                protType: ?*ProtType,
                lpDateTime: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastErrorCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IXDSCodec,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IXDSCodec,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSCodec_get_XDSToRatObjOK(self: *const T, pHrCoCreateRetVal: ?*HRESULT) HRESULT {
                return @as(*const IXDSCodec.VTable, @ptrCast(self.vtable)).get_XDSToRatObjOK(@as(*const IXDSCodec, @ptrCast(self)), pHrCoCreateRetVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSCodec_put_CCSubstreamService(self: *const T, SubstreamMask: i32) HRESULT {
                return @as(*const IXDSCodec.VTable, @ptrCast(self.vtable)).put_CCSubstreamService(@as(*const IXDSCodec, @ptrCast(self)), SubstreamMask);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSCodec_get_CCSubstreamService(self: *const T, pSubstreamMask: ?*i32) HRESULT {
                return @as(*const IXDSCodec.VTable, @ptrCast(self.vtable)).get_CCSubstreamService(@as(*const IXDSCodec, @ptrCast(self)), pSubstreamMask);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSCodec_GetContentAdvisoryRating(self: *const T, pRat: ?*i32, pPktSeqID: ?*i32, pCallSeqID: ?*i32, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IXDSCodec.VTable, @ptrCast(self.vtable)).GetContentAdvisoryRating(@as(*const IXDSCodec, @ptrCast(self)), pRat, pPktSeqID, pCallSeqID, pTimeStart, pTimeEnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSCodec_GetXDSPacket(self: *const T, pXDSClassPkt: ?*i32, pXDSTypePkt: ?*i32, pBstrXDSPkt: ?*?BSTR, pPktSeqID: ?*i32, pCallSeqID: ?*i32, pTimeStart: ?*i64, pTimeEnd: ?*i64) HRESULT {
                return @as(*const IXDSCodec.VTable, @ptrCast(self.vtable)).GetXDSPacket(@as(*const IXDSCodec, @ptrCast(self)), pXDSClassPkt, pXDSTypePkt, pBstrXDSPkt, pPktSeqID, pCallSeqID, pTimeStart, pTimeEnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSCodec_GetCurrLicenseExpDate(self: *const T, protType: ?*ProtType, lpDateTime: ?*i32) HRESULT {
                return @as(*const IXDSCodec.VTable, @ptrCast(self.vtable)).GetCurrLicenseExpDate(@as(*const IXDSCodec, @ptrCast(self)), protType, lpDateTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSCodec_GetLastErrorCode(self: *const T) HRESULT {
                return @as(*const IXDSCodec.VTable, @ptrCast(self.vtable)).GetLastErrorCode(@as(*const IXDSCodec, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IXDSCodecEvents_Value = Guid.initString("c4c4c4c3-0049-4e2b-98fb-9537f6ce516d");
pub const IID_IXDSCodecEvents = &IID_IXDSCodecEvents_Value;
pub const IXDSCodecEvents = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IXDSToRat_Value = Guid.initString("c5c5c5b0-3abc-11d6-b25b-00c04fa0c026");
pub const IID_IXDSToRat = &IID_IXDSToRat_Value;
pub const IXDSToRat = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        Init: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IXDSToRat,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IXDSToRat,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ParseXDSBytePair: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IXDSToRat,
                byte1: u8,
                byte2: u8,
                pEnSystem: ?*EnTvRat_System,
                pEnLevel: ?*EnTvRat_GenericLevel,
                plBfEnAttributes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IXDSToRat,
                byte1: u8,
                byte2: u8,
                pEnSystem: ?*EnTvRat_System,
                pEnLevel: ?*EnTvRat_GenericLevel,
                plBfEnAttributes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSToRat_Init(self: *const T) HRESULT {
                return @as(*const IXDSToRat.VTable, @ptrCast(self.vtable)).Init(@as(*const IXDSToRat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IXDSToRat_ParseXDSBytePair(self: *const T, byte1: u8, byte2: u8, pEnSystem: ?*EnTvRat_System, pEnLevel: ?*EnTvRat_GenericLevel, plBfEnAttributes: ?*i32) HRESULT {
                return @as(*const IXDSToRat.VTable, @ptrCast(self.vtable)).ParseXDSBytePair(@as(*const IXDSToRat, @ptrCast(self)), byte1, byte2, pEnSystem, pEnLevel, plBfEnAttributes);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IEvalRat_Value = Guid.initString("c5c5c5b1-3abc-11d6-b25b-00c04fa0c026");
pub const IID_IEvalRat = &IID_IEvalRat_Value;
pub const IEvalRat = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BlockedRatingAttributes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IEvalRat,
                enSystem: EnTvRat_System,
                enLevel: EnTvRat_GenericLevel,
                plbfAttrs: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IEvalRat,
                enSystem: EnTvRat_System,
                enLevel: EnTvRat_GenericLevel,
                plbfAttrs: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BlockedRatingAttributes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IEvalRat,
                enSystem: EnTvRat_System,
                enLevel: EnTvRat_GenericLevel,
                lbfAttrs: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IEvalRat,
                enSystem: EnTvRat_System,
                enLevel: EnTvRat_GenericLevel,
                lbfAttrs: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BlockUnRated: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IEvalRat,
                pfBlockUnRatedShows: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IEvalRat,
                pfBlockUnRatedShows: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BlockUnRated: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IEvalRat,
                fBlockUnRatedShows: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IEvalRat,
                fBlockUnRatedShows: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        MostRestrictiveRating: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEvalRat,
                enSystem1: EnTvRat_System,
                enEnLevel1: EnTvRat_GenericLevel,
                lbfEnAttr1: i32,
                enSystem2: EnTvRat_System,
                enEnLevel2: EnTvRat_GenericLevel,
                lbfEnAttr2: i32,
                penSystem: ?*EnTvRat_System,
                penEnLevel: ?*EnTvRat_GenericLevel,
                plbfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEvalRat,
                enSystem1: EnTvRat_System,
                enEnLevel1: EnTvRat_GenericLevel,
                lbfEnAttr1: i32,
                enSystem2: EnTvRat_System,
                enEnLevel2: EnTvRat_GenericLevel,
                lbfEnAttr2: i32,
                penSystem: ?*EnTvRat_System,
                penEnLevel: ?*EnTvRat_GenericLevel,
                plbfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TestRating: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEvalRat,
                enShowSystem: EnTvRat_System,
                enShowLevel: EnTvRat_GenericLevel,
                lbfEnShowAttributes: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEvalRat,
                enShowSystem: EnTvRat_System,
                enShowLevel: EnTvRat_GenericLevel,
                lbfEnShowAttributes: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEvalRat_get_BlockedRatingAttributes(self: *const T, enSystem: EnTvRat_System, enLevel: EnTvRat_GenericLevel, plbfAttrs: ?*i32) HRESULT {
                return @as(*const IEvalRat.VTable, @ptrCast(self.vtable)).get_BlockedRatingAttributes(@as(*const IEvalRat, @ptrCast(self)), enSystem, enLevel, plbfAttrs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEvalRat_put_BlockedRatingAttributes(self: *const T, enSystem: EnTvRat_System, enLevel: EnTvRat_GenericLevel, lbfAttrs: i32) HRESULT {
                return @as(*const IEvalRat.VTable, @ptrCast(self.vtable)).put_BlockedRatingAttributes(@as(*const IEvalRat, @ptrCast(self)), enSystem, enLevel, lbfAttrs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEvalRat_get_BlockUnRated(self: *const T, pfBlockUnRatedShows: ?*BOOL) HRESULT {
                return @as(*const IEvalRat.VTable, @ptrCast(self.vtable)).get_BlockUnRated(@as(*const IEvalRat, @ptrCast(self)), pfBlockUnRatedShows);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEvalRat_put_BlockUnRated(self: *const T, fBlockUnRatedShows: BOOL) HRESULT {
                return @as(*const IEvalRat.VTable, @ptrCast(self.vtable)).put_BlockUnRated(@as(*const IEvalRat, @ptrCast(self)), fBlockUnRatedShows);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEvalRat_MostRestrictiveRating(self: *const T, enSystem1: EnTvRat_System, enEnLevel1: EnTvRat_GenericLevel, lbfEnAttr1: i32, enSystem2: EnTvRat_System, enEnLevel2: EnTvRat_GenericLevel, lbfEnAttr2: i32, penSystem: ?*EnTvRat_System, penEnLevel: ?*EnTvRat_GenericLevel, plbfEnAttr: ?*i32) HRESULT {
                return @as(*const IEvalRat.VTable, @ptrCast(self.vtable)).MostRestrictiveRating(@as(*const IEvalRat, @ptrCast(self)), enSystem1, enEnLevel1, lbfEnAttr1, enSystem2, enEnLevel2, lbfEnAttr2, penSystem, penEnLevel, plbfEnAttr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEvalRat_TestRating(self: *const T, enShowSystem: EnTvRat_System, enShowLevel: EnTvRat_GenericLevel, lbfEnShowAttributes: i32) HRESULT {
                return @as(*const IEvalRat.VTable, @ptrCast(self.vtable)).TestRating(@as(*const IEvalRat, @ptrCast(self)), enShowSystem, enShowLevel, lbfEnShowAttributes);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const SegDispidList = enum(i32) {
    dispidName = 0,
    dispidStatus = 1,
    dispidDevImageSourceWidth = 2,
    dispidDevImageSourceHeight = 3,
    dispidDevCountryCode = 4,
    dispidDevOverScan = 5,
    dispidSegment = 6,
    dispidDevVolume = 7,
    dispidDevBalance = 8,
    dispidDevPower = 9,
    dispidTuneChan = 10,
    dispidDevVideoSubchannel = 11,
    dispidDevAudioSubchannel = 12,
    dispidChannelAvailable = 13,
    dispidDevVideoFrequency = 14,
    dispidDevAudioFrequency = 15,
    dispidCount = 16,
    dispidDevFileName = 17,
    dispidVisible = 18,
    dispidOwner = 19,
    dispidMessageDrain = 20,
    dispidViewable = 21,
    dispidDevView = 22,
    dispidKSCat = 23,
    dispidCLSID = 24,
    dispid_KSCat = 25,
    dispid_CLSID = 26,
    dispidTune = 27,
    dispidTS = 28,
    dispidDevSAP = 29,
    dispidClip = 30,
    dispidRequestedClipRect = 31,
    dispidClippedSourceRect = 32,
    dispidAvailableSourceRect = 33,
    dispidMediaPosition = 34,
    dispidDevRun = 35,
    dispidDevPause = 36,
    dispidDevStop = 37,
    dispidCCEnable = 38,
    dispidDevStep = 39,
    dispidDevCanStep = 40,
    dispidSourceSize = 41,
    dispid_playtitle = 42,
    dispid_playchapterintitle = 43,
    dispid_playchapter = 44,
    dispid_playchaptersautostop = 45,
    dispid_playattime = 46,
    dispid_playattimeintitle = 47,
    dispid_playperiodintitleautostop = 48,
    dispid_replaychapter = 49,
    dispid_playprevchapter = 50,
    dispid_playnextchapter = 51,
    dispid_playforwards = 52,
    dispid_playbackwards = 53,
    dispid_stilloff = 54,
    dispid_audiolanguage = 55,
    dispid_showmenu = 56,
    dispid_resume = 57,
    dispid_returnfromsubmenu = 58,
    dispid_buttonsavailable = 59,
    dispid_currentbutton = 60,
    dispid_SelectAndActivateButton = 61,
    dispid_ActivateButton = 62,
    dispid_SelectRightButton = 63,
    dispid_SelectLeftButton = 64,
    dispid_SelectLowerButton = 65,
    dispid_SelectUpperButton = 66,
    dispid_ActivateAtPosition = 67,
    dispid_SelectAtPosition = 68,
    dispid_ButtonAtPosition = 69,
    dispid_NumberOfChapters = 70,
    dispid_TotalTitleTime = 71,
    dispid_TitlesAvailable = 72,
    dispid_VolumesAvailable = 73,
    dispid_CurrentVolume = 74,
    dispid_CurrentDiscSide = 75,
    dispid_CurrentDomain = 76,
    dispid_CurrentChapter = 77,
    dispid_CurrentTitle = 78,
    dispid_CurrentTime = 79,
    dispid_FramesPerSecond = 80,
    dispid_DVDTimeCode2bstr = 81,
    dispid_DVDDirectory = 82,
    dispid_IsSubpictureStreamEnabled = 83,
    dispid_IsAudioStreamEnabled = 84,
    dispid_CurrentSubpictureStream = 85,
    dispid_SubpictureLanguage = 86,
    dispid_CurrentAudioStream = 87,
    dispid_AudioStreamsAvailable = 88,
    dispid_AnglesAvailable = 89,
    dispid_CurrentAngle = 90,
    dispid_CCActive = 91,
    dispid_CurrentCCService = 92,
    dispid_SubpictureStreamsAvailable = 93,
    dispid_SubpictureOn = 94,
    dispid_DVDUniqueID = 95,
    dispid_EnableResetOnStop = 96,
    dispid_AcceptParentalLevelChange = 97,
    dispid_NotifyParentalLevelChange = 98,
    dispid_SelectParentalCountry = 99,
    dispid_SelectParentalLevel = 100,
    dispid_TitleParentalLevels = 101,
    dispid_PlayerParentalCountry = 102,
    dispid_PlayerParentalLevel = 103,
    dispid_Eject = 104,
    dispid_UOPValid = 105,
    dispid_SPRM = 106,
    dispid_GPRM = 107,
    dispid_DVDTextStringType = 108,
    dispid_DVDTextString = 109,
    dispid_DVDTextNumberOfStrings = 110,
    dispid_DVDTextNumberOfLanguages = 111,
    dispid_DVDTextLanguageLCID = 112,
    dispid_RegionChange = 113,
    dispid_DVDAdm = 114,
    dispid_DeleteBookmark = 115,
    dispid_RestoreBookmark = 116,
    dispid_SaveBookmark = 117,
    dispid_SelectDefaultAudioLanguage = 118,
    dispid_SelectDefaultSubpictureLanguage = 119,
    dispid_PreferredSubpictureStream = 120,
    dispid_DefaultMenuLanguage = 121,
    dispid_DefaultSubpictureLanguage = 122,
    dispid_DefaultAudioLanguage = 123,
    dispid_DefaultSubpictureLanguageExt = 124,
    dispid_DefaultAudioLanguageExt = 125,
    dispid_LanguageFromLCID = 126,
    dispid_KaraokeAudioPresentationMode = 127,
    dispid_KaraokeChannelContent = 128,
    dispid_KaraokeChannelAssignment = 129,
    dispid_RestorePreferredSettings = 130,
    dispid_ButtonRect = 131,
    dispid_DVDScreenInMouseCoordinates = 132,
    dispid_CustomCompositorClass = 133,
    dispidCustomCompositorClass = 134,
    dispid_CustomCompositor = 135,
    dispidMixerBitmap = 136,
    dispid_MixerBitmap = 137,
    dispidMixerBitmapOpacity = 138,
    dispidMixerBitmapRect = 139,
    dispidSetupMixerBitmap = 140,
    dispidUsingOverlay = 141,
    dispidDisplayChange = 142,
    dispidRePaint = 143,
    dispid_IsEqualDevice = 144,
    dispidrate = 145,
    dispidposition = 146,
    dispidpositionmode = 147,
    dispidlength = 148,
    dispidChangePassword = 149,
    dispidSaveParentalLevel = 150,
    dispidSaveParentalCountry = 151,
    dispidConfirmPassword = 152,
    dispidGetParentalLevel = 153,
    dispidGetParentalCountry = 154,
    dispidDefaultAudioLCID = 155,
    dispidDefaultSubpictureLCID = 156,
    dispidDefaultMenuLCID = 157,
    dispidBookmarkOnStop = 158,
    dispidMaxVidRect = 159,
    dispidMinVidRect = 160,
    dispidCapture = 161,
    dispid_DecimateInput = 162,
    dispidAlloctor = 163,
    dispid_Allocator = 164,
    dispidAllocPresentID = 165,
    dispidSetAllocator = 166,
    dispid_SetAllocator = 167,
    dispidStreamBufferSinkName = 168,
    dispidStreamBufferSourceName = 169,
    dispidStreamBufferContentRecording = 170,
    dispidStreamBufferReferenceRecording = 171,
    dispidstarttime = 172,
    dispidstoptime = 173,
    dispidrecordingstopped = 174,
    dispidrecordingstarted = 175,
    dispidNameSetLock = 176,
    dispidrecordingtype = 177,
    dispidstart = 178,
    dispidRecordingAttribute = 179,
    dispid_RecordingAttribute = 180,
    dispidSBEConfigure = 181,
    dispid_CurrentRatings = 182,
    dispid_MaxRatingsLevel = 183,
    dispid_audioencoderint = 184,
    dispid_videoencoderint = 185,
    dispidService = 186,
    dispid_BlockUnrated = 187,
    dispid_UnratedDelay = 188,
    dispid_SuppressEffects = 189,
    dispidsbesource = 190,
    dispidSetSinkFilter = 191,
    dispid_SinkStreams = 192,
    dispidTVFormats = 193,
    dispidModes = 194,
    dispidAuxInputs = 195,
    dispidTeleTextFilter = 196,
    dispid_channelchangeint = 197,
    dispidUnlockProfile = 198,
    dispid_AddFilter = 199,
    dispidSetMinSeek = 200,
    dispidRateEx = 201,
    dispidaudiocounter = 202,
    dispidvideocounter = 203,
    dispidcccounter = 204,
    dispidwstcounter = 205,
    dispid_audiocounter = 206,
    dispid_videocounter = 207,
    dispid_cccounter = 208,
    dispid_wstcounter = 209,
    dispidaudioanalysis = 210,
    dispidvideoanalysis = 211,
    dispiddataanalysis = 212,
    dispidaudio_analysis = 213,
    dispidvideo_analysis = 214,
    dispiddata_analysis = 215,
    dispid_resetFilterList = 216,
    dispidDevicePath = 217,
    dispid_SourceFilter = 218,
    dispid__SourceFilter = 219,
    dispidUserEvent = 220,
    dispid_Bookmark = 221,
    LastReservedDeviceDispid = 16383,
};
pub const dispidName = SegDispidList.dispidName;
pub const dispidStatus = SegDispidList.dispidStatus;
pub const dispidDevImageSourceWidth = SegDispidList.dispidDevImageSourceWidth;
pub const dispidDevImageSourceHeight = SegDispidList.dispidDevImageSourceHeight;
pub const dispidDevCountryCode = SegDispidList.dispidDevCountryCode;
pub const dispidDevOverScan = SegDispidList.dispidDevOverScan;
pub const dispidSegment = SegDispidList.dispidSegment;
pub const dispidDevVolume = SegDispidList.dispidDevVolume;
pub const dispidDevBalance = SegDispidList.dispidDevBalance;
pub const dispidDevPower = SegDispidList.dispidDevPower;
pub const dispidTuneChan = SegDispidList.dispidTuneChan;
pub const dispidDevVideoSubchannel = SegDispidList.dispidDevVideoSubchannel;
pub const dispidDevAudioSubchannel = SegDispidList.dispidDevAudioSubchannel;
pub const dispidChannelAvailable = SegDispidList.dispidChannelAvailable;
pub const dispidDevVideoFrequency = SegDispidList.dispidDevVideoFrequency;
pub const dispidDevAudioFrequency = SegDispidList.dispidDevAudioFrequency;
pub const dispidCount = SegDispidList.dispidCount;
pub const dispidDevFileName = SegDispidList.dispidDevFileName;
pub const dispidVisible = SegDispidList.dispidVisible;
pub const dispidOwner = SegDispidList.dispidOwner;
pub const dispidMessageDrain = SegDispidList.dispidMessageDrain;
pub const dispidViewable = SegDispidList.dispidViewable;
pub const dispidDevView = SegDispidList.dispidDevView;
pub const dispidKSCat = SegDispidList.dispidKSCat;
pub const dispidCLSID = SegDispidList.dispidCLSID;
pub const dispid_KSCat = SegDispidList.dispid_KSCat;
pub const dispid_CLSID = SegDispidList.dispid_CLSID;
pub const dispidTune = SegDispidList.dispidTune;
pub const dispidTS = SegDispidList.dispidTS;
pub const dispidDevSAP = SegDispidList.dispidDevSAP;
pub const dispidClip = SegDispidList.dispidClip;
pub const dispidRequestedClipRect = SegDispidList.dispidRequestedClipRect;
pub const dispidClippedSourceRect = SegDispidList.dispidClippedSourceRect;
pub const dispidAvailableSourceRect = SegDispidList.dispidAvailableSourceRect;
pub const dispidMediaPosition = SegDispidList.dispidMediaPosition;
pub const dispidDevRun = SegDispidList.dispidDevRun;
pub const dispidDevPause = SegDispidList.dispidDevPause;
pub const dispidDevStop = SegDispidList.dispidDevStop;
pub const dispidCCEnable = SegDispidList.dispidCCEnable;
pub const dispidDevStep = SegDispidList.dispidDevStep;
pub const dispidDevCanStep = SegDispidList.dispidDevCanStep;
pub const dispidSourceSize = SegDispidList.dispidSourceSize;
pub const dispid_playtitle = SegDispidList.dispid_playtitle;
pub const dispid_playchapterintitle = SegDispidList.dispid_playchapterintitle;
pub const dispid_playchapter = SegDispidList.dispid_playchapter;
pub const dispid_playchaptersautostop = SegDispidList.dispid_playchaptersautostop;
pub const dispid_playattime = SegDispidList.dispid_playattime;
pub const dispid_playattimeintitle = SegDispidList.dispid_playattimeintitle;
pub const dispid_playperiodintitleautostop = SegDispidList.dispid_playperiodintitleautostop;
pub const dispid_replaychapter = SegDispidList.dispid_replaychapter;
pub const dispid_playprevchapter = SegDispidList.dispid_playprevchapter;
pub const dispid_playnextchapter = SegDispidList.dispid_playnextchapter;
pub const dispid_playforwards = SegDispidList.dispid_playforwards;
pub const dispid_playbackwards = SegDispidList.dispid_playbackwards;
pub const dispid_stilloff = SegDispidList.dispid_stilloff;
pub const dispid_audiolanguage = SegDispidList.dispid_audiolanguage;
pub const dispid_showmenu = SegDispidList.dispid_showmenu;
pub const dispid_resume = SegDispidList.dispid_resume;
pub const dispid_returnfromsubmenu = SegDispidList.dispid_returnfromsubmenu;
pub const dispid_buttonsavailable = SegDispidList.dispid_buttonsavailable;
pub const dispid_currentbutton = SegDispidList.dispid_currentbutton;
pub const dispid_SelectAndActivateButton = SegDispidList.dispid_SelectAndActivateButton;
pub const dispid_ActivateButton = SegDispidList.dispid_ActivateButton;
pub const dispid_SelectRightButton = SegDispidList.dispid_SelectRightButton;
pub const dispid_SelectLeftButton = SegDispidList.dispid_SelectLeftButton;
pub const dispid_SelectLowerButton = SegDispidList.dispid_SelectLowerButton;
pub const dispid_SelectUpperButton = SegDispidList.dispid_SelectUpperButton;
pub const dispid_ActivateAtPosition = SegDispidList.dispid_ActivateAtPosition;
pub const dispid_SelectAtPosition = SegDispidList.dispid_SelectAtPosition;
pub const dispid_ButtonAtPosition = SegDispidList.dispid_ButtonAtPosition;
pub const dispid_NumberOfChapters = SegDispidList.dispid_NumberOfChapters;
pub const dispid_TotalTitleTime = SegDispidList.dispid_TotalTitleTime;
pub const dispid_TitlesAvailable = SegDispidList.dispid_TitlesAvailable;
pub const dispid_VolumesAvailable = SegDispidList.dispid_VolumesAvailable;
pub const dispid_CurrentVolume = SegDispidList.dispid_CurrentVolume;
pub const dispid_CurrentDiscSide = SegDispidList.dispid_CurrentDiscSide;
pub const dispid_CurrentDomain = SegDispidList.dispid_CurrentDomain;
pub const dispid_CurrentChapter = SegDispidList.dispid_CurrentChapter;
pub const dispid_CurrentTitle = SegDispidList.dispid_CurrentTitle;
pub const dispid_CurrentTime = SegDispidList.dispid_CurrentTime;
pub const dispid_FramesPerSecond = SegDispidList.dispid_FramesPerSecond;
pub const dispid_DVDTimeCode2bstr = SegDispidList.dispid_DVDTimeCode2bstr;
pub const dispid_DVDDirectory = SegDispidList.dispid_DVDDirectory;
pub const dispid_IsSubpictureStreamEnabled = SegDispidList.dispid_IsSubpictureStreamEnabled;
pub const dispid_IsAudioStreamEnabled = SegDispidList.dispid_IsAudioStreamEnabled;
pub const dispid_CurrentSubpictureStream = SegDispidList.dispid_CurrentSubpictureStream;
pub const dispid_SubpictureLanguage = SegDispidList.dispid_SubpictureLanguage;
pub const dispid_CurrentAudioStream = SegDispidList.dispid_CurrentAudioStream;
pub const dispid_AudioStreamsAvailable = SegDispidList.dispid_AudioStreamsAvailable;
pub const dispid_AnglesAvailable = SegDispidList.dispid_AnglesAvailable;
pub const dispid_CurrentAngle = SegDispidList.dispid_CurrentAngle;
pub const dispid_CCActive = SegDispidList.dispid_CCActive;
pub const dispid_CurrentCCService = SegDispidList.dispid_CurrentCCService;
pub const dispid_SubpictureStreamsAvailable = SegDispidList.dispid_SubpictureStreamsAvailable;
pub const dispid_SubpictureOn = SegDispidList.dispid_SubpictureOn;
pub const dispid_DVDUniqueID = SegDispidList.dispid_DVDUniqueID;
pub const dispid_EnableResetOnStop = SegDispidList.dispid_EnableResetOnStop;
pub const dispid_AcceptParentalLevelChange = SegDispidList.dispid_AcceptParentalLevelChange;
pub const dispid_NotifyParentalLevelChange = SegDispidList.dispid_NotifyParentalLevelChange;
pub const dispid_SelectParentalCountry = SegDispidList.dispid_SelectParentalCountry;
pub const dispid_SelectParentalLevel = SegDispidList.dispid_SelectParentalLevel;
pub const dispid_TitleParentalLevels = SegDispidList.dispid_TitleParentalLevels;
pub const dispid_PlayerParentalCountry = SegDispidList.dispid_PlayerParentalCountry;
pub const dispid_PlayerParentalLevel = SegDispidList.dispid_PlayerParentalLevel;
pub const dispid_Eject = SegDispidList.dispid_Eject;
pub const dispid_UOPValid = SegDispidList.dispid_UOPValid;
pub const dispid_SPRM = SegDispidList.dispid_SPRM;
pub const dispid_GPRM = SegDispidList.dispid_GPRM;
pub const dispid_DVDTextStringType = SegDispidList.dispid_DVDTextStringType;
pub const dispid_DVDTextString = SegDispidList.dispid_DVDTextString;
pub const dispid_DVDTextNumberOfStrings = SegDispidList.dispid_DVDTextNumberOfStrings;
pub const dispid_DVDTextNumberOfLanguages = SegDispidList.dispid_DVDTextNumberOfLanguages;
pub const dispid_DVDTextLanguageLCID = SegDispidList.dispid_DVDTextLanguageLCID;
pub const dispid_RegionChange = SegDispidList.dispid_RegionChange;
pub const dispid_DVDAdm = SegDispidList.dispid_DVDAdm;
pub const dispid_DeleteBookmark = SegDispidList.dispid_DeleteBookmark;
pub const dispid_RestoreBookmark = SegDispidList.dispid_RestoreBookmark;
pub const dispid_SaveBookmark = SegDispidList.dispid_SaveBookmark;
pub const dispid_SelectDefaultAudioLanguage = SegDispidList.dispid_SelectDefaultAudioLanguage;
pub const dispid_SelectDefaultSubpictureLanguage = SegDispidList.dispid_SelectDefaultSubpictureLanguage;
pub const dispid_PreferredSubpictureStream = SegDispidList.dispid_PreferredSubpictureStream;
pub const dispid_DefaultMenuLanguage = SegDispidList.dispid_DefaultMenuLanguage;
pub const dispid_DefaultSubpictureLanguage = SegDispidList.dispid_DefaultSubpictureLanguage;
pub const dispid_DefaultAudioLanguage = SegDispidList.dispid_DefaultAudioLanguage;
pub const dispid_DefaultSubpictureLanguageExt = SegDispidList.dispid_DefaultSubpictureLanguageExt;
pub const dispid_DefaultAudioLanguageExt = SegDispidList.dispid_DefaultAudioLanguageExt;
pub const dispid_LanguageFromLCID = SegDispidList.dispid_LanguageFromLCID;
pub const dispid_KaraokeAudioPresentationMode = SegDispidList.dispid_KaraokeAudioPresentationMode;
pub const dispid_KaraokeChannelContent = SegDispidList.dispid_KaraokeChannelContent;
pub const dispid_KaraokeChannelAssignment = SegDispidList.dispid_KaraokeChannelAssignment;
pub const dispid_RestorePreferredSettings = SegDispidList.dispid_RestorePreferredSettings;
pub const dispid_ButtonRect = SegDispidList.dispid_ButtonRect;
pub const dispid_DVDScreenInMouseCoordinates = SegDispidList.dispid_DVDScreenInMouseCoordinates;
pub const dispid_CustomCompositorClass = SegDispidList.dispid_CustomCompositorClass;
pub const dispidCustomCompositorClass = SegDispidList.dispidCustomCompositorClass;
pub const dispid_CustomCompositor = SegDispidList.dispid_CustomCompositor;
pub const dispidMixerBitmap = SegDispidList.dispidMixerBitmap;
pub const dispid_MixerBitmap = SegDispidList.dispid_MixerBitmap;
pub const dispidMixerBitmapOpacity = SegDispidList.dispidMixerBitmapOpacity;
pub const dispidMixerBitmapRect = SegDispidList.dispidMixerBitmapRect;
pub const dispidSetupMixerBitmap = SegDispidList.dispidSetupMixerBitmap;
pub const dispidUsingOverlay = SegDispidList.dispidUsingOverlay;
pub const dispidDisplayChange = SegDispidList.dispidDisplayChange;
pub const dispidRePaint = SegDispidList.dispidRePaint;
pub const dispid_IsEqualDevice = SegDispidList.dispid_IsEqualDevice;
pub const dispidrate = SegDispidList.dispidrate;
pub const dispidposition = SegDispidList.dispidposition;
pub const dispidpositionmode = SegDispidList.dispidpositionmode;
pub const dispidlength = SegDispidList.dispidlength;
pub const dispidChangePassword = SegDispidList.dispidChangePassword;
pub const dispidSaveParentalLevel = SegDispidList.dispidSaveParentalLevel;
pub const dispidSaveParentalCountry = SegDispidList.dispidSaveParentalCountry;
pub const dispidConfirmPassword = SegDispidList.dispidConfirmPassword;
pub const dispidGetParentalLevel = SegDispidList.dispidGetParentalLevel;
pub const dispidGetParentalCountry = SegDispidList.dispidGetParentalCountry;
pub const dispidDefaultAudioLCID = SegDispidList.dispidDefaultAudioLCID;
pub const dispidDefaultSubpictureLCID = SegDispidList.dispidDefaultSubpictureLCID;
pub const dispidDefaultMenuLCID = SegDispidList.dispidDefaultMenuLCID;
pub const dispidBookmarkOnStop = SegDispidList.dispidBookmarkOnStop;
pub const dispidMaxVidRect = SegDispidList.dispidMaxVidRect;
pub const dispidMinVidRect = SegDispidList.dispidMinVidRect;
pub const dispidCapture = SegDispidList.dispidCapture;
pub const dispid_DecimateInput = SegDispidList.dispid_DecimateInput;
pub const dispidAlloctor = SegDispidList.dispidAlloctor;
pub const dispid_Allocator = SegDispidList.dispid_Allocator;
pub const dispidAllocPresentID = SegDispidList.dispidAllocPresentID;
pub const dispidSetAllocator = SegDispidList.dispidSetAllocator;
pub const dispid_SetAllocator = SegDispidList.dispid_SetAllocator;
pub const dispidStreamBufferSinkName = SegDispidList.dispidStreamBufferSinkName;
pub const dispidStreamBufferSourceName = SegDispidList.dispidStreamBufferSourceName;
pub const dispidStreamBufferContentRecording = SegDispidList.dispidStreamBufferContentRecording;
pub const dispidStreamBufferReferenceRecording = SegDispidList.dispidStreamBufferReferenceRecording;
pub const dispidstarttime = SegDispidList.dispidstarttime;
pub const dispidstoptime = SegDispidList.dispidstoptime;
pub const dispidrecordingstopped = SegDispidList.dispidrecordingstopped;
pub const dispidrecordingstarted = SegDispidList.dispidrecordingstarted;
pub const dispidNameSetLock = SegDispidList.dispidNameSetLock;
pub const dispidrecordingtype = SegDispidList.dispidrecordingtype;
pub const dispidstart = SegDispidList.dispidstart;
pub const dispidRecordingAttribute = SegDispidList.dispidRecordingAttribute;
pub const dispid_RecordingAttribute = SegDispidList.dispid_RecordingAttribute;
pub const dispidSBEConfigure = SegDispidList.dispidSBEConfigure;
pub const dispid_CurrentRatings = SegDispidList.dispid_CurrentRatings;
pub const dispid_MaxRatingsLevel = SegDispidList.dispid_MaxRatingsLevel;
pub const dispid_audioencoderint = SegDispidList.dispid_audioencoderint;
pub const dispid_videoencoderint = SegDispidList.dispid_videoencoderint;
pub const dispidService = SegDispidList.dispidService;
pub const dispid_BlockUnrated = SegDispidList.dispid_BlockUnrated;
pub const dispid_UnratedDelay = SegDispidList.dispid_UnratedDelay;
pub const dispid_SuppressEffects = SegDispidList.dispid_SuppressEffects;
pub const dispidsbesource = SegDispidList.dispidsbesource;
pub const dispidSetSinkFilter = SegDispidList.dispidSetSinkFilter;
pub const dispid_SinkStreams = SegDispidList.dispid_SinkStreams;
pub const dispidTVFormats = SegDispidList.dispidTVFormats;
pub const dispidModes = SegDispidList.dispidModes;
pub const dispidAuxInputs = SegDispidList.dispidAuxInputs;
pub const dispidTeleTextFilter = SegDispidList.dispidTeleTextFilter;
pub const dispid_channelchangeint = SegDispidList.dispid_channelchangeint;
pub const dispidUnlockProfile = SegDispidList.dispidUnlockProfile;
pub const dispid_AddFilter = SegDispidList.dispid_AddFilter;
pub const dispidSetMinSeek = SegDispidList.dispidSetMinSeek;
pub const dispidRateEx = SegDispidList.dispidRateEx;
pub const dispidaudiocounter = SegDispidList.dispidaudiocounter;
pub const dispidvideocounter = SegDispidList.dispidvideocounter;
pub const dispidcccounter = SegDispidList.dispidcccounter;
pub const dispidwstcounter = SegDispidList.dispidwstcounter;
pub const dispid_audiocounter = SegDispidList.dispid_audiocounter;
pub const dispid_videocounter = SegDispidList.dispid_videocounter;
pub const dispid_cccounter = SegDispidList.dispid_cccounter;
pub const dispid_wstcounter = SegDispidList.dispid_wstcounter;
pub const dispidaudioanalysis = SegDispidList.dispidaudioanalysis;
pub const dispidvideoanalysis = SegDispidList.dispidvideoanalysis;
pub const dispiddataanalysis = SegDispidList.dispiddataanalysis;
pub const dispidaudio_analysis = SegDispidList.dispidaudio_analysis;
pub const dispidvideo_analysis = SegDispidList.dispidvideo_analysis;
pub const dispiddata_analysis = SegDispidList.dispiddata_analysis;
pub const dispid_resetFilterList = SegDispidList.dispid_resetFilterList;
pub const dispidDevicePath = SegDispidList.dispidDevicePath;
pub const dispid_SourceFilter = SegDispidList.dispid_SourceFilter;
pub const dispid__SourceFilter = SegDispidList.dispid__SourceFilter;
pub const dispidUserEvent = SegDispidList.dispidUserEvent;
pub const dispid_Bookmark = SegDispidList.dispid_Bookmark;
pub const LastReservedDeviceDispid = SegDispidList.LastReservedDeviceDispid;

pub const SegEventidList = enum(i32) {
    eventidStateChange = 0,
    eventidOnTuneChanged = 1,
    eventidEndOfMedia = 2,
    eventidDVDNotify = 3,
    eventidPlayForwards = 4,
    eventidPlayBackwards = 5,
    eventidShowMenu = 6,
    eventidResume = 7,
    eventidSelectOrActivateButton = 8,
    eventidStillOff = 9,
    eventidPauseOn = 10,
    eventidChangeCurrentAudioStream = 11,
    eventidChangeCurrentSubpictureStream = 12,
    eventidChangeCurrentAngle = 13,
    eventidPlayAtTimeInTitle = 14,
    eventidPlayAtTime = 15,
    eventidPlayChapterInTitle = 16,
    eventidPlayChapter = 17,
    eventidReplayChapter = 18,
    eventidPlayNextChapter = 19,
    eventidStop = 20,
    eventidReturnFromSubmenu = 21,
    eventidPlayTitle = 22,
    eventidPlayPrevChapter = 23,
    eventidChangeKaraokePresMode = 24,
    eventidChangeVideoPresMode = 25,
    eventidOverlayUnavailable = 26,
    eventidSinkCertificateFailure = 27,
    eventidSinkCertificateSuccess = 28,
    eventidSourceCertificateFailure = 29,
    eventidSourceCertificateSuccess = 30,
    eventidRatingsBlocked = 31,
    eventidRatingsUnlocked = 32,
    eventidRatingsChanged = 33,
    eventidWriteFailure = 34,
    eventidTimeHole = 35,
    eventidStaleDataRead = 36,
    eventidContentBecomingStale = 37,
    eventidStaleFileDeleted = 38,
    eventidEncryptionOn = 39,
    eventidEncryptionOff = 40,
    eventidRateChange = 41,
    eventidLicenseChange = 42,
    eventidCOPPBlocked = 43,
    eventidCOPPUnblocked = 44,
    dispidlicenseerrorcode = 45,
    eventidBroadcastEvent = 46,
    eventidBroadcastEventEx = 47,
    eventidContentPrimarilyAudio = 48,
    dispidAVDecAudioDualMonoEvent = 49,
    dispidAVAudioSampleRateEvent = 50,
    dispidAVAudioChannelConfigEvent = 51,
    dispidAVAudioChannelCountEvent = 52,
    dispidAVDecCommonMeanBitRateEvent = 53,
    dispidAVDDSurroundModeEvent = 54,
    dispidAVDecCommonInputFormatEvent = 55,
    dispidAVDecCommonOutputFormatEvent = 56,
    eventidWriteFailureClear = 57,
    LastReservedDeviceEvent = 16383,
};
pub const eventidStateChange = SegEventidList.eventidStateChange;
pub const eventidOnTuneChanged = SegEventidList.eventidOnTuneChanged;
pub const eventidEndOfMedia = SegEventidList.eventidEndOfMedia;
pub const eventidDVDNotify = SegEventidList.eventidDVDNotify;
pub const eventidPlayForwards = SegEventidList.eventidPlayForwards;
pub const eventidPlayBackwards = SegEventidList.eventidPlayBackwards;
pub const eventidShowMenu = SegEventidList.eventidShowMenu;
pub const eventidResume = SegEventidList.eventidResume;
pub const eventidSelectOrActivateButton = SegEventidList.eventidSelectOrActivateButton;
pub const eventidStillOff = SegEventidList.eventidStillOff;
pub const eventidPauseOn = SegEventidList.eventidPauseOn;
pub const eventidChangeCurrentAudioStream = SegEventidList.eventidChangeCurrentAudioStream;
pub const eventidChangeCurrentSubpictureStream = SegEventidList.eventidChangeCurrentSubpictureStream;
pub const eventidChangeCurrentAngle = SegEventidList.eventidChangeCurrentAngle;
pub const eventidPlayAtTimeInTitle = SegEventidList.eventidPlayAtTimeInTitle;
pub const eventidPlayAtTime = SegEventidList.eventidPlayAtTime;
pub const eventidPlayChapterInTitle = SegEventidList.eventidPlayChapterInTitle;
pub const eventidPlayChapter = SegEventidList.eventidPlayChapter;
pub const eventidReplayChapter = SegEventidList.eventidReplayChapter;
pub const eventidPlayNextChapter = SegEventidList.eventidPlayNextChapter;
pub const eventidStop = SegEventidList.eventidStop;
pub const eventidReturnFromSubmenu = SegEventidList.eventidReturnFromSubmenu;
pub const eventidPlayTitle = SegEventidList.eventidPlayTitle;
pub const eventidPlayPrevChapter = SegEventidList.eventidPlayPrevChapter;
pub const eventidChangeKaraokePresMode = SegEventidList.eventidChangeKaraokePresMode;
pub const eventidChangeVideoPresMode = SegEventidList.eventidChangeVideoPresMode;
pub const eventidOverlayUnavailable = SegEventidList.eventidOverlayUnavailable;
pub const eventidSinkCertificateFailure = SegEventidList.eventidSinkCertificateFailure;
pub const eventidSinkCertificateSuccess = SegEventidList.eventidSinkCertificateSuccess;
pub const eventidSourceCertificateFailure = SegEventidList.eventidSourceCertificateFailure;
pub const eventidSourceCertificateSuccess = SegEventidList.eventidSourceCertificateSuccess;
pub const eventidRatingsBlocked = SegEventidList.eventidRatingsBlocked;
pub const eventidRatingsUnlocked = SegEventidList.eventidRatingsUnlocked;
pub const eventidRatingsChanged = SegEventidList.eventidRatingsChanged;
pub const eventidWriteFailure = SegEventidList.eventidWriteFailure;
pub const eventidTimeHole = SegEventidList.eventidTimeHole;
pub const eventidStaleDataRead = SegEventidList.eventidStaleDataRead;
pub const eventidContentBecomingStale = SegEventidList.eventidContentBecomingStale;
pub const eventidStaleFileDeleted = SegEventidList.eventidStaleFileDeleted;
pub const eventidEncryptionOn = SegEventidList.eventidEncryptionOn;
pub const eventidEncryptionOff = SegEventidList.eventidEncryptionOff;
pub const eventidRateChange = SegEventidList.eventidRateChange;
pub const eventidLicenseChange = SegEventidList.eventidLicenseChange;
pub const eventidCOPPBlocked = SegEventidList.eventidCOPPBlocked;
pub const eventidCOPPUnblocked = SegEventidList.eventidCOPPUnblocked;
pub const dispidlicenseerrorcode = SegEventidList.dispidlicenseerrorcode;
pub const eventidBroadcastEvent = SegEventidList.eventidBroadcastEvent;
pub const eventidBroadcastEventEx = SegEventidList.eventidBroadcastEventEx;
pub const eventidContentPrimarilyAudio = SegEventidList.eventidContentPrimarilyAudio;
pub const dispidAVDecAudioDualMonoEvent = SegEventidList.dispidAVDecAudioDualMonoEvent;
pub const dispidAVAudioSampleRateEvent = SegEventidList.dispidAVAudioSampleRateEvent;
pub const dispidAVAudioChannelConfigEvent = SegEventidList.dispidAVAudioChannelConfigEvent;
pub const dispidAVAudioChannelCountEvent = SegEventidList.dispidAVAudioChannelCountEvent;
pub const dispidAVDecCommonMeanBitRateEvent = SegEventidList.dispidAVDecCommonMeanBitRateEvent;
pub const dispidAVDDSurroundModeEvent = SegEventidList.dispidAVDDSurroundModeEvent;
pub const dispidAVDecCommonInputFormatEvent = SegEventidList.dispidAVDecCommonInputFormatEvent;
pub const dispidAVDecCommonOutputFormatEvent = SegEventidList.dispidAVDecCommonOutputFormatEvent;
pub const eventidWriteFailureClear = SegEventidList.eventidWriteFailureClear;
pub const LastReservedDeviceEvent = SegEventidList.LastReservedDeviceEvent;

pub const PositionModeList = enum(i32) {
    FrameMode = 0,
    TenthsSecondsMode = 1,
};
pub const FrameMode = PositionModeList.FrameMode;
pub const TenthsSecondsMode = PositionModeList.TenthsSecondsMode;

pub const RecordingType = enum(i32) {
    CONTENT = 0,
    REFERENCE = 1,
};
pub const CONTENT = RecordingType.CONTENT;
pub const REFERENCE = RecordingType.REFERENCE;

pub const MSVidCCService = enum(i32) {
    None = 0,
    Caption1 = 1,
    Caption2 = 2,
    Text1 = 3,
    Text2 = 4,
    XDS = 5,
};
// NOTE: not creating aliases because this enum is 'Scoped'

pub const MSVidSinkStreams = enum(i32) {
    Video = 1,
    Audio = 2,
    Other = 4,
};
pub const MSVidSink_Video = MSVidSinkStreams.Video;
pub const MSVidSink_Audio = MSVidSinkStreams.Audio;
pub const MSVidSink_Other = MSVidSinkStreams.Other;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidRect_Value = Guid.initString("7f5000a6-a440-47ca-8acc-c0e75531a2c2");
pub const IID_IMSVidRect = &IID_IMSVidRect_Value;
pub const IMSVidRect = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Top: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                TopVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                TopVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Top: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                TopVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                TopVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Left: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                LeftVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                LeftVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Left: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                LeftVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                LeftVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Width: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                WidthVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                WidthVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Width: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                WidthVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                WidthVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Height: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                HeightVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                HeightVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Height: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                HeightVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                HeightVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_HWnd: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                HWndVal: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                HWndVal: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_HWnd: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                HWndVal: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                HWndVal: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Rect: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidRect,
                RectVal: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidRect,
                RectVal: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_get_Top(self: *const T, TopVal: ?*i32) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).get_Top(@as(*const IMSVidRect, @ptrCast(self)), TopVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_put_Top(self: *const T, TopVal: i32) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).put_Top(@as(*const IMSVidRect, @ptrCast(self)), TopVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_get_Left(self: *const T, LeftVal: ?*i32) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).get_Left(@as(*const IMSVidRect, @ptrCast(self)), LeftVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_put_Left(self: *const T, LeftVal: i32) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).put_Left(@as(*const IMSVidRect, @ptrCast(self)), LeftVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_get_Width(self: *const T, WidthVal: ?*i32) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).get_Width(@as(*const IMSVidRect, @ptrCast(self)), WidthVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_put_Width(self: *const T, WidthVal: i32) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).put_Width(@as(*const IMSVidRect, @ptrCast(self)), WidthVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_get_Height(self: *const T, HeightVal: ?*i32) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).get_Height(@as(*const IMSVidRect, @ptrCast(self)), HeightVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_put_Height(self: *const T, HeightVal: i32) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).put_Height(@as(*const IMSVidRect, @ptrCast(self)), HeightVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_get_HWnd(self: *const T, HWndVal: ?*?HWND) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).get_HWnd(@as(*const IMSVidRect, @ptrCast(self)), HWndVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_put_HWnd(self: *const T, HWndVal: ?HWND) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).put_HWnd(@as(*const IMSVidRect, @ptrCast(self)), HWndVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidRect_put_Rect(self: *const T, RectVal: ?*IMSVidRect) HRESULT {
                return @as(*const IMSVidRect.VTable, @ptrCast(self.vtable)).put_Rect(@as(*const IMSVidRect, @ptrCast(self)), RectVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidGraphSegmentContainer_Value = Guid.initString("3dd2903d-e0aa-11d2-b63a-00c04f79498e");
pub const IID_IMSVidGraphSegmentContainer = &IID_IMSVidGraphSegmentContainer_Value;
pub const IMSVidGraphSegmentContainer = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Graph: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
                ppGraph: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
                ppGraph: ?*?*IGraphBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Input: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
                ppInput: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
                ppInput: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Outputs: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
                ppOutputs: ?*?*IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
                ppOutputs: ?*?*IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoRenderer: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
                ppVR: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
                ppVR: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioRenderer: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
                ppAR: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
                ppAR: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Features: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
                ppFeatures: ?*?*IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
                ppFeatures: ?*?*IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Composites: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
                ppComposites: ?*?*IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
                ppComposites: ?*?*IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ParentContainer: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
                ppContainer: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
                ppContainer: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Decompose: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
                pSegment: ?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
                pSegment: ?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsWindowless: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFocus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentContainer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentContainer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_get_Graph(self: *const T, ppGraph: ?*?*IGraphBuilder) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).get_Graph(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)), ppGraph);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_get_Input(self: *const T, ppInput: ?*?*IMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).get_Input(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)), ppInput);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_get_Outputs(self: *const T, ppOutputs: ?*?*IEnumMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).get_Outputs(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)), ppOutputs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_get_VideoRenderer(self: *const T, ppVR: ?*?*IMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).get_VideoRenderer(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)), ppVR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_get_AudioRenderer(self: *const T, ppAR: ?*?*IMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).get_AudioRenderer(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)), ppAR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_get_Features(self: *const T, ppFeatures: ?*?*IEnumMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).get_Features(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)), ppFeatures);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_get_Composites(self: *const T, ppComposites: ?*?*IEnumMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).get_Composites(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)), ppComposites);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_get_ParentContainer(self: *const T, ppContainer: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).get_ParentContainer(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)), ppContainer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_Decompose(self: *const T, pSegment: ?*IMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).Decompose(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)), pSegment);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_IsWindowless(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).IsWindowless(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentContainer_GetFocus(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegmentContainer.VTable, @ptrCast(self.vtable)).GetFocus(@as(*const IMSVidGraphSegmentContainer, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const MSVidSegmentType = enum(i32) {
    SOURCE = 0,
    XFORM = 1,
    DEST = 2,
};
pub const MSVidSEG_SOURCE = MSVidSegmentType.SOURCE;
pub const MSVidSEG_XFORM = MSVidSegmentType.XFORM;
pub const MSVidSEG_DEST = MSVidSegmentType.DEST;

const IID_IMSVidGraphSegment_Value = Guid.initString("238dec54-adeb-4005-a349-f772b9afebc4");
pub const IID_IMSVidGraphSegment = &IID_IMSVidGraphSegment_Value;
pub const IMSVidGraphSegment = extern struct {
    pub const VTable = extern struct {
        base: IPersist.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Init: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
                pInit: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegment,
                pInit: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Init: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
                pInit: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegment,
                pInit: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumFilters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
                pNewEnum: ?*?*IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegment,
                pNewEnum: ?*?*IEnumFilters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Container: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
                ppCtl: ?*?*IMSVidGraphSegmentContainer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegment,
                ppCtl: ?*?*IMSVidGraphSegmentContainer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Container: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
                pCtl: ?*IMSVidGraphSegmentContainer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegment,
                pCtl: ?*IMSVidGraphSegmentContainer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Type: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
                pType: ?*MSVidSegmentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegment,
                pType: ?*MSVidSegmentType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Category: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
                pGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGraphSegment,
                pGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Build: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PostBuild: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PreRun: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PostRun: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PreStop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PostStop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OnEventNotify: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
                lEventCode: i32,
                lEventParm1: isize,
                lEventParm2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegment,
                lEventCode: i32,
                lEventParm1: isize,
                lEventParm2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Decompose: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IPersist.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_get_Init(self: *const T, pInit: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).get_Init(@as(*const IMSVidGraphSegment, @ptrCast(self)), pInit);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_put_Init(self: *const T, pInit: ?*IUnknown) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).put_Init(@as(*const IMSVidGraphSegment, @ptrCast(self)), pInit);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_EnumFilters(self: *const T, pNewEnum: ?*?*IEnumFilters) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).EnumFilters(@as(*const IMSVidGraphSegment, @ptrCast(self)), pNewEnum);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_get_Container(self: *const T, ppCtl: ?*?*IMSVidGraphSegmentContainer) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).get_Container(@as(*const IMSVidGraphSegment, @ptrCast(self)), ppCtl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_put_Container(self: *const T, pCtl: ?*IMSVidGraphSegmentContainer) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).put_Container(@as(*const IMSVidGraphSegment, @ptrCast(self)), pCtl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_get_Type(self: *const T, pType: ?*MSVidSegmentType) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).get_Type(@as(*const IMSVidGraphSegment, @ptrCast(self)), pType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_get_Category(self: *const T, pGuid: ?*Guid) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).get_Category(@as(*const IMSVidGraphSegment, @ptrCast(self)), pGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_Build(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).Build(@as(*const IMSVidGraphSegment, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_PostBuild(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).PostBuild(@as(*const IMSVidGraphSegment, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_PreRun(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).PreRun(@as(*const IMSVidGraphSegment, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_PostRun(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).PostRun(@as(*const IMSVidGraphSegment, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_PreStop(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).PreStop(@as(*const IMSVidGraphSegment, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_PostStop(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).PostStop(@as(*const IMSVidGraphSegment, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_OnEventNotify(self: *const T, lEventCode: i32, lEventParm1: isize, lEventParm2: isize) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).OnEventNotify(@as(*const IMSVidGraphSegment, @ptrCast(self)), lEventCode, lEventParm1, lEventParm2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegment_Decompose(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegment.VTable, @ptrCast(self.vtable)).Decompose(@as(*const IMSVidGraphSegment, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const MSVidCtlButtonstate = enum(i32) {
    LEFT_BUTTON = 1,
    RIGHT_BUTTON = 2,
    MIDDLE_BUTTON = 4,
    X_BUTTON1 = 8,
    X_BUTTON2 = 16,
    // SHIFT = 1, this enum value conflicts with LEFT_BUTTON
    // CTRL = 2, this enum value conflicts with RIGHT_BUTTON
    // ALT = 4, this enum value conflicts with MIDDLE_BUTTON
};
pub const MSVIDCTL_LEFT_BUTTON = MSVidCtlButtonstate.LEFT_BUTTON;
pub const MSVIDCTL_RIGHT_BUTTON = MSVidCtlButtonstate.RIGHT_BUTTON;
pub const MSVIDCTL_MIDDLE_BUTTON = MSVidCtlButtonstate.MIDDLE_BUTTON;
pub const MSVIDCTL_X_BUTTON1 = MSVidCtlButtonstate.X_BUTTON1;
pub const MSVIDCTL_X_BUTTON2 = MSVidCtlButtonstate.X_BUTTON2;
pub const MSVIDCTL_SHIFT = MSVidCtlButtonstate.LEFT_BUTTON;
pub const MSVIDCTL_CTRL = MSVidCtlButtonstate.RIGHT_BUTTON;
pub const MSVIDCTL_ALT = MSVidCtlButtonstate.MIDDLE_BUTTON;

const IID_IMSVidGraphSegmentUserInput_Value = Guid.initString("301c060e-20d9-4587-9b03-f82ed9a9943c");
pub const IID_IMSVidGraphSegmentUserInput = &IID_IMSVidGraphSegmentUserInput_Value;
pub const IMSVidGraphSegmentUserInput = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Click: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentUserInput,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentUserInput,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DblClick: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentUserInput,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentUserInput,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        KeyDown: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentUserInput,
                KeyCode: ?*i16,
                ShiftState: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentUserInput,
                KeyCode: ?*i16,
                ShiftState: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        KeyPress: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentUserInput,
                KeyAscii: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentUserInput,
                KeyAscii: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        KeyUp: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentUserInput,
                KeyCode: ?*i16,
                ShiftState: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentUserInput,
                KeyCode: ?*i16,
                ShiftState: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        MouseDown: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentUserInput,
                ButtonState: i16,
                ShiftState: i16,
                x: i32,
                y: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentUserInput,
                ButtonState: i16,
                ShiftState: i16,
                x: i32,
                y: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        MouseMove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentUserInput,
                ButtonState: i16,
                ShiftState: i16,
                x: i32,
                y: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentUserInput,
                ButtonState: i16,
                ShiftState: i16,
                x: i32,
                y: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        MouseUp: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGraphSegmentUserInput,
                ButtonState: i16,
                ShiftState: i16,
                x: i32,
                y: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGraphSegmentUserInput,
                ButtonState: i16,
                ShiftState: i16,
                x: i32,
                y: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentUserInput_Click(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegmentUserInput.VTable, @ptrCast(self.vtable)).Click(@as(*const IMSVidGraphSegmentUserInput, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentUserInput_DblClick(self: *const T) HRESULT {
                return @as(*const IMSVidGraphSegmentUserInput.VTable, @ptrCast(self.vtable)).DblClick(@as(*const IMSVidGraphSegmentUserInput, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentUserInput_KeyDown(self: *const T, KeyCode: ?*i16, ShiftState: i16) HRESULT {
                return @as(*const IMSVidGraphSegmentUserInput.VTable, @ptrCast(self.vtable)).KeyDown(@as(*const IMSVidGraphSegmentUserInput, @ptrCast(self)), KeyCode, ShiftState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentUserInput_KeyPress(self: *const T, KeyAscii: ?*i16) HRESULT {
                return @as(*const IMSVidGraphSegmentUserInput.VTable, @ptrCast(self.vtable)).KeyPress(@as(*const IMSVidGraphSegmentUserInput, @ptrCast(self)), KeyAscii);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentUserInput_KeyUp(self: *const T, KeyCode: ?*i16, ShiftState: i16) HRESULT {
                return @as(*const IMSVidGraphSegmentUserInput.VTable, @ptrCast(self.vtable)).KeyUp(@as(*const IMSVidGraphSegmentUserInput, @ptrCast(self)), KeyCode, ShiftState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentUserInput_MouseDown(self: *const T, ButtonState: i16, ShiftState: i16, x: i32, y: i32) HRESULT {
                return @as(*const IMSVidGraphSegmentUserInput.VTable, @ptrCast(self.vtable)).MouseDown(@as(*const IMSVidGraphSegmentUserInput, @ptrCast(self)), ButtonState, ShiftState, x, y);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentUserInput_MouseMove(self: *const T, ButtonState: i16, ShiftState: i16, x: i32, y: i32) HRESULT {
                return @as(*const IMSVidGraphSegmentUserInput.VTable, @ptrCast(self.vtable)).MouseMove(@as(*const IMSVidGraphSegmentUserInput, @ptrCast(self)), ButtonState, ShiftState, x, y);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGraphSegmentUserInput_MouseUp(self: *const T, ButtonState: i16, ShiftState: i16, x: i32, y: i32) HRESULT {
                return @as(*const IMSVidGraphSegmentUserInput.VTable, @ptrCast(self.vtable)).MouseUp(@as(*const IMSVidGraphSegmentUserInput, @ptrCast(self)), ButtonState, ShiftState, x, y);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidCompositionSegment_Value = Guid.initString("1c15d483-911d-11d2-b632-00c04f79498e");
pub const IID_IMSVidCompositionSegment = &IID_IMSVidCompositionSegment_Value;
pub const IMSVidCompositionSegment = extern struct {
    pub const VTable = extern struct {
        base: IMSVidGraphSegment.VTable,
        Compose: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCompositionSegment,
                upstream: ?*IMSVidGraphSegment,
                downstream: ?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCompositionSegment,
                upstream: ?*IMSVidGraphSegment,
                downstream: ?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Up: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCompositionSegment,
                upstream: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCompositionSegment,
                upstream: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Down: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCompositionSegment,
                downstream: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCompositionSegment,
                downstream: ?*?*IMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidGraphSegment.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCompositionSegment_Compose(self: *const T, upstream: ?*IMSVidGraphSegment, downstream: ?*IMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidCompositionSegment.VTable, @ptrCast(self.vtable)).Compose(@as(*const IMSVidCompositionSegment, @ptrCast(self)), upstream, downstream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCompositionSegment_get_Up(self: *const T, upstream: ?*?*IMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidCompositionSegment.VTable, @ptrCast(self.vtable)).get_Up(@as(*const IMSVidCompositionSegment, @ptrCast(self)), upstream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCompositionSegment_get_Down(self: *const T, downstream: ?*?*IMSVidGraphSegment) HRESULT {
                return @as(*const IMSVidCompositionSegment.VTable, @ptrCast(self.vtable)).get_Down(@as(*const IMSVidCompositionSegment, @ptrCast(self)), downstream);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IEnumMSVidGraphSegment_Value = Guid.initString("3dd2903e-e0aa-11d2-b63a-00c04f79498e");
pub const IID_IEnumMSVidGraphSegment = &IID_IEnumMSVidGraphSegment_Value;
pub const IEnumMSVidGraphSegment = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumMSVidGraphSegment,
                celt: u32,
                rgelt: ?*?*IMSVidGraphSegment,
                pceltFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumMSVidGraphSegment,
                celt: u32,
                rgelt: ?*?*IMSVidGraphSegment,
                pceltFetched: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumMSVidGraphSegment,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumMSVidGraphSegment,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumMSVidGraphSegment,
                ppenum: ?*?*IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumMSVidGraphSegment,
                ppenum: ?*?*IEnumMSVidGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumMSVidGraphSegment_Next(self: *const T, celt: u32, rgelt: ?*?*IMSVidGraphSegment, pceltFetched: ?*u32) HRESULT {
                return @as(*const IEnumMSVidGraphSegment.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumMSVidGraphSegment, @ptrCast(self)), celt, rgelt, pceltFetched);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumMSVidGraphSegment_Skip(self: *const T, celt: u32) HRESULT {
                return @as(*const IEnumMSVidGraphSegment.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumMSVidGraphSegment, @ptrCast(self)), celt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumMSVidGraphSegment_Reset(self: *const T) HRESULT {
                return @as(*const IEnumMSVidGraphSegment.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumMSVidGraphSegment, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumMSVidGraphSegment_Clone(self: *const T, ppenum: ?*?*IEnumMSVidGraphSegment) HRESULT {
                return @as(*const IEnumMSVidGraphSegment.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumMSVidGraphSegment, @ptrCast(self)), ppenum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidVRGraphSegment_Value = Guid.initString("dd47de3f-9874-4f7b-8b22-7cb2688461e7");
pub const IID_IMSVidVRGraphSegment = &IID_IMSVidVRGraphSegment_Value;
pub const IMSVidVRGraphSegment = extern struct {
    pub const VTable = extern struct {
        base: IMSVidGraphSegment.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__VMRendererMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                dwMode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                dwMode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Owner: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                Window: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                Window: ?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Owner: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                Window: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                Window: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_UseOverlay: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                UseOverlayVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                UseOverlayVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_UseOverlay: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                UseOverlayVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                UseOverlayVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Visible: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                Visible: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                Visible: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Visible: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                Visible: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                Visible: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ColorKey: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                ColorKey: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                ColorKey: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ColorKey: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                ColorKey: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                ColorKey: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Source: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                r: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                r: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Source: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                r: RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                r: RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Destination: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                r: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                r: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Destination: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                r: RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                r: RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NativeSize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                sizeval: ?*SIZE,
                aspectratio: ?*SIZE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                sizeval: ?*SIZE,
                aspectratio: ?*SIZE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BorderColor: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                color: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                color: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BorderColor: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                color: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                color: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaintainAspectRatio: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                fMaintain: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                fMaintain: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MaintainAspectRatio: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                fMaintain: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                fMaintain: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Refresh: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DisplayChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RePaint: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVRGraphSegment,
                hdc: ?HDC,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVRGraphSegment,
                hdc: ?HDC,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidGraphSegment.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_put__VMRendererMode(self: *const T, dwMode: i32) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).put__VMRendererMode(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), dwMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_put_Owner(self: *const T, Window: ?HWND) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).put_Owner(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), Window);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_get_Owner(self: *const T, Window: ?*?HWND) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).get_Owner(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), Window);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_get_UseOverlay(self: *const T, UseOverlayVal: ?*i16) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).get_UseOverlay(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), UseOverlayVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_put_UseOverlay(self: *const T, UseOverlayVal: i16) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).put_UseOverlay(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), UseOverlayVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_get_Visible(self: *const T, Visible: ?*i16) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).get_Visible(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), Visible);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_put_Visible(self: *const T, Visible: i16) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).put_Visible(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), Visible);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_get_ColorKey(self: *const T, ColorKey: ?*u32) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).get_ColorKey(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), ColorKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_put_ColorKey(self: *const T, ColorKey: u32) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).put_ColorKey(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), ColorKey);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_get_Source(self: *const T, r: ?*RECT) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).get_Source(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), r);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_put_Source(self: *const T, r: RECT) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).put_Source(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), r);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_get_Destination(self: *const T, r: ?*RECT) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).get_Destination(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), r);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_put_Destination(self: *const T, r: RECT) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).put_Destination(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), r);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_get_NativeSize(self: *const T, sizeval: ?*SIZE, aspectratio: ?*SIZE) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).get_NativeSize(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), sizeval, aspectratio);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_get_BorderColor(self: *const T, color: ?*u32) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).get_BorderColor(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), color);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_put_BorderColor(self: *const T, color: u32) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).put_BorderColor(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), color);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_get_MaintainAspectRatio(self: *const T, fMaintain: ?*i16) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).get_MaintainAspectRatio(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), fMaintain);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_put_MaintainAspectRatio(self: *const T, fMaintain: i16) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).put_MaintainAspectRatio(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), fMaintain);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_Refresh(self: *const T) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).Refresh(@as(*const IMSVidVRGraphSegment, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_DisplayChange(self: *const T) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).DisplayChange(@as(*const IMSVidVRGraphSegment, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVRGraphSegment_RePaint(self: *const T, hdc: ?HDC) HRESULT {
                return @as(*const IMSVidVRGraphSegment.VTable, @ptrCast(self.vtable)).RePaint(@as(*const IMSVidVRGraphSegment, @ptrCast(self)), hdc);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidDevice_Value = Guid.initString("1c15d47c-911d-11d2-b632-00c04f79498e");
pub const IID_IMSVidDevice = &IID_IMSVidDevice_Value;
pub const IMSVidDevice = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Name: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidDevice,
                Name: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidDevice,
                Name: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Status: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidDevice,
                Status: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidDevice,
                Status: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Power: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidDevice,
                Power: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidDevice,
                Power: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Power: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidDevice,
                Power: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidDevice,
                Power: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Category: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidDevice,
                Guid: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidDevice,
                Guid: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ClassID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidDevice,
                Clsid: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidDevice,
                Clsid: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__Category: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidDevice,
                Guid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidDevice,
                Guid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__ClassID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidDevice,
                Clsid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidDevice,
                Clsid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsEqualDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidDevice,
                Device: ?*IMSVidDevice,
                IsEqual: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidDevice,
                Device: ?*IMSVidDevice,
                IsEqual: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice_get_Name(self: *const T, Name: ?*?BSTR) HRESULT {
                return @as(*const IMSVidDevice.VTable, @ptrCast(self.vtable)).get_Name(@as(*const IMSVidDevice, @ptrCast(self)), Name);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice_get_Status(self: *const T, Status: ?*i32) HRESULT {
                return @as(*const IMSVidDevice.VTable, @ptrCast(self.vtable)).get_Status(@as(*const IMSVidDevice, @ptrCast(self)), Status);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice_put_Power(self: *const T, Power: i16) HRESULT {
                return @as(*const IMSVidDevice.VTable, @ptrCast(self.vtable)).put_Power(@as(*const IMSVidDevice, @ptrCast(self)), Power);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice_get_Power(self: *const T, Power: ?*i16) HRESULT {
                return @as(*const IMSVidDevice.VTable, @ptrCast(self.vtable)).get_Power(@as(*const IMSVidDevice, @ptrCast(self)), Power);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice_get_Category(self: *const T, _param_Guid: ?*?BSTR) HRESULT {
                return @as(*const IMSVidDevice.VTable, @ptrCast(self.vtable)).get_Category(@as(*const IMSVidDevice, @ptrCast(self)), _param_Guid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice_get_ClassID(self: *const T, Clsid: ?*?BSTR) HRESULT {
                return @as(*const IMSVidDevice.VTable, @ptrCast(self.vtable)).get_ClassID(@as(*const IMSVidDevice, @ptrCast(self)), Clsid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice_get__Category(self: *const T, _param_Guid: ?*Guid) HRESULT {
                return @as(*const IMSVidDevice.VTable, @ptrCast(self.vtable)).get__Category(@as(*const IMSVidDevice, @ptrCast(self)), _param_Guid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice_get__ClassID(self: *const T, Clsid: ?*Guid) HRESULT {
                return @as(*const IMSVidDevice.VTable, @ptrCast(self.vtable)).get__ClassID(@as(*const IMSVidDevice, @ptrCast(self)), Clsid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice_IsEqualDevice(self: *const T, Device: ?*IMSVidDevice, IsEqual: ?*i16) HRESULT {
                return @as(*const IMSVidDevice.VTable, @ptrCast(self.vtable)).IsEqualDevice(@as(*const IMSVidDevice, @ptrCast(self)), Device, IsEqual);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidDevice2_Value = Guid.initString("87bd2783-ebc0-478c-b4a0-e8e7f43ab78e");
pub const IID_IMSVidDevice2 = &IID_IMSVidDevice2_Value;
pub const IMSVidDevice2 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DevicePath: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidDevice2,
                DevPath: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidDevice2,
                DevPath: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDevice2_get_DevicePath(self: *const T, DevPath: ?*?BSTR) HRESULT {
                return @as(*const IMSVidDevice2.VTable, @ptrCast(self.vtable)).get_DevicePath(@as(*const IMSVidDevice2, @ptrCast(self)), DevPath);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidInputDevice_Value = Guid.initString("37b0353d-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidInputDevice = &IID_IMSVidInputDevice_Value;
pub const IMSVidInputDevice = extern struct {
    pub const VTable = extern struct {
        base: IMSVidDevice.VTable,
        IsViewable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidInputDevice,
                v: ?*VARIANT,
                pfViewable: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidInputDevice,
                v: ?*VARIANT,
                pfViewable: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        View: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidInputDevice,
                v: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidInputDevice,
                v: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidDevice.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidInputDevice_IsViewable(self: *const T, v: ?*VARIANT, pfViewable: ?*i16) HRESULT {
                return @as(*const IMSVidInputDevice.VTable, @ptrCast(self.vtable)).IsViewable(@as(*const IMSVidInputDevice, @ptrCast(self)), v, pfViewable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidInputDevice_View(self: *const T, v: ?*VARIANT) HRESULT {
                return @as(*const IMSVidInputDevice.VTable, @ptrCast(self.vtable)).View(@as(*const IMSVidInputDevice, @ptrCast(self)), v);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidDeviceEvent_Value = Guid.initString("1c15d480-911d-11d2-b632-00c04f79498e");
pub const IID_IMSVidDeviceEvent = &IID_IMSVidDeviceEvent_Value;
pub const IMSVidDeviceEvent = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        StateChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidDeviceEvent,
                lpd: ?*IMSVidDevice,
                oldState: i32,
                newState: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidDeviceEvent,
                lpd: ?*IMSVidDevice,
                oldState: i32,
                newState: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidDeviceEvent_StateChange(self: *const T, lpd: ?*IMSVidDevice, oldState: i32, newState: i32) HRESULT {
                return @as(*const IMSVidDeviceEvent.VTable, @ptrCast(self.vtable)).StateChange(@as(*const IMSVidDeviceEvent, @ptrCast(self)), lpd, oldState, newState);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidInputDeviceEvent_Value = Guid.initString("37b0353e-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidInputDeviceEvent = &IID_IMSVidInputDeviceEvent_Value;
pub const IMSVidInputDeviceEvent = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidVideoInputDevice_Value = Guid.initString("1c15d47f-911d-11d2-b632-00c04f79498e");
pub const IID_IMSVidVideoInputDevice = &IID_IMSVidVideoInputDevice_Value;
pub const IMSVidVideoInputDevice = extern struct {
    pub const VTable = extern struct {
        base: IMSVidInputDevice.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidInputDevice.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidPlayback_Value = Guid.initString("37b03538-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidPlayback = &IID_IMSVidPlayback_Value;
pub const IMSVidPlayback = extern struct {
    pub const VTable = extern struct {
        base: IMSVidInputDevice.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_EnableResetOnStop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                pVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                pVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_EnableResetOnStop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                newVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                newVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Run: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidPlayback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidPlayback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Pause: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidPlayback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidPlayback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidPlayback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidPlayback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CanStep: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                fBackwards: i16,
                pfCan: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                fBackwards: i16,
                pfCan: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Step: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidPlayback,
                lStep: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidPlayback,
                lStep: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Rate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                plRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                plRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Rate: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                plRate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                plRate: ?*f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CurrentPosition: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                lPosition: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                lPosition: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentPosition: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                lPosition: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                lPosition: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_PositionMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                lPositionMode: PositionModeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                lPositionMode: PositionModeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PositionMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                lPositionMode: ?*PositionModeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                lPositionMode: ?*PositionModeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Length: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidPlayback,
                lLength: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidPlayback,
                lLength: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidInputDevice.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_get_EnableResetOnStop(self: *const T, pVal: ?*i16) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).get_EnableResetOnStop(@as(*const IMSVidPlayback, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_put_EnableResetOnStop(self: *const T, newVal: i16) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).put_EnableResetOnStop(@as(*const IMSVidPlayback, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_Run(self: *const T) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).Run(@as(*const IMSVidPlayback, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_Pause(self: *const T) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).Pause(@as(*const IMSVidPlayback, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_Stop(self: *const T) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).Stop(@as(*const IMSVidPlayback, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_get_CanStep(self: *const T, fBackwards: i16, pfCan: ?*i16) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).get_CanStep(@as(*const IMSVidPlayback, @ptrCast(self)), fBackwards, pfCan);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_Step(self: *const T, lStep: i32) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).Step(@as(*const IMSVidPlayback, @ptrCast(self)), lStep);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_put_Rate(self: *const T, plRate: f64) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).put_Rate(@as(*const IMSVidPlayback, @ptrCast(self)), plRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_get_Rate(self: *const T, plRate: ?*f64) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).get_Rate(@as(*const IMSVidPlayback, @ptrCast(self)), plRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_put_CurrentPosition(self: *const T, lPosition: i32) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).put_CurrentPosition(@as(*const IMSVidPlayback, @ptrCast(self)), lPosition);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_get_CurrentPosition(self: *const T, lPosition: ?*i32) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).get_CurrentPosition(@as(*const IMSVidPlayback, @ptrCast(self)), lPosition);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_put_PositionMode(self: *const T, lPositionMode: PositionModeList) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).put_PositionMode(@as(*const IMSVidPlayback, @ptrCast(self)), lPositionMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_get_PositionMode(self: *const T, lPositionMode: ?*PositionModeList) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).get_PositionMode(@as(*const IMSVidPlayback, @ptrCast(self)), lPositionMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlayback_get_Length(self: *const T, lLength: ?*i32) HRESULT {
                return @as(*const IMSVidPlayback.VTable, @ptrCast(self.vtable)).get_Length(@as(*const IMSVidPlayback, @ptrCast(self)), lLength);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidPlaybackEvent_Value = Guid.initString("37b0353b-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidPlaybackEvent = &IID_IMSVidPlaybackEvent_Value;
pub const IMSVidPlaybackEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidInputDeviceEvent.VTable,
        EndOfMedia: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidPlaybackEvent,
                lpd: ?*IMSVidPlayback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidPlaybackEvent,
                lpd: ?*IMSVidPlayback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidInputDeviceEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidPlaybackEvent_EndOfMedia(self: *const T, lpd: ?*IMSVidPlayback) HRESULT {
                return @as(*const IMSVidPlaybackEvent.VTable, @ptrCast(self.vtable)).EndOfMedia(@as(*const IMSVidPlaybackEvent, @ptrCast(self)), lpd);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidTuner_Value = Guid.initString("1c15d47d-911d-11d2-b632-00c04f79498e");
pub const IID_IMSVidTuner = &IID_IMSVidTuner_Value;
pub const IMSVidTuner = extern struct {
    pub const VTable = extern struct {
        base: IMSVidVideoInputDevice.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Tune: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidTuner,
                ppTR: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidTuner,
                ppTR: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Tune: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidTuner,
                pTR: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidTuner,
                pTR: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TuningSpace: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidTuner,
                plTS: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidTuner,
                plTS: ?*?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TuningSpace: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidTuner,
                plTS: ?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidTuner,
                plTS: ?*ITuningSpace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidVideoInputDevice.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidTuner_get_Tune(self: *const T, ppTR: ?*?*ITuneRequest) HRESULT {
                return @as(*const IMSVidTuner.VTable, @ptrCast(self.vtable)).get_Tune(@as(*const IMSVidTuner, @ptrCast(self)), ppTR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidTuner_put_Tune(self: *const T, pTR: ?*ITuneRequest) HRESULT {
                return @as(*const IMSVidTuner.VTable, @ptrCast(self.vtable)).put_Tune(@as(*const IMSVidTuner, @ptrCast(self)), pTR);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidTuner_get_TuningSpace(self: *const T, plTS: ?*?*ITuningSpace) HRESULT {
                return @as(*const IMSVidTuner.VTable, @ptrCast(self.vtable)).get_TuningSpace(@as(*const IMSVidTuner, @ptrCast(self)), plTS);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidTuner_put_TuningSpace(self: *const T, plTS: ?*ITuningSpace) HRESULT {
                return @as(*const IMSVidTuner.VTable, @ptrCast(self.vtable)).put_TuningSpace(@as(*const IMSVidTuner, @ptrCast(self)), plTS);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidTunerEvent_Value = Guid.initString("1c15d485-911d-11d2-b632-00c04f79498e");
pub const IID_IMSVidTunerEvent = &IID_IMSVidTunerEvent_Value;
pub const IMSVidTunerEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidInputDeviceEvent.VTable,
        TuneChanged: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidTunerEvent,
                lpd: ?*IMSVidTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidTunerEvent,
                lpd: ?*IMSVidTuner,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidInputDeviceEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidTunerEvent_TuneChanged(self: *const T, lpd: ?*IMSVidTuner) HRESULT {
                return @as(*const IMSVidTunerEvent.VTable, @ptrCast(self.vtable)).TuneChanged(@as(*const IMSVidTunerEvent, @ptrCast(self)), lpd);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidAnalogTuner_Value = Guid.initString("1c15d47e-911d-11d2-b632-00c04f79498e");
pub const IID_IMSVidAnalogTuner = &IID_IMSVidAnalogTuner_Value;
pub const IMSVidAnalogTuner = extern struct {
    pub const VTable = extern struct {
        base: IMSVidTuner.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Channel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner,
                Channel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner,
                Channel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Channel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner,
                Channel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner,
                Channel: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner,
                lcc: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner,
                lcc: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioFrequency: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner,
                lcc: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner,
                lcc: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner,
                lcc: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner,
                lcc: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CountryCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner,
                lcc: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner,
                lcc: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SAP: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner,
                pfSapOn: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner,
                pfSapOn: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SAP: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner,
                fSapOn: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner,
                fSapOn: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChannelAvailable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAnalogTuner,
                nChannel: i32,
                SignalStrength: ?*i32,
                fSignalPresent: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAnalogTuner,
                nChannel: i32,
                SignalStrength: ?*i32,
                fSignalPresent: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidTuner.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner_get_Channel(self: *const T, Channel: ?*i32) HRESULT {
                return @as(*const IMSVidAnalogTuner.VTable, @ptrCast(self.vtable)).get_Channel(@as(*const IMSVidAnalogTuner, @ptrCast(self)), Channel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner_put_Channel(self: *const T, Channel: i32) HRESULT {
                return @as(*const IMSVidAnalogTuner.VTable, @ptrCast(self.vtable)).put_Channel(@as(*const IMSVidAnalogTuner, @ptrCast(self)), Channel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner_get_VideoFrequency(self: *const T, lcc: ?*i32) HRESULT {
                return @as(*const IMSVidAnalogTuner.VTable, @ptrCast(self.vtable)).get_VideoFrequency(@as(*const IMSVidAnalogTuner, @ptrCast(self)), lcc);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner_get_AudioFrequency(self: *const T, lcc: ?*i32) HRESULT {
                return @as(*const IMSVidAnalogTuner.VTable, @ptrCast(self.vtable)).get_AudioFrequency(@as(*const IMSVidAnalogTuner, @ptrCast(self)), lcc);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner_get_CountryCode(self: *const T, lcc: ?*i32) HRESULT {
                return @as(*const IMSVidAnalogTuner.VTable, @ptrCast(self.vtable)).get_CountryCode(@as(*const IMSVidAnalogTuner, @ptrCast(self)), lcc);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner_put_CountryCode(self: *const T, lcc: i32) HRESULT {
                return @as(*const IMSVidAnalogTuner.VTable, @ptrCast(self.vtable)).put_CountryCode(@as(*const IMSVidAnalogTuner, @ptrCast(self)), lcc);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner_get_SAP(self: *const T, pfSapOn: ?*i16) HRESULT {
                return @as(*const IMSVidAnalogTuner.VTable, @ptrCast(self.vtable)).get_SAP(@as(*const IMSVidAnalogTuner, @ptrCast(self)), pfSapOn);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner_put_SAP(self: *const T, fSapOn: i16) HRESULT {
                return @as(*const IMSVidAnalogTuner.VTable, @ptrCast(self.vtable)).put_SAP(@as(*const IMSVidAnalogTuner, @ptrCast(self)), fSapOn);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner_ChannelAvailable(self: *const T, nChannel: i32, SignalStrength: ?*i32, fSignalPresent: ?*i16) HRESULT {
                return @as(*const IMSVidAnalogTuner.VTable, @ptrCast(self.vtable)).ChannelAvailable(@as(*const IMSVidAnalogTuner, @ptrCast(self)), nChannel, SignalStrength, fSignalPresent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidAnalogTuner2_Value = Guid.initString("37647bf7-3dde-4cc8-a4dc-0d534d3d0037");
pub const IID_IMSVidAnalogTuner2 = &IID_IMSVidAnalogTuner2_Value;
pub const IMSVidAnalogTuner2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidAnalogTuner.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TVFormats: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner2,
                Formats: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner2,
                Formats: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TunerModes: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner2,
                Modes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner2,
                Modes: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NumAuxInputs: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAnalogTuner2,
                Inputs: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAnalogTuner2,
                Inputs: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidAnalogTuner.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner2_get_TVFormats(self: *const T, Formats: ?*i32) HRESULT {
                return @as(*const IMSVidAnalogTuner2.VTable, @ptrCast(self.vtable)).get_TVFormats(@as(*const IMSVidAnalogTuner2, @ptrCast(self)), Formats);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner2_get_TunerModes(self: *const T, Modes: ?*i32) HRESULT {
                return @as(*const IMSVidAnalogTuner2.VTable, @ptrCast(self.vtable)).get_TunerModes(@as(*const IMSVidAnalogTuner2, @ptrCast(self)), Modes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAnalogTuner2_get_NumAuxInputs(self: *const T, Inputs: ?*i32) HRESULT {
                return @as(*const IMSVidAnalogTuner2.VTable, @ptrCast(self.vtable)).get_NumAuxInputs(@as(*const IMSVidAnalogTuner2, @ptrCast(self)), Inputs);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidAnalogTunerEvent_Value = Guid.initString("1c15d486-911d-11d2-b632-00c04f79498e");
pub const IID_IMSVidAnalogTunerEvent = &IID_IMSVidAnalogTunerEvent_Value;
pub const IMSVidAnalogTunerEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidTunerEvent.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidTunerEvent.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidFilePlayback_Value = Guid.initString("37b03539-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidFilePlayback = &IID_IMSVidFilePlayback_Value;
pub const IMSVidFilePlayback = extern struct {
    pub const VTable = extern struct {
        base: IMSVidPlayback.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FileName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidFilePlayback,
                FileName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidFilePlayback,
                FileName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FileName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidFilePlayback,
                FileName: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidFilePlayback,
                FileName: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidPlayback.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidFilePlayback_get_FileName(self: *const T, FileName: ?*?BSTR) HRESULT {
                return @as(*const IMSVidFilePlayback.VTable, @ptrCast(self.vtable)).get_FileName(@as(*const IMSVidFilePlayback, @ptrCast(self)), FileName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidFilePlayback_put_FileName(self: *const T, FileName: ?BSTR) HRESULT {
                return @as(*const IMSVidFilePlayback.VTable, @ptrCast(self.vtable)).put_FileName(@as(*const IMSVidFilePlayback, @ptrCast(self)), FileName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidFilePlayback2_Value = Guid.initString("2f7e44af-6e52-4660-bc08-d8d542587d72");
pub const IID_IMSVidFilePlayback2 = &IID_IMSVidFilePlayback2_Value;
pub const IMSVidFilePlayback2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidFilePlayback.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__SourceFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidFilePlayback2,
                FileName: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidFilePlayback2,
                FileName: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put___SourceFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidFilePlayback2,
                FileName: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidFilePlayback2,
                FileName: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidFilePlayback.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidFilePlayback2_put__SourceFilter(self: *const T, FileName: ?BSTR) HRESULT {
                return @as(*const IMSVidFilePlayback2.VTable, @ptrCast(self.vtable)).put__SourceFilter(@as(*const IMSVidFilePlayback2, @ptrCast(self)), FileName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidFilePlayback2_put___SourceFilter(self: *const T, FileName: Guid) HRESULT {
                return @as(*const IMSVidFilePlayback2.VTable, @ptrCast(self.vtable)).put___SourceFilter(@as(*const IMSVidFilePlayback2, @ptrCast(self)), FileName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidFilePlaybackEvent_Value = Guid.initString("37b0353a-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidFilePlaybackEvent = &IID_IMSVidFilePlaybackEvent_Value;
pub const IMSVidFilePlaybackEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidPlaybackEvent.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidPlaybackEvent.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DVDMenuIDConstants = enum(i32) {
    Title = 2,
    Root = 3,
    Subpicture = 4,
    Audio = 5,
    Angle = 6,
    Chapter = 7,
};
pub const dvdMenu_Title = DVDMenuIDConstants.Title;
pub const dvdMenu_Root = DVDMenuIDConstants.Root;
pub const dvdMenu_Subpicture = DVDMenuIDConstants.Subpicture;
pub const dvdMenu_Audio = DVDMenuIDConstants.Audio;
pub const dvdMenu_Angle = DVDMenuIDConstants.Angle;
pub const dvdMenu_Chapter = DVDMenuIDConstants.Chapter;

pub const DVDFilterState = enum(i32) {
    Undefined = -2,
    Unitialized = -1,
    Stopped = 0,
    Paused = 1,
    Running = 2,
};
pub const dvdState_Undefined = DVDFilterState.Undefined;
pub const dvdState_Unitialized = DVDFilterState.Unitialized;
pub const dvdState_Stopped = DVDFilterState.Stopped;
pub const dvdState_Paused = DVDFilterState.Paused;
pub const dvdState_Running = DVDFilterState.Running;

pub const DVDTextStringType = enum(i32) {
    Struct_Volume = 1,
    Struct_Title = 2,
    Struct_ParentalID = 3,
    Struct_PartOfTitle = 4,
    Struct_Cell = 5,
    Stream_Audio = 16,
    Stream_Subpicture = 17,
    Stream_Angle = 18,
    Channel_Audio = 32,
    General_Name = 48,
    General_Comments = 49,
    Title_Series = 56,
    Title_Movie = 57,
    Title_Video = 58,
    Title_Album = 59,
    Title_Song = 60,
    Title_Other = 63,
    Title_Sub_Series = 64,
    Title_Sub_Movie = 65,
    Title_Sub_Video = 66,
    Title_Sub_Album = 67,
    Title_Sub_Song = 68,
    Title_Sub_Other = 71,
    Title_Orig_Series = 72,
    Title_Orig_Movie = 73,
    Title_Orig_Video = 74,
    Title_Orig_Album = 75,
    Title_Orig_Song = 76,
    Title_Orig_Other = 79,
    Other_Scene = 80,
    Other_Cut = 81,
    Other_Take = 82,
};
pub const dvdStruct_Volume = DVDTextStringType.Struct_Volume;
pub const dvdStruct_Title = DVDTextStringType.Struct_Title;
pub const dvdStruct_ParentalID = DVDTextStringType.Struct_ParentalID;
pub const dvdStruct_PartOfTitle = DVDTextStringType.Struct_PartOfTitle;
pub const dvdStruct_Cell = DVDTextStringType.Struct_Cell;
pub const dvdStream_Audio = DVDTextStringType.Stream_Audio;
pub const dvdStream_Subpicture = DVDTextStringType.Stream_Subpicture;
pub const dvdStream_Angle = DVDTextStringType.Stream_Angle;
pub const dvdChannel_Audio = DVDTextStringType.Channel_Audio;
pub const dvdGeneral_Name = DVDTextStringType.General_Name;
pub const dvdGeneral_Comments = DVDTextStringType.General_Comments;
pub const dvdTitle_Series = DVDTextStringType.Title_Series;
pub const dvdTitle_Movie = DVDTextStringType.Title_Movie;
pub const dvdTitle_Video = DVDTextStringType.Title_Video;
pub const dvdTitle_Album = DVDTextStringType.Title_Album;
pub const dvdTitle_Song = DVDTextStringType.Title_Song;
pub const dvdTitle_Other = DVDTextStringType.Title_Other;
pub const dvdTitle_Sub_Series = DVDTextStringType.Title_Sub_Series;
pub const dvdTitle_Sub_Movie = DVDTextStringType.Title_Sub_Movie;
pub const dvdTitle_Sub_Video = DVDTextStringType.Title_Sub_Video;
pub const dvdTitle_Sub_Album = DVDTextStringType.Title_Sub_Album;
pub const dvdTitle_Sub_Song = DVDTextStringType.Title_Sub_Song;
pub const dvdTitle_Sub_Other = DVDTextStringType.Title_Sub_Other;
pub const dvdTitle_Orig_Series = DVDTextStringType.Title_Orig_Series;
pub const dvdTitle_Orig_Movie = DVDTextStringType.Title_Orig_Movie;
pub const dvdTitle_Orig_Video = DVDTextStringType.Title_Orig_Video;
pub const dvdTitle_Orig_Album = DVDTextStringType.Title_Orig_Album;
pub const dvdTitle_Orig_Song = DVDTextStringType.Title_Orig_Song;
pub const dvdTitle_Orig_Other = DVDTextStringType.Title_Orig_Other;
pub const dvdOther_Scene = DVDTextStringType.Other_Scene;
pub const dvdOther_Cut = DVDTextStringType.Other_Cut;
pub const dvdOther_Take = DVDTextStringType.Other_Take;

pub const DVDSPExt = enum(i32) {
    NotSpecified = 0,
    Caption_Normal = 1,
    Caption_Big = 2,
    Caption_Children = 3,
    CC_Normal = 5,
    CC_Big = 6,
    CC_Children = 7,
    Forced = 9,
    DirectorComments_Normal = 13,
    DirectorComments_Big = 14,
    DirectorComments_Children = 15,
};
pub const dvdSPExt_NotSpecified = DVDSPExt.NotSpecified;
pub const dvdSPExt_Caption_Normal = DVDSPExt.Caption_Normal;
pub const dvdSPExt_Caption_Big = DVDSPExt.Caption_Big;
pub const dvdSPExt_Caption_Children = DVDSPExt.Caption_Children;
pub const dvdSPExt_CC_Normal = DVDSPExt.CC_Normal;
pub const dvdSPExt_CC_Big = DVDSPExt.CC_Big;
pub const dvdSPExt_CC_Children = DVDSPExt.CC_Children;
pub const dvdSPExt_Forced = DVDSPExt.Forced;
pub const dvdSPExt_DirectorComments_Normal = DVDSPExt.DirectorComments_Normal;
pub const dvdSPExt_DirectorComments_Big = DVDSPExt.DirectorComments_Big;
pub const dvdSPExt_DirectorComments_Children = DVDSPExt.DirectorComments_Children;

const IID_IMSVidWebDVD_Value = Guid.initString("cf45f88b-ac56-4ee2-a73a-ed04e2885d3c");
pub const IID_IMSVidWebDVD = &IID_IMSVidWebDVD_Value;
pub const IMSVidWebDVD = extern struct {
    pub const VTable = extern struct {
        base: IMSVidPlayback.VTable,
        OnDVDEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lEvent: i32,
                lParam1: isize,
                lParam2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lEvent: i32,
                lParam1: isize,
                lParam2: isize,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayTitle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayChapterInTitle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                lChapter: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                lChapter: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lChapter: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lChapter: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayChaptersAutoStop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                lstrChapter: i32,
                lChapterCount: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                lstrChapter: i32,
                lChapterCount: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayAtTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                strTime: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                strTime: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayAtTimeInTitle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                strTime: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                strTime: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayPeriodInTitleAutoStop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                strStartTime: ?BSTR,
                strEndTime: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                strStartTime: ?BSTR,
                strEndTime: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReplayChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayPrevChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayNextChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StillOff: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioLanguage: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lStream: i32,
                fFormat: i16,
                strAudioLang: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lStream: i32,
                fFormat: i16,
                strAudioLang: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ShowMenu: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                MenuID: DVDMenuIDConstants,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                MenuID: DVDMenuIDConstants,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Resume: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReturnFromSubmenu: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ButtonsAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentButton: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectAndActivateButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lButton: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lButton: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ActivateButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectRightButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectLeftButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectLowerButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectUpperButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ActivateAtPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                xPos: i32,
                yPos: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                xPos: i32,
                yPos: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectAtPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                xPos: i32,
                yPos: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                xPos: i32,
                yPos: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ButtonAtPosition: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                xPos: i32,
                yPos: i32,
                plButton: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                xPos: i32,
                yPos: i32,
                plButton: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_NumberOfChapters: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TotalTitleTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TitlesAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VolumesAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentVolume: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentDiscSide: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentDomain: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentChapter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentTitle: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DVDTimeCode2bstr: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                timeCode: i32,
                pTimeStr: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                timeCode: i32,
                pTimeStr: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DVDDirectory: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DVDDirectory: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                newVal: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                newVal: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsSubpictureStreamEnabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lstream: i32,
                fEnabled: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lstream: i32,
                fEnabled: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsAudioStreamEnabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lstream: i32,
                fEnabled: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lstream: i32,
                fEnabled: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentSubpictureStream: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CurrentSubpictureStream: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SubpictureLanguage: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lStream: i32,
                strLanguage: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lStream: i32,
                strLanguage: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentAudioStream: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CurrentAudioStream: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioStreamsAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AnglesAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CurrentAngle: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CurrentAngle: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SubpictureStreamsAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SubpictureOn: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SubpictureOn: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                newVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                newVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DVDUniqueID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AcceptParentalLevelChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                fAccept: i16,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                fAccept: i16,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NotifyParentalLevelChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                newVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                newVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectParentalCountry: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lCountry: i32,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lCountry: i32,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectParentalLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lParentalLevel: i32,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lParentalLevel: i32,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TitleParentalLevels: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                plParentalLevels: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lTitle: i32,
                plParentalLevels: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PlayerParentalCountry: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                plCountryCode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                plCountryCode: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PlayerParentalLevel: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                plParentalLevel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                plParentalLevel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Eject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UOPValid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lUOP: i32,
                pfValid: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lUOP: i32,
                pfValid: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SPRM: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lIndex: i32,
                psSPRM: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lIndex: i32,
                psSPRM: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_GPRM: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lIndex: i32,
                psSPRM: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lIndex: i32,
                psSPRM: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_GPRM: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lIndex: i32,
                sValue: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lIndex: i32,
                sValue: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DVDTextStringType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lLangIndex: i32,
                lStringIndex: i32,
                pType: ?*DVDTextStringType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lLangIndex: i32,
                lStringIndex: i32,
                pType: ?*DVDTextStringType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DVDTextString: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lLangIndex: i32,
                lStringIndex: i32,
                pstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lLangIndex: i32,
                lStringIndex: i32,
                pstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DVDTextNumberOfStrings: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lLangIndex: i32,
                plNumOfStrings: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lLangIndex: i32,
                plNumOfStrings: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DVDTextNumberOfLanguages: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                plNumOfLangs: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                plNumOfLangs: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DVDTextLanguageLCID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lLangIndex: i32,
                lcid: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lLangIndex: i32,
                lcid: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegionChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DVDAdm: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*?*IDispatch,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DeleteBookmark: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RestoreBookmark: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SaveBookmark: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectDefaultAudioLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lang: i32,
                ext: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lang: i32,
                ext: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectDefaultSubpictureLanguage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lang: i32,
                ext: DVDSPExt,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
                lang: i32,
                ext: DVDSPExt,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_PreferredSubpictureStream: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultMenuLanguage: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lang: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lang: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DefaultMenuLanguage: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lang: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lang: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultSubpictureLanguage: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lang: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lang: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultAudioLanguage: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lang: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lang: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultSubpictureLanguageExt: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                ext: ?*DVDSPExt,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                ext: ?*DVDSPExt,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultAudioLanguageExt: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                ext: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                ext: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LanguageFromLCID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lcid: i32,
                lang: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lcid: i32,
                lang: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_KaraokeAudioPresentationMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_KaraokeAudioPresentationMode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_KaraokeChannelContent: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lStream: i32,
                lChan: i32,
                lContent: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lStream: i32,
                lChan: i32,
                lContent: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_KaraokeChannelAssignment: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lStream: i32,
                lChannelAssignment: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lStream: i32,
                lChannelAssignment: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RestorePreferredSettings: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVD,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ButtonRect: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                lButton: i32,
                pRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                lButton: i32,
                pRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DVDScreenInMouseCoordinates: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                ppRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                ppRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DVDScreenInMouseCoordinates: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD,
                pRect: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD,
                pRect: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidPlayback.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_OnDVDEvent(self: *const T, lEvent: i32, lParam1: isize, lParam2: isize) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).OnDVDEvent(@as(*const IMSVidWebDVD, @ptrCast(self)), lEvent, lParam1, lParam2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_PlayTitle(self: *const T, lTitle: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).PlayTitle(@as(*const IMSVidWebDVD, @ptrCast(self)), lTitle);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_PlayChapterInTitle(self: *const T, lTitle: i32, lChapter: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).PlayChapterInTitle(@as(*const IMSVidWebDVD, @ptrCast(self)), lTitle, lChapter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_PlayChapter(self: *const T, lChapter: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).PlayChapter(@as(*const IMSVidWebDVD, @ptrCast(self)), lChapter);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_PlayChaptersAutoStop(self: *const T, lTitle: i32, lstrChapter: i32, lChapterCount: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).PlayChaptersAutoStop(@as(*const IMSVidWebDVD, @ptrCast(self)), lTitle, lstrChapter, lChapterCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_PlayAtTime(self: *const T, strTime: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).PlayAtTime(@as(*const IMSVidWebDVD, @ptrCast(self)), strTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_PlayAtTimeInTitle(self: *const T, lTitle: i32, strTime: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).PlayAtTimeInTitle(@as(*const IMSVidWebDVD, @ptrCast(self)), lTitle, strTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_PlayPeriodInTitleAutoStop(self: *const T, lTitle: i32, strStartTime: ?BSTR, strEndTime: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).PlayPeriodInTitleAutoStop(@as(*const IMSVidWebDVD, @ptrCast(self)), lTitle, strStartTime, strEndTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_ReplayChapter(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).ReplayChapter(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_PlayPrevChapter(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).PlayPrevChapter(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_PlayNextChapter(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).PlayNextChapter(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_StillOff(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).StillOff(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_AudioLanguage(self: *const T, lStream: i32, fFormat: i16, strAudioLang: ?*?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_AudioLanguage(@as(*const IMSVidWebDVD, @ptrCast(self)), lStream, fFormat, strAudioLang);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_ShowMenu(self: *const T, MenuID: DVDMenuIDConstants) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).ShowMenu(@as(*const IMSVidWebDVD, @ptrCast(self)), MenuID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_Resume(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).Resume(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_ReturnFromSubmenu(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).ReturnFromSubmenu(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_ButtonsAvailable(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_ButtonsAvailable(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentButton(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentButton(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectAndActivateButton(self: *const T, lButton: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectAndActivateButton(@as(*const IMSVidWebDVD, @ptrCast(self)), lButton);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_ActivateButton(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).ActivateButton(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectRightButton(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectRightButton(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectLeftButton(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectLeftButton(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectLowerButton(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectLowerButton(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectUpperButton(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectUpperButton(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_ActivateAtPosition(self: *const T, xPos: i32, yPos: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).ActivateAtPosition(@as(*const IMSVidWebDVD, @ptrCast(self)), xPos, yPos);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectAtPosition(self: *const T, xPos: i32, yPos: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectAtPosition(@as(*const IMSVidWebDVD, @ptrCast(self)), xPos, yPos);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_ButtonAtPosition(self: *const T, xPos: i32, yPos: i32, plButton: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_ButtonAtPosition(@as(*const IMSVidWebDVD, @ptrCast(self)), xPos, yPos, plButton);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_NumberOfChapters(self: *const T, lTitle: i32, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_NumberOfChapters(@as(*const IMSVidWebDVD, @ptrCast(self)), lTitle, pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_TotalTitleTime(self: *const T, pVal: ?*?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_TotalTitleTime(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_TitlesAvailable(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_TitlesAvailable(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_VolumesAvailable(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_VolumesAvailable(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentVolume(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentVolume(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentDiscSide(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentDiscSide(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentDomain(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentDomain(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentChapter(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentChapter(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentTitle(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentTitle(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentTime(self: *const T, pVal: ?*?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentTime(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_DVDTimeCode2bstr(self: *const T, timeCode: i32, pTimeStr: ?*?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).DVDTimeCode2bstr(@as(*const IMSVidWebDVD, @ptrCast(self)), timeCode, pTimeStr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DVDDirectory(self: *const T, pVal: ?*?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DVDDirectory(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_put_DVDDirectory(self: *const T, newVal: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).put_DVDDirectory(@as(*const IMSVidWebDVD, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_IsSubpictureStreamEnabled(self: *const T, lstream: i32, fEnabled: ?*i16) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).IsSubpictureStreamEnabled(@as(*const IMSVidWebDVD, @ptrCast(self)), lstream, fEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_IsAudioStreamEnabled(self: *const T, lstream: i32, fEnabled: ?*i16) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).IsAudioStreamEnabled(@as(*const IMSVidWebDVD, @ptrCast(self)), lstream, fEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentSubpictureStream(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentSubpictureStream(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_put_CurrentSubpictureStream(self: *const T, newVal: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).put_CurrentSubpictureStream(@as(*const IMSVidWebDVD, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_SubpictureLanguage(self: *const T, lStream: i32, strLanguage: ?*?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_SubpictureLanguage(@as(*const IMSVidWebDVD, @ptrCast(self)), lStream, strLanguage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentAudioStream(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentAudioStream(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_put_CurrentAudioStream(self: *const T, newVal: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).put_CurrentAudioStream(@as(*const IMSVidWebDVD, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_AudioStreamsAvailable(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_AudioStreamsAvailable(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_AnglesAvailable(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_AnglesAvailable(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_CurrentAngle(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_CurrentAngle(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_put_CurrentAngle(self: *const T, newVal: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).put_CurrentAngle(@as(*const IMSVidWebDVD, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_SubpictureStreamsAvailable(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_SubpictureStreamsAvailable(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_SubpictureOn(self: *const T, pVal: ?*i16) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_SubpictureOn(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_put_SubpictureOn(self: *const T, newVal: i16) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).put_SubpictureOn(@as(*const IMSVidWebDVD, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DVDUniqueID(self: *const T, pVal: ?*?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DVDUniqueID(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_AcceptParentalLevelChange(self: *const T, fAccept: i16, strUserName: ?BSTR, strPassword: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).AcceptParentalLevelChange(@as(*const IMSVidWebDVD, @ptrCast(self)), fAccept, strUserName, strPassword);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_NotifyParentalLevelChange(self: *const T, newVal: i16) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).NotifyParentalLevelChange(@as(*const IMSVidWebDVD, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectParentalCountry(self: *const T, lCountry: i32, strUserName: ?BSTR, strPassword: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectParentalCountry(@as(*const IMSVidWebDVD, @ptrCast(self)), lCountry, strUserName, strPassword);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectParentalLevel(self: *const T, lParentalLevel: i32, strUserName: ?BSTR, strPassword: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectParentalLevel(@as(*const IMSVidWebDVD, @ptrCast(self)), lParentalLevel, strUserName, strPassword);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_TitleParentalLevels(self: *const T, lTitle: i32, plParentalLevels: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_TitleParentalLevels(@as(*const IMSVidWebDVD, @ptrCast(self)), lTitle, plParentalLevels);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_PlayerParentalCountry(self: *const T, plCountryCode: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_PlayerParentalCountry(@as(*const IMSVidWebDVD, @ptrCast(self)), plCountryCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_PlayerParentalLevel(self: *const T, plParentalLevel: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_PlayerParentalLevel(@as(*const IMSVidWebDVD, @ptrCast(self)), plParentalLevel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_Eject(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).Eject(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_UOPValid(self: *const T, lUOP: i32, pfValid: ?*i16) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).UOPValid(@as(*const IMSVidWebDVD, @ptrCast(self)), lUOP, pfValid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_SPRM(self: *const T, lIndex: i32, psSPRM: ?*i16) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_SPRM(@as(*const IMSVidWebDVD, @ptrCast(self)), lIndex, psSPRM);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_GPRM(self: *const T, lIndex: i32, psSPRM: ?*i16) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_GPRM(@as(*const IMSVidWebDVD, @ptrCast(self)), lIndex, psSPRM);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_put_GPRM(self: *const T, lIndex: i32, sValue: i16) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).put_GPRM(@as(*const IMSVidWebDVD, @ptrCast(self)), lIndex, sValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DVDTextStringType(self: *const T, lLangIndex: i32, lStringIndex: i32, pType: ?*DVDTextStringType) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DVDTextStringType(@as(*const IMSVidWebDVD, @ptrCast(self)), lLangIndex, lStringIndex, pType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DVDTextString(self: *const T, lLangIndex: i32, lStringIndex: i32, pstrText: ?*?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DVDTextString(@as(*const IMSVidWebDVD, @ptrCast(self)), lLangIndex, lStringIndex, pstrText);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DVDTextNumberOfStrings(self: *const T, lLangIndex: i32, plNumOfStrings: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DVDTextNumberOfStrings(@as(*const IMSVidWebDVD, @ptrCast(self)), lLangIndex, plNumOfStrings);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DVDTextNumberOfLanguages(self: *const T, plNumOfLangs: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DVDTextNumberOfLanguages(@as(*const IMSVidWebDVD, @ptrCast(self)), plNumOfLangs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DVDTextLanguageLCID(self: *const T, lLangIndex: i32, lcid: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DVDTextLanguageLCID(@as(*const IMSVidWebDVD, @ptrCast(self)), lLangIndex, lcid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_RegionChange(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).RegionChange(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DVDAdm(self: *const T, pVal: ?*?*IDispatch) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DVDAdm(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_DeleteBookmark(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).DeleteBookmark(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_RestoreBookmark(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).RestoreBookmark(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SaveBookmark(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SaveBookmark(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectDefaultAudioLanguage(self: *const T, lang: i32, ext: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectDefaultAudioLanguage(@as(*const IMSVidWebDVD, @ptrCast(self)), lang, ext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_SelectDefaultSubpictureLanguage(self: *const T, lang: i32, ext: DVDSPExt) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).SelectDefaultSubpictureLanguage(@as(*const IMSVidWebDVD, @ptrCast(self)), lang, ext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_PreferredSubpictureStream(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_PreferredSubpictureStream(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DefaultMenuLanguage(self: *const T, lang: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DefaultMenuLanguage(@as(*const IMSVidWebDVD, @ptrCast(self)), lang);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_put_DefaultMenuLanguage(self: *const T, lang: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).put_DefaultMenuLanguage(@as(*const IMSVidWebDVD, @ptrCast(self)), lang);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DefaultSubpictureLanguage(self: *const T, lang: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DefaultSubpictureLanguage(@as(*const IMSVidWebDVD, @ptrCast(self)), lang);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DefaultAudioLanguage(self: *const T, lang: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DefaultAudioLanguage(@as(*const IMSVidWebDVD, @ptrCast(self)), lang);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DefaultSubpictureLanguageExt(self: *const T, ext: ?*DVDSPExt) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DefaultSubpictureLanguageExt(@as(*const IMSVidWebDVD, @ptrCast(self)), ext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DefaultAudioLanguageExt(self: *const T, ext: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DefaultAudioLanguageExt(@as(*const IMSVidWebDVD, @ptrCast(self)), ext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_LanguageFromLCID(self: *const T, lcid: i32, lang: ?*?BSTR) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_LanguageFromLCID(@as(*const IMSVidWebDVD, @ptrCast(self)), lcid, lang);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_KaraokeAudioPresentationMode(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_KaraokeAudioPresentationMode(@as(*const IMSVidWebDVD, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_put_KaraokeAudioPresentationMode(self: *const T, newVal: i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).put_KaraokeAudioPresentationMode(@as(*const IMSVidWebDVD, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_KaraokeChannelContent(self: *const T, lStream: i32, lChan: i32, lContent: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_KaraokeChannelContent(@as(*const IMSVidWebDVD, @ptrCast(self)), lStream, lChan, lContent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_KaraokeChannelAssignment(self: *const T, lStream: i32, lChannelAssignment: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_KaraokeChannelAssignment(@as(*const IMSVidWebDVD, @ptrCast(self)), lStream, lChannelAssignment);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_RestorePreferredSettings(self: *const T) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).RestorePreferredSettings(@as(*const IMSVidWebDVD, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_ButtonRect(self: *const T, lButton: i32, pRect: ?*?*IMSVidRect) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_ButtonRect(@as(*const IMSVidWebDVD, @ptrCast(self)), lButton, pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_get_DVDScreenInMouseCoordinates(self: *const T, ppRect: ?*?*IMSVidRect) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).get_DVDScreenInMouseCoordinates(@as(*const IMSVidWebDVD, @ptrCast(self)), ppRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD_put_DVDScreenInMouseCoordinates(self: *const T, pRect: ?*IMSVidRect) HRESULT {
                return @as(*const IMSVidWebDVD.VTable, @ptrCast(self.vtable)).put_DVDScreenInMouseCoordinates(@as(*const IMSVidWebDVD, @ptrCast(self)), pRect);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IMSVidWebDVD2_Value = Guid.initString("7027212f-ee9a-4a7c-8b67-f023714cdaff");
pub const IID_IMSVidWebDVD2 = &IID_IMSVidWebDVD2_Value;
pub const IMSVidWebDVD2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidWebDVD.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Bookmark: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD2,
                ppData: [*]?*u8,
                pDataLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD2,
                ppData: [*]?*u8,
                pDataLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Bookmark: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVD2,
                pData: ?*u8,
                dwDataLength: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVD2,
                pData: ?*u8,
                dwDataLength: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidWebDVD.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD2_get_Bookmark(self: *const T, ppData: [*]?*u8, pDataLength: ?*u32) HRESULT {
                return @as(*const IMSVidWebDVD2.VTable, @ptrCast(self.vtable)).get_Bookmark(@as(*const IMSVidWebDVD2, @ptrCast(self)), ppData, pDataLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVD2_put_Bookmark(self: *const T, pData: ?*u8, dwDataLength: u32) HRESULT {
                return @as(*const IMSVidWebDVD2.VTable, @ptrCast(self.vtable)).put_Bookmark(@as(*const IMSVidWebDVD2, @ptrCast(self)), pData, dwDataLength);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidWebDVDEvent_Value = Guid.initString("b4f7a674-9b83-49cb-a357-c63b871be958");
pub const IID_IMSVidWebDVDEvent = &IID_IMSVidWebDVDEvent_Value;
pub const IMSVidWebDVDEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidPlaybackEvent.VTable,
        DVDNotify: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                lEventCode: i32,
                lParam1: VARIANT,
                lParam2: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                lEventCode: i32,
                lParam1: VARIANT,
                lParam2: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayForwards: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayBackwards: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ShowMenu: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                MenuID: DVDMenuIDConstants,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                MenuID: DVDMenuIDConstants,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Resume: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SelectOrActivateButton: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StillOff: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PauseOn: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChangeCurrentAudioStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChangeCurrentSubpictureStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChangeCurrentAngle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayAtTimeInTitle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayAtTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayChapterInTitle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReplayChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayNextChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReturnFromSubmenu: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayTitle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PlayPrevChapter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChangeKaraokePresMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ChangeVideoPresMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDEvent,
                bEnabled: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidPlaybackEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_DVDNotify(self: *const T, lEventCode: i32, lParam1: VARIANT, lParam2: VARIANT) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).DVDNotify(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), lEventCode, lParam1, lParam2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PlayForwards(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PlayForwards(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PlayBackwards(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PlayBackwards(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_ShowMenu(self: *const T, MenuID: DVDMenuIDConstants, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).ShowMenu(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), MenuID, bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_Resume(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).Resume(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_SelectOrActivateButton(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).SelectOrActivateButton(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_StillOff(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).StillOff(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PauseOn(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PauseOn(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_ChangeCurrentAudioStream(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).ChangeCurrentAudioStream(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_ChangeCurrentSubpictureStream(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).ChangeCurrentSubpictureStream(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_ChangeCurrentAngle(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).ChangeCurrentAngle(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PlayAtTimeInTitle(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PlayAtTimeInTitle(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PlayAtTime(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PlayAtTime(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PlayChapterInTitle(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PlayChapterInTitle(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PlayChapter(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PlayChapter(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_ReplayChapter(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).ReplayChapter(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PlayNextChapter(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PlayNextChapter(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_Stop(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).Stop(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_ReturnFromSubmenu(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).ReturnFromSubmenu(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PlayTitle(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PlayTitle(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_PlayPrevChapter(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).PlayPrevChapter(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_ChangeKaraokePresMode(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).ChangeKaraokePresMode(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDEvent_ChangeVideoPresMode(self: *const T, bEnabled: i16) HRESULT {
                return @as(*const IMSVidWebDVDEvent.VTable, @ptrCast(self.vtable)).ChangeVideoPresMode(@as(*const IMSVidWebDVDEvent, @ptrCast(self)), bEnabled);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidWebDVDAdm_Value = Guid.initString("b8be681a-eb2c-47f0-b415-94d5452f0e05");
pub const IID_IMSVidWebDVDAdm = &IID_IMSVidWebDVDAdm_Value;
pub const IMSVidWebDVDAdm = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        ChangePassword: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                strUserName: ?BSTR,
                strOld: ?BSTR,
                strNew: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                strUserName: ?BSTR,
                strOld: ?BSTR,
                strNew: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SaveParentalLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                level: i32,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                level: i32,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SaveParentalCountry: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                country: i32,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                country: i32,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConfirmPassword: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
                pVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                strUserName: ?BSTR,
                strPassword: ?BSTR,
                pVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParentalLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                lLevel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                lLevel: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParentalCountry: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                lCountry: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                lCountry: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultAudioLCID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DefaultAudioLCID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultSubpictureLCID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DefaultSubpictureLCID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DefaultMenuLCID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DefaultMenuLCID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                newVal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BookmarkOnStop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                pVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                pVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BookmarkOnStop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidWebDVDAdm,
                newVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidWebDVDAdm,
                newVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_ChangePassword(self: *const T, strUserName: ?BSTR, strOld: ?BSTR, strNew: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).ChangePassword(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), strUserName, strOld, strNew);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_SaveParentalLevel(self: *const T, level: i32, strUserName: ?BSTR, strPassword: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).SaveParentalLevel(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), level, strUserName, strPassword);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_SaveParentalCountry(self: *const T, country: i32, strUserName: ?BSTR, strPassword: ?BSTR) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).SaveParentalCountry(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), country, strUserName, strPassword);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_ConfirmPassword(self: *const T, strUserName: ?BSTR, strPassword: ?BSTR, pVal: ?*i16) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).ConfirmPassword(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), strUserName, strPassword, pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_GetParentalLevel(self: *const T, lLevel: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).GetParentalLevel(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), lLevel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_GetParentalCountry(self: *const T, lCountry: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).GetParentalCountry(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), lCountry);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_get_DefaultAudioLCID(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).get_DefaultAudioLCID(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_put_DefaultAudioLCID(self: *const T, newVal: i32) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).put_DefaultAudioLCID(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_get_DefaultSubpictureLCID(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).get_DefaultSubpictureLCID(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_put_DefaultSubpictureLCID(self: *const T, newVal: i32) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).put_DefaultSubpictureLCID(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_get_DefaultMenuLCID(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).get_DefaultMenuLCID(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_put_DefaultMenuLCID(self: *const T, newVal: i32) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).put_DefaultMenuLCID(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), newVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_get_BookmarkOnStop(self: *const T, pVal: ?*i16) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).get_BookmarkOnStop(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidWebDVDAdm_put_BookmarkOnStop(self: *const T, newVal: i16) HRESULT {
                return @as(*const IMSVidWebDVDAdm.VTable, @ptrCast(self.vtable)).put_BookmarkOnStop(@as(*const IMSVidWebDVDAdm, @ptrCast(self)), newVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidOutputDevice_Value = Guid.initString("37b03546-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidOutputDevice = &IID_IMSVidOutputDevice_Value;
pub const IMSVidOutputDevice = extern struct {
    pub const VTable = extern struct {
        base: IMSVidDevice.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidDevice.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidOutputDeviceEvent_Value = Guid.initString("2e6a14e2-571c-11d3-b652-00c04f79498e");
pub const IID_IMSVidOutputDeviceEvent = &IID_IMSVidOutputDeviceEvent_Value;
pub const IMSVidOutputDeviceEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidDeviceEvent.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidDeviceEvent.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidFeature_Value = Guid.initString("37b03547-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidFeature = &IID_IMSVidFeature_Value;
pub const IMSVidFeature = extern struct {
    pub const VTable = extern struct {
        base: IMSVidDevice.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidDevice.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidFeatureEvent_Value = Guid.initString("3dd2903c-e0aa-11d2-b63a-00c04f79498e");
pub const IID_IMSVidFeatureEvent = &IID_IMSVidFeatureEvent_Value;
pub const IMSVidFeatureEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidDeviceEvent.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidDeviceEvent.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidEncoder_Value = Guid.initString("c0020fd4-bee7-43d9-a495-9f213117103d");
pub const IID_IMSVidEncoder = &IID_IMSVidEncoder_Value;
pub const IMSVidEncoder = extern struct {
    pub const VTable = extern struct {
        base: IMSVidFeature.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoEncoderInterface: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidEncoder,
                ppEncInt: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidEncoder,
                ppEncInt: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioEncoderInterface: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidEncoder,
                ppEncInt: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidEncoder,
                ppEncInt: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidFeature.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidEncoder_get_VideoEncoderInterface(self: *const T, ppEncInt: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidEncoder.VTable, @ptrCast(self.vtable)).get_VideoEncoderInterface(@as(*const IMSVidEncoder, @ptrCast(self)), ppEncInt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidEncoder_get_AudioEncoderInterface(self: *const T, ppEncInt: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidEncoder.VTable, @ptrCast(self.vtable)).get_AudioEncoderInterface(@as(*const IMSVidEncoder, @ptrCast(self)), ppEncInt);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidClosedCaptioning_Value = Guid.initString("99652ea1-c1f7-414f-bb7b-1c967de75983");
pub const IID_IMSVidClosedCaptioning = &IID_IMSVidClosedCaptioning_Value;
pub const IMSVidClosedCaptioning = extern struct {
    pub const VTable = extern struct {
        base: IMSVidFeature.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Enable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidClosedCaptioning,
                On: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidClosedCaptioning,
                On: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Enable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidClosedCaptioning,
                On: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidClosedCaptioning,
                On: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidFeature.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidClosedCaptioning_get_Enable(self: *const T, On: ?*i16) HRESULT {
                return @as(*const IMSVidClosedCaptioning.VTable, @ptrCast(self.vtable)).get_Enable(@as(*const IMSVidClosedCaptioning, @ptrCast(self)), On);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidClosedCaptioning_put_Enable(self: *const T, On: i16) HRESULT {
                return @as(*const IMSVidClosedCaptioning.VTable, @ptrCast(self.vtable)).put_Enable(@as(*const IMSVidClosedCaptioning, @ptrCast(self)), On);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidClosedCaptioning2_Value = Guid.initString("e00cb864-a029-4310-9987-a873f5887d97");
pub const IID_IMSVidClosedCaptioning2 = &IID_IMSVidClosedCaptioning2_Value;
pub const IMSVidClosedCaptioning2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidClosedCaptioning.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Service: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidClosedCaptioning2,
                On: ?*MSVidCCService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidClosedCaptioning2,
                On: ?*MSVidCCService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Service: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidClosedCaptioning2,
                On: MSVidCCService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidClosedCaptioning2,
                On: MSVidCCService,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidClosedCaptioning.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidClosedCaptioning2_get_Service(self: *const T, On: ?*MSVidCCService) HRESULT {
                return @as(*const IMSVidClosedCaptioning2.VTable, @ptrCast(self.vtable)).get_Service(@as(*const IMSVidClosedCaptioning2, @ptrCast(self)), On);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidClosedCaptioning2_put_Service(self: *const T, On: MSVidCCService) HRESULT {
                return @as(*const IMSVidClosedCaptioning2.VTable, @ptrCast(self.vtable)).put_Service(@as(*const IMSVidClosedCaptioning2, @ptrCast(self)), On);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidClosedCaptioning3_Value = Guid.initString("c8638e8a-7625-4c51-9366-2f40a9831fc0");
pub const IID_IMSVidClosedCaptioning3 = &IID_IMSVidClosedCaptioning3_Value;
pub const IMSVidClosedCaptioning3 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidClosedCaptioning2.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TeleTextFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidClosedCaptioning3,
                punkTTFilter: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidClosedCaptioning3,
                punkTTFilter: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidClosedCaptioning2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidClosedCaptioning3_get_TeleTextFilter(self: *const T, punkTTFilter: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidClosedCaptioning3.VTable, @ptrCast(self.vtable)).get_TeleTextFilter(@as(*const IMSVidClosedCaptioning3, @ptrCast(self)), punkTTFilter);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidXDS_Value = Guid.initString("11ebc158-e712-4d1f-8bb3-01ed5274c4ce");
pub const IID_IMSVidXDS = &IID_IMSVidXDS_Value;
pub const IMSVidXDS = extern struct {
    pub const VTable = extern struct {
        base: IMSVidFeature.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ChannelChangeInterface: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidXDS,
                punkCC: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidXDS,
                punkCC: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidFeature.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidXDS_get_ChannelChangeInterface(self: *const T, punkCC: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidXDS.VTable, @ptrCast(self.vtable)).get_ChannelChangeInterface(@as(*const IMSVidXDS, @ptrCast(self)), punkCC);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidXDSEvent_Value = Guid.initString("6db2317d-3b23-41ec-ba4b-701f407eaf3a");
pub const IID_IMSVidXDSEvent = &IID_IMSVidXDSEvent_Value;
pub const IMSVidXDSEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidFeatureEvent.VTable,
        RatingChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidXDSEvent,
                PrevRatingSystem: EnTvRat_System,
                PrevLevel: EnTvRat_GenericLevel,
                PrevAttributes: BfEnTvRat_GenericAttributes,
                NewRatingSystem: EnTvRat_System,
                NewLevel: EnTvRat_GenericLevel,
                NewAttributes: BfEnTvRat_GenericAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidXDSEvent,
                PrevRatingSystem: EnTvRat_System,
                PrevLevel: EnTvRat_GenericLevel,
                PrevAttributes: BfEnTvRat_GenericAttributes,
                NewRatingSystem: EnTvRat_System,
                NewLevel: EnTvRat_GenericLevel,
                NewAttributes: BfEnTvRat_GenericAttributes,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidFeatureEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidXDSEvent_RatingChange(self: *const T, PrevRatingSystem: EnTvRat_System, PrevLevel: EnTvRat_GenericLevel, PrevAttributes: BfEnTvRat_GenericAttributes, NewRatingSystem: EnTvRat_System, NewLevel: EnTvRat_GenericLevel, NewAttributes: BfEnTvRat_GenericAttributes) HRESULT {
                return @as(*const IMSVidXDSEvent.VTable, @ptrCast(self.vtable)).RatingChange(@as(*const IMSVidXDSEvent, @ptrCast(self)), PrevRatingSystem, PrevLevel, PrevAttributes, NewRatingSystem, NewLevel, NewAttributes);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidDataServices_Value = Guid.initString("334125c1-77e5-11d3-b653-00c04f79498e");
pub const IID_IMSVidDataServices = &IID_IMSVidDataServices_Value;
pub const IMSVidDataServices = extern struct {
    pub const VTable = extern struct {
        base: IMSVidFeature.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidFeature.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidDataServicesEvent_Value = Guid.initString("334125c2-77e5-11d3-b653-00c04f79498e");
pub const IID_IMSVidDataServicesEvent = &IID_IMSVidDataServicesEvent_Value;
pub const IMSVidDataServicesEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidDeviceEvent.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidDeviceEvent.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const SourceSizeList = enum(i32) {
    FullSize = 0,
    ClipByOverScan = 1,
    ClipByClipRect = 2,
};
pub const sslFullSize = SourceSizeList.FullSize;
pub const sslClipByOverScan = SourceSizeList.ClipByOverScan;
pub const sslClipByClipRect = SourceSizeList.ClipByClipRect;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidVideoRenderer_Value = Guid.initString("37b03540-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidVideoRenderer = &IID_IMSVidVideoRenderer_Value;
pub const IMSVidVideoRenderer = extern struct {
    pub const VTable = extern struct {
        base: IMSVidOutputDevice.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CustomCompositorClass: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                CompositorCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                CompositorCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_CustomCompositorClass: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                CompositorCLSID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                CompositorCLSID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__CustomCompositorClass: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                CompositorCLSID: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                CompositorCLSID: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__CustomCompositorClass: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                CompositorCLSID: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                CompositorCLSID: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__CustomCompositor: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                Compositor: ?*?*IVMRImageCompositor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                Compositor: ?*?*IVMRImageCompositor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__CustomCompositor: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                Compositor: ?*IVMRImageCompositor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                Compositor: ?*IVMRImageCompositor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MixerBitmap: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                MixerPictureDisp: ?*?*IPictureDisp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                MixerPictureDisp: ?*?*IPictureDisp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__MixerBitmap: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                MixerPicture: ?*?*IVMRMixerBitmap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                MixerPicture: ?*?*IVMRMixerBitmap,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MixerBitmap: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                MixerPictureDisp: ?*IPictureDisp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                MixerPictureDisp: ?*IPictureDisp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__MixerBitmap: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                MixerPicture: ?*VMRALPHABITMAP,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                MixerPicture: ?*VMRALPHABITMAP,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MixerBitmapPositionRect: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                rDest: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                rDest: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MixerBitmapPositionRect: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                rDest: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                rDest: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MixerBitmapOpacity: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                opacity: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                opacity: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MixerBitmapOpacity: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                opacity: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                opacity: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetupMixerBitmap: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                MixerPictureDisp: ?*IPictureDisp,
                Opacity: i32,
                rDest: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                MixerPictureDisp: ?*IPictureDisp,
                Opacity: i32,
                rDest: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SourceSize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                CurrentSize: ?*SourceSizeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                CurrentSize: ?*SourceSizeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SourceSize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                NewSize: SourceSizeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                NewSize: SourceSizeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OverScan: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                plPercent: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                plPercent: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_OverScan: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                lPercent: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                lPercent: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AvailableSourceRect: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                pRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                pRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaxVidRect: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                ppVidRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                ppVidRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MinVidRect: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                ppVidRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                ppVidRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ClippedSourceRect: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                pRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                pRect: ?*?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ClippedSourceRect: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                pRect: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                pRect: ?*IMSVidRect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_UsingOverlay: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                UseOverlayVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                UseOverlayVal: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_UsingOverlay: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                UseOverlayVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                UseOverlayVal: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Capture: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                currentImage: ?*?*IPictureDisp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                currentImage: ?*?*IPictureDisp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FramesPerSecond: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                pVal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DecimateInput: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                pDeci: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                pDeci: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DecimateInput: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer,
                pDeci: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer,
                pDeci: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidOutputDevice.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_CustomCompositorClass(self: *const T, CompositorCLSID: ?*?BSTR) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_CustomCompositorClass(@as(*const IMSVidVideoRenderer, @ptrCast(self)), CompositorCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put_CustomCompositorClass(self: *const T, CompositorCLSID: ?BSTR) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put_CustomCompositorClass(@as(*const IMSVidVideoRenderer, @ptrCast(self)), CompositorCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get__CustomCompositorClass(self: *const T, CompositorCLSID: ?*Guid) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get__CustomCompositorClass(@as(*const IMSVidVideoRenderer, @ptrCast(self)), CompositorCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put__CustomCompositorClass(self: *const T, CompositorCLSID: ?*const Guid) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put__CustomCompositorClass(@as(*const IMSVidVideoRenderer, @ptrCast(self)), CompositorCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get__CustomCompositor(self: *const T, Compositor: ?*?*IVMRImageCompositor) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get__CustomCompositor(@as(*const IMSVidVideoRenderer, @ptrCast(self)), Compositor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put__CustomCompositor(self: *const T, Compositor: ?*IVMRImageCompositor) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put__CustomCompositor(@as(*const IMSVidVideoRenderer, @ptrCast(self)), Compositor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_MixerBitmap(self: *const T, MixerPictureDisp: ?*?*IPictureDisp) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_MixerBitmap(@as(*const IMSVidVideoRenderer, @ptrCast(self)), MixerPictureDisp);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get__MixerBitmap(self: *const T, MixerPicture: ?*?*IVMRMixerBitmap) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get__MixerBitmap(@as(*const IMSVidVideoRenderer, @ptrCast(self)), MixerPicture);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put_MixerBitmap(self: *const T, MixerPictureDisp: ?*IPictureDisp) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put_MixerBitmap(@as(*const IMSVidVideoRenderer, @ptrCast(self)), MixerPictureDisp);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put__MixerBitmap(self: *const T, MixerPicture: ?*VMRALPHABITMAP) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put__MixerBitmap(@as(*const IMSVidVideoRenderer, @ptrCast(self)), MixerPicture);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_MixerBitmapPositionRect(self: *const T, rDest: ?*?*IMSVidRect) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_MixerBitmapPositionRect(@as(*const IMSVidVideoRenderer, @ptrCast(self)), rDest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put_MixerBitmapPositionRect(self: *const T, rDest: ?*IMSVidRect) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put_MixerBitmapPositionRect(@as(*const IMSVidVideoRenderer, @ptrCast(self)), rDest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_MixerBitmapOpacity(self: *const T, opacity: ?*i32) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_MixerBitmapOpacity(@as(*const IMSVidVideoRenderer, @ptrCast(self)), opacity);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put_MixerBitmapOpacity(self: *const T, opacity: i32) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put_MixerBitmapOpacity(@as(*const IMSVidVideoRenderer, @ptrCast(self)), opacity);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_SetupMixerBitmap(self: *const T, MixerPictureDisp: ?*IPictureDisp, Opacity: i32, rDest: ?*IMSVidRect) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).SetupMixerBitmap(@as(*const IMSVidVideoRenderer, @ptrCast(self)), MixerPictureDisp, Opacity, rDest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_SourceSize(self: *const T, CurrentSize: ?*SourceSizeList) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_SourceSize(@as(*const IMSVidVideoRenderer, @ptrCast(self)), CurrentSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put_SourceSize(self: *const T, NewSize: SourceSizeList) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put_SourceSize(@as(*const IMSVidVideoRenderer, @ptrCast(self)), NewSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_OverScan(self: *const T, plPercent: ?*i32) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_OverScan(@as(*const IMSVidVideoRenderer, @ptrCast(self)), plPercent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put_OverScan(self: *const T, lPercent: i32) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put_OverScan(@as(*const IMSVidVideoRenderer, @ptrCast(self)), lPercent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_AvailableSourceRect(self: *const T, pRect: ?*?*IMSVidRect) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_AvailableSourceRect(@as(*const IMSVidVideoRenderer, @ptrCast(self)), pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_MaxVidRect(self: *const T, ppVidRect: ?*?*IMSVidRect) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_MaxVidRect(@as(*const IMSVidVideoRenderer, @ptrCast(self)), ppVidRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_MinVidRect(self: *const T, ppVidRect: ?*?*IMSVidRect) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_MinVidRect(@as(*const IMSVidVideoRenderer, @ptrCast(self)), ppVidRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_ClippedSourceRect(self: *const T, pRect: ?*?*IMSVidRect) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_ClippedSourceRect(@as(*const IMSVidVideoRenderer, @ptrCast(self)), pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put_ClippedSourceRect(self: *const T, pRect: ?*IMSVidRect) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put_ClippedSourceRect(@as(*const IMSVidVideoRenderer, @ptrCast(self)), pRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_UsingOverlay(self: *const T, UseOverlayVal: ?*i16) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_UsingOverlay(@as(*const IMSVidVideoRenderer, @ptrCast(self)), UseOverlayVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put_UsingOverlay(self: *const T, UseOverlayVal: i16) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put_UsingOverlay(@as(*const IMSVidVideoRenderer, @ptrCast(self)), UseOverlayVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_Capture(self: *const T, currentImage: ?*?*IPictureDisp) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).Capture(@as(*const IMSVidVideoRenderer, @ptrCast(self)), currentImage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_FramesPerSecond(self: *const T, pVal: ?*i32) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_FramesPerSecond(@as(*const IMSVidVideoRenderer, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_get_DecimateInput(self: *const T, pDeci: ?*i16) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).get_DecimateInput(@as(*const IMSVidVideoRenderer, @ptrCast(self)), pDeci);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer_put_DecimateInput(self: *const T, pDeci: i16) HRESULT {
                return @as(*const IMSVidVideoRenderer.VTable, @ptrCast(self.vtable)).put_DecimateInput(@as(*const IMSVidVideoRenderer, @ptrCast(self)), pDeci);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidVideoRendererEvent_Value = Guid.initString("37b03545-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidVideoRendererEvent = &IID_IMSVidVideoRendererEvent_Value;
pub const IMSVidVideoRendererEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidOutputDeviceEvent.VTable,
        OverlayUnavailable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVideoRendererEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVideoRendererEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidOutputDeviceEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRendererEvent_OverlayUnavailable(self: *const T) HRESULT {
                return @as(*const IMSVidVideoRendererEvent.VTable, @ptrCast(self.vtable)).OverlayUnavailable(@as(*const IMSVidVideoRendererEvent, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidGenericSink_Value = Guid.initString("6c29b41d-455b-4c33-963a-0d28e5e555ea");
pub const IID_IMSVidGenericSink = &IID_IMSVidGenericSink_Value;
pub const IMSVidGenericSink = extern struct {
    pub const VTable = extern struct {
        base: IMSVidOutputDevice.VTable,
        SetSinkFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGenericSink,
                bstrName: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGenericSink,
                bstrName: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SinkStreams: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGenericSink,
                pStreams: ?*MSVidSinkStreams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGenericSink,
                pStreams: ?*MSVidSinkStreams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SinkStreams: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidGenericSink,
                Streams: MSVidSinkStreams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidGenericSink,
                Streams: MSVidSinkStreams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidOutputDevice.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGenericSink_SetSinkFilter(self: *const T, bstrName: ?BSTR) HRESULT {
                return @as(*const IMSVidGenericSink.VTable, @ptrCast(self.vtable)).SetSinkFilter(@as(*const IMSVidGenericSink, @ptrCast(self)), bstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGenericSink_get_SinkStreams(self: *const T, pStreams: ?*MSVidSinkStreams) HRESULT {
                return @as(*const IMSVidGenericSink.VTable, @ptrCast(self.vtable)).get_SinkStreams(@as(*const IMSVidGenericSink, @ptrCast(self)), pStreams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGenericSink_put_SinkStreams(self: *const T, Streams: MSVidSinkStreams) HRESULT {
                return @as(*const IMSVidGenericSink.VTable, @ptrCast(self.vtable)).put_SinkStreams(@as(*const IMSVidGenericSink, @ptrCast(self)), Streams);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidGenericSink2_Value = Guid.initString("6b5a28f3-47f1-4092-b168-60cabec08f1c");
pub const IID_IMSVidGenericSink2 = &IID_IMSVidGenericSink2_Value;
pub const IMSVidGenericSink2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidGenericSink.VTable,
        AddFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGenericSink2,
                bstrName: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGenericSink2,
                bstrName: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ResetFilterList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidGenericSink2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidGenericSink2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidGenericSink.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGenericSink2_AddFilter(self: *const T, bstrName: ?BSTR) HRESULT {
                return @as(*const IMSVidGenericSink2.VTable, @ptrCast(self.vtable)).AddFilter(@as(*const IMSVidGenericSink2, @ptrCast(self)), bstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidGenericSink2_ResetFilterList(self: *const T) HRESULT {
                return @as(*const IMSVidGenericSink2.VTable, @ptrCast(self.vtable)).ResetFilterList(@as(*const IMSVidGenericSink2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidStreamBufferRecordingControl_Value = Guid.initString("160621aa-bbbc-4326-a824-c395aebc6e74");
pub const IID_IMSVidStreamBufferRecordingControl = &IID_IMSVidStreamBufferRecordingControl_Value;
pub const IMSVidStreamBufferRecordingControl = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_StartTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferRecordingControl,
                rtStart: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferRecordingControl,
                rtStart: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_StartTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferRecordingControl,
                rtStart: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferRecordingControl,
                rtStart: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_StopTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferRecordingControl,
                rtStop: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferRecordingControl,
                rtStop: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_StopTime: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferRecordingControl,
                rtStop: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferRecordingControl,
                rtStop: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_RecordingStopped: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferRecordingControl,
                phResult: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferRecordingControl,
                phResult: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_RecordingStarted: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferRecordingControl,
                phResult: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferRecordingControl,
                phResult: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_RecordingType: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferRecordingControl,
                dwType: ?*RecordingType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferRecordingControl,
                dwType: ?*RecordingType,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_RecordingAttribute: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferRecordingControl,
                pRecordingAttribute: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferRecordingControl,
                pRecordingAttribute: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferRecordingControl_get_StartTime(self: *const T, rtStart: ?*i32) HRESULT {
                return @as(*const IMSVidStreamBufferRecordingControl.VTable, @ptrCast(self.vtable)).get_StartTime(@as(*const IMSVidStreamBufferRecordingControl, @ptrCast(self)), rtStart);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferRecordingControl_put_StartTime(self: *const T, rtStart: i32) HRESULT {
                return @as(*const IMSVidStreamBufferRecordingControl.VTable, @ptrCast(self.vtable)).put_StartTime(@as(*const IMSVidStreamBufferRecordingControl, @ptrCast(self)), rtStart);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferRecordingControl_get_StopTime(self: *const T, rtStop: ?*i32) HRESULT {
                return @as(*const IMSVidStreamBufferRecordingControl.VTable, @ptrCast(self.vtable)).get_StopTime(@as(*const IMSVidStreamBufferRecordingControl, @ptrCast(self)), rtStop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferRecordingControl_put_StopTime(self: *const T, rtStop: i32) HRESULT {
                return @as(*const IMSVidStreamBufferRecordingControl.VTable, @ptrCast(self.vtable)).put_StopTime(@as(*const IMSVidStreamBufferRecordingControl, @ptrCast(self)), rtStop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferRecordingControl_get_RecordingStopped(self: *const T, phResult: ?*i16) HRESULT {
                return @as(*const IMSVidStreamBufferRecordingControl.VTable, @ptrCast(self.vtable)).get_RecordingStopped(@as(*const IMSVidStreamBufferRecordingControl, @ptrCast(self)), phResult);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferRecordingControl_get_RecordingStarted(self: *const T, phResult: ?*i16) HRESULT {
                return @as(*const IMSVidStreamBufferRecordingControl.VTable, @ptrCast(self.vtable)).get_RecordingStarted(@as(*const IMSVidStreamBufferRecordingControl, @ptrCast(self)), phResult);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferRecordingControl_get_RecordingType(self: *const T, dwType: ?*RecordingType) HRESULT {
                return @as(*const IMSVidStreamBufferRecordingControl.VTable, @ptrCast(self.vtable)).get_RecordingType(@as(*const IMSVidStreamBufferRecordingControl, @ptrCast(self)), dwType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferRecordingControl_get_RecordingAttribute(self: *const T, pRecordingAttribute: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferRecordingControl.VTable, @ptrCast(self.vtable)).get_RecordingAttribute(@as(*const IMSVidStreamBufferRecordingControl, @ptrCast(self)), pRecordingAttribute);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidStreamBufferSink_Value = Guid.initString("159dbb45-cd1b-4dab-83ea-5cb1f4f21d07");
pub const IID_IMSVidStreamBufferSink = &IID_IMSVidStreamBufferSink_Value;
pub const IMSVidStreamBufferSink = extern struct {
    pub const VTable = extern struct {
        base: IMSVidOutputDevice.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ContentRecorder: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink,
                pszFilename: ?BSTR,
                pRecordingIUnknown: ?*?*IMSVidStreamBufferRecordingControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink,
                pszFilename: ?BSTR,
                pRecordingIUnknown: ?*?*IMSVidStreamBufferRecordingControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ReferenceRecorder: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink,
                pszFilename: ?BSTR,
                pRecordingIUnknown: ?*?*IMSVidStreamBufferRecordingControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink,
                pszFilename: ?BSTR,
                pRecordingIUnknown: ?*?*IMSVidStreamBufferRecordingControl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SinkName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink,
                pName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink,
                pName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SinkName: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink,
                Name: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink,
                Name: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        NameSetLock: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SBESink: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink,
                sbeConfig: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink,
                sbeConfig: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidOutputDevice.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink_get_ContentRecorder(self: *const T, pszFilename: ?BSTR, pRecordingIUnknown: ?*?*IMSVidStreamBufferRecordingControl) HRESULT {
                return @as(*const IMSVidStreamBufferSink.VTable, @ptrCast(self.vtable)).get_ContentRecorder(@as(*const IMSVidStreamBufferSink, @ptrCast(self)), pszFilename, pRecordingIUnknown);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink_get_ReferenceRecorder(self: *const T, pszFilename: ?BSTR, pRecordingIUnknown: ?*?*IMSVidStreamBufferRecordingControl) HRESULT {
                return @as(*const IMSVidStreamBufferSink.VTable, @ptrCast(self.vtable)).get_ReferenceRecorder(@as(*const IMSVidStreamBufferSink, @ptrCast(self)), pszFilename, pRecordingIUnknown);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink_get_SinkName(self: *const T, pName: ?*?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferSink.VTable, @ptrCast(self.vtable)).get_SinkName(@as(*const IMSVidStreamBufferSink, @ptrCast(self)), pName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink_put_SinkName(self: *const T, Name: ?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferSink.VTable, @ptrCast(self.vtable)).put_SinkName(@as(*const IMSVidStreamBufferSink, @ptrCast(self)), Name);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink_NameSetLock(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSink.VTable, @ptrCast(self.vtable)).NameSetLock(@as(*const IMSVidStreamBufferSink, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink_get_SBESink(self: *const T, sbeConfig: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSink.VTable, @ptrCast(self.vtable)).get_SBESink(@as(*const IMSVidStreamBufferSink, @ptrCast(self)), sbeConfig);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidStreamBufferSink2_Value = Guid.initString("2ca9fc63-c131-4e5a-955a-544a47c67146");
pub const IID_IMSVidStreamBufferSink2 = &IID_IMSVidStreamBufferSink2_Value;
pub const IMSVidStreamBufferSink2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidStreamBufferSink.VTable,
        UnlockProfile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSink2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidStreamBufferSink.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink2_UnlockProfile(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSink2.VTable, @ptrCast(self.vtable)).UnlockProfile(@as(*const IMSVidStreamBufferSink2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidStreamBufferSink3_Value = Guid.initString("4f8721d7-7d59-4d8b-99f5-a77775586bd5");
pub const IID_IMSVidStreamBufferSink3 = &IID_IMSVidStreamBufferSink3_Value;
pub const IMSVidStreamBufferSink3 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidStreamBufferSink2.VTable,
        SetMinSeek: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                pdwMin: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                pdwMin: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioCounter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoCounter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CCCounter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WSTCounter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_AudioAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                szCLSID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                szCLSID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                pszCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                pszCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__AudioAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                guid: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                guid: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__AudioAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                pGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                pGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_VideoAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                szCLSID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                szCLSID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                pszCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                pszCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__VideoAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                guid: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                guid: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__VideoAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                pGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                pGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DataAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                szCLSID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                szCLSID: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DataAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                pszCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                pszCLSID: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put__DataAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                guid: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                guid: Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__DataAnalysisFilter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                pGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                pGuid: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_LicenseErrorCode: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSink3,
                hres: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSink3,
                hres: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidStreamBufferSink2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_SetMinSeek(self: *const T, pdwMin: ?*i32) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).SetMinSeek(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), pdwMin);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get_AudioCounter(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get_AudioCounter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get_VideoCounter(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get_VideoCounter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get_CCCounter(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get_CCCounter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get_WSTCounter(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get_WSTCounter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_put_AudioAnalysisFilter(self: *const T, szCLSID: ?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).put_AudioAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), szCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get_AudioAnalysisFilter(self: *const T, pszCLSID: ?*?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get_AudioAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), pszCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_put__AudioAnalysisFilter(self: *const T, guid: Guid) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).put__AudioAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), guid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get__AudioAnalysisFilter(self: *const T, pGuid: ?*Guid) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get__AudioAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), pGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_put_VideoAnalysisFilter(self: *const T, szCLSID: ?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).put_VideoAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), szCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get_VideoAnalysisFilter(self: *const T, pszCLSID: ?*?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get_VideoAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), pszCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_put__VideoAnalysisFilter(self: *const T, guid: Guid) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).put__VideoAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), guid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get__VideoAnalysisFilter(self: *const T, pGuid: ?*Guid) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get__VideoAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), pGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_put_DataAnalysisFilter(self: *const T, szCLSID: ?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).put_DataAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), szCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get_DataAnalysisFilter(self: *const T, pszCLSID: ?*?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get_DataAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), pszCLSID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_put__DataAnalysisFilter(self: *const T, guid: Guid) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).put__DataAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), guid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get__DataAnalysisFilter(self: *const T, pGuid: ?*Guid) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get__DataAnalysisFilter(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), pGuid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSink3_get_LicenseErrorCode(self: *const T, hres: ?*HRESULT) HRESULT {
                return @as(*const IMSVidStreamBufferSink3.VTable, @ptrCast(self.vtable)).get_LicenseErrorCode(@as(*const IMSVidStreamBufferSink3, @ptrCast(self)), hres);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidStreamBufferSinkEvent_Value = Guid.initString("f798a36b-b05b-4bbe-9703-eaea7d61cd51");
pub const IID_IMSVidStreamBufferSinkEvent = &IID_IMSVidStreamBufferSinkEvent_Value;
pub const IMSVidStreamBufferSinkEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidOutputDeviceEvent.VTable,
        CertificateFailure: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSinkEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSinkEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CertificateSuccess: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSinkEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSinkEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WriteFailure: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSinkEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSinkEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidOutputDeviceEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSinkEvent_CertificateFailure(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSinkEvent.VTable, @ptrCast(self.vtable)).CertificateFailure(@as(*const IMSVidStreamBufferSinkEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSinkEvent_CertificateSuccess(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSinkEvent.VTable, @ptrCast(self.vtable)).CertificateSuccess(@as(*const IMSVidStreamBufferSinkEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSinkEvent_WriteFailure(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSinkEvent.VTable, @ptrCast(self.vtable)).WriteFailure(@as(*const IMSVidStreamBufferSinkEvent, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidStreamBufferSinkEvent2_Value = Guid.initString("3d7a5166-72d7-484b-a06f-286187b80ca1");
pub const IID_IMSVidStreamBufferSinkEvent2 = &IID_IMSVidStreamBufferSinkEvent2_Value;
pub const IMSVidStreamBufferSinkEvent2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidStreamBufferSinkEvent.VTable,
        EncryptionOn: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSinkEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSinkEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EncryptionOff: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSinkEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSinkEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidStreamBufferSinkEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSinkEvent2_EncryptionOn(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSinkEvent2.VTable, @ptrCast(self.vtable)).EncryptionOn(@as(*const IMSVidStreamBufferSinkEvent2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSinkEvent2_EncryptionOff(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSinkEvent2.VTable, @ptrCast(self.vtable)).EncryptionOff(@as(*const IMSVidStreamBufferSinkEvent2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidStreamBufferSinkEvent3_Value = Guid.initString("735ad8d5-c259-48e9-81e7-d27953665b23");
pub const IID_IMSVidStreamBufferSinkEvent3 = &IID_IMSVidStreamBufferSinkEvent3_Value;
pub const IMSVidStreamBufferSinkEvent3 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidStreamBufferSinkEvent2.VTable,
        LicenseChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSinkEvent3,
                dwProt: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSinkEvent3,
                dwProt: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidStreamBufferSinkEvent2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSinkEvent3_LicenseChange(self: *const T, dwProt: i32) HRESULT {
                return @as(*const IMSVidStreamBufferSinkEvent3.VTable, @ptrCast(self.vtable)).LicenseChange(@as(*const IMSVidStreamBufferSinkEvent3, @ptrCast(self)), dwProt);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IMSVidStreamBufferSinkEvent4_Value = Guid.initString("1b01dcb0-daf0-412c-a5d1-590c7f62e2b8");
pub const IID_IMSVidStreamBufferSinkEvent4 = &IID_IMSVidStreamBufferSinkEvent4_Value;
pub const IMSVidStreamBufferSinkEvent4 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidStreamBufferSinkEvent3.VTable,
        WriteFailureClear: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSinkEvent4,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSinkEvent4,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidStreamBufferSinkEvent3.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSinkEvent4_WriteFailureClear(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSinkEvent4.VTable, @ptrCast(self.vtable)).WriteFailureClear(@as(*const IMSVidStreamBufferSinkEvent4, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidStreamBufferSource_Value = Guid.initString("eb0c8cf9-6950-4772-87b1-47d11cf3a02f");
pub const IID_IMSVidStreamBufferSource = &IID_IMSVidStreamBufferSource_Value;
pub const IMSVidStreamBufferSource = extern struct {
    pub const VTable = extern struct {
        base: IMSVidFilePlayback.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Start: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource,
                lStart: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource,
                lStart: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_RecordingAttribute: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource,
                pRecordingAttribute: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource,
                pRecordingAttribute: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CurrentRatings: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource,
                pEnSystem: ?*EnTvRat_System,
                pEnRating: ?*EnTvRat_GenericLevel,
                pBfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSource,
                pEnSystem: ?*EnTvRat_System,
                pEnRating: ?*EnTvRat_GenericLevel,
                pBfEnAttr: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        MaxRatingsLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource,
                enSystem: EnTvRat_System,
                enRating: EnTvRat_GenericLevel,
                lbfEnAttr: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSource,
                enSystem: EnTvRat_System,
                enRating: EnTvRat_GenericLevel,
                lbfEnAttr: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BlockUnrated: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource,
                bBlock: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource,
                bBlock: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_UnratedDelay: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource,
                dwDelay: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource,
                dwDelay: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SBESource: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource,
                sbeFilter: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource,
                sbeFilter: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidFilePlayback.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource_get_Start(self: *const T, lStart: ?*i32) HRESULT {
                return @as(*const IMSVidStreamBufferSource.VTable, @ptrCast(self.vtable)).get_Start(@as(*const IMSVidStreamBufferSource, @ptrCast(self)), lStart);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource_get_RecordingAttribute(self: *const T, pRecordingAttribute: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSource.VTable, @ptrCast(self.vtable)).get_RecordingAttribute(@as(*const IMSVidStreamBufferSource, @ptrCast(self)), pRecordingAttribute);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource_CurrentRatings(self: *const T, pEnSystem: ?*EnTvRat_System, pEnRating: ?*EnTvRat_GenericLevel, pBfEnAttr: ?*i32) HRESULT {
                return @as(*const IMSVidStreamBufferSource.VTable, @ptrCast(self.vtable)).CurrentRatings(@as(*const IMSVidStreamBufferSource, @ptrCast(self)), pEnSystem, pEnRating, pBfEnAttr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource_MaxRatingsLevel(self: *const T, enSystem: EnTvRat_System, enRating: EnTvRat_GenericLevel, lbfEnAttr: i32) HRESULT {
                return @as(*const IMSVidStreamBufferSource.VTable, @ptrCast(self.vtable)).MaxRatingsLevel(@as(*const IMSVidStreamBufferSource, @ptrCast(self)), enSystem, enRating, lbfEnAttr);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource_put_BlockUnrated(self: *const T, bBlock: i16) HRESULT {
                return @as(*const IMSVidStreamBufferSource.VTable, @ptrCast(self.vtable)).put_BlockUnrated(@as(*const IMSVidStreamBufferSource, @ptrCast(self)), bBlock);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource_put_UnratedDelay(self: *const T, dwDelay: i32) HRESULT {
                return @as(*const IMSVidStreamBufferSource.VTable, @ptrCast(self.vtable)).put_UnratedDelay(@as(*const IMSVidStreamBufferSource, @ptrCast(self)), dwDelay);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource_get_SBESource(self: *const T, sbeFilter: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSource.VTable, @ptrCast(self.vtable)).get_SBESource(@as(*const IMSVidStreamBufferSource, @ptrCast(self)), sbeFilter);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidStreamBufferSource2_Value = Guid.initString("e4ba9059-b1ce-40d8-b9a0-d4ea4a9989d3");
pub const IID_IMSVidStreamBufferSource2 = &IID_IMSVidStreamBufferSource2_Value;
pub const IMSVidStreamBufferSource2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidStreamBufferSource.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_RateEx: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource2,
                dwRate: f64,
                dwFramesPerSecond: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource2,
                dwRate: f64,
                dwFramesPerSecond: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioCounter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource2,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource2,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoCounter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource2,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource2,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_CCCounter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource2,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource2,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_WSTCounter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidStreamBufferSource2,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidStreamBufferSource2,
                ppUnk: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidStreamBufferSource.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource2_put_RateEx(self: *const T, dwRate: f64, dwFramesPerSecond: u32) HRESULT {
                return @as(*const IMSVidStreamBufferSource2.VTable, @ptrCast(self.vtable)).put_RateEx(@as(*const IMSVidStreamBufferSource2, @ptrCast(self)), dwRate, dwFramesPerSecond);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource2_get_AudioCounter(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSource2.VTable, @ptrCast(self.vtable)).get_AudioCounter(@as(*const IMSVidStreamBufferSource2, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource2_get_VideoCounter(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSource2.VTable, @ptrCast(self.vtable)).get_VideoCounter(@as(*const IMSVidStreamBufferSource2, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource2_get_CCCounter(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSource2.VTable, @ptrCast(self.vtable)).get_CCCounter(@as(*const IMSVidStreamBufferSource2, @ptrCast(self)), ppUnk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSource2_get_WSTCounter(self: *const T, ppUnk: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidStreamBufferSource2.VTable, @ptrCast(self.vtable)).get_WSTCounter(@as(*const IMSVidStreamBufferSource2, @ptrCast(self)), ppUnk);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidStreamBufferSourceEvent_Value = Guid.initString("50ce8a7d-9c28-4da8-9042-cdfa7116f979");
pub const IID_IMSVidStreamBufferSourceEvent = &IID_IMSVidStreamBufferSourceEvent_Value;
pub const IMSVidStreamBufferSourceEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidFilePlaybackEvent.VTable,
        CertificateFailure: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CertificateSuccess: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RatingsBlocked: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RatingsUnblocked: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RatingsChanged: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TimeHole: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent,
                StreamOffsetMS: i32,
                SizeMS: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent,
                StreamOffsetMS: i32,
                SizeMS: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StaleDataRead: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ContentBecomingStale: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StaleFileDeleted: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidFilePlaybackEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent_CertificateFailure(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent.VTable, @ptrCast(self.vtable)).CertificateFailure(@as(*const IMSVidStreamBufferSourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent_CertificateSuccess(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent.VTable, @ptrCast(self.vtable)).CertificateSuccess(@as(*const IMSVidStreamBufferSourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent_RatingsBlocked(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent.VTable, @ptrCast(self.vtable)).RatingsBlocked(@as(*const IMSVidStreamBufferSourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent_RatingsUnblocked(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent.VTable, @ptrCast(self.vtable)).RatingsUnblocked(@as(*const IMSVidStreamBufferSourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent_RatingsChanged(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent.VTable, @ptrCast(self.vtable)).RatingsChanged(@as(*const IMSVidStreamBufferSourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent_TimeHole(self: *const T, StreamOffsetMS: i32, SizeMS: i32) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent.VTable, @ptrCast(self.vtable)).TimeHole(@as(*const IMSVidStreamBufferSourceEvent, @ptrCast(self)), StreamOffsetMS, SizeMS);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent_StaleDataRead(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent.VTable, @ptrCast(self.vtable)).StaleDataRead(@as(*const IMSVidStreamBufferSourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent_ContentBecomingStale(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent.VTable, @ptrCast(self.vtable)).ContentBecomingStale(@as(*const IMSVidStreamBufferSourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent_StaleFileDeleted(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent.VTable, @ptrCast(self.vtable)).StaleFileDeleted(@as(*const IMSVidStreamBufferSourceEvent, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidStreamBufferSourceEvent2_Value = Guid.initString("7aef50ce-8e22-4ba8-bc06-a92a458b4ef2");
pub const IID_IMSVidStreamBufferSourceEvent2 = &IID_IMSVidStreamBufferSourceEvent2_Value;
pub const IMSVidStreamBufferSourceEvent2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidStreamBufferSourceEvent.VTable,
        RateChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent2,
                qwNewRate: f64,
                qwOldRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent2,
                qwNewRate: f64,
                qwOldRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidStreamBufferSourceEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent2_RateChange(self: *const T, qwNewRate: f64, qwOldRate: f64) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent2.VTable, @ptrCast(self.vtable)).RateChange(@as(*const IMSVidStreamBufferSourceEvent2, @ptrCast(self)), qwNewRate, qwOldRate);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidStreamBufferSourceEvent3_Value = Guid.initString("ceabd6ab-9b90-4570-adf1-3ce76e00a763");
pub const IID_IMSVidStreamBufferSourceEvent3 = &IID_IMSVidStreamBufferSourceEvent3_Value;
pub const IMSVidStreamBufferSourceEvent3 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidStreamBufferSourceEvent2.VTable,
        BroadcastEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent3,
                Guid: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent3,
                Guid: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        BroadcastEventEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent3,
                Guid: ?BSTR,
                Param1: u32,
                Param2: u32,
                Param3: u32,
                Param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent3,
                Guid: ?BSTR,
                Param1: u32,
                Param2: u32,
                Param3: u32,
                Param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        COPPBlocked: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        COPPUnblocked: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ContentPrimarilyAudio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferSourceEvent3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferSourceEvent3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidStreamBufferSourceEvent2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent3_BroadcastEvent(self: *const T, _param_Guid: ?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent3.VTable, @ptrCast(self.vtable)).BroadcastEvent(@as(*const IMSVidStreamBufferSourceEvent3, @ptrCast(self)), _param_Guid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent3_BroadcastEventEx(self: *const T, _param_Guid: ?BSTR, Param1: u32, Param2: u32, Param3: u32, Param4: u32) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent3.VTable, @ptrCast(self.vtable)).BroadcastEventEx(@as(*const IMSVidStreamBufferSourceEvent3, @ptrCast(self)), _param_Guid, Param1, Param2, Param3, Param4);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent3_COPPBlocked(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent3.VTable, @ptrCast(self.vtable)).COPPBlocked(@as(*const IMSVidStreamBufferSourceEvent3, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent3_COPPUnblocked(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent3.VTable, @ptrCast(self.vtable)).COPPUnblocked(@as(*const IMSVidStreamBufferSourceEvent3, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferSourceEvent3_ContentPrimarilyAudio(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferSourceEvent3.VTable, @ptrCast(self.vtable)).ContentPrimarilyAudio(@as(*const IMSVidStreamBufferSourceEvent3, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IMSVidStreamBufferV2SourceEvent_Value = Guid.initString("49c771f9-41b2-4cf7-9f9a-a313a8f6027e");
pub const IID_IMSVidStreamBufferV2SourceEvent = &IID_IMSVidStreamBufferV2SourceEvent_Value;
pub const IMSVidStreamBufferV2SourceEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidFilePlaybackEvent.VTable,
        RatingsChanged: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TimeHole: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
                StreamOffsetMS: i32,
                SizeMS: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
                StreamOffsetMS: i32,
                SizeMS: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StaleDataRead: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ContentBecomingStale: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StaleFileDeleted: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RateChange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
                qwNewRate: f64,
                qwOldRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
                qwNewRate: f64,
                qwOldRate: f64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        BroadcastEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
                Guid: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
                Guid: ?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        BroadcastEventEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
                Guid: ?BSTR,
                Param1: u32,
                Param2: u32,
                Param3: u32,
                Param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
                Guid: ?BSTR,
                Param1: u32,
                Param2: u32,
                Param3: u32,
                Param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ContentPrimarilyAudio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidStreamBufferV2SourceEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidFilePlaybackEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferV2SourceEvent_RatingsChanged(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferV2SourceEvent.VTable, @ptrCast(self.vtable)).RatingsChanged(@as(*const IMSVidStreamBufferV2SourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferV2SourceEvent_TimeHole(self: *const T, StreamOffsetMS: i32, SizeMS: i32) HRESULT {
                return @as(*const IMSVidStreamBufferV2SourceEvent.VTable, @ptrCast(self.vtable)).TimeHole(@as(*const IMSVidStreamBufferV2SourceEvent, @ptrCast(self)), StreamOffsetMS, SizeMS);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferV2SourceEvent_StaleDataRead(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferV2SourceEvent.VTable, @ptrCast(self.vtable)).StaleDataRead(@as(*const IMSVidStreamBufferV2SourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferV2SourceEvent_ContentBecomingStale(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferV2SourceEvent.VTable, @ptrCast(self.vtable)).ContentBecomingStale(@as(*const IMSVidStreamBufferV2SourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferV2SourceEvent_StaleFileDeleted(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferV2SourceEvent.VTable, @ptrCast(self.vtable)).StaleFileDeleted(@as(*const IMSVidStreamBufferV2SourceEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferV2SourceEvent_RateChange(self: *const T, qwNewRate: f64, qwOldRate: f64) HRESULT {
                return @as(*const IMSVidStreamBufferV2SourceEvent.VTable, @ptrCast(self.vtable)).RateChange(@as(*const IMSVidStreamBufferV2SourceEvent, @ptrCast(self)), qwNewRate, qwOldRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferV2SourceEvent_BroadcastEvent(self: *const T, _param_Guid: ?BSTR) HRESULT {
                return @as(*const IMSVidStreamBufferV2SourceEvent.VTable, @ptrCast(self.vtable)).BroadcastEvent(@as(*const IMSVidStreamBufferV2SourceEvent, @ptrCast(self)), _param_Guid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferV2SourceEvent_BroadcastEventEx(self: *const T, _param_Guid: ?BSTR, Param1: u32, Param2: u32, Param3: u32, Param4: u32) HRESULT {
                return @as(*const IMSVidStreamBufferV2SourceEvent.VTable, @ptrCast(self.vtable)).BroadcastEventEx(@as(*const IMSVidStreamBufferV2SourceEvent, @ptrCast(self)), _param_Guid, Param1, Param2, Param3, Param4);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidStreamBufferV2SourceEvent_ContentPrimarilyAudio(self: *const T) HRESULT {
                return @as(*const IMSVidStreamBufferV2SourceEvent.VTable, @ptrCast(self.vtable)).ContentPrimarilyAudio(@as(*const IMSVidStreamBufferV2SourceEvent, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidVideoRenderer2_Value = Guid.initString("6bdd5c1e-2810-4159-94bc-05511ae8549b");
pub const IID_IMSVidVideoRenderer2 = &IID_IMSVidVideoRenderer2_Value;
pub const IMSVidVideoRenderer2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidVideoRenderer.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Allocator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer2,
                AllocPresent: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer2,
                AllocPresent: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__Allocator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer2,
                AllocPresent: ?*?*IVMRSurfaceAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer2,
                AllocPresent: ?*?*IVMRSurfaceAllocator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Allocator_ID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer2,
                ID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer2,
                ID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetAllocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVideoRenderer2,
                AllocPresent: ?*IUnknown,
                ID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVideoRenderer2,
                AllocPresent: ?*IUnknown,
                ID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        _SetAllocator2: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVideoRenderer2,
                AllocPresent: ?*IVMRSurfaceAllocator,
                ID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVideoRenderer2,
                AllocPresent: ?*IVMRSurfaceAllocator,
                ID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SuppressEffects: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer2,
                bSuppress: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer2,
                bSuppress: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SuppressEffects: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRenderer2,
                bSuppress: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRenderer2,
                bSuppress: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidVideoRenderer.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer2_get_Allocator(self: *const T, AllocPresent: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidVideoRenderer2.VTable, @ptrCast(self.vtable)).get_Allocator(@as(*const IMSVidVideoRenderer2, @ptrCast(self)), AllocPresent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer2_get__Allocator(self: *const T, AllocPresent: ?*?*IVMRSurfaceAllocator) HRESULT {
                return @as(*const IMSVidVideoRenderer2.VTable, @ptrCast(self.vtable)).get__Allocator(@as(*const IMSVidVideoRenderer2, @ptrCast(self)), AllocPresent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer2_get_Allocator_ID(self: *const T, ID: ?*i32) HRESULT {
                return @as(*const IMSVidVideoRenderer2.VTable, @ptrCast(self.vtable)).get_Allocator_ID(@as(*const IMSVidVideoRenderer2, @ptrCast(self)), ID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer2_SetAllocator(self: *const T, AllocPresent: ?*IUnknown, ID: i32) HRESULT {
                return @as(*const IMSVidVideoRenderer2.VTable, @ptrCast(self.vtable)).SetAllocator(@as(*const IMSVidVideoRenderer2, @ptrCast(self)), AllocPresent, ID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer2__SetAllocator2(self: *const T, AllocPresent: ?*IVMRSurfaceAllocator, ID: i32) HRESULT {
                return @as(*const IMSVidVideoRenderer2.VTable, @ptrCast(self.vtable))._SetAllocator2(@as(*const IMSVidVideoRenderer2, @ptrCast(self)), AllocPresent, ID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer2_put_SuppressEffects(self: *const T, bSuppress: i16) HRESULT {
                return @as(*const IMSVidVideoRenderer2.VTable, @ptrCast(self.vtable)).put_SuppressEffects(@as(*const IMSVidVideoRenderer2, @ptrCast(self)), bSuppress);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRenderer2_get_SuppressEffects(self: *const T, bSuppress: ?*i16) HRESULT {
                return @as(*const IMSVidVideoRenderer2.VTable, @ptrCast(self.vtable)).get_SuppressEffects(@as(*const IMSVidVideoRenderer2, @ptrCast(self)), bSuppress);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidVideoRendererEvent2_Value = Guid.initString("7145ed66-4730-4fdb-8a53-fde7508d3e5e");
pub const IID_IMSVidVideoRendererEvent2 = &IID_IMSVidVideoRendererEvent2_Value;
pub const IMSVidVideoRendererEvent2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidOutputDeviceEvent.VTable,
        OverlayUnavailable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVideoRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVideoRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidOutputDeviceEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRendererEvent2_OverlayUnavailable(self: *const T) HRESULT {
                return @as(*const IMSVidVideoRendererEvent2.VTable, @ptrCast(self.vtable)).OverlayUnavailable(@as(*const IMSVidVideoRendererEvent2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidVMR9_Value = Guid.initString("d58b0015-ebef-44bb-bbdd-3f3699d76ea1");
pub const IID_IMSVidVMR9 = &IID_IMSVidVMR9_Value;
pub const IMSVidVMR9 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidVideoRenderer.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Allocator_ID: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVMR9,
                ID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVMR9,
                ID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetAllocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVMR9,
                AllocPresent: ?*IUnknown,
                ID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVMR9,
                AllocPresent: ?*IUnknown,
                ID: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SuppressEffects: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVMR9,
                bSuppress: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVMR9,
                bSuppress: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SuppressEffects: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVMR9,
                bSuppress: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVMR9,
                bSuppress: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Allocator: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVMR9,
                AllocPresent: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVMR9,
                AllocPresent: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidVideoRenderer.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVMR9_get_Allocator_ID(self: *const T, ID: ?*i32) HRESULT {
                return @as(*const IMSVidVMR9.VTable, @ptrCast(self.vtable)).get_Allocator_ID(@as(*const IMSVidVMR9, @ptrCast(self)), ID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVMR9_SetAllocator(self: *const T, AllocPresent: ?*IUnknown, ID: i32) HRESULT {
                return @as(*const IMSVidVMR9.VTable, @ptrCast(self.vtable)).SetAllocator(@as(*const IMSVidVMR9, @ptrCast(self)), AllocPresent, ID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVMR9_put_SuppressEffects(self: *const T, bSuppress: i16) HRESULT {
                return @as(*const IMSVidVMR9.VTable, @ptrCast(self.vtable)).put_SuppressEffects(@as(*const IMSVidVMR9, @ptrCast(self)), bSuppress);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVMR9_get_SuppressEffects(self: *const T, bSuppress: ?*i16) HRESULT {
                return @as(*const IMSVidVMR9.VTable, @ptrCast(self.vtable)).get_SuppressEffects(@as(*const IMSVidVMR9, @ptrCast(self)), bSuppress);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVMR9_get_Allocator(self: *const T, AllocPresent: ?*?*IUnknown) HRESULT {
                return @as(*const IMSVidVMR9.VTable, @ptrCast(self.vtable)).get_Allocator(@as(*const IMSVidVMR9, @ptrCast(self)), AllocPresent);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IMSVidEVR_Value = Guid.initString("15e496ae-82a8-4cf9-a6b6-c561dc60398f");
pub const IID_IMSVidEVR = &IID_IMSVidEVR_Value;
pub const IMSVidEVR = extern struct {
    pub const VTable = extern struct {
        base: IMSVidVideoRenderer.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Presenter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidEVR,
                ppAllocPresent: ?*?*IMFVideoPresenter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidEVR,
                ppAllocPresent: ?*?*IMFVideoPresenter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Presenter: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidEVR,
                pAllocPresent: ?*IMFVideoPresenter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidEVR,
                pAllocPresent: ?*IMFVideoPresenter,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_SuppressEffects: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidEVR,
                bSuppress: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidEVR,
                bSuppress: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_SuppressEffects: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidEVR,
                bSuppress: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidEVR,
                bSuppress: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidVideoRenderer.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidEVR_get_Presenter(self: *const T, ppAllocPresent: ?*?*IMFVideoPresenter) HRESULT {
                return @as(*const IMSVidEVR.VTable, @ptrCast(self.vtable)).get_Presenter(@as(*const IMSVidEVR, @ptrCast(self)), ppAllocPresent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidEVR_put_Presenter(self: *const T, pAllocPresent: ?*IMFVideoPresenter) HRESULT {
                return @as(*const IMSVidEVR.VTable, @ptrCast(self.vtable)).put_Presenter(@as(*const IMSVidEVR, @ptrCast(self)), pAllocPresent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidEVR_put_SuppressEffects(self: *const T, bSuppress: i16) HRESULT {
                return @as(*const IMSVidEVR.VTable, @ptrCast(self.vtable)).put_SuppressEffects(@as(*const IMSVidEVR, @ptrCast(self)), bSuppress);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidEVR_get_SuppressEffects(self: *const T, bSuppress: ?*i16) HRESULT {
                return @as(*const IMSVidEVR.VTable, @ptrCast(self.vtable)).get_SuppressEffects(@as(*const IMSVidEVR, @ptrCast(self)), bSuppress);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidEVREvent_Value = Guid.initString("349abb10-883c-4f22-8714-cecaeee45d62");
pub const IID_IMSVidEVREvent = &IID_IMSVidEVREvent_Value;
pub const IMSVidEVREvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidOutputDeviceEvent.VTable,
        OnUserEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidEVREvent,
                lEventCode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidEVREvent,
                lEventCode: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidOutputDeviceEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidEVREvent_OnUserEvent(self: *const T, lEventCode: i32) HRESULT {
                return @as(*const IMSVidEVREvent.VTable, @ptrCast(self.vtable)).OnUserEvent(@as(*const IMSVidEVREvent, @ptrCast(self)), lEventCode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidAudioRenderer_Value = Guid.initString("37b0353f-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidAudioRenderer = &IID_IMSVidAudioRenderer_Value;
pub const IMSVidAudioRenderer = extern struct {
    pub const VTable = extern struct {
        base: IMSVidOutputDevice.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Volume: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAudioRenderer,
                lVol: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAudioRenderer,
                lVol: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Volume: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAudioRenderer,
                lVol: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAudioRenderer,
                lVol: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Balance: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAudioRenderer,
                lBal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAudioRenderer,
                lBal: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Balance: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAudioRenderer,
                lBal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAudioRenderer,
                lBal: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidOutputDevice.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRenderer_put_Volume(self: *const T, lVol: i32) HRESULT {
                return @as(*const IMSVidAudioRenderer.VTable, @ptrCast(self.vtable)).put_Volume(@as(*const IMSVidAudioRenderer, @ptrCast(self)), lVol);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRenderer_get_Volume(self: *const T, lVol: ?*i32) HRESULT {
                return @as(*const IMSVidAudioRenderer.VTable, @ptrCast(self.vtable)).get_Volume(@as(*const IMSVidAudioRenderer, @ptrCast(self)), lVol);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRenderer_put_Balance(self: *const T, lBal: i32) HRESULT {
                return @as(*const IMSVidAudioRenderer.VTable, @ptrCast(self.vtable)).put_Balance(@as(*const IMSVidAudioRenderer, @ptrCast(self)), lBal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRenderer_get_Balance(self: *const T, lBal: ?*i32) HRESULT {
                return @as(*const IMSVidAudioRenderer.VTable, @ptrCast(self.vtable)).get_Balance(@as(*const IMSVidAudioRenderer, @ptrCast(self)), lBal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSVidAudioRendererEvent_Value = Guid.initString("37b03541-a4c8-11d2-b634-00c04f79498e");
pub const IID_IMSVidAudioRendererEvent = &IID_IMSVidAudioRendererEvent_Value;
pub const IMSVidAudioRendererEvent = extern struct {
    pub const VTable = extern struct {
        base: IMSVidOutputDeviceEvent.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidOutputDeviceEvent.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IMSVidAudioRendererEvent2_Value = Guid.initString("e3f55729-353b-4c43-a028-50f79aa9a907");
pub const IID_IMSVidAudioRendererEvent2 = &IID_IMSVidAudioRendererEvent2_Value;
pub const IMSVidAudioRendererEvent2 = extern struct {
    pub const VTable = extern struct {
        base: IMSVidAudioRendererEvent.VTable,
        AVDecAudioDualMono: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AVAudioSampleRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AVAudioChannelConfig: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AVAudioChannelCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AVDecCommonMeanBitRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AVDDSurroundMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AVDecCommonInputFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AVDecCommonOutputFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererEvent2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMSVidAudioRendererEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererEvent2_AVDecAudioDualMono(self: *const T) HRESULT {
                return @as(*const IMSVidAudioRendererEvent2.VTable, @ptrCast(self.vtable)).AVDecAudioDualMono(@as(*const IMSVidAudioRendererEvent2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererEvent2_AVAudioSampleRate(self: *const T) HRESULT {
                return @as(*const IMSVidAudioRendererEvent2.VTable, @ptrCast(self.vtable)).AVAudioSampleRate(@as(*const IMSVidAudioRendererEvent2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererEvent2_AVAudioChannelConfig(self: *const T) HRESULT {
                return @as(*const IMSVidAudioRendererEvent2.VTable, @ptrCast(self.vtable)).AVAudioChannelConfig(@as(*const IMSVidAudioRendererEvent2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererEvent2_AVAudioChannelCount(self: *const T) HRESULT {
                return @as(*const IMSVidAudioRendererEvent2.VTable, @ptrCast(self.vtable)).AVAudioChannelCount(@as(*const IMSVidAudioRendererEvent2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererEvent2_AVDecCommonMeanBitRate(self: *const T) HRESULT {
                return @as(*const IMSVidAudioRendererEvent2.VTable, @ptrCast(self.vtable)).AVDecCommonMeanBitRate(@as(*const IMSVidAudioRendererEvent2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererEvent2_AVDDSurroundMode(self: *const T) HRESULT {
                return @as(*const IMSVidAudioRendererEvent2.VTable, @ptrCast(self.vtable)).AVDDSurroundMode(@as(*const IMSVidAudioRendererEvent2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererEvent2_AVDecCommonInputFormat(self: *const T) HRESULT {
                return @as(*const IMSVidAudioRendererEvent2.VTable, @ptrCast(self.vtable)).AVDecCommonInputFormat(@as(*const IMSVidAudioRendererEvent2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererEvent2_AVDecCommonOutputFormat(self: *const T) HRESULT {
                return @as(*const IMSVidAudioRendererEvent2.VTable, @ptrCast(self.vtable)).AVDecCommonOutputFormat(@as(*const IMSVidAudioRendererEvent2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidInputDevices_Value = Guid.initString("c5702cd1-9b79-11d3-b654-00c04f79498e");
pub const IID_IMSVidInputDevices = &IID_IMSVidInputDevices_Value;
pub const IMSVidInputDevices = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidInputDevices,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidInputDevices,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidInputDevices,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidInputDevices,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidInputDevices,
                v: VARIANT,
                pDB: ?*?*IMSVidInputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidInputDevices,
                v: VARIANT,
                pDB: ?*?*IMSVidInputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Add: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidInputDevices,
                pDB: ?*IMSVidInputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidInputDevices,
                pDB: ?*IMSVidInputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Remove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidInputDevices,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidInputDevices,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidInputDevices_get_Count(self: *const T, lCount: ?*i32) HRESULT {
                return @as(*const IMSVidInputDevices.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IMSVidInputDevices, @ptrCast(self)), lCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidInputDevices_get__NewEnum(self: *const T, pD: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IMSVidInputDevices.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const IMSVidInputDevices, @ptrCast(self)), pD);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidInputDevices_get_Item(self: *const T, v: VARIANT, pDB: ?*?*IMSVidInputDevice) HRESULT {
                return @as(*const IMSVidInputDevices.VTable, @ptrCast(self.vtable)).get_Item(@as(*const IMSVidInputDevices, @ptrCast(self)), v, pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidInputDevices_Add(self: *const T, pDB: ?*IMSVidInputDevice) HRESULT {
                return @as(*const IMSVidInputDevices.VTable, @ptrCast(self.vtable)).Add(@as(*const IMSVidInputDevices, @ptrCast(self)), pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidInputDevices_Remove(self: *const T, v: VARIANT) HRESULT {
                return @as(*const IMSVidInputDevices.VTable, @ptrCast(self.vtable)).Remove(@as(*const IMSVidInputDevices, @ptrCast(self)), v);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidOutputDevices_Value = Guid.initString("c5702cd2-9b79-11d3-b654-00c04f79498e");
pub const IID_IMSVidOutputDevices = &IID_IMSVidOutputDevices_Value;
pub const IMSVidOutputDevices = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidOutputDevices,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidOutputDevices,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidOutputDevices,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidOutputDevices,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidOutputDevices,
                v: VARIANT,
                pDB: ?*?*IMSVidOutputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidOutputDevices,
                v: VARIANT,
                pDB: ?*?*IMSVidOutputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Add: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidOutputDevices,
                pDB: ?*IMSVidOutputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidOutputDevices,
                pDB: ?*IMSVidOutputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Remove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidOutputDevices,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidOutputDevices,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidOutputDevices_get_Count(self: *const T, lCount: ?*i32) HRESULT {
                return @as(*const IMSVidOutputDevices.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IMSVidOutputDevices, @ptrCast(self)), lCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidOutputDevices_get__NewEnum(self: *const T, pD: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IMSVidOutputDevices.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const IMSVidOutputDevices, @ptrCast(self)), pD);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidOutputDevices_get_Item(self: *const T, v: VARIANT, pDB: ?*?*IMSVidOutputDevice) HRESULT {
                return @as(*const IMSVidOutputDevices.VTable, @ptrCast(self.vtable)).get_Item(@as(*const IMSVidOutputDevices, @ptrCast(self)), v, pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidOutputDevices_Add(self: *const T, pDB: ?*IMSVidOutputDevice) HRESULT {
                return @as(*const IMSVidOutputDevices.VTable, @ptrCast(self.vtable)).Add(@as(*const IMSVidOutputDevices, @ptrCast(self)), pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidOutputDevices_Remove(self: *const T, v: VARIANT) HRESULT {
                return @as(*const IMSVidOutputDevices.VTable, @ptrCast(self.vtable)).Remove(@as(*const IMSVidOutputDevices, @ptrCast(self)), v);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidVideoRendererDevices_Value = Guid.initString("c5702cd3-9b79-11d3-b654-00c04f79498e");
pub const IID_IMSVidVideoRendererDevices = &IID_IMSVidVideoRendererDevices_Value;
pub const IMSVidVideoRendererDevices = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRendererDevices,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRendererDevices,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRendererDevices,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRendererDevices,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidVideoRendererDevices,
                v: VARIANT,
                pDB: ?*?*IMSVidVideoRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidVideoRendererDevices,
                v: VARIANT,
                pDB: ?*?*IMSVidVideoRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Add: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVideoRendererDevices,
                pDB: ?*IMSVidVideoRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVideoRendererDevices,
                pDB: ?*IMSVidVideoRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Remove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidVideoRendererDevices,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidVideoRendererDevices,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRendererDevices_get_Count(self: *const T, lCount: ?*i32) HRESULT {
                return @as(*const IMSVidVideoRendererDevices.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IMSVidVideoRendererDevices, @ptrCast(self)), lCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRendererDevices_get__NewEnum(self: *const T, pD: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IMSVidVideoRendererDevices.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const IMSVidVideoRendererDevices, @ptrCast(self)), pD);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRendererDevices_get_Item(self: *const T, v: VARIANT, pDB: ?*?*IMSVidVideoRenderer) HRESULT {
                return @as(*const IMSVidVideoRendererDevices.VTable, @ptrCast(self.vtable)).get_Item(@as(*const IMSVidVideoRendererDevices, @ptrCast(self)), v, pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRendererDevices_Add(self: *const T, pDB: ?*IMSVidVideoRenderer) HRESULT {
                return @as(*const IMSVidVideoRendererDevices.VTable, @ptrCast(self.vtable)).Add(@as(*const IMSVidVideoRendererDevices, @ptrCast(self)), pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidVideoRendererDevices_Remove(self: *const T, v: VARIANT) HRESULT {
                return @as(*const IMSVidVideoRendererDevices.VTable, @ptrCast(self.vtable)).Remove(@as(*const IMSVidVideoRendererDevices, @ptrCast(self)), v);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidAudioRendererDevices_Value = Guid.initString("c5702cd4-9b79-11d3-b654-00c04f79498e");
pub const IID_IMSVidAudioRendererDevices = &IID_IMSVidAudioRendererDevices_Value;
pub const IMSVidAudioRendererDevices = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAudioRendererDevices,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAudioRendererDevices,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAudioRendererDevices,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAudioRendererDevices,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidAudioRendererDevices,
                v: VARIANT,
                pDB: ?*?*IMSVidAudioRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidAudioRendererDevices,
                v: VARIANT,
                pDB: ?*?*IMSVidAudioRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Add: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererDevices,
                pDB: ?*IMSVidAudioRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererDevices,
                pDB: ?*IMSVidAudioRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Remove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidAudioRendererDevices,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidAudioRendererDevices,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererDevices_get_Count(self: *const T, lCount: ?*i32) HRESULT {
                return @as(*const IMSVidAudioRendererDevices.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IMSVidAudioRendererDevices, @ptrCast(self)), lCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererDevices_get__NewEnum(self: *const T, pD: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IMSVidAudioRendererDevices.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const IMSVidAudioRendererDevices, @ptrCast(self)), pD);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererDevices_get_Item(self: *const T, v: VARIANT, pDB: ?*?*IMSVidAudioRenderer) HRESULT {
                return @as(*const IMSVidAudioRendererDevices.VTable, @ptrCast(self.vtable)).get_Item(@as(*const IMSVidAudioRendererDevices, @ptrCast(self)), v, pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererDevices_Add(self: *const T, pDB: ?*IMSVidAudioRenderer) HRESULT {
                return @as(*const IMSVidAudioRendererDevices.VTable, @ptrCast(self.vtable)).Add(@as(*const IMSVidAudioRendererDevices, @ptrCast(self)), pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidAudioRendererDevices_Remove(self: *const T, v: VARIANT) HRESULT {
                return @as(*const IMSVidAudioRendererDevices.VTable, @ptrCast(self.vtable)).Remove(@as(*const IMSVidAudioRendererDevices, @ptrCast(self)), v);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidFeatures_Value = Guid.initString("c5702cd5-9b79-11d3-b654-00c04f79498e");
pub const IID_IMSVidFeatures = &IID_IMSVidFeatures_Value;
pub const IMSVidFeatures = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Count: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidFeatures,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidFeatures,
                lCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__NewEnum: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidFeatures,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidFeatures,
                pD: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Item: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidFeatures,
                v: VARIANT,
                pDB: ?*?*IMSVidFeature,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidFeatures,
                v: VARIANT,
                pDB: ?*?*IMSVidFeature,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Add: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidFeatures,
                pDB: ?*IMSVidFeature,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidFeatures,
                pDB: ?*IMSVidFeature,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Remove: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidFeatures,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidFeatures,
                v: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidFeatures_get_Count(self: *const T, lCount: ?*i32) HRESULT {
                return @as(*const IMSVidFeatures.VTable, @ptrCast(self.vtable)).get_Count(@as(*const IMSVidFeatures, @ptrCast(self)), lCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidFeatures_get__NewEnum(self: *const T, pD: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IMSVidFeatures.VTable, @ptrCast(self.vtable)).get__NewEnum(@as(*const IMSVidFeatures, @ptrCast(self)), pD);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidFeatures_get_Item(self: *const T, v: VARIANT, pDB: ?*?*IMSVidFeature) HRESULT {
                return @as(*const IMSVidFeatures.VTable, @ptrCast(self.vtable)).get_Item(@as(*const IMSVidFeatures, @ptrCast(self)), v, pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidFeatures_Add(self: *const T, pDB: ?*IMSVidFeature) HRESULT {
                return @as(*const IMSVidFeatures.VTable, @ptrCast(self.vtable)).Add(@as(*const IMSVidFeatures, @ptrCast(self)), pDB);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidFeatures_Remove(self: *const T, v: VARIANT) HRESULT {
                return @as(*const IMSVidFeatures.VTable, @ptrCast(self.vtable)).Remove(@as(*const IMSVidFeatures, @ptrCast(self)), v);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const CLSID_MSVidAnalogTunerDevice_Value = Guid.initString("1c15d484-911d-11d2-b632-00c04f79498e");
pub const CLSID_MSVidAnalogTunerDevice = &CLSID_MSVidAnalogTunerDevice_Value;

const CLSID_MSVidBDATunerDevice_Value = Guid.initString("a2e3074e-6c3d-11d3-b653-00c04f79498e");
pub const CLSID_MSVidBDATunerDevice = &CLSID_MSVidBDATunerDevice_Value;

const CLSID_MSVidFilePlaybackDevice_Value = Guid.initString("37b0353c-a4c8-11d2-b634-00c04f79498e");
pub const CLSID_MSVidFilePlaybackDevice = &CLSID_MSVidFilePlaybackDevice_Value;

const CLSID_MSVidWebDVD_Value = Guid.initString("011b3619-fe63-4814-8a84-15a194ce9ce3");
pub const CLSID_MSVidWebDVD = &CLSID_MSVidWebDVD_Value;

const CLSID_MSVidWebDVDAdm_Value = Guid.initString("fa7c375b-66a7-4280-879d-fd459c84bb02");
pub const CLSID_MSVidWebDVDAdm = &CLSID_MSVidWebDVDAdm_Value;

const CLSID_MSVidVideoRenderer_Value = Guid.initString("37b03543-a4c8-11d2-b634-00c04f79498e");
pub const CLSID_MSVidVideoRenderer = &CLSID_MSVidVideoRenderer_Value;

const CLSID_MSVidVMR9_Value = Guid.initString("24dc3975-09bf-4231-8655-3ee71f43837d");
pub const CLSID_MSVidVMR9 = &CLSID_MSVidVMR9_Value;

const CLSID_MSVidEVR_Value = Guid.initString("c45268a2-fa81-4e19-b1e3-72edbd60aeda");
pub const CLSID_MSVidEVR = &CLSID_MSVidEVR_Value;

const CLSID_MSVidAudioRenderer_Value = Guid.initString("37b03544-a4c8-11d2-b634-00c04f79498e");
pub const CLSID_MSVidAudioRenderer = &CLSID_MSVidAudioRenderer_Value;

const CLSID_MSVidGenericSink_Value = Guid.initString("4a5869cf-929d-4040-ae03-fcafc5b9cd42");
pub const CLSID_MSVidGenericSink = &CLSID_MSVidGenericSink_Value;

const CLSID_MSVidStreamBufferSink_Value = Guid.initString("9e77aac4-35e5-42a1-bdc2-8f3ff399847c");
pub const CLSID_MSVidStreamBufferSink = &CLSID_MSVidStreamBufferSink_Value;

const CLSID_MSVidStreamBufferSource_Value = Guid.initString("ad8e510d-217f-409b-8076-29c5e73b98e8");
pub const CLSID_MSVidStreamBufferSource = &CLSID_MSVidStreamBufferSource_Value;

const CLSID_MSVidStreamBufferV2Source_Value = Guid.initString("fd351ea1-4173-4af4-821d-80d4ae979048");
pub const CLSID_MSVidStreamBufferV2Source = &CLSID_MSVidStreamBufferV2Source_Value;

const CLSID_MSVidEncoder_Value = Guid.initString("bb530c63-d9df-4b49-9439-63453962e598");
pub const CLSID_MSVidEncoder = &CLSID_MSVidEncoder_Value;

const CLSID_MSVidITVCapture_Value = Guid.initString("5740a302-ef0b-45ce-bf3b-4470a14a8980");
pub const CLSID_MSVidITVCapture = &CLSID_MSVidITVCapture_Value;

const CLSID_MSVidITVPlayback_Value = Guid.initString("9e797ed0-5253-4243-a9b7-bd06c58f8ef3");
pub const CLSID_MSVidITVPlayback = &CLSID_MSVidITVPlayback_Value;

const CLSID_MSVidCCA_Value = Guid.initString("86151827-e47b-45ee-8421-d10e6e690979");
pub const CLSID_MSVidCCA = &CLSID_MSVidCCA_Value;

const CLSID_MSVidClosedCaptioning_Value = Guid.initString("7f9cb14d-48e4-43b6-9346-1aebc39c64d3");
pub const CLSID_MSVidClosedCaptioning = &CLSID_MSVidClosedCaptioning_Value;

const CLSID_MSVidClosedCaptioningSI_Value = Guid.initString("92ed88bf-879e-448f-b6b6-a385bceb846d");
pub const CLSID_MSVidClosedCaptioningSI = &CLSID_MSVidClosedCaptioningSI_Value;

const CLSID_MSVidDataServices_Value = Guid.initString("334125c0-77e5-11d3-b653-00c04f79498e");
pub const CLSID_MSVidDataServices = &CLSID_MSVidDataServices_Value;

const CLSID_MSVidXDS_Value = Guid.initString("0149eedf-d08f-4142-8d73-d23903d21e90");
pub const CLSID_MSVidXDS = &CLSID_MSVidXDS_Value;

const CLSID_MSVidAnalogCaptureToDataServices_Value = Guid.initString("c5702cd6-9b79-11d3-b654-00c04f79498e");
pub const CLSID_MSVidAnalogCaptureToDataServices = &CLSID_MSVidAnalogCaptureToDataServices_Value;

const CLSID_MSVidDataServicesToStreamBufferSink_Value = Guid.initString("38f03426-e83b-4e68-b65b-dcae73304838");
pub const CLSID_MSVidDataServicesToStreamBufferSink = &CLSID_MSVidDataServicesToStreamBufferSink_Value;

const CLSID_MSVidDataServicesToXDS_Value = Guid.initString("0429ec6e-1144-4bed-b88b-2fb9899a4a3d");
pub const CLSID_MSVidDataServicesToXDS = &CLSID_MSVidDataServicesToXDS_Value;

const CLSID_MSVidAnalogCaptureToXDS_Value = Guid.initString("3540d440-5b1d-49cb-821a-e84b8cf065a7");
pub const CLSID_MSVidAnalogCaptureToXDS = &CLSID_MSVidAnalogCaptureToXDS_Value;

const CLSID_MSVidCtl_Value = Guid.initString("b0edf163-910a-11d2-b632-00c04f79498e");
pub const CLSID_MSVidCtl = &CLSID_MSVidCtl_Value;

const CLSID_MSVidInputDevices_Value = Guid.initString("c5702ccc-9b79-11d3-b654-00c04f79498e");
pub const CLSID_MSVidInputDevices = &CLSID_MSVidInputDevices_Value;

const CLSID_MSVidOutputDevices_Value = Guid.initString("c5702ccd-9b79-11d3-b654-00c04f79498e");
pub const CLSID_MSVidOutputDevices = &CLSID_MSVidOutputDevices_Value;

const CLSID_MSVidVideoRendererDevices_Value = Guid.initString("c5702cce-9b79-11d3-b654-00c04f79498e");
pub const CLSID_MSVidVideoRendererDevices = &CLSID_MSVidVideoRendererDevices_Value;

const CLSID_MSVidAudioRendererDevices_Value = Guid.initString("c5702ccf-9b79-11d3-b654-00c04f79498e");
pub const CLSID_MSVidAudioRendererDevices = &CLSID_MSVidAudioRendererDevices_Value;

const CLSID_MSVidFeatures_Value = Guid.initString("c5702cd0-9b79-11d3-b654-00c04f79498e");
pub const CLSID_MSVidFeatures = &CLSID_MSVidFeatures_Value;

const CLSID_MSVidGenericComposite_Value = Guid.initString("2764bce5-cc39-11d2-b639-00c04f79498e");
pub const CLSID_MSVidGenericComposite = &CLSID_MSVidGenericComposite_Value;

const CLSID_MSVidAnalogCaptureToOverlayMixer_Value = Guid.initString("e18af75a-08af-11d3-b64a-00c04f79498e");
pub const CLSID_MSVidAnalogCaptureToOverlayMixer = &CLSID_MSVidAnalogCaptureToOverlayMixer_Value;

const CLSID_MSVidWebDVDToVideoRenderer_Value = Guid.initString("267db0b3-55e3-4902-949b-df8f5cec0191");
pub const CLSID_MSVidWebDVDToVideoRenderer = &CLSID_MSVidWebDVDToVideoRenderer_Value;

const CLSID_MSVidWebDVDToAudioRenderer_Value = Guid.initString("8d04238e-9fd1-41c6-8de3-9e1ee309e935");
pub const CLSID_MSVidWebDVDToAudioRenderer = &CLSID_MSVidWebDVDToAudioRenderer_Value;

const CLSID_MSVidMPEG2DecoderToClosedCaptioning_Value = Guid.initString("6ad28ee1-5002-4e71-aaf7-bd077907b1a4");
pub const CLSID_MSVidMPEG2DecoderToClosedCaptioning = &CLSID_MSVidMPEG2DecoderToClosedCaptioning_Value;

const CLSID_MSVidAnalogCaptureToStreamBufferSink_Value = Guid.initString("9f50e8b1-9530-4ddc-825e-1af81d47aed6");
pub const CLSID_MSVidAnalogCaptureToStreamBufferSink = &CLSID_MSVidAnalogCaptureToStreamBufferSink_Value;

const CLSID_MSVidDigitalCaptureToStreamBufferSink_Value = Guid.initString("abe40035-27c3-4a2f-8153-6624471608af");
pub const CLSID_MSVidDigitalCaptureToStreamBufferSink = &CLSID_MSVidDigitalCaptureToStreamBufferSink_Value;

const CLSID_MSVidITVToStreamBufferSink_Value = Guid.initString("92b94828-1af7-4e6e-9ebf-770657f77af5");
pub const CLSID_MSVidITVToStreamBufferSink = &CLSID_MSVidITVToStreamBufferSink_Value;

const CLSID_MSVidCCAToStreamBufferSink_Value = Guid.initString("3ef76d68-8661-4843-8b8f-c37163d8c9ce");
pub const CLSID_MSVidCCAToStreamBufferSink = &CLSID_MSVidCCAToStreamBufferSink_Value;

const CLSID_MSVidEncoderToStreamBufferSink_Value = Guid.initString("a0b9b497-afbc-45ad-a8a6-9b077c40d4f2");
pub const CLSID_MSVidEncoderToStreamBufferSink = &CLSID_MSVidEncoderToStreamBufferSink_Value;

const CLSID_MSVidFilePlaybackToVideoRenderer_Value = Guid.initString("b401c5eb-8457-427f-84ea-a4d2363364b0");
pub const CLSID_MSVidFilePlaybackToVideoRenderer = &CLSID_MSVidFilePlaybackToVideoRenderer_Value;

const CLSID_MSVidFilePlaybackToAudioRenderer_Value = Guid.initString("cc23f537-18d4-4ece-93bd-207a84726979");
pub const CLSID_MSVidFilePlaybackToAudioRenderer = &CLSID_MSVidFilePlaybackToAudioRenderer_Value;

const CLSID_MSVidAnalogTVToEncoder_Value = Guid.initString("28953661-0231-41db-8986-21ff4388ee9b");
pub const CLSID_MSVidAnalogTVToEncoder = &CLSID_MSVidAnalogTVToEncoder_Value;

const CLSID_MSVidStreamBufferSourceToVideoRenderer_Value = Guid.initString("3c4708dc-b181-46a8-8da8-4ab0371758cd");
pub const CLSID_MSVidStreamBufferSourceToVideoRenderer = &CLSID_MSVidStreamBufferSourceToVideoRenderer_Value;

const CLSID_MSVidAnalogCaptureToCCA_Value = Guid.initString("942b7909-a28e-49a1-a207-34ebcbcb4b3b");
pub const CLSID_MSVidAnalogCaptureToCCA = &CLSID_MSVidAnalogCaptureToCCA_Value;

const CLSID_MSVidDigitalCaptureToCCA_Value = Guid.initString("73d14237-b9db-4efa-a6dd-84350421fb2f");
pub const CLSID_MSVidDigitalCaptureToCCA = &CLSID_MSVidDigitalCaptureToCCA_Value;

const CLSID_MSVidDigitalCaptureToITV_Value = Guid.initString("5d8e73f7-4989-4ac8-8a98-39ba0d325302");
pub const CLSID_MSVidDigitalCaptureToITV = &CLSID_MSVidDigitalCaptureToITV_Value;

const CLSID_MSVidSBESourceToITV_Value = Guid.initString("2291478c-5ee3-4bef-ab5d-b5ff2cf58352");
pub const CLSID_MSVidSBESourceToITV = &CLSID_MSVidSBESourceToITV_Value;

const CLSID_MSVidSBESourceToCC_Value = Guid.initString("9193a8f9-0cba-400e-aa97-eb4709164576");
pub const CLSID_MSVidSBESourceToCC = &CLSID_MSVidSBESourceToCC_Value;

const CLSID_MSVidSBESourceToGenericSink_Value = Guid.initString("991da7e5-953f-435b-be5e-b92a05edfc42");
pub const CLSID_MSVidSBESourceToGenericSink = &CLSID_MSVidSBESourceToGenericSink_Value;

const CLSID_MSVidCCToVMR_Value = Guid.initString("c4bf2784-ae00-41ba-9828-9c953bd3c54a");
pub const CLSID_MSVidCCToVMR = &CLSID_MSVidCCToVMR_Value;

const CLSID_MSVidCCToAR_Value = Guid.initString("d76334ca-d89e-4baf-86ab-ddb59372afc2");
pub const CLSID_MSVidCCToAR = &CLSID_MSVidCCToAR_Value;

const CLSID_MSEventBinder_Value = Guid.initString("577faa18-4518-445e-8f70-1473f8cf4ba4");
pub const CLSID_MSEventBinder = &CLSID_MSEventBinder_Value;

const CLSID_MSVidStreamBufferRecordingControl_Value = Guid.initString("caafdd83-cefc-4e3d-ba03-175f17a24f91");
pub const CLSID_MSVidStreamBufferRecordingControl = &CLSID_MSVidStreamBufferRecordingControl_Value;

const CLSID_MSVidRect_Value = Guid.initString("cb4276e6-7d5f-4cf1-9727-629c5e6db6ae");
pub const CLSID_MSVidRect = &CLSID_MSVidRect_Value;

const CLSID_MSVidDevice_Value = Guid.initString("6e40476f-9c49-4c3e-8bb9-8587958eff74");
pub const CLSID_MSVidDevice = &CLSID_MSVidDevice_Value;

const CLSID_MSVidDevice2_Value = Guid.initString("30997f7d-b3b5-4a1c-983a-1fe8098cb77d");
pub const CLSID_MSVidDevice2 = &CLSID_MSVidDevice2_Value;

const CLSID_MSVidInputDevice_Value = Guid.initString("ac1972f2-138a-4ca3-90da-ae51112eda28");
pub const CLSID_MSVidInputDevice = &CLSID_MSVidInputDevice_Value;

const CLSID_MSVidVideoInputDevice_Value = Guid.initString("95f4820b-bb3a-4e2d-bc64-5b817bc2c30e");
pub const CLSID_MSVidVideoInputDevice = &CLSID_MSVidVideoInputDevice_Value;

const CLSID_MSVidVideoPlaybackDevice_Value = Guid.initString("1990d634-1a5e-4071-a34a-53aaffce9f36");
pub const CLSID_MSVidVideoPlaybackDevice = &CLSID_MSVidVideoPlaybackDevice_Value;

const CLSID_MSVidFeature_Value = Guid.initString("7748530b-c08a-47ea-b24c-be8695ff405f");
pub const CLSID_MSVidFeature = &CLSID_MSVidFeature_Value;

const CLSID_MSVidOutput_Value = Guid.initString("87eb890d-03ad-4e9d-9866-376e5ec572ed");
pub const CLSID_MSVidOutput = &CLSID_MSVidOutput_Value;

pub const MSViddispidList = enum(i32) {
    Inputs = 0,
    Outputs = 1,
    _Inputs = 2,
    _Outputs = 3,
    VideoRenderers = 4,
    AudioRenderers = 5,
    Features = 6,
    Input = 7,
    Output = 8,
    VideoRenderer = 9,
    AudioRenderer = 10,
    SelectedFeatures = 11,
    View = 12,
    Build = 13,
    Pause = 14,
    Run = 15,
    Stop = 16,
    Decompose = 17,
    DisplaySize = 18,
    MaintainAspectRatio = 19,
    ColorKey = 20,
    StateChange = 21,
    getState = 22,
    unbind = 23,
    bind = 24,
    DisableVideo = 25,
    DisableAudio = 26,
    ViewNext = 27,
    ServiceP = 28,
};
pub const dispidInputs = MSViddispidList.Inputs;
pub const dispidOutputs = MSViddispidList.Outputs;
pub const dispid_Inputs = MSViddispidList._Inputs;
pub const dispid_Outputs = MSViddispidList._Outputs;
pub const dispidVideoRenderers = MSViddispidList.VideoRenderers;
pub const dispidAudioRenderers = MSViddispidList.AudioRenderers;
pub const dispidFeatures = MSViddispidList.Features;
pub const dispidInput = MSViddispidList.Input;
pub const dispidOutput = MSViddispidList.Output;
pub const dispidVideoRenderer = MSViddispidList.VideoRenderer;
pub const dispidAudioRenderer = MSViddispidList.AudioRenderer;
pub const dispidSelectedFeatures = MSViddispidList.SelectedFeatures;
pub const dispidView = MSViddispidList.View;
pub const dispidBuild = MSViddispidList.Build;
pub const dispidPause = MSViddispidList.Pause;
pub const dispidRun = MSViddispidList.Run;
pub const dispidStop = MSViddispidList.Stop;
pub const dispidDecompose = MSViddispidList.Decompose;
pub const dispidDisplaySize = MSViddispidList.DisplaySize;
pub const dispidMaintainAspectRatio = MSViddispidList.MaintainAspectRatio;
pub const dispidColorKey = MSViddispidList.ColorKey;
pub const dispidStateChange = MSViddispidList.StateChange;
pub const dispidgetState = MSViddispidList.getState;
pub const dispidunbind = MSViddispidList.unbind;
pub const dispidbind = MSViddispidList.bind;
pub const dispidDisableVideo = MSViddispidList.DisableVideo;
pub const dispidDisableAudio = MSViddispidList.DisableAudio;
pub const dispidViewNext = MSViddispidList.ViewNext;
pub const dispidServiceP = MSViddispidList.ServiceP;

pub const DisplaySizeList = enum(i32) {
    DefaultSize = 0,
    // SourceSize = 0, this enum value conflicts with DefaultSize
    HalfSourceSize = 1,
    DoubleSourceSize = 2,
    FullScreen = 3,
    HalfScreen = 4,
    QuarterScreen = 5,
    SixteenthScreen = 6,
};
pub const dslDefaultSize = DisplaySizeList.DefaultSize;
pub const dslSourceSize = DisplaySizeList.DefaultSize;
pub const dslHalfSourceSize = DisplaySizeList.HalfSourceSize;
pub const dslDoubleSourceSize = DisplaySizeList.DoubleSourceSize;
pub const dslFullScreen = DisplaySizeList.FullScreen;
pub const dslHalfScreen = DisplaySizeList.HalfScreen;
pub const dslQuarterScreen = DisplaySizeList.QuarterScreen;
pub const dslSixteenthScreen = DisplaySizeList.SixteenthScreen;

pub const MSVidCtlStateList = enum(i32) {
    UNBUILT = -1,
    STOP = 0,
    PAUSE = 1,
    PLAY = 2,
};
pub const STATE_UNBUILT = MSVidCtlStateList.UNBUILT;
pub const STATE_STOP = MSVidCtlStateList.STOP;
pub const STATE_PAUSE = MSVidCtlStateList.PAUSE;
pub const STATE_PLAY = MSVidCtlStateList.PLAY;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IMSVidCtl_Value = Guid.initString("b0edf162-910a-11d2-b632-00c04f79498e");
pub const IID_IMSVidCtl = &IID_IMSVidCtl_Value;
pub const IMSVidCtl = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AutoSize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pbool: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pbool: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_AutoSize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                vbool: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                vbool: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_BackColor: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                backcolor: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                backcolor: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_BackColor: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                backcolor: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                backcolor: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Enabled: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pbool: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pbool: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_Enabled: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                vbool: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                vbool: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_TabStop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pbool: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pbool: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_TabStop: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                vbool: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                vbool: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Window: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                phwnd: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                phwnd: ?*?HWND,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Refresh: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_DisplaySize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                CurrentValue: ?*DisplaySizeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                CurrentValue: ?*DisplaySizeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_DisplaySize: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                NewValue: DisplaySizeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                NewValue: DisplaySizeList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_MaintainAspectRatio: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                CurrentValue: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                CurrentValue: ?*i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_MaintainAspectRatio: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                NewValue: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                NewValue: i16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_ColorKey: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                CurrentValue: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                CurrentValue: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_ColorKey: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                NewValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                NewValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_InputsAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                CategoryGuid: ?BSTR,
                pVal: ?*?*IMSVidInputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                CategoryGuid: ?BSTR,
                pVal: ?*?*IMSVidInputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OutputsAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                CategoryGuid: ?BSTR,
                pVal: ?*?*IMSVidOutputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                CategoryGuid: ?BSTR,
                pVal: ?*?*IMSVidOutputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__InputsAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                CategoryGuid: ?*const Guid,
                pVal: ?*?*IMSVidInputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                CategoryGuid: ?*const Guid,
                pVal: ?*?*IMSVidInputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get__OutputsAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                CategoryGuid: ?*const Guid,
                pVal: ?*?*IMSVidOutputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                CategoryGuid: ?*const Guid,
                pVal: ?*?*IMSVidOutputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoRenderersAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidVideoRendererDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidVideoRendererDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioRenderersAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidAudioRendererDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidAudioRendererDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FeaturesAvailable: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidFeatures,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidFeatures,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_InputActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidInputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidInputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_InputActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidInputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidInputDevice,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_OutputsActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidOutputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidOutputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_OutputsActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidOutputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidOutputDevices,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_VideoRendererActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidVideoRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidVideoRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_VideoRendererActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidVideoRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidVideoRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_AudioRendererActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidAudioRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidAudioRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_AudioRendererActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidAudioRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidAudioRenderer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_FeaturesActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidFeatures,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*?*IMSVidFeatures,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        put_FeaturesActive: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidFeatures,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                pVal: ?*IMSVidFeatures,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_State: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IMSVidCtl,
                lState: ?*MSVidCtlStateList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IMSVidCtl,
                lState: ?*MSVidCtlStateList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        View: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
                v: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
                v: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Build: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Pause: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Run: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Decompose: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DisableVideo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DisableAudio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ViewNext: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSVidCtl,
                v: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSVidCtl,
                v: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_AutoSize(self: *const T, pbool: ?*i16) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_AutoSize(@as(*const IMSVidCtl, @ptrCast(self)), pbool);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_AutoSize(self: *const T, vbool: i16) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_AutoSize(@as(*const IMSVidCtl, @ptrCast(self)), vbool);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_BackColor(self: *const T, backcolor: ?*u32) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_BackColor(@as(*const IMSVidCtl, @ptrCast(self)), backcolor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_BackColor(self: *const T, backcolor: u32) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_BackColor(@as(*const IMSVidCtl, @ptrCast(self)), backcolor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_Enabled(self: *const T, pbool: ?*i16) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_Enabled(@as(*const IMSVidCtl, @ptrCast(self)), pbool);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_Enabled(self: *const T, vbool: i16) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_Enabled(@as(*const IMSVidCtl, @ptrCast(self)), vbool);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_TabStop(self: *const T, pbool: ?*i16) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_TabStop(@as(*const IMSVidCtl, @ptrCast(self)), pbool);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_TabStop(self: *const T, vbool: i16) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_TabStop(@as(*const IMSVidCtl, @ptrCast(self)), vbool);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_Window(self: *const T, phwnd: ?*?HWND) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_Window(@as(*const IMSVidCtl, @ptrCast(self)), phwnd);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_Refresh(self: *const T) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).Refresh(@as(*const IMSVidCtl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_DisplaySize(self: *const T, CurrentValue: ?*DisplaySizeList) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_DisplaySize(@as(*const IMSVidCtl, @ptrCast(self)), CurrentValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_DisplaySize(self: *const T, NewValue: DisplaySizeList) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_DisplaySize(@as(*const IMSVidCtl, @ptrCast(self)), NewValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_MaintainAspectRatio(self: *const T, CurrentValue: ?*i16) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_MaintainAspectRatio(@as(*const IMSVidCtl, @ptrCast(self)), CurrentValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_MaintainAspectRatio(self: *const T, NewValue: i16) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_MaintainAspectRatio(@as(*const IMSVidCtl, @ptrCast(self)), NewValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_ColorKey(self: *const T, CurrentValue: ?*u32) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_ColorKey(@as(*const IMSVidCtl, @ptrCast(self)), CurrentValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_ColorKey(self: *const T, NewValue: u32) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_ColorKey(@as(*const IMSVidCtl, @ptrCast(self)), NewValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_InputsAvailable(self: *const T, CategoryGuid: ?BSTR, pVal: ?*?*IMSVidInputDevices) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_InputsAvailable(@as(*const IMSVidCtl, @ptrCast(self)), CategoryGuid, pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_OutputsAvailable(self: *const T, CategoryGuid: ?BSTR, pVal: ?*?*IMSVidOutputDevices) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_OutputsAvailable(@as(*const IMSVidCtl, @ptrCast(self)), CategoryGuid, pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get__InputsAvailable(self: *const T, CategoryGuid: ?*const Guid, pVal: ?*?*IMSVidInputDevices) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get__InputsAvailable(@as(*const IMSVidCtl, @ptrCast(self)), CategoryGuid, pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get__OutputsAvailable(self: *const T, CategoryGuid: ?*const Guid, pVal: ?*?*IMSVidOutputDevices) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get__OutputsAvailable(@as(*const IMSVidCtl, @ptrCast(self)), CategoryGuid, pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_VideoRenderersAvailable(self: *const T, pVal: ?*?*IMSVidVideoRendererDevices) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_VideoRenderersAvailable(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_AudioRenderersAvailable(self: *const T, pVal: ?*?*IMSVidAudioRendererDevices) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_AudioRenderersAvailable(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_FeaturesAvailable(self: *const T, pVal: ?*?*IMSVidFeatures) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_FeaturesAvailable(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_InputActive(self: *const T, pVal: ?*?*IMSVidInputDevice) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_InputActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_InputActive(self: *const T, pVal: ?*IMSVidInputDevice) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_InputActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_OutputsActive(self: *const T, pVal: ?*?*IMSVidOutputDevices) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_OutputsActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_OutputsActive(self: *const T, pVal: ?*IMSVidOutputDevices) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_OutputsActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_VideoRendererActive(self: *const T, pVal: ?*?*IMSVidVideoRenderer) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_VideoRendererActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_VideoRendererActive(self: *const T, pVal: ?*IMSVidVideoRenderer) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_VideoRendererActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_AudioRendererActive(self: *const T, pVal: ?*?*IMSVidAudioRenderer) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_AudioRendererActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_AudioRendererActive(self: *const T, pVal: ?*IMSVidAudioRenderer) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_AudioRendererActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_FeaturesActive(self: *const T, pVal: ?*?*IMSVidFeatures) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_FeaturesActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_put_FeaturesActive(self: *const T, pVal: ?*IMSVidFeatures) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).put_FeaturesActive(@as(*const IMSVidCtl, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_get_State(self: *const T, lState: ?*MSVidCtlStateList) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).get_State(@as(*const IMSVidCtl, @ptrCast(self)), lState);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_View(self: *const T, v: ?*VARIANT) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).View(@as(*const IMSVidCtl, @ptrCast(self)), v);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_Build(self: *const T) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).Build(@as(*const IMSVidCtl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_Pause(self: *const T) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).Pause(@as(*const IMSVidCtl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_Run(self: *const T) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).Run(@as(*const IMSVidCtl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_Stop(self: *const T) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).Stop(@as(*const IMSVidCtl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_Decompose(self: *const T) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).Decompose(@as(*const IMSVidCtl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_DisableVideo(self: *const T) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).DisableVideo(@as(*const IMSVidCtl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_DisableAudio(self: *const T) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).DisableAudio(@as(*const IMSVidCtl, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSVidCtl_ViewNext(self: *const T, v: ?*VARIANT) HRESULT {
                return @as(*const IMSVidCtl.VTable, @ptrCast(self.vtable)).ViewNext(@as(*const IMSVidCtl, @ptrCast(self)), v);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMSEventBinder_Value = Guid.initString("c3a9f406-2222-436d-86d5-ba3229279efb");
pub const IID_IMSEventBinder = &IID_IMSEventBinder_Value;
pub const IMSEventBinder = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
        Bind: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSEventBinder,
                pEventObject: ?*IDispatch,
                EventName: ?BSTR,
                EventHandler: ?BSTR,
                CancelID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSEventBinder,
                pEventObject: ?*IDispatch,
                EventName: ?BSTR,
                EventHandler: ?BSTR,
                CancelID: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unbind: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMSEventBinder,
                CancelCookie: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMSEventBinder,
                CancelCookie: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSEventBinder_Bind(self: *const T, pEventObject: ?*IDispatch, EventName: ?BSTR, EventHandler: ?BSTR, CancelID: ?*i32) HRESULT {
                return @as(*const IMSEventBinder.VTable, @ptrCast(self.vtable)).Bind(@as(*const IMSEventBinder, @ptrCast(self)), pEventObject, EventName, EventHandler, CancelID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMSEventBinder_Unbind(self: *const T, CancelCookie: u32) HRESULT {
                return @as(*const IMSEventBinder.VTable, @ptrCast(self.vtable)).Unbind(@as(*const IMSEventBinder, @ptrCast(self)), CancelCookie);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID__IMSVidCtlEvents_Value = Guid.initString("b0edf164-910a-11d2-b632-00c04f79498e");
pub const IID__IMSVidCtlEvents = &IID__IMSVidCtlEvents_Value;
pub const _IMSVidCtlEvents = extern struct {
    pub const VTable = extern struct {
        base: IDispatch.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDispatch.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferInitialize_Value = Guid.initString("9ce50f2d-6ba7-40fb-a034-50b1a674ec78");
pub const IID_IStreamBufferInitialize = &IID_IStreamBufferInitialize_Value;
pub const IStreamBufferInitialize = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetHKEY: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferInitialize,
                hkeyRoot: ?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferInitialize,
                hkeyRoot: ?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetSIDs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferInitialize,
                cSIDs: u32,
                ppSID: ?*?PSID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferInitialize,
                cSIDs: u32,
                ppSID: ?*?PSID,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferInitialize_SetHKEY(self: *const T, hkeyRoot: ?HKEY) HRESULT {
                return @as(*const IStreamBufferInitialize.VTable, @ptrCast(self.vtable)).SetHKEY(@as(*const IStreamBufferInitialize, @ptrCast(self)), hkeyRoot);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferInitialize_SetSIDs(self: *const T, cSIDs: u32, ppSID: ?*?PSID) HRESULT {
                return @as(*const IStreamBufferInitialize.VTable, @ptrCast(self.vtable)).SetSIDs(@as(*const IStreamBufferInitialize, @ptrCast(self)), cSIDs, ppSID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const RECORDING_TYPE = enum(i32) {
    CONTENT = 0,
    REFERENCE = 1,
};
pub const RECORDING_TYPE_CONTENT = RECORDING_TYPE.CONTENT;
pub const RECORDING_TYPE_REFERENCE = RECORDING_TYPE.REFERENCE;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferSink_Value = Guid.initString("afd1f242-7efd-45ee-ba4e-407a25c9a77a");
pub const IID_IStreamBufferSink = &IID_IStreamBufferSink_Value;
pub const IStreamBufferSink = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        LockProfile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferSink,
                pszStreamBufferFilename: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferSink,
                pszStreamBufferFilename: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateRecorder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferSink,
                pszFilename: ?[*:0]const u16,
                dwRecordType: u32,
                pRecordingIUnknown: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferSink,
                pszFilename: ?[*:0]const u16,
                dwRecordType: u32,
                pRecordingIUnknown: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsProfileLocked: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferSink_LockProfile(self: *const T, pszStreamBufferFilename: ?[*:0]const u16) HRESULT {
                return @as(*const IStreamBufferSink.VTable, @ptrCast(self.vtable)).LockProfile(@as(*const IStreamBufferSink, @ptrCast(self)), pszStreamBufferFilename);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferSink_CreateRecorder(self: *const T, pszFilename: ?[*:0]const u16, dwRecordType: u32, pRecordingIUnknown: ?*?*IUnknown) HRESULT {
                return @as(*const IStreamBufferSink.VTable, @ptrCast(self.vtable)).CreateRecorder(@as(*const IStreamBufferSink, @ptrCast(self)), pszFilename, dwRecordType, pRecordingIUnknown);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferSink_IsProfileLocked(self: *const T) HRESULT {
                return @as(*const IStreamBufferSink.VTable, @ptrCast(self.vtable)).IsProfileLocked(@as(*const IStreamBufferSink, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferSink2_Value = Guid.initString("db94a660-f4fb-4bfa-bcc6-fe159a4eea93");
pub const IID_IStreamBufferSink2 = &IID_IStreamBufferSink2_Value;
pub const IStreamBufferSink2 = extern struct {
    pub const VTable = extern struct {
        base: IStreamBufferSink.VTable,
        UnlockProfile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferSink2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferSink2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IStreamBufferSink.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferSink2_UnlockProfile(self: *const T) HRESULT {
                return @as(*const IStreamBufferSink2.VTable, @ptrCast(self.vtable)).UnlockProfile(@as(*const IStreamBufferSink2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferSink3_Value = Guid.initString("974723f2-887a-4452-9366-2cff3057bc8f");
pub const IID_IStreamBufferSink3 = &IID_IStreamBufferSink3_Value;
pub const IStreamBufferSink3 = extern struct {
    pub const VTable = extern struct {
        base: IStreamBufferSink2.VTable,
        SetAvailableFilter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferSink3,
                prtMin: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferSink3,
                prtMin: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IStreamBufferSink2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferSink3_SetAvailableFilter(self: *const T, prtMin: ?*i64) HRESULT {
                return @as(*const IStreamBufferSink3.VTable, @ptrCast(self.vtable)).SetAvailableFilter(@as(*const IStreamBufferSink3, @ptrCast(self)), prtMin);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferSource_Value = Guid.initString("1c5bd776-6ced-4f44-8164-5eab0e98db12");
pub const IID_IStreamBufferSource = &IID_IStreamBufferSource_Value;
pub const IStreamBufferSource = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetStreamSink: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferSource,
                pIStreamBufferSink: ?*IStreamBufferSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferSource,
                pIStreamBufferSink: ?*IStreamBufferSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferSource_SetStreamSink(self: *const T, pIStreamBufferSink: ?*IStreamBufferSink) HRESULT {
                return @as(*const IStreamBufferSource.VTable, @ptrCast(self.vtable)).SetStreamSink(@as(*const IStreamBufferSource, @ptrCast(self)), pIStreamBufferSink);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferRecordControl_Value = Guid.initString("ba9b6c99-f3c7-4ff2-92db-cfdd4851bf31");
pub const IID_IStreamBufferRecordControl = &IID_IStreamBufferRecordControl_Value;
pub const IStreamBufferRecordControl = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Start: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecordControl,
                prtStart: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecordControl,
                prtStart: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecordControl,
                rtStop: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecordControl,
                rtStop: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordingStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecordControl,
                phResult: ?*HRESULT,
                pbStarted: ?*BOOL,
                pbStopped: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecordControl,
                phResult: ?*HRESULT,
                pbStarted: ?*BOOL,
                pbStopped: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecordControl_Start(self: *const T, prtStart: ?*i64) HRESULT {
                return @as(*const IStreamBufferRecordControl.VTable, @ptrCast(self.vtable)).Start(@as(*const IStreamBufferRecordControl, @ptrCast(self)), prtStart);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecordControl_Stop(self: *const T, rtStop: i64) HRESULT {
                return @as(*const IStreamBufferRecordControl.VTable, @ptrCast(self.vtable)).Stop(@as(*const IStreamBufferRecordControl, @ptrCast(self)), rtStop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecordControl_GetRecordingStatus(self: *const T, phResult: ?*HRESULT, pbStarted: ?*BOOL, pbStopped: ?*BOOL) HRESULT {
                return @as(*const IStreamBufferRecordControl.VTable, @ptrCast(self.vtable)).GetRecordingStatus(@as(*const IStreamBufferRecordControl, @ptrCast(self)), phResult, pbStarted, pbStopped);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferRecComp_Value = Guid.initString("9e259a9b-8815-42ae-b09f-221970b154fd");
pub const IID_IStreamBufferRecComp = &IID_IStreamBufferRecComp_Value;
pub const IStreamBufferRecComp = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecComp,
                pszTargetFilename: ?[*:0]const u16,
                pszSBRecProfileRef: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecComp,
                pszTargetFilename: ?[*:0]const u16,
                pszSBRecProfileRef: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Append: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecComp,
                pszSBRecording: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecComp,
                pszSBRecording: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AppendEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecComp,
                pszSBRecording: ?[*:0]const u16,
                rtStart: i64,
                rtStop: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecComp,
                pszSBRecording: ?[*:0]const u16,
                rtStart: i64,
                rtStop: i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecComp,
                pcSeconds: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecComp,
                pcSeconds: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Close: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecComp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecComp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Cancel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecComp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecComp,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecComp_Initialize(self: *const T, pszTargetFilename: ?[*:0]const u16, pszSBRecProfileRef: ?[*:0]const u16) HRESULT {
                return @as(*const IStreamBufferRecComp.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IStreamBufferRecComp, @ptrCast(self)), pszTargetFilename, pszSBRecProfileRef);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecComp_Append(self: *const T, pszSBRecording: ?[*:0]const u16) HRESULT {
                return @as(*const IStreamBufferRecComp.VTable, @ptrCast(self.vtable)).Append(@as(*const IStreamBufferRecComp, @ptrCast(self)), pszSBRecording);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecComp_AppendEx(self: *const T, pszSBRecording: ?[*:0]const u16, rtStart: i64, rtStop: i64) HRESULT {
                return @as(*const IStreamBufferRecComp.VTable, @ptrCast(self.vtable)).AppendEx(@as(*const IStreamBufferRecComp, @ptrCast(self)), pszSBRecording, rtStart, rtStop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecComp_GetCurrentLength(self: *const T, pcSeconds: ?*u32) HRESULT {
                return @as(*const IStreamBufferRecComp.VTable, @ptrCast(self.vtable)).GetCurrentLength(@as(*const IStreamBufferRecComp, @ptrCast(self)), pcSeconds);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecComp_Close(self: *const T) HRESULT {
                return @as(*const IStreamBufferRecComp.VTable, @ptrCast(self.vtable)).Close(@as(*const IStreamBufferRecComp, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecComp_Cancel(self: *const T) HRESULT {
                return @as(*const IStreamBufferRecComp.VTable, @ptrCast(self.vtable)).Cancel(@as(*const IStreamBufferRecComp, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const STREAMBUFFER_ATTR_DATATYPE = enum(i32) {
    DWORD = 0,
    STRING = 1,
    BINARY = 2,
    BOOL = 3,
    QWORD = 4,
    WORD = 5,
    GUID = 6,
};
pub const STREAMBUFFER_TYPE_DWORD = STREAMBUFFER_ATTR_DATATYPE.DWORD;
pub const STREAMBUFFER_TYPE_STRING = STREAMBUFFER_ATTR_DATATYPE.STRING;
pub const STREAMBUFFER_TYPE_BINARY = STREAMBUFFER_ATTR_DATATYPE.BINARY;
pub const STREAMBUFFER_TYPE_BOOL = STREAMBUFFER_ATTR_DATATYPE.BOOL;
pub const STREAMBUFFER_TYPE_QWORD = STREAMBUFFER_ATTR_DATATYPE.QWORD;
pub const STREAMBUFFER_TYPE_WORD = STREAMBUFFER_ATTR_DATATYPE.WORD;
pub const STREAMBUFFER_TYPE_GUID = STREAMBUFFER_ATTR_DATATYPE.GUID;

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferRecordingAttribute_Value = Guid.initString("16ca4e03-fe69-4705-bd41-5b7dfc0c95f3");
pub const IID_IStreamBufferRecordingAttribute = &IID_IStreamBufferRecordingAttribute_Value;
pub const IStreamBufferRecordingAttribute = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetAttribute: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecordingAttribute,
                ulReserved: u32,
                pszAttributeName: ?[*:0]const u16,
                StreamBufferAttributeType: STREAMBUFFER_ATTR_DATATYPE,
                pbAttribute: [*:0]u8,
                cbAttributeLength: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecordingAttribute,
                ulReserved: u32,
                pszAttributeName: ?[*:0]const u16,
                StreamBufferAttributeType: STREAMBUFFER_ATTR_DATATYPE,
                pbAttribute: [*:0]u8,
                cbAttributeLength: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAttributeCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecordingAttribute,
                ulReserved: u32,
                pcAttributes: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecordingAttribute,
                ulReserved: u32,
                pcAttributes: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAttributeByName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecordingAttribute,
                pszAttributeName: ?[*:0]const u16,
                pulReserved: ?*u32,
                pStreamBufferAttributeType: ?*STREAMBUFFER_ATTR_DATATYPE,
                pbAttribute: [*:0]u8,
                pcbLength: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecordingAttribute,
                pszAttributeName: ?[*:0]const u16,
                pulReserved: ?*u32,
                pStreamBufferAttributeType: ?*STREAMBUFFER_ATTR_DATATYPE,
                pbAttribute: [*:0]u8,
                pcbLength: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAttributeByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecordingAttribute,
                wIndex: u16,
                pulReserved: ?*u32,
                pszAttributeName: ?PWSTR,
                pcchNameLength: ?*u16,
                pStreamBufferAttributeType: ?*STREAMBUFFER_ATTR_DATATYPE,
                pbAttribute: [*:0]u8,
                pcbLength: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecordingAttribute,
                wIndex: u16,
                pulReserved: ?*u32,
                pszAttributeName: ?PWSTR,
                pcchNameLength: ?*u16,
                pStreamBufferAttributeType: ?*STREAMBUFFER_ATTR_DATATYPE,
                pbAttribute: [*:0]u8,
                pcbLength: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferRecordingAttribute,
                ppIEnumStreamBufferAttrib: ?*?*IEnumStreamBufferRecordingAttrib,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferRecordingAttribute,
                ppIEnumStreamBufferAttrib: ?*?*IEnumStreamBufferRecordingAttrib,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecordingAttribute_SetAttribute(self: *const T, ulReserved: u32, pszAttributeName: ?[*:0]const u16, StreamBufferAttributeType: STREAMBUFFER_ATTR_DATATYPE, pbAttribute: [*:0]u8, cbAttributeLength: u16) HRESULT {
                return @as(*const IStreamBufferRecordingAttribute.VTable, @ptrCast(self.vtable)).SetAttribute(@as(*const IStreamBufferRecordingAttribute, @ptrCast(self)), ulReserved, pszAttributeName, StreamBufferAttributeType, pbAttribute, cbAttributeLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecordingAttribute_GetAttributeCount(self: *const T, ulReserved: u32, pcAttributes: ?*u16) HRESULT {
                return @as(*const IStreamBufferRecordingAttribute.VTable, @ptrCast(self.vtable)).GetAttributeCount(@as(*const IStreamBufferRecordingAttribute, @ptrCast(self)), ulReserved, pcAttributes);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecordingAttribute_GetAttributeByName(self: *const T, pszAttributeName: ?[*:0]const u16, pulReserved: ?*u32, pStreamBufferAttributeType: ?*STREAMBUFFER_ATTR_DATATYPE, pbAttribute: [*:0]u8, pcbLength: ?*u16) HRESULT {
                return @as(*const IStreamBufferRecordingAttribute.VTable, @ptrCast(self.vtable)).GetAttributeByName(@as(*const IStreamBufferRecordingAttribute, @ptrCast(self)), pszAttributeName, pulReserved, pStreamBufferAttributeType, pbAttribute, pcbLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecordingAttribute_GetAttributeByIndex(self: *const T, wIndex: u16, pulReserved: ?*u32, pszAttributeName: ?PWSTR, pcchNameLength: ?*u16, pStreamBufferAttributeType: ?*STREAMBUFFER_ATTR_DATATYPE, pbAttribute: [*:0]u8, pcbLength: ?*u16) HRESULT {
                return @as(*const IStreamBufferRecordingAttribute.VTable, @ptrCast(self.vtable)).GetAttributeByIndex(@as(*const IStreamBufferRecordingAttribute, @ptrCast(self)), wIndex, pulReserved, pszAttributeName, pcchNameLength, pStreamBufferAttributeType, pbAttribute, pcbLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferRecordingAttribute_EnumAttributes(self: *const T, ppIEnumStreamBufferAttrib: ?*?*IEnumStreamBufferRecordingAttrib) HRESULT {
                return @as(*const IStreamBufferRecordingAttribute.VTable, @ptrCast(self.vtable)).EnumAttributes(@as(*const IStreamBufferRecordingAttribute, @ptrCast(self)), ppIEnumStreamBufferAttrib);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const STREAMBUFFER_ATTRIBUTE = extern struct {
    pszName: ?PWSTR,
    StreamBufferAttributeType: STREAMBUFFER_ATTR_DATATYPE,
    pbAttribute: ?*u8,
    cbLength: u16,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IEnumStreamBufferRecordingAttrib_Value = Guid.initString("c18a9162-1e82-4142-8c73-5690fa62fe33");
pub const IID_IEnumStreamBufferRecordingAttrib = &IID_IEnumStreamBufferRecordingAttrib_Value;
pub const IEnumStreamBufferRecordingAttrib = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumStreamBufferRecordingAttrib,
                cRequest: u32,
                pStreamBufferAttribute: [*]STREAMBUFFER_ATTRIBUTE,
                pcReceived: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumStreamBufferRecordingAttrib,
                cRequest: u32,
                pStreamBufferAttribute: [*]STREAMBUFFER_ATTRIBUTE,
                pcReceived: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumStreamBufferRecordingAttrib,
                cRecords: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumStreamBufferRecordingAttrib,
                cRecords: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumStreamBufferRecordingAttrib,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumStreamBufferRecordingAttrib,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumStreamBufferRecordingAttrib,
                ppIEnumStreamBufferAttrib: ?*?*IEnumStreamBufferRecordingAttrib,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumStreamBufferRecordingAttrib,
                ppIEnumStreamBufferAttrib: ?*?*IEnumStreamBufferRecordingAttrib,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumStreamBufferRecordingAttrib_Next(self: *const T, cRequest: u32, pStreamBufferAttribute: [*]STREAMBUFFER_ATTRIBUTE, pcReceived: ?*u32) HRESULT {
                return @as(*const IEnumStreamBufferRecordingAttrib.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumStreamBufferRecordingAttrib, @ptrCast(self)), cRequest, pStreamBufferAttribute, pcReceived);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumStreamBufferRecordingAttrib_Skip(self: *const T, cRecords: u32) HRESULT {
                return @as(*const IEnumStreamBufferRecordingAttrib.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumStreamBufferRecordingAttrib, @ptrCast(self)), cRecords);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumStreamBufferRecordingAttrib_Reset(self: *const T) HRESULT {
                return @as(*const IEnumStreamBufferRecordingAttrib.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumStreamBufferRecordingAttrib, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumStreamBufferRecordingAttrib_Clone(self: *const T, ppIEnumStreamBufferAttrib: ?*?*IEnumStreamBufferRecordingAttrib) HRESULT {
                return @as(*const IEnumStreamBufferRecordingAttrib.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumStreamBufferRecordingAttrib, @ptrCast(self)), ppIEnumStreamBufferAttrib);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferConfigure_Value = Guid.initString("ce14dfae-4098-4af7-bbf7-d6511f835414");
pub const IID_IStreamBufferConfigure = &IID_IStreamBufferConfigure_Value;
pub const IStreamBufferConfigure = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetDirectory: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure,
                pszDirectoryName: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure,
                pszDirectoryName: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDirectory: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure,
                ppszDirectoryName: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure,
                ppszDirectoryName: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBackingFileCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure,
                dwMin: u32,
                dwMax: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure,
                dwMin: u32,
                dwMax: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBackingFileCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure,
                pdwMin: ?*u32,
                pdwMax: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure,
                pdwMin: ?*u32,
                pdwMax: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBackingFileDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure,
                dwSeconds: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure,
                dwSeconds: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBackingFileDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure,
                pdwSeconds: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure,
                pdwSeconds: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure_SetDirectory(self: *const T, pszDirectoryName: ?[*:0]const u16) HRESULT {
                return @as(*const IStreamBufferConfigure.VTable, @ptrCast(self.vtable)).SetDirectory(@as(*const IStreamBufferConfigure, @ptrCast(self)), pszDirectoryName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure_GetDirectory(self: *const T, ppszDirectoryName: ?*?PWSTR) HRESULT {
                return @as(*const IStreamBufferConfigure.VTable, @ptrCast(self.vtable)).GetDirectory(@as(*const IStreamBufferConfigure, @ptrCast(self)), ppszDirectoryName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure_SetBackingFileCount(self: *const T, dwMin: u32, dwMax: u32) HRESULT {
                return @as(*const IStreamBufferConfigure.VTable, @ptrCast(self.vtable)).SetBackingFileCount(@as(*const IStreamBufferConfigure, @ptrCast(self)), dwMin, dwMax);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure_GetBackingFileCount(self: *const T, pdwMin: ?*u32, pdwMax: ?*u32) HRESULT {
                return @as(*const IStreamBufferConfigure.VTable, @ptrCast(self.vtable)).GetBackingFileCount(@as(*const IStreamBufferConfigure, @ptrCast(self)), pdwMin, pdwMax);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure_SetBackingFileDuration(self: *const T, dwSeconds: u32) HRESULT {
                return @as(*const IStreamBufferConfigure.VTable, @ptrCast(self.vtable)).SetBackingFileDuration(@as(*const IStreamBufferConfigure, @ptrCast(self)), dwSeconds);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure_GetBackingFileDuration(self: *const T, pdwSeconds: ?*u32) HRESULT {
                return @as(*const IStreamBufferConfigure.VTable, @ptrCast(self.vtable)).GetBackingFileDuration(@as(*const IStreamBufferConfigure, @ptrCast(self)), pdwSeconds);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferConfigure2_Value = Guid.initString("53e037bf-3992-4282-ae34-2487b4dae06b");
pub const IID_IStreamBufferConfigure2 = &IID_IStreamBufferConfigure2_Value;
pub const IStreamBufferConfigure2 = extern struct {
    pub const VTable = extern struct {
        base: IStreamBufferConfigure.VTable,
        SetMultiplexedPacketSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure2,
                cbBytesPerPacket: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure2,
                cbBytesPerPacket: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMultiplexedPacketSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure2,
                pcbBytesPerPacket: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure2,
                pcbBytesPerPacket: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFFTransitionRates: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure2,
                dwMaxFullFrameRate: u32,
                dwMaxNonSkippingRate: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure2,
                dwMaxFullFrameRate: u32,
                dwMaxNonSkippingRate: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFFTransitionRates: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure2,
                pdwMaxFullFrameRate: ?*u32,
                pdwMaxNonSkippingRate: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure2,
                pdwMaxFullFrameRate: ?*u32,
                pdwMaxNonSkippingRate: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IStreamBufferConfigure.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure2_SetMultiplexedPacketSize(self: *const T, cbBytesPerPacket: u32) HRESULT {
                return @as(*const IStreamBufferConfigure2.VTable, @ptrCast(self.vtable)).SetMultiplexedPacketSize(@as(*const IStreamBufferConfigure2, @ptrCast(self)), cbBytesPerPacket);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure2_GetMultiplexedPacketSize(self: *const T, pcbBytesPerPacket: ?*u32) HRESULT {
                return @as(*const IStreamBufferConfigure2.VTable, @ptrCast(self.vtable)).GetMultiplexedPacketSize(@as(*const IStreamBufferConfigure2, @ptrCast(self)), pcbBytesPerPacket);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure2_SetFFTransitionRates(self: *const T, dwMaxFullFrameRate: u32, dwMaxNonSkippingRate: u32) HRESULT {
                return @as(*const IStreamBufferConfigure2.VTable, @ptrCast(self.vtable)).SetFFTransitionRates(@as(*const IStreamBufferConfigure2, @ptrCast(self)), dwMaxFullFrameRate, dwMaxNonSkippingRate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure2_GetFFTransitionRates(self: *const T, pdwMaxFullFrameRate: ?*u32, pdwMaxNonSkippingRate: ?*u32) HRESULT {
                return @as(*const IStreamBufferConfigure2.VTable, @ptrCast(self.vtable)).GetFFTransitionRates(@as(*const IStreamBufferConfigure2, @ptrCast(self)), pdwMaxFullFrameRate, pdwMaxNonSkippingRate);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_IStreamBufferConfigure3_Value = Guid.initString("7e2d2a1e-7192-4bd7-80c1-061fd1d10402");
pub const IID_IStreamBufferConfigure3 = &IID_IStreamBufferConfigure3_Value;
pub const IStreamBufferConfigure3 = extern struct {
    pub const VTable = extern struct {
        base: IStreamBufferConfigure2.VTable,
        SetStartRecConfig: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure3,
                fStartStopsCur: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure3,
                fStartStopsCur: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStartRecConfig: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure3,
                pfStartStopsCur: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure3,
                pfStartStopsCur: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetNamespace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure3,
                pszNamespace: ?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure3,
                pszNamespace: ?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNamespace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferConfigure3,
                ppszNamespace: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferConfigure3,
                ppszNamespace: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IStreamBufferConfigure2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure3_SetStartRecConfig(self: *const T, fStartStopsCur: BOOL) HRESULT {
                return @as(*const IStreamBufferConfigure3.VTable, @ptrCast(self.vtable)).SetStartRecConfig(@as(*const IStreamBufferConfigure3, @ptrCast(self)), fStartStopsCur);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure3_GetStartRecConfig(self: *const T, pfStartStopsCur: ?*BOOL) HRESULT {
                return @as(*const IStreamBufferConfigure3.VTable, @ptrCast(self.vtable)).GetStartRecConfig(@as(*const IStreamBufferConfigure3, @ptrCast(self)), pfStartStopsCur);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure3_SetNamespace(self: *const T, pszNamespace: ?PWSTR) HRESULT {
                return @as(*const IStreamBufferConfigure3.VTable, @ptrCast(self.vtable)).SetNamespace(@as(*const IStreamBufferConfigure3, @ptrCast(self)), pszNamespace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferConfigure3_GetNamespace(self: *const T, ppszNamespace: ?*?PWSTR) HRESULT {
                return @as(*const IStreamBufferConfigure3.VTable, @ptrCast(self.vtable)).GetNamespace(@as(*const IStreamBufferConfigure3, @ptrCast(self)), ppszNamespace);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferMediaSeeking_Value = Guid.initString("f61f5c26-863d-4afa-b0ba-2f81dc978596");
pub const IID_IStreamBufferMediaSeeking = &IID_IStreamBufferMediaSeeking_Value;
pub const IStreamBufferMediaSeeking = extern struct {
    pub const VTable = extern struct {
        base: IMediaSeeking.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IMediaSeeking.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferMediaSeeking2_Value = Guid.initString("3a439ab0-155f-470a-86a6-9ea54afd6eaf");
pub const IID_IStreamBufferMediaSeeking2 = &IID_IStreamBufferMediaSeeking2_Value;
pub const IStreamBufferMediaSeeking2 = extern struct {
    pub const VTable = extern struct {
        base: IStreamBufferMediaSeeking.VTable,
        SetRateEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferMediaSeeking2,
                dRate: f64,
                dwFramesPerSec: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferMediaSeeking2,
                dRate: f64,
                dwFramesPerSec: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IStreamBufferMediaSeeking.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferMediaSeeking2_SetRateEx(self: *const T, dRate: f64, dwFramesPerSec: u32) HRESULT {
                return @as(*const IStreamBufferMediaSeeking2.VTable, @ptrCast(self.vtable)).SetRateEx(@as(*const IStreamBufferMediaSeeking2, @ptrCast(self)), dRate, dwFramesPerSec);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const SBE_PIN_DATA = extern struct {
    cDataBytes: u64,
    cSamplesProcessed: u64,
    cDiscontinuities: u64,
    cSyncPoints: u64,
    cTimestamps: u64,
};

// TODO: this type is limited to platform 'windows5.1.2600'
const IID_IStreamBufferDataCounters_Value = Guid.initString("9d2a2563-31ab-402e-9a6b-adb903489440");
pub const IID_IStreamBufferDataCounters = &IID_IStreamBufferDataCounters_Value;
pub const IStreamBufferDataCounters = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferDataCounters,
                pPinData: ?*SBE_PIN_DATA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferDataCounters,
                pPinData: ?*SBE_PIN_DATA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ResetData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IStreamBufferDataCounters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IStreamBufferDataCounters,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferDataCounters_GetData(self: *const T, pPinData: ?*SBE_PIN_DATA) HRESULT {
                return @as(*const IStreamBufferDataCounters.VTable, @ptrCast(self.vtable)).GetData(@as(*const IStreamBufferDataCounters, @ptrCast(self)), pPinData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IStreamBufferDataCounters_ResetData(self: *const T) HRESULT {
                return @as(*const IStreamBufferDataCounters.VTable, @ptrCast(self.vtable)).ResetData(@as(*const IStreamBufferDataCounters, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const CROSSBAR_DEFAULT_FLAGS = enum(i32) {
    PROFILE = 1,
    STREAMS = 2,
};
pub const DEF_MODE_PROFILE = CROSSBAR_DEFAULT_FLAGS.PROFILE;
pub const DEF_MODE_STREAMS = CROSSBAR_DEFAULT_FLAGS.STREAMS;

pub const SBE2_STREAM_DESC = extern struct {
    Version: u32,
    StreamId: u32,
    Default: u32,
    Reserved: u32,
};

pub const DVR_STREAM_DESC = extern struct {
    Version: u32,
    StreamId: u32,
    Default: BOOL,
    Creation: BOOL,
    Reserved: u32,
    guidSubMediaType: Guid,
    guidFormatType: Guid,
    MediaType: AM_MEDIA_TYPE,
};

// TODO: this type is limited to platform 'windows6.1'
const IID_ISBE2GlobalEvent_Value = Guid.initString("caede759-b6b1-11db-a578-0018f3fa24c6");
pub const IID_ISBE2GlobalEvent = &IID_ISBE2GlobalEvent_Value;
pub const ISBE2GlobalEvent = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2GlobalEvent,
                idEvt: ?*const Guid,
                param1: u32,
                param2: u32,
                param3: u32,
                param4: u32,
                pSpanning: ?*BOOL,
                pcb: ?*u32,
                pb: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2GlobalEvent,
                idEvt: ?*const Guid,
                param1: u32,
                param2: u32,
                param3: u32,
                param4: u32,
                pSpanning: ?*BOOL,
                pcb: ?*u32,
                pb: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2GlobalEvent_GetEvent(self: *const T, idEvt: ?*const Guid, param1: u32, param2: u32, param3: u32, param4: u32, pSpanning: ?*BOOL, pcb: ?*u32, pb: ?*u8) HRESULT {
                return @as(*const ISBE2GlobalEvent.VTable, @ptrCast(self.vtable)).GetEvent(@as(*const ISBE2GlobalEvent, @ptrCast(self)), idEvt, param1, param2, param3, param4, pSpanning, pcb, pb);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_ISBE2GlobalEvent2_Value = Guid.initString("6d8309bf-00fe-4506-8b03-f8c65b5c9b39");
pub const IID_ISBE2GlobalEvent2 = &IID_ISBE2GlobalEvent2_Value;
pub const ISBE2GlobalEvent2 = extern struct {
    pub const VTable = extern struct {
        base: ISBE2GlobalEvent.VTable,
        GetEventEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2GlobalEvent2,
                idEvt: ?*const Guid,
                param1: u32,
                param2: u32,
                param3: u32,
                param4: u32,
                pSpanning: ?*BOOL,
                pcb: ?*u32,
                pb: ?*u8,
                pStreamTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2GlobalEvent2,
                idEvt: ?*const Guid,
                param1: u32,
                param2: u32,
                param3: u32,
                param4: u32,
                pSpanning: ?*BOOL,
                pcb: ?*u32,
                pb: ?*u8,
                pStreamTime: ?*i64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ISBE2GlobalEvent.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2GlobalEvent2_GetEventEx(self: *const T, idEvt: ?*const Guid, param1: u32, param2: u32, param3: u32, param4: u32, pSpanning: ?*BOOL, pcb: ?*u32, pb: ?*u8, pStreamTime: ?*i64) HRESULT {
                return @as(*const ISBE2GlobalEvent2.VTable, @ptrCast(self.vtable)).GetEventEx(@as(*const ISBE2GlobalEvent2, @ptrCast(self)), idEvt, param1, param2, param3, param4, pSpanning, pcb, pb, pStreamTime);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_ISBE2SpanningEvent_Value = Guid.initString("caede760-b6b1-11db-a578-0018f3fa24c6");
pub const IID_ISBE2SpanningEvent = &IID_ISBE2SpanningEvent_Value;
pub const ISBE2SpanningEvent = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2SpanningEvent,
                idEvt: ?*const Guid,
                streamId: u32,
                pcb: ?*u32,
                pb: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2SpanningEvent,
                idEvt: ?*const Guid,
                streamId: u32,
                pcb: ?*u32,
                pb: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2SpanningEvent_GetEvent(self: *const T, idEvt: ?*const Guid, streamId: u32, pcb: ?*u32, pb: ?*u8) HRESULT {
                return @as(*const ISBE2SpanningEvent.VTable, @ptrCast(self.vtable)).GetEvent(@as(*const ISBE2SpanningEvent, @ptrCast(self)), idEvt, streamId, pcb, pb);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_ISBE2Crossbar_Value = Guid.initString("547b6d26-3226-487e-8253-8aa168749434");
pub const IID_ISBE2Crossbar = &IID_ISBE2Crossbar_Value;
pub const ISBE2Crossbar = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        EnableDefaultMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2Crossbar,
                DefaultFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2Crossbar,
                DefaultFlags: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInitialProfile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2Crossbar,
                ppProfile: ?*?*ISBE2MediaTypeProfile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2Crossbar,
                ppProfile: ?*?*ISBE2MediaTypeProfile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetOutputProfile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2Crossbar,
                pProfile: ?*ISBE2MediaTypeProfile,
                pcOutputPins: ?*u32,
                ppOutputPins: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2Crossbar,
                pProfile: ?*ISBE2MediaTypeProfile,
                pcOutputPins: ?*u32,
                ppOutputPins: ?*?*IPin,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumStreams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2Crossbar,
                ppStreams: ?*?*ISBE2EnumStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2Crossbar,
                ppStreams: ?*?*ISBE2EnumStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2Crossbar_EnableDefaultMode(self: *const T, DefaultFlags: u32) HRESULT {
                return @as(*const ISBE2Crossbar.VTable, @ptrCast(self.vtable)).EnableDefaultMode(@as(*const ISBE2Crossbar, @ptrCast(self)), DefaultFlags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2Crossbar_GetInitialProfile(self: *const T, ppProfile: ?*?*ISBE2MediaTypeProfile) HRESULT {
                return @as(*const ISBE2Crossbar.VTable, @ptrCast(self.vtable)).GetInitialProfile(@as(*const ISBE2Crossbar, @ptrCast(self)), ppProfile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2Crossbar_SetOutputProfile(self: *const T, pProfile: ?*ISBE2MediaTypeProfile, pcOutputPins: ?*u32, ppOutputPins: ?*?*IPin) HRESULT {
                return @as(*const ISBE2Crossbar.VTable, @ptrCast(self.vtable)).SetOutputProfile(@as(*const ISBE2Crossbar, @ptrCast(self)), pProfile, pcOutputPins, ppOutputPins);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2Crossbar_EnumStreams(self: *const T, ppStreams: ?*?*ISBE2EnumStream) HRESULT {
                return @as(*const ISBE2Crossbar.VTable, @ptrCast(self.vtable)).EnumStreams(@as(*const ISBE2Crossbar, @ptrCast(self)), ppStreams);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_ISBE2StreamMap_Value = Guid.initString("667c7745-85b1-4c55-ae55-4e25056159fc");
pub const IID_ISBE2StreamMap = &IID_ISBE2StreamMap_Value;
pub const ISBE2StreamMap = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        MapStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2StreamMap,
                Stream: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2StreamMap,
                Stream: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnmapStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2StreamMap,
                Stream: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2StreamMap,
                Stream: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumMappedStreams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2StreamMap,
                ppStreams: ?*?*ISBE2EnumStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2StreamMap,
                ppStreams: ?*?*ISBE2EnumStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2StreamMap_MapStream(self: *const T, Stream: u32) HRESULT {
                return @as(*const ISBE2StreamMap.VTable, @ptrCast(self.vtable)).MapStream(@as(*const ISBE2StreamMap, @ptrCast(self)), Stream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2StreamMap_UnmapStream(self: *const T, Stream: u32) HRESULT {
                return @as(*const ISBE2StreamMap.VTable, @ptrCast(self.vtable)).UnmapStream(@as(*const ISBE2StreamMap, @ptrCast(self)), Stream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2StreamMap_EnumMappedStreams(self: *const T, ppStreams: ?*?*ISBE2EnumStream) HRESULT {
                return @as(*const ISBE2StreamMap.VTable, @ptrCast(self.vtable)).EnumMappedStreams(@as(*const ISBE2StreamMap, @ptrCast(self)), ppStreams);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_ISBE2EnumStream_Value = Guid.initString("f7611092-9fbc-46ec-a7c7-548ea78b71a4");
pub const IID_ISBE2EnumStream = &IID_ISBE2EnumStream_Value;
pub const ISBE2EnumStream = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2EnumStream,
                cRequest: u32,
                pStreamDesc: [*]SBE2_STREAM_DESC,
                pcReceived: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2EnumStream,
                cRequest: u32,
                pStreamDesc: [*]SBE2_STREAM_DESC,
                pcReceived: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2EnumStream,
                cRecords: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2EnumStream,
                cRecords: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2EnumStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2EnumStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2EnumStream,
                ppIEnumStream: ?*?*ISBE2EnumStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2EnumStream,
                ppIEnumStream: ?*?*ISBE2EnumStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2EnumStream_Next(self: *const T, cRequest: u32, pStreamDesc: [*]SBE2_STREAM_DESC, pcReceived: ?*u32) HRESULT {
                return @as(*const ISBE2EnumStream.VTable, @ptrCast(self.vtable)).Next(@as(*const ISBE2EnumStream, @ptrCast(self)), cRequest, pStreamDesc, pcReceived);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2EnumStream_Skip(self: *const T, cRecords: u32) HRESULT {
                return @as(*const ISBE2EnumStream.VTable, @ptrCast(self.vtable)).Skip(@as(*const ISBE2EnumStream, @ptrCast(self)), cRecords);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2EnumStream_Reset(self: *const T) HRESULT {
                return @as(*const ISBE2EnumStream.VTable, @ptrCast(self.vtable)).Reset(@as(*const ISBE2EnumStream, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2EnumStream_Clone(self: *const T, ppIEnumStream: ?*?*ISBE2EnumStream) HRESULT {
                return @as(*const ISBE2EnumStream.VTable, @ptrCast(self.vtable)).Clone(@as(*const ISBE2EnumStream, @ptrCast(self)), ppIEnumStream);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_ISBE2MediaTypeProfile_Value = Guid.initString("f238267d-4671-40d7-997e-25dc32cfed2a");
pub const IID_ISBE2MediaTypeProfile = &IID_ISBE2MediaTypeProfile_Value;
pub const ISBE2MediaTypeProfile = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetStreamCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2MediaTypeProfile,
                pCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2MediaTypeProfile,
                pCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2MediaTypeProfile,
                Index: u32,
                ppMediaType: ?*?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2MediaTypeProfile,
                Index: u32,
                ppMediaType: ?*?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2MediaTypeProfile,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2MediaTypeProfile,
                pMediaType: ?*AM_MEDIA_TYPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DeleteStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2MediaTypeProfile,
                Index: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2MediaTypeProfile,
                Index: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2MediaTypeProfile_GetStreamCount(self: *const T, pCount: ?*u32) HRESULT {
                return @as(*const ISBE2MediaTypeProfile.VTable, @ptrCast(self.vtable)).GetStreamCount(@as(*const ISBE2MediaTypeProfile, @ptrCast(self)), pCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2MediaTypeProfile_GetStream(self: *const T, Index: u32, ppMediaType: ?*?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const ISBE2MediaTypeProfile.VTable, @ptrCast(self.vtable)).GetStream(@as(*const ISBE2MediaTypeProfile, @ptrCast(self)), Index, ppMediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2MediaTypeProfile_AddStream(self: *const T, pMediaType: ?*AM_MEDIA_TYPE) HRESULT {
                return @as(*const ISBE2MediaTypeProfile.VTable, @ptrCast(self.vtable)).AddStream(@as(*const ISBE2MediaTypeProfile, @ptrCast(self)), pMediaType);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2MediaTypeProfile_DeleteStream(self: *const T, Index: u32) HRESULT {
                return @as(*const ISBE2MediaTypeProfile.VTable, @ptrCast(self.vtable)).DeleteStream(@as(*const ISBE2MediaTypeProfile, @ptrCast(self)), Index);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_ISBE2FileScan_Value = Guid.initString("3e2bf5a5-4f96-4899-a1a3-75e8be9a5ac0");
pub const IID_ISBE2FileScan = &IID_ISBE2FileScan_Value;
pub const ISBE2FileScan = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        RepairFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISBE2FileScan,
                filename: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISBE2FileScan,
                filename: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISBE2FileScan_RepairFile(self: *const T, filename: ?[*:0]const u16) HRESULT {
                return @as(*const ISBE2FileScan.VTable, @ptrCast(self.vtable)).RepairFile(@as(*const ISBE2FileScan, @ptrCast(self)), filename);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const CLSID_SectionList_Value = Guid.initString("73da5d04-4347-45d3-a9dc-fae9ddbe558d");
pub const CLSID_SectionList = &CLSID_SectionList_Value;

const CLSID_Mpeg2Stream_Value = Guid.initString("f91d96c7-8509-4d0b-ab26-a0dd10904bb7");
pub const CLSID_Mpeg2Stream = &CLSID_Mpeg2Stream_Value;

const CLSID_Mpeg2Data_Value = Guid.initString("c666e115-bb62-4027-a113-82d643fe2d99");
pub const CLSID_Mpeg2Data = &CLSID_Mpeg2Data_Value;

pub const PID_BITS_MIDL = extern struct {
    Bits: u16 align(1),
};

pub const MPEG_HEADER_BITS_MIDL = extern struct {
    Bits: u16 align(1),
};

pub const MPEG_HEADER_VERSION_BITS_MIDL = extern struct {
    Bits: u8,
};

pub const MPEG_CURRENT_NEXT_BIT = enum(i32) {
    NEXT = 0,
    CURRENT = 1,
};
pub const MPEG_SECTION_IS_NEXT = MPEG_CURRENT_NEXT_BIT.NEXT;
pub const MPEG_SECTION_IS_CURRENT = MPEG_CURRENT_NEXT_BIT.CURRENT;

pub const TID_EXTENSION = extern struct {
    wTidExt: u16 align(1),
    wCount: u16 align(1),
};

pub const SECTION = extern struct {
    TableId: u8,
    Header: extern union {
        S: MPEG_HEADER_BITS_MIDL align(1),
        W: u16 align(1),
    },
    SectionData: [1]u8,
};

pub const LONG_SECTION = extern struct {
    TableId: u8 align(1),
    Header: extern union {
        S: MPEG_HEADER_BITS_MIDL align(1),
        W: u16 align(1),
    } align(1),
    TableIdExtension: u16 align(1),
    Version: extern union {
        S: MPEG_HEADER_VERSION_BITS_MIDL,
        B: u8,
    } align(1),
    SectionNumber: u8 align(1),
    LastSectionNumber: u8 align(1),
    RemainingData: [1]u8 align(1),
};

pub const DSMCC_SECTION = extern struct {
    TableId: u8 align(1),
    Header: extern union {
        S: MPEG_HEADER_BITS_MIDL align(1),
        W: u16 align(1),
    } align(1),
    TableIdExtension: u16 align(1),
    Version: extern union {
        S: MPEG_HEADER_VERSION_BITS_MIDL,
        B: u8,
    } align(1),
    SectionNumber: u8 align(1),
    LastSectionNumber: u8 align(1),
    ProtocolDiscriminator: u8 align(1),
    DsmccType: u8 align(1),
    MessageId: u16 align(1),
    TransactionId: u32 align(1),
    Reserved: u8 align(1),
    AdaptationLength: u8 align(1),
    MessageLength: u16 align(1),
    RemainingData: [1]u8 align(1),
};

pub const MPEG_RQST_PACKET = extern struct {
    dwLength: u32 align(1),
    pSection: ?*SECTION align(1),
};

pub const MPEG_PACKET_LIST = extern struct {
    wPacketCount: u16 align(1),
    PacketList: [1]?*MPEG_RQST_PACKET align(1),
};

pub const DSMCC_FILTER_OPTIONS = extern struct {
    fSpecifyProtocol: BOOL align(1),
    Protocol: u8 align(1),
    fSpecifyType: BOOL align(1),
    Type: u8 align(1),
    fSpecifyMessageId: BOOL align(1),
    MessageId: u16 align(1),
    fSpecifyTransactionId: BOOL align(1),
    fUseTrxIdMessageIdMask: BOOL align(1),
    TransactionId: u32 align(1),
    fSpecifyModuleVersion: BOOL align(1),
    ModuleVersion: u8 align(1),
    fSpecifyBlockNumber: BOOL align(1),
    BlockNumber: u16 align(1),
    fGetModuleCall: BOOL align(1),
    NumberOfBlocksInModule: u16 align(1),
};

pub const ATSC_FILTER_OPTIONS = extern struct {
    fSpecifyEtmId: BOOL align(1),
    EtmId: u32 align(1),
};

pub const DVB_EIT_FILTER_OPTIONS = extern struct {
    fSpecifySegment: BOOL align(1),
    bSegment: u8 align(1),
};

pub const MPEG2_FILTER = extern struct {
    bVersionNumber: u8 align(1),
    wFilterSize: u16 align(1),
    fUseRawFilteringBits: BOOL align(1),
    Filter: [16]u8 align(1),
    Mask: [16]u8 align(1),
    fSpecifyTableIdExtension: BOOL align(1),
    TableIdExtension: u16 align(1),
    fSpecifyVersion: BOOL align(1),
    Version: u8 align(1),
    fSpecifySectionNumber: BOOL align(1),
    SectionNumber: u8 align(1),
    fSpecifyCurrentNext: BOOL align(1),
    fNext: BOOL align(1),
    fSpecifyDsmccOptions: BOOL align(1),
    Dsmcc: DSMCC_FILTER_OPTIONS align(1),
    fSpecifyAtscOptions: BOOL align(1),
    Atsc: ATSC_FILTER_OPTIONS align(1),
};

pub const MPEG2_FILTER2 = extern struct {
    Anonymous: extern union {
        Anonymous: extern struct {
            bVersionNumber: u8 align(1),
            wFilterSize: u16 align(1),
            fUseRawFilteringBits: BOOL align(1),
            Filter: [16]u8 align(1),
            Mask: [16]u8 align(1),
            fSpecifyTableIdExtension: BOOL align(1),
            TableIdExtension: u16 align(1),
            fSpecifyVersion: BOOL align(1),
            Version: u8 align(1),
            fSpecifySectionNumber: BOOL align(1),
            SectionNumber: u8 align(1),
            fSpecifyCurrentNext: BOOL align(1),
            fNext: BOOL align(1),
            fSpecifyDsmccOptions: BOOL align(1),
            Dsmcc: DSMCC_FILTER_OPTIONS align(1),
            fSpecifyAtscOptions: BOOL align(1),
            Atsc: ATSC_FILTER_OPTIONS align(1),
        },
        bVersion1Bytes: [124]u8,
    } align(1),
    fSpecifyDvbEitOptions: BOOL align(1),
    DvbEit: DVB_EIT_FILTER_OPTIONS align(1),
};

pub const MPEG_STREAM_BUFFER = extern struct {
    hr: HRESULT align(1),
    dwDataBufferSize: u32 align(1),
    dwSizeOfDataRead: u32 align(1),
    pDataBuffer: ?*u8 align(1),
};

pub const MPEG_TIME = extern struct {
    Hours: u8,
    Minutes: u8,
    Seconds: u8,
};

pub const MPEG_DATE = extern struct {
    Date: u8 align(1),
    Month: u8 align(1),
    Year: u16 align(1),
};

pub const MPEG_DATE_AND_TIME = extern struct {
    D: MPEG_DATE,
    T: MPEG_TIME,
};

pub const MPEG_CONTEXT_TYPE = enum(i32) {
    BCS_DEMUX = 0,
    WINSOCK = 1,
};
pub const MPEG_CONTEXT_BCS_DEMUX = MPEG_CONTEXT_TYPE.BCS_DEMUX;
pub const MPEG_CONTEXT_WINSOCK = MPEG_CONTEXT_TYPE.WINSOCK;

pub const MPEG_BCS_DEMUX = extern struct {
    AVMGraphId: u32 align(1),
};

pub const MPEG_WINSOCK = extern struct {
    AVMGraphId: u32 align(1),
};

pub const MPEG_CONTEXT = extern struct {
    Type: MPEG_CONTEXT_TYPE align(1),
    U: extern union {
        Demux: MPEG_BCS_DEMUX,
        Winsock: MPEG_WINSOCK,
    } align(1),
};

pub const MPEG_REQUEST_TYPE = enum(i32) {
    UNKNOWN = 0,
    GET_SECTION = 1,
    GET_SECTION_ASYNC = 2,
    GET_TABLE = 3,
    GET_TABLE_ASYNC = 4,
    GET_SECTIONS_STREAM = 5,
    GET_PES_STREAM = 6,
    GET_TS_STREAM = 7,
    START_MPE_STREAM = 8,
};
pub const MPEG_RQST_UNKNOWN = MPEG_REQUEST_TYPE.UNKNOWN;
pub const MPEG_RQST_GET_SECTION = MPEG_REQUEST_TYPE.GET_SECTION;
pub const MPEG_RQST_GET_SECTION_ASYNC = MPEG_REQUEST_TYPE.GET_SECTION_ASYNC;
pub const MPEG_RQST_GET_TABLE = MPEG_REQUEST_TYPE.GET_TABLE;
pub const MPEG_RQST_GET_TABLE_ASYNC = MPEG_REQUEST_TYPE.GET_TABLE_ASYNC;
pub const MPEG_RQST_GET_SECTIONS_STREAM = MPEG_REQUEST_TYPE.GET_SECTIONS_STREAM;
pub const MPEG_RQST_GET_PES_STREAM = MPEG_REQUEST_TYPE.GET_PES_STREAM;
pub const MPEG_RQST_GET_TS_STREAM = MPEG_REQUEST_TYPE.GET_TS_STREAM;
pub const MPEG_RQST_START_MPE_STREAM = MPEG_REQUEST_TYPE.START_MPE_STREAM;

pub const MPEG_SERVICE_REQUEST = extern struct {
    Type: MPEG_REQUEST_TYPE align(1),
    Context: MPEG_CONTEXT align(1),
    Pid: u16 align(1),
    TableId: u8 align(1),
    Filter: MPEG2_FILTER align(1),
    Flags: u32 align(1),
};

pub const MPEG_SERVICE_RESPONSE = extern struct {
    IPAddress: u32 align(1),
    Port: u16 align(1),
};

pub const DSMCC_ELEMENT = extern struct {
    pid: u16 align(1),
    bComponentTag: u8 align(1),
    dwCarouselId: u32 align(1),
    dwTransactionId: u32 align(1),
    pNext: ?*DSMCC_ELEMENT align(1),
};

pub const MPE_ELEMENT = extern struct {
    pid: u16 align(1),
    bComponentTag: u8 align(1),
    pNext: ?*MPE_ELEMENT align(1),
};

pub const MPEG_STREAM_FILTER = extern struct {
    wPidValue: u16 align(1),
    dwFilterSize: u32 align(1),
    fCrcEnabled: BOOL align(1),
    rgchFilter: [16]u8 align(1),
    rgchMask: [16]u8 align(1),
};

const IID_IMpeg2TableFilter_Value = Guid.initString("bdcdd913-9ecd-4fb2-81ae-adf747ea75a5");
pub const IID_IMpeg2TableFilter = &IID_IMpeg2TableFilter_Value;
pub const IMpeg2TableFilter = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AddPID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2TableFilter,
                p: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2TableFilter,
                p: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2TableFilter,
                p: u16,
                t: u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2TableFilter,
                p: u16,
                t: u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddExtension: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2TableFilter,
                p: u16,
                t: u8,
                e: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2TableFilter,
                p: u16,
                t: u8,
                e: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemovePID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2TableFilter,
                p: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2TableFilter,
                p: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2TableFilter,
                p: u16,
                t: u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2TableFilter,
                p: u16,
                t: u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveExtension: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2TableFilter,
                p: u16,
                t: u8,
                e: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2TableFilter,
                p: u16,
                t: u8,
                e: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2TableFilter_AddPID(self: *const T, p: u16) HRESULT {
                return @as(*const IMpeg2TableFilter.VTable, @ptrCast(self.vtable)).AddPID(@as(*const IMpeg2TableFilter, @ptrCast(self)), p);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2TableFilter_AddTable(self: *const T, p: u16, t: u8) HRESULT {
                return @as(*const IMpeg2TableFilter.VTable, @ptrCast(self.vtable)).AddTable(@as(*const IMpeg2TableFilter, @ptrCast(self)), p, t);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2TableFilter_AddExtension(self: *const T, p: u16, t: u8, e: u16) HRESULT {
                return @as(*const IMpeg2TableFilter.VTable, @ptrCast(self.vtable)).AddExtension(@as(*const IMpeg2TableFilter, @ptrCast(self)), p, t, e);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2TableFilter_RemovePID(self: *const T, p: u16) HRESULT {
                return @as(*const IMpeg2TableFilter.VTable, @ptrCast(self.vtable)).RemovePID(@as(*const IMpeg2TableFilter, @ptrCast(self)), p);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2TableFilter_RemoveTable(self: *const T, p: u16, t: u8) HRESULT {
                return @as(*const IMpeg2TableFilter.VTable, @ptrCast(self.vtable)).RemoveTable(@as(*const IMpeg2TableFilter, @ptrCast(self)), p, t);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2TableFilter_RemoveExtension(self: *const T, p: u16, t: u8, e: u16) HRESULT {
                return @as(*const IMpeg2TableFilter.VTable, @ptrCast(self.vtable)).RemoveExtension(@as(*const IMpeg2TableFilter, @ptrCast(self)), p, t, e);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const Mpeg2TableSampleHdr = extern struct {
    SectionCount: u8 align(1),
    Reserved: [3]u8 align(1),
    SectionOffsets: [1]i32 align(1),
};

const CLSID_Mpeg2DataLib_Value = Guid.initString("dbaf6c1b-b6a4-4898-ae65-204f0d9509a1");
pub const CLSID_Mpeg2DataLib = &CLSID_Mpeg2DataLib_Value;

const IID_IMpeg2Data_Value = Guid.initString("9b396d40-f380-4e3c-a514-1a82bf6ebfe6");
pub const IID_IMpeg2Data = &IID_IMpeg2Data_Value;
pub const IMpeg2Data = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetSection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2Data,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                dwTimeout: u32,
                ppSectionList: ?*?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2Data,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                dwTimeout: u32,
                ppSectionList: ?*?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2Data,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                dwTimeout: u32,
                ppSectionList: ?*?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2Data,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                dwTimeout: u32,
                ppSectionList: ?*?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamOfSections: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2Data,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                hDataReadyEvent: ?HANDLE,
                ppMpegStream: ?*?*IMpeg2Stream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2Data,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                hDataReadyEvent: ?HANDLE,
                ppMpegStream: ?*?*IMpeg2Stream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2Data_GetSection(self: *const T, pid: u16, tid: u8, pFilter: ?*MPEG2_FILTER, dwTimeout: u32, ppSectionList: ?*?*ISectionList) HRESULT {
                return @as(*const IMpeg2Data.VTable, @ptrCast(self.vtable)).GetSection(@as(*const IMpeg2Data, @ptrCast(self)), pid, tid, pFilter, dwTimeout, ppSectionList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2Data_GetTable(self: *const T, pid: u16, tid: u8, pFilter: ?*MPEG2_FILTER, dwTimeout: u32, ppSectionList: ?*?*ISectionList) HRESULT {
                return @as(*const IMpeg2Data.VTable, @ptrCast(self.vtable)).GetTable(@as(*const IMpeg2Data, @ptrCast(self)), pid, tid, pFilter, dwTimeout, ppSectionList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2Data_GetStreamOfSections(self: *const T, pid: u16, tid: u8, pFilter: ?*MPEG2_FILTER, hDataReadyEvent: ?HANDLE, ppMpegStream: ?*?*IMpeg2Stream) HRESULT {
                return @as(*const IMpeg2Data.VTable, @ptrCast(self.vtable)).GetStreamOfSections(@as(*const IMpeg2Data, @ptrCast(self)), pid, tid, pFilter, hDataReadyEvent, ppMpegStream);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ISectionList_Value = Guid.initString("afec1eb5-2a64-46c6-bf4b-ae3ccb6afdb0");
pub const IID_ISectionList = &IID_ISectionList_Value;
pub const ISectionList = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISectionList,
                requestType: MPEG_REQUEST_TYPE,
                pMpeg2Data: ?*IMpeg2Data,
                pContext: ?*MPEG_CONTEXT,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                timeout: u32,
                hDoneEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISectionList,
                requestType: MPEG_REQUEST_TYPE,
                pMpeg2Data: ?*IMpeg2Data,
                pContext: ?*MPEG_CONTEXT,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                timeout: u32,
                hDoneEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        InitializeWithRawSections: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISectionList,
                pmplSections: ?*MPEG_PACKET_LIST,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISectionList,
                pmplSections: ?*MPEG_PACKET_LIST,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CancelPendingRequest: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumberOfSections: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISectionList,
                pCount: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISectionList,
                pCount: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSectionData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISectionList,
                sectionNumber: u16,
                pdwRawPacketLength: ?*u32,
                ppSection: ?*?*SECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISectionList,
                sectionNumber: u16,
                pdwRawPacketLength: ?*u32,
                ppSection: ?*?*SECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProgramIdentifier: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISectionList,
                pPid: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISectionList,
                pPid: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableIdentifier: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISectionList,
                pTableId: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISectionList,
                pTableId: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISectionList_Initialize(self: *const T, requestType: MPEG_REQUEST_TYPE, pMpeg2Data: ?*IMpeg2Data, pContext: ?*MPEG_CONTEXT, pid: u16, tid: u8, pFilter: ?*MPEG2_FILTER, timeout: u32, hDoneEvent: ?HANDLE) HRESULT {
                return @as(*const ISectionList.VTable, @ptrCast(self.vtable)).Initialize(@as(*const ISectionList, @ptrCast(self)), requestType, pMpeg2Data, pContext, pid, tid, pFilter, timeout, hDoneEvent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISectionList_InitializeWithRawSections(self: *const T, pmplSections: ?*MPEG_PACKET_LIST) HRESULT {
                return @as(*const ISectionList.VTable, @ptrCast(self.vtable)).InitializeWithRawSections(@as(*const ISectionList, @ptrCast(self)), pmplSections);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISectionList_CancelPendingRequest(self: *const T) HRESULT {
                return @as(*const ISectionList.VTable, @ptrCast(self.vtable)).CancelPendingRequest(@as(*const ISectionList, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISectionList_GetNumberOfSections(self: *const T, pCount: ?*u16) HRESULT {
                return @as(*const ISectionList.VTable, @ptrCast(self.vtable)).GetNumberOfSections(@as(*const ISectionList, @ptrCast(self)), pCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISectionList_GetSectionData(self: *const T, sectionNumber: u16, pdwRawPacketLength: ?*u32, ppSection: ?*?*SECTION) HRESULT {
                return @as(*const ISectionList.VTable, @ptrCast(self.vtable)).GetSectionData(@as(*const ISectionList, @ptrCast(self)), sectionNumber, pdwRawPacketLength, ppSection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISectionList_GetProgramIdentifier(self: *const T, pPid: ?*u16) HRESULT {
                return @as(*const ISectionList.VTable, @ptrCast(self.vtable)).GetProgramIdentifier(@as(*const ISectionList, @ptrCast(self)), pPid);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISectionList_GetTableIdentifier(self: *const T, pTableId: ?*u8) HRESULT {
                return @as(*const ISectionList.VTable, @ptrCast(self.vtable)).GetTableIdentifier(@as(*const ISectionList, @ptrCast(self)), pTableId);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMpeg2Stream_Value = Guid.initString("400cc286-32a0-4ce4-9041-39571125a635");
pub const IID_IMpeg2Stream = &IID_IMpeg2Stream_Value;
pub const IMpeg2Stream = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2Stream,
                requestType: MPEG_REQUEST_TYPE,
                pMpeg2Data: ?*IMpeg2Data,
                pContext: ?*MPEG_CONTEXT,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                hDataReadyEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2Stream,
                requestType: MPEG_REQUEST_TYPE,
                pMpeg2Data: ?*IMpeg2Data,
                pContext: ?*MPEG_CONTEXT,
                pid: u16,
                tid: u8,
                pFilter: ?*MPEG2_FILTER,
                hDataReadyEvent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SupplyDataBuffer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMpeg2Stream,
                pStreamBuffer: ?*MPEG_STREAM_BUFFER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMpeg2Stream,
                pStreamBuffer: ?*MPEG_STREAM_BUFFER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2Stream_Initialize(self: *const T, requestType: MPEG_REQUEST_TYPE, pMpeg2Data: ?*IMpeg2Data, pContext: ?*MPEG_CONTEXT, pid: u16, tid: u8, pFilter: ?*MPEG2_FILTER, hDataReadyEvent: ?HANDLE) HRESULT {
                return @as(*const IMpeg2Stream.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IMpeg2Stream, @ptrCast(self)), requestType, pMpeg2Data, pContext, pid, tid, pFilter, hDataReadyEvent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMpeg2Stream_SupplyDataBuffer(self: *const T, pStreamBuffer: ?*MPEG_STREAM_BUFFER) HRESULT {
                return @as(*const IMpeg2Stream.VTable, @ptrCast(self.vtable)).SupplyDataBuffer(@as(*const IMpeg2Stream, @ptrCast(self)), pStreamBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IGenericDescriptor_Value = Guid.initString("6a5918f8-a77a-4f61-aed0-5702bdcda3e6");
pub const IID_IGenericDescriptor = &IID_IGenericDescriptor_Value;
pub const IGenericDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGenericDescriptor,
                pbDesc: ?*u8,
                bCount: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGenericDescriptor,
                pbDesc: ?*u8,
                bCount: i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGenericDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGenericDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGenericDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGenericDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBody: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGenericDescriptor,
                ppbVal: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGenericDescriptor,
                ppbVal: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGenericDescriptor_Initialize(self: *const T, pbDesc: ?*u8, bCount: i32) HRESULT {
                return @as(*const IGenericDescriptor.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IGenericDescriptor, @ptrCast(self)), pbDesc, bCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGenericDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IGenericDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IGenericDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGenericDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IGenericDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IGenericDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGenericDescriptor_GetBody(self: *const T, ppbVal: ?*?*u8) HRESULT {
                return @as(*const IGenericDescriptor.VTable, @ptrCast(self.vtable)).GetBody(@as(*const IGenericDescriptor, @ptrCast(self)), ppbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IGenericDescriptor2_Value = Guid.initString("bf02fb7e-9792-4e10-a68d-033a2cc246a5");
pub const IID_IGenericDescriptor2 = &IID_IGenericDescriptor2_Value;
pub const IGenericDescriptor2 = extern struct {
    pub const VTable = extern struct {
        base: IGenericDescriptor.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGenericDescriptor2,
                pbDesc: ?*u8,
                wCount: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGenericDescriptor2,
                pbDesc: ?*u8,
                wCount: u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGenericDescriptor2,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGenericDescriptor2,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IGenericDescriptor.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGenericDescriptor2_Initialize(self: *const T, pbDesc: ?*u8, wCount: u16) HRESULT {
                return @as(*const IGenericDescriptor2.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IGenericDescriptor2, @ptrCast(self)), pbDesc, wCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGenericDescriptor2_GetLength(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IGenericDescriptor2.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IGenericDescriptor2, @ptrCast(self)), pwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const ProgramElement = extern struct {
    wProgramNumber: u16,
    wProgramMapPID: u16,
};

const IID_IPAT_Value = Guid.initString("6623b511-4b5f-43c3-9a01-e8ff84188060");
pub const IID_IPAT = &IID_IPAT_Value;
pub const IPAT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordProgramNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                dwIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                dwIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordProgramMapPid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                dwIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                dwIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindRecordProgramMapPid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                wProgramNumber: u16,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                wProgramNumber: u16,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                ppPAT: ?*?*IPAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                ppPAT: ?*?*IPAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForWhenCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertNextToCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IPAT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_GetTransportStreamId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).GetTransportStreamId(@as(*const IPAT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IPAT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IPAT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_GetRecordProgramNumber(self: *const T, dwIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).GetRecordProgramNumber(@as(*const IPAT, @ptrCast(self)), dwIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_GetRecordProgramMapPid(self: *const T, dwIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).GetRecordProgramMapPid(@as(*const IPAT, @ptrCast(self)), dwIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_FindRecordProgramMapPid(self: *const T, wProgramNumber: u16, pwVal: ?*u16) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).FindRecordProgramMapPid(@as(*const IPAT, @ptrCast(self)), wProgramNumber, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_RegisterForNextTable(self: *const T, hNextTableAvailable: ?HANDLE) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).RegisterForNextTable(@as(*const IPAT, @ptrCast(self)), hNextTableAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_GetNextTable(self: *const T, ppPAT: ?*?*IPAT) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).GetNextTable(@as(*const IPAT, @ptrCast(self)), ppPAT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_RegisterForWhenCurrent(self: *const T, hNextTableIsCurrent: ?HANDLE) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).RegisterForWhenCurrent(@as(*const IPAT, @ptrCast(self)), hNextTableIsCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPAT_ConvertNextToCurrent(self: *const T) HRESULT {
                return @as(*const IPAT.VTable, @ptrCast(self.vtable)).ConvertNextToCurrent(@as(*const IPAT, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ICAT_Value = Guid.initString("7c6995fb-2a31-4bd7-953e-b1ad7fb7d31c");
pub const IID_ICAT = &IID_ICAT_Value;
pub const ICAT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICAT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICAT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICAT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICAT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICAT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICAT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICAT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICAT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICAT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICAT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICAT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICAT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICAT,
                dwTimeout: u32,
                ppCAT: ?*?*ICAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICAT,
                dwTimeout: u32,
                ppCAT: ?*?*ICAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForWhenCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICAT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICAT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertNextToCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICAT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const ICAT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const ICAT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICAT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ICAT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const ICAT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICAT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const ICAT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const ICAT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICAT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const ICAT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const ICAT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICAT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const ICAT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const ICAT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICAT_RegisterForNextTable(self: *const T, hNextTableAvailable: ?HANDLE) HRESULT {
                return @as(*const ICAT.VTable, @ptrCast(self.vtable)).RegisterForNextTable(@as(*const ICAT, @ptrCast(self)), hNextTableAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICAT_GetNextTable(self: *const T, dwTimeout: u32, ppCAT: ?*?*ICAT) HRESULT {
                return @as(*const ICAT.VTable, @ptrCast(self.vtable)).GetNextTable(@as(*const ICAT, @ptrCast(self)), dwTimeout, ppCAT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICAT_RegisterForWhenCurrent(self: *const T, hNextTableIsCurrent: ?HANDLE) HRESULT {
                return @as(*const ICAT.VTable, @ptrCast(self.vtable)).RegisterForWhenCurrent(@as(*const ICAT, @ptrCast(self)), hNextTableIsCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICAT_ConvertNextToCurrent(self: *const T) HRESULT {
                return @as(*const ICAT.VTable, @ptrCast(self.vtable)).ConvertNextToCurrent(@as(*const ICAT, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IPMT_Value = Guid.initString("01f3b398-9527-4736-94db-5195878e97a8");
pub const IID_IPMT = &IID_IPMT_Value;
pub const IPMT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProgramNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPcrPid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                pPidVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                pPidVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordStreamType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordElementaryPid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                pPidVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                pPidVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                dwDescIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                dwDescIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryServiceGatewayInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                ppDSMCCList: ?*?*DSMCC_ELEMENT,
                puiCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                ppDSMCCList: ?*?*DSMCC_ELEMENT,
                puiCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        QueryMPEInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                ppMPEList: ?*?*MPE_ELEMENT,
                puiCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                ppMPEList: ?*?*MPE_ELEMENT,
                puiCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                ppPMT: ?*?*IPMT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                ppPMT: ?*?*IPMT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForWhenCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertNextToCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPMT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPMT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IPMT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetProgramNumber(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetProgramNumber(@as(*const IPMT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IPMT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetPcrPid(self: *const T, pPidVal: ?*u16) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetPcrPid(@as(*const IPMT, @ptrCast(self)), pPidVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IPMT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IPMT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IPMT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetCountOfRecords(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IPMT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetRecordStreamType(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetRecordStreamType(@as(*const IPMT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetRecordElementaryPid(self: *const T, dwRecordIndex: u32, pPidVal: ?*u16) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetRecordElementaryPid(@as(*const IPMT, @ptrCast(self)), dwRecordIndex, pPidVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IPMT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwDescIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IPMT, @ptrCast(self)), dwRecordIndex, dwDescIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IPMT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_QueryServiceGatewayInfo(self: *const T, ppDSMCCList: ?*?*DSMCC_ELEMENT, puiCount: ?*u32) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).QueryServiceGatewayInfo(@as(*const IPMT, @ptrCast(self)), ppDSMCCList, puiCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_QueryMPEInfo(self: *const T, ppMPEList: ?*?*MPE_ELEMENT, puiCount: ?*u32) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).QueryMPEInfo(@as(*const IPMT, @ptrCast(self)), ppMPEList, puiCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_RegisterForNextTable(self: *const T, hNextTableAvailable: ?HANDLE) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).RegisterForNextTable(@as(*const IPMT, @ptrCast(self)), hNextTableAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_GetNextTable(self: *const T, ppPMT: ?*?*IPMT) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).GetNextTable(@as(*const IPMT, @ptrCast(self)), ppPMT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_RegisterForWhenCurrent(self: *const T, hNextTableIsCurrent: ?HANDLE) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).RegisterForWhenCurrent(@as(*const IPMT, @ptrCast(self)), hNextTableIsCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPMT_ConvertNextToCurrent(self: *const T) HRESULT {
                return @as(*const IPMT.VTable, @ptrCast(self.vtable)).ConvertNextToCurrent(@as(*const IPMT, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ITSDT_Value = Guid.initString("d19bdb43-405b-4a7c-a791-c89110c33165");
pub const IID_ITSDT = &IID_ITSDT_Value;
pub const ITSDT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITSDT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITSDT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITSDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITSDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITSDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITSDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITSDT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITSDT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITSDT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITSDT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITSDT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITSDT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITSDT,
                ppTSDT: ?*?*ITSDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITSDT,
                ppTSDT: ?*?*ITSDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForWhenCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITSDT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITSDT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertNextToCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITSDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITSDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITSDT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const ITSDT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const ITSDT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITSDT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ITSDT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const ITSDT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITSDT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const ITSDT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const ITSDT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITSDT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const ITSDT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const ITSDT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITSDT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const ITSDT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const ITSDT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITSDT_RegisterForNextTable(self: *const T, hNextTableAvailable: ?HANDLE) HRESULT {
                return @as(*const ITSDT.VTable, @ptrCast(self.vtable)).RegisterForNextTable(@as(*const ITSDT, @ptrCast(self)), hNextTableAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITSDT_GetNextTable(self: *const T, ppTSDT: ?*?*ITSDT) HRESULT {
                return @as(*const ITSDT.VTable, @ptrCast(self.vtable)).GetNextTable(@as(*const ITSDT, @ptrCast(self)), ppTSDT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITSDT_RegisterForWhenCurrent(self: *const T, hNextTableIsCurrent: ?HANDLE) HRESULT {
                return @as(*const ITSDT.VTable, @ptrCast(self.vtable)).RegisterForWhenCurrent(@as(*const ITSDT, @ptrCast(self)), hNextTableIsCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITSDT_ConvertNextToCurrent(self: *const T) HRESULT {
                return @as(*const ITSDT.VTable, @ptrCast(self.vtable)).ConvertNextToCurrent(@as(*const ITSDT, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IPSITables_Value = Guid.initString("919f24c5-7b14-42ac-a4b0-2ae08daf00ac");
pub const IID_IPSITables = &IID_IPSITables_Value;
pub const IPSITables = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPSITables,
                dwTSID: u32,
                dwTID_PID: u32,
                dwHashedVer: u32,
                dwPara4: u32,
                ppIUnknown: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPSITables,
                dwTSID: u32,
                dwTID_PID: u32,
                dwHashedVer: u32,
                dwPara4: u32,
                ppIUnknown: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPSITables_GetTable(self: *const T, dwTSID: u32, dwTID_PID: u32, dwHashedVer: u32, dwPara4: u32, ppIUnknown: ?*?*IUnknown) HRESULT {
                return @as(*const IPSITables.VTable, @ptrCast(self.vtable)).GetTable(@as(*const IPSITables, @ptrCast(self)), dwTSID, dwTID_PID, dwHashedVer, dwPara4, ppIUnknown);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAtscPsipParser_Value = Guid.initString("b2c98995-5eb2-4fb1-b406-f3e8e2026a9a");
pub const IID_IAtscPsipParser = &IID_IAtscPsipParser_Value;
pub const IAtscPsipParser = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                punkMpeg2Data: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                punkMpeg2Data: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPAT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                ppPAT: ?*?*IPAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                ppPAT: ?*?*IPAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCAT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                dwTimeout: u32,
                ppCAT: ?*?*ICAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                dwTimeout: u32,
                ppCAT: ?*?*ICAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPMT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                pid: u16,
                pwProgramNumber: ?*u16,
                ppPMT: ?*?*IPMT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                pid: u16,
                pwProgramNumber: ?*u16,
                ppPMT: ?*?*IPMT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTSDT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                ppTSDT: ?*?*ITSDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                ppTSDT: ?*?*ITSDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMGT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                ppMGT: ?*?*IATSC_MGT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                ppMGT: ?*?*IATSC_MGT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVCT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                tableId: u8,
                fGetNextTable: BOOL,
                ppVCT: ?*?*IATSC_VCT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                tableId: u8,
                fGetNextTable: BOOL,
                ppVCT: ?*?*IATSC_VCT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEIT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                pid: u16,
                pwSourceId: ?*u16,
                dwTimeout: u32,
                ppEIT: ?*?*IATSC_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                pid: u16,
                pwSourceId: ?*u16,
                dwTimeout: u32,
                ppEIT: ?*?*IATSC_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetETT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                pid: u16,
                wSourceId: ?*u16,
                pwEventId: ?*u16,
                ppETT: ?*?*IATSC_ETT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                pid: u16,
                wSourceId: ?*u16,
                pwEventId: ?*u16,
                ppETT: ?*?*IATSC_ETT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSTT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                ppSTT: ?*?*IATSC_STT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                ppSTT: ?*?*IATSC_STT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEAS: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscPsipParser,
                pid: u16,
                ppEAS: ?*?*ISCTE_EAS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscPsipParser,
                pid: u16,
                ppEAS: ?*?*ISCTE_EAS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_Initialize(self: *const T, punkMpeg2Data: ?*IUnknown) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IAtscPsipParser, @ptrCast(self)), punkMpeg2Data);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetPAT(self: *const T, ppPAT: ?*?*IPAT) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetPAT(@as(*const IAtscPsipParser, @ptrCast(self)), ppPAT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetCAT(self: *const T, dwTimeout: u32, ppCAT: ?*?*ICAT) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetCAT(@as(*const IAtscPsipParser, @ptrCast(self)), dwTimeout, ppCAT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetPMT(self: *const T, pid: u16, pwProgramNumber: ?*u16, ppPMT: ?*?*IPMT) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetPMT(@as(*const IAtscPsipParser, @ptrCast(self)), pid, pwProgramNumber, ppPMT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetTSDT(self: *const T, ppTSDT: ?*?*ITSDT) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetTSDT(@as(*const IAtscPsipParser, @ptrCast(self)), ppTSDT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetMGT(self: *const T, ppMGT: ?*?*IATSC_MGT) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetMGT(@as(*const IAtscPsipParser, @ptrCast(self)), ppMGT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetVCT(self: *const T, tableId: u8, fGetNextTable: BOOL, ppVCT: ?*?*IATSC_VCT) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetVCT(@as(*const IAtscPsipParser, @ptrCast(self)), tableId, fGetNextTable, ppVCT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetEIT(self: *const T, pid: u16, pwSourceId: ?*u16, dwTimeout: u32, ppEIT: ?*?*IATSC_EIT) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetEIT(@as(*const IAtscPsipParser, @ptrCast(self)), pid, pwSourceId, dwTimeout, ppEIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetETT(self: *const T, pid: u16, wSourceId: ?*u16, pwEventId: ?*u16, ppETT: ?*?*IATSC_ETT) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetETT(@as(*const IAtscPsipParser, @ptrCast(self)), pid, wSourceId, pwEventId, ppETT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetSTT(self: *const T, ppSTT: ?*?*IATSC_STT) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetSTT(@as(*const IAtscPsipParser, @ptrCast(self)), ppSTT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscPsipParser_GetEAS(self: *const T, pid: u16, ppEAS: ?*?*ISCTE_EAS) HRESULT {
                return @as(*const IAtscPsipParser.VTable, @ptrCast(self.vtable)).GetEAS(@as(*const IAtscPsipParser, @ptrCast(self)), pid, ppEAS);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IATSC_MGT_Value = Guid.initString("8877dabd-c137-4073-97e3-779407a5d87a");
pub const IID_IATSC_MGT = &IID_IATSC_MGT_Value;
pub const IATSC_MGT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProtocolVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTypePid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                ppidVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                ppidVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_MGT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_MGT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IATSC_MGT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IATSC_MGT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetProtocolVersion(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetProtocolVersion(@as(*const IATSC_MGT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IATSC_MGT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetRecordType(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetRecordType(@as(*const IATSC_MGT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetRecordTypePid(self: *const T, dwRecordIndex: u32, ppidVal: ?*u16) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetRecordTypePid(@as(*const IATSC_MGT, @ptrCast(self)), dwRecordIndex, ppidVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetRecordVersionNumber(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetRecordVersionNumber(@as(*const IATSC_MGT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IATSC_MGT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IATSC_MGT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IATSC_MGT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IATSC_MGT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IATSC_MGT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_MGT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_MGT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IATSC_MGT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IATSC_VCT_Value = Guid.initString("26879a18-32f9-46c6-91f0-fb6479270e8c");
pub const IID_IATSC_VCT = &IID_IATSC_VCT_Value;
pub const IATSC_VCT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProtocolVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwsName: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwsName: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordMajorChannelNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordMinorChannelNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordModulationMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCarrierFrequency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordProgramNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordEtmLocation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordIsAccessControlledBitSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordIsHiddenBitSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordIsPathSelectBitSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordIsOutOfBandBitSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordIsHideGuideBitSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordSourceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_VCT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_VCT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IATSC_VCT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IATSC_VCT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetTransportStreamId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetTransportStreamId(@as(*const IATSC_VCT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetProtocolVersion(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetProtocolVersion(@as(*const IATSC_VCT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IATSC_VCT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordName(self: *const T, dwRecordIndex: u32, pwsName: ?*?PWSTR) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordName(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pwsName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordMajorChannelNumber(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordMajorChannelNumber(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordMinorChannelNumber(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordMinorChannelNumber(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordModulationMode(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordModulationMode(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordCarrierFrequency(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordCarrierFrequency(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordTransportStreamId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordTransportStreamId(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordProgramNumber(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordProgramNumber(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordEtmLocation(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordEtmLocation(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordIsAccessControlledBitSet(self: *const T, dwRecordIndex: u32, pfVal: ?*BOOL) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordIsAccessControlledBitSet(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordIsHiddenBitSet(self: *const T, dwRecordIndex: u32, pfVal: ?*BOOL) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordIsHiddenBitSet(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordIsPathSelectBitSet(self: *const T, dwRecordIndex: u32, pfVal: ?*BOOL) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordIsPathSelectBitSet(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordIsOutOfBandBitSet(self: *const T, dwRecordIndex: u32, pfVal: ?*BOOL) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordIsOutOfBandBitSet(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordIsHideGuideBitSet(self: *const T, dwRecordIndex: u32, pfVal: ?*BOOL) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordIsHideGuideBitSet(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordServiceType(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordServiceType(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordSourceId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordSourceId(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IATSC_VCT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IATSC_VCT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IATSC_VCT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_VCT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_VCT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IATSC_VCT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IATSC_EIT_Value = Guid.initString("d7c212d7-76a2-4b4b-aa56-846879a80096");
pub const IID_IATSC_EIT = &IID_IATSC_EIT_Value;
pub const IATSC_EIT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSourceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProtocolVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordEventId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordStartTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordEtmLocation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pmdVal: ?*MPEG_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pmdVal: ?*MPEG_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTitleText: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pdwLength: ?*u32,
                ppText: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pdwLength: ?*u32,
                ppText: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_EIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IATSC_EIT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IATSC_EIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetSourceId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetSourceId(@as(*const IATSC_EIT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetProtocolVersion(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetProtocolVersion(@as(*const IATSC_EIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IATSC_EIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetRecordEventId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetRecordEventId(@as(*const IATSC_EIT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetRecordStartTime(self: *const T, dwRecordIndex: u32, pmdtVal: ?*MPEG_DATE_AND_TIME) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetRecordStartTime(@as(*const IATSC_EIT, @ptrCast(self)), dwRecordIndex, pmdtVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetRecordEtmLocation(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetRecordEtmLocation(@as(*const IATSC_EIT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetRecordDuration(self: *const T, dwRecordIndex: u32, pmdVal: ?*MPEG_TIME) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetRecordDuration(@as(*const IATSC_EIT, @ptrCast(self)), dwRecordIndex, pmdVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetRecordTitleText(self: *const T, dwRecordIndex: u32, pdwLength: ?*u32, ppText: ?*?*u8) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetRecordTitleText(@as(*const IATSC_EIT, @ptrCast(self)), dwRecordIndex, pdwLength, ppText);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IATSC_EIT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IATSC_EIT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_EIT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_EIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IATSC_EIT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IATSC_ETT_Value = Guid.initString("5a142cc9-b8cf-4a86-a040-e9cadf3ef3e7");
pub const IID_IATSC_ETT = &IID_IATSC_ETT_Value;
pub const IATSC_ETT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_ETT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_ETT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_ETT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_ETT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProtocolVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_ETT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_ETT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEtmId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_ETT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_ETT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetExtendedMessageText: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_ETT,
                pdwLength: ?*u32,
                ppText: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_ETT,
                pdwLength: ?*u32,
                ppText: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_ETT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IATSC_ETT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IATSC_ETT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_ETT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_ETT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IATSC_ETT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_ETT_GetProtocolVersion(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_ETT.VTable, @ptrCast(self.vtable)).GetProtocolVersion(@as(*const IATSC_ETT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_ETT_GetEtmId(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_ETT.VTable, @ptrCast(self.vtable)).GetEtmId(@as(*const IATSC_ETT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_ETT_GetExtendedMessageText(self: *const T, pdwLength: ?*u32, ppText: ?*?*u8) HRESULT {
                return @as(*const IATSC_ETT.VTable, @ptrCast(self.vtable)).GetExtendedMessageText(@as(*const IATSC_ETT, @ptrCast(self)), pdwLength, ppText);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IATSC_STT_Value = Guid.initString("6bf42423-217d-4d6f-81e1-3a7b360ec896");
pub const IID_IATSC_STT = &IID_IATSC_STT_Value;
pub const IATSC_STT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_STT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_STT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProtocolVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_STT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_STT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSystemTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_STT,
                pmdtSystemTime: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_STT,
                pmdtSystemTime: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGpsUtcOffset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_STT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_STT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDaylightSavings: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_STT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_STT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_STT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_STT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_STT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_STT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IATSC_STT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IATSC_STT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_STT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IATSC_STT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IATSC_STT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_STT_GetProtocolVersion(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_STT.VTable, @ptrCast(self.vtable)).GetProtocolVersion(@as(*const IATSC_STT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_STT_GetSystemTime(self: *const T, pmdtSystemTime: ?*MPEG_DATE_AND_TIME) HRESULT {
                return @as(*const IATSC_STT.VTable, @ptrCast(self.vtable)).GetSystemTime(@as(*const IATSC_STT, @ptrCast(self)), pmdtSystemTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_STT_GetGpsUtcOffset(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IATSC_STT.VTable, @ptrCast(self.vtable)).GetGpsUtcOffset(@as(*const IATSC_STT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_STT_GetDaylightSavings(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IATSC_STT.VTable, @ptrCast(self.vtable)).GetDaylightSavings(@as(*const IATSC_STT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_STT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IATSC_STT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IATSC_STT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_STT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_STT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IATSC_STT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IATSC_STT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IATSC_STT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IATSC_STT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.0.6000'
const IID_ISCTE_EAS_Value = Guid.initString("1ff544d6-161d-4fae-9faa-4f9f492ae999");
pub const IID_ISCTE_EAS = &IID_ISCTE_EAS_Value;
pub const ISCTE_EAS = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSequencyNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProtocolVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEASEventID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOriginatorCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEASEventCodeLen: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEASEventCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRawNatureOfActivationTextLen: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRawNatureOfActivationText: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNatureOfActivationText: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                bstrIS0639code: ?BSTR,
                pbstrString: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                bstrIS0639code: ?BSTR,
                pbstrString: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTimeRemaining: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStartTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAlertPriority: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDetailsOOBSourceID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDetailsMajor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDetailsMinor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDetailsAudioOOBSourceID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAlertText: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                bstrIS0639code: ?BSTR,
                pbstrString: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                bstrIS0639code: ?BSTR,
                pbstrString: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRawAlertTextLen: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRawAlertText: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocationCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocationCodes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                bIndex: u8,
                pbState: ?*u8,
                pbCountySubdivision: ?*u8,
                pwCounty: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                bIndex: u8,
                pbState: ?*u8,
                pbCountySubdivision: ?*u8,
                pwCounty: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetExceptionCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetExceptionService: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                bIndex: u8,
                pbIBRef: ?*u8,
                pwFirst: ?*u16,
                pwSecond: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                bIndex: u8,
                pbIBRef: ?*u8,
                pwFirst: ?*u16,
                pwSecond: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISCTE_EAS,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISCTE_EAS,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).Initialize(@as(*const ISCTE_EAS, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetSequencyNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetSequencyNumber(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetProtocolVersion(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetProtocolVersion(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetEASEventID(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetEASEventID(@as(*const ISCTE_EAS, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetOriginatorCode(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetOriginatorCode(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetEASEventCodeLen(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetEASEventCodeLen(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetEASEventCode(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetEASEventCode(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetRawNatureOfActivationTextLen(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetRawNatureOfActivationTextLen(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetRawNatureOfActivationText(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetRawNatureOfActivationText(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetNatureOfActivationText(self: *const T, bstrIS0639code: ?BSTR, pbstrString: ?*?BSTR) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetNatureOfActivationText(@as(*const ISCTE_EAS, @ptrCast(self)), bstrIS0639code, pbstrString);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetTimeRemaining(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetTimeRemaining(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetStartTime(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetStartTime(@as(*const ISCTE_EAS, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetDuration(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetDuration(@as(*const ISCTE_EAS, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetAlertPriority(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetAlertPriority(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetDetailsOOBSourceID(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetDetailsOOBSourceID(@as(*const ISCTE_EAS, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetDetailsMajor(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetDetailsMajor(@as(*const ISCTE_EAS, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetDetailsMinor(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetDetailsMinor(@as(*const ISCTE_EAS, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetDetailsAudioOOBSourceID(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetDetailsAudioOOBSourceID(@as(*const ISCTE_EAS, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetAlertText(self: *const T, bstrIS0639code: ?BSTR, pbstrString: ?*?BSTR) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetAlertText(@as(*const ISCTE_EAS, @ptrCast(self)), bstrIS0639code, pbstrString);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetRawAlertTextLen(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetRawAlertTextLen(@as(*const ISCTE_EAS, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetRawAlertText(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetRawAlertText(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetLocationCount(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetLocationCount(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetLocationCodes(self: *const T, bIndex: u8, pbState: ?*u8, pbCountySubdivision: ?*u8, pwCounty: ?*u16) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetLocationCodes(@as(*const ISCTE_EAS, @ptrCast(self)), bIndex, pbState, pbCountySubdivision, pwCounty);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetExceptionCount(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetExceptionCount(@as(*const ISCTE_EAS, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetExceptionService(self: *const T, bIndex: u8, pbIBRef: ?*u8, pwFirst: ?*u16, pwSecond: ?*u16) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetExceptionService(@as(*const ISCTE_EAS, @ptrCast(self)), bIndex, pbIBRef, pwFirst, pwSecond);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const ISCTE_EAS, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const ISCTE_EAS, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISCTE_EAS_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const ISCTE_EAS.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const ISCTE_EAS, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAtscContentAdvisoryDescriptor_Value = Guid.initString("ff76e60c-0283-43ea-ba32-b422238547ee");
pub const IID_IAtscContentAdvisoryDescriptor = &IID_IAtscContentAdvisoryDescriptor_Value;
pub const IAtscContentAdvisoryDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscContentAdvisoryDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscContentAdvisoryDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscContentAdvisoryDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscContentAdvisoryDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRatingRegionCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscContentAdvisoryDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscContentAdvisoryDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRatingRegion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRatedDimensions: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRatingDimension: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndexOuter: u8,
                bIndexInner: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndexOuter: u8,
                bIndexInner: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRatingValue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndexOuter: u8,
                bIndexInner: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndexOuter: u8,
                bIndexInner: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRatingDescriptionText: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndex: u8,
                pbLength: ?*u8,
                ppText: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAtscContentAdvisoryDescriptor,
                bIndex: u8,
                pbLength: ?*u8,
                ppText: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscContentAdvisoryDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IAtscContentAdvisoryDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IAtscContentAdvisoryDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscContentAdvisoryDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IAtscContentAdvisoryDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IAtscContentAdvisoryDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscContentAdvisoryDescriptor_GetRatingRegionCount(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IAtscContentAdvisoryDescriptor.VTable, @ptrCast(self.vtable)).GetRatingRegionCount(@as(*const IAtscContentAdvisoryDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscContentAdvisoryDescriptor_GetRecordRatingRegion(self: *const T, bIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IAtscContentAdvisoryDescriptor.VTable, @ptrCast(self.vtable)).GetRecordRatingRegion(@as(*const IAtscContentAdvisoryDescriptor, @ptrCast(self)), bIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscContentAdvisoryDescriptor_GetRecordRatedDimensions(self: *const T, bIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IAtscContentAdvisoryDescriptor.VTable, @ptrCast(self.vtable)).GetRecordRatedDimensions(@as(*const IAtscContentAdvisoryDescriptor, @ptrCast(self)), bIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscContentAdvisoryDescriptor_GetRecordRatingDimension(self: *const T, bIndexOuter: u8, bIndexInner: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IAtscContentAdvisoryDescriptor.VTable, @ptrCast(self.vtable)).GetRecordRatingDimension(@as(*const IAtscContentAdvisoryDescriptor, @ptrCast(self)), bIndexOuter, bIndexInner, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscContentAdvisoryDescriptor_GetRecordRatingValue(self: *const T, bIndexOuter: u8, bIndexInner: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IAtscContentAdvisoryDescriptor.VTable, @ptrCast(self.vtable)).GetRecordRatingValue(@as(*const IAtscContentAdvisoryDescriptor, @ptrCast(self)), bIndexOuter, bIndexInner, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAtscContentAdvisoryDescriptor_GetRecordRatingDescriptionText(self: *const T, bIndex: u8, pbLength: ?*u8, ppText: ?*?*u8) HRESULT {
                return @as(*const IAtscContentAdvisoryDescriptor.VTable, @ptrCast(self.vtable)).GetRecordRatingDescriptionText(@as(*const IAtscContentAdvisoryDescriptor, @ptrCast(self)), bIndex, pbLength, ppText);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ICaptionServiceDescriptor_Value = Guid.initString("40834007-6834-46f0-bd45-d5f6a6be258c");
pub const IID_ICaptionServiceDescriptor = &IID_ICaptionServiceDescriptor_Value;
pub const ICaptionServiceDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetNumberOfServices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptionServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptionServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLanguageCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                LangCode: *[3]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                LangCode: *[3]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCaptionServiceNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCCType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEasyReader: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetWideAspectRatio: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ICaptionServiceDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptionServiceDescriptor_GetNumberOfServices(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const ICaptionServiceDescriptor.VTable, @ptrCast(self.vtable)).GetNumberOfServices(@as(*const ICaptionServiceDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptionServiceDescriptor_GetLanguageCode(self: *const T, bIndex: u8, LangCode: *[3]u8) HRESULT {
                return @as(*const ICaptionServiceDescriptor.VTable, @ptrCast(self.vtable)).GetLanguageCode(@as(*const ICaptionServiceDescriptor, @ptrCast(self)), bIndex, LangCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptionServiceDescriptor_GetCaptionServiceNumber(self: *const T, bIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const ICaptionServiceDescriptor.VTable, @ptrCast(self.vtable)).GetCaptionServiceNumber(@as(*const ICaptionServiceDescriptor, @ptrCast(self)), bIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptionServiceDescriptor_GetCCType(self: *const T, bIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const ICaptionServiceDescriptor.VTable, @ptrCast(self.vtable)).GetCCType(@as(*const ICaptionServiceDescriptor, @ptrCast(self)), bIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptionServiceDescriptor_GetEasyReader(self: *const T, bIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const ICaptionServiceDescriptor.VTable, @ptrCast(self.vtable)).GetEasyReader(@as(*const ICaptionServiceDescriptor, @ptrCast(self)), bIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ICaptionServiceDescriptor_GetWideAspectRatio(self: *const T, bIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const ICaptionServiceDescriptor.VTable, @ptrCast(self.vtable)).GetWideAspectRatio(@as(*const ICaptionServiceDescriptor, @ptrCast(self)), bIndex, pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IServiceLocationDescriptor_Value = Guid.initString("58c3c827-9d91-4215-bff3-820a49f0904c");
pub const IID_IServiceLocationDescriptor = &IID_IServiceLocationDescriptor_Value;
pub const IServiceLocationDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetPCR_PID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IServiceLocationDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IServiceLocationDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumberOfElements: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IServiceLocationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IServiceLocationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetElementStreamType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IServiceLocationDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IServiceLocationDescriptor,
                bIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetElementPID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IServiceLocationDescriptor,
                bIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IServiceLocationDescriptor,
                bIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetElementLanguageCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IServiceLocationDescriptor,
                bIndex: u8,
                LangCode: *[3]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IServiceLocationDescriptor,
                bIndex: u8,
                LangCode: *[3]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IServiceLocationDescriptor_GetPCR_PID(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IServiceLocationDescriptor.VTable, @ptrCast(self.vtable)).GetPCR_PID(@as(*const IServiceLocationDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IServiceLocationDescriptor_GetNumberOfElements(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IServiceLocationDescriptor.VTable, @ptrCast(self.vtable)).GetNumberOfElements(@as(*const IServiceLocationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IServiceLocationDescriptor_GetElementStreamType(self: *const T, bIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IServiceLocationDescriptor.VTable, @ptrCast(self.vtable)).GetElementStreamType(@as(*const IServiceLocationDescriptor, @ptrCast(self)), bIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IServiceLocationDescriptor_GetElementPID(self: *const T, bIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IServiceLocationDescriptor.VTable, @ptrCast(self.vtable)).GetElementPID(@as(*const IServiceLocationDescriptor, @ptrCast(self)), bIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IServiceLocationDescriptor_GetElementLanguageCode(self: *const T, bIndex: u8, LangCode: *[3]u8) HRESULT {
                return @as(*const IServiceLocationDescriptor.VTable, @ptrCast(self.vtable)).GetElementLanguageCode(@as(*const IServiceLocationDescriptor, @ptrCast(self)), bIndex, LangCode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAttributeSet_Value = Guid.initString("583ec3cc-4960-4857-982b-41a33ea0a006");
pub const IID_IAttributeSet = &IID_IAttributeSet_Value;
pub const IAttributeSet = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetAttrib: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAttributeSet,
                guidAttribute: Guid,
                pbAttribute: ?*u8,
                dwAttributeLength: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAttributeSet,
                guidAttribute: Guid,
                pbAttribute: ?*u8,
                dwAttributeLength: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAttributeSet_SetAttrib(self: *const T, guidAttribute: Guid, pbAttribute: ?*u8, dwAttributeLength: u32) HRESULT {
                return @as(*const IAttributeSet.VTable, @ptrCast(self.vtable)).SetAttrib(@as(*const IAttributeSet, @ptrCast(self)), guidAttribute, pbAttribute, dwAttributeLength);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IAttributeGet_Value = Guid.initString("52dbd1ec-e48f-4528-9232-f442a68f0ae1");
pub const IID_IAttributeGet = &IID_IAttributeGet_Value;
pub const IAttributeGet = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAttributeGet,
                plCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAttributeGet,
                plCount: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAttribIndexed: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAttributeGet,
                lIndex: i32,
                pguidAttribute: ?*Guid,
                pbAttribute: ?*u8,
                pdwAttributeLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAttributeGet,
                lIndex: i32,
                pguidAttribute: ?*Guid,
                pbAttribute: ?*u8,
                pdwAttributeLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAttrib: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IAttributeGet,
                guidAttribute: Guid,
                pbAttribute: ?*u8,
                pdwAttributeLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IAttributeGet,
                guidAttribute: Guid,
                pbAttribute: ?*u8,
                pdwAttributeLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAttributeGet_GetCount(self: *const T, plCount: ?*i32) HRESULT {
                return @as(*const IAttributeGet.VTable, @ptrCast(self.vtable)).GetCount(@as(*const IAttributeGet, @ptrCast(self)), plCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAttributeGet_GetAttribIndexed(self: *const T, lIndex: i32, pguidAttribute: ?*Guid, pbAttribute: ?*u8, pdwAttributeLength: ?*u32) HRESULT {
                return @as(*const IAttributeGet.VTable, @ptrCast(self.vtable)).GetAttribIndexed(@as(*const IAttributeGet, @ptrCast(self)), lIndex, pguidAttribute, pbAttribute, pdwAttributeLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IAttributeGet_GetAttrib(self: *const T, guidAttribute: Guid, pbAttribute: ?*u8, pdwAttributeLength: ?*u32) HRESULT {
                return @as(*const IAttributeGet.VTable, @ptrCast(self.vtable)).GetAttrib(@as(*const IAttributeGet, @ptrCast(self)), guidAttribute, pbAttribute, pdwAttributeLength);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const UDCR_TAG = extern struct {
    bVersion: u8,
    KID: [25]u8,
    ullBaseCounter: u64,
    ullBaseCounterRange: u64,
    fScrambled: BOOL,
    bStreamMark: u8,
    dwReserved1: u32,
    dwReserved2: u32,
};

pub const PIC_SEQ_SAMPLE = extern struct {
    _bitfield: u32,
};

pub const SAMPLE_SEQ_OFFSET = extern struct {
    _bitfield: u32,
};

pub const VA_VIDEO_FORMAT = enum(i32) {
    COMPONENT = 0,
    PAL = 1,
    NTSC = 2,
    SECAM = 3,
    MAC = 4,
    UNSPECIFIED = 5,
};
pub const VA_VIDEO_COMPONENT = VA_VIDEO_FORMAT.COMPONENT;
pub const VA_VIDEO_PAL = VA_VIDEO_FORMAT.PAL;
pub const VA_VIDEO_NTSC = VA_VIDEO_FORMAT.NTSC;
pub const VA_VIDEO_SECAM = VA_VIDEO_FORMAT.SECAM;
pub const VA_VIDEO_MAC = VA_VIDEO_FORMAT.MAC;
pub const VA_VIDEO_UNSPECIFIED = VA_VIDEO_FORMAT.UNSPECIFIED;

pub const VA_COLOR_PRIMARIES = enum(i32) {
    ITU_R_BT_709 = 1,
    UNSPECIFIED = 2,
    ITU_R_BT_470_SYSTEM_M = 4,
    ITU_R_BT_470_SYSTEM_B_G = 5,
    SMPTE_170M = 6,
    SMPTE_240M = 7,
    H264_GENERIC_FILM = 8,
};
pub const VA_PRIMARIES_ITU_R_BT_709 = VA_COLOR_PRIMARIES.ITU_R_BT_709;
pub const VA_PRIMARIES_UNSPECIFIED = VA_COLOR_PRIMARIES.UNSPECIFIED;
pub const VA_PRIMARIES_ITU_R_BT_470_SYSTEM_M = VA_COLOR_PRIMARIES.ITU_R_BT_470_SYSTEM_M;
pub const VA_PRIMARIES_ITU_R_BT_470_SYSTEM_B_G = VA_COLOR_PRIMARIES.ITU_R_BT_470_SYSTEM_B_G;
pub const VA_PRIMARIES_SMPTE_170M = VA_COLOR_PRIMARIES.SMPTE_170M;
pub const VA_PRIMARIES_SMPTE_240M = VA_COLOR_PRIMARIES.SMPTE_240M;
pub const VA_PRIMARIES_H264_GENERIC_FILM = VA_COLOR_PRIMARIES.H264_GENERIC_FILM;

pub const VA_TRANSFER_CHARACTERISTICS = enum(i32) {
    ITU_R_BT_709 = 1,
    UNSPECIFIED = 2,
    ITU_R_BT_470_SYSTEM_M = 4,
    ITU_R_BT_470_SYSTEM_B_G = 5,
    SMPTE_170M = 6,
    SMPTE_240M = 7,
    LINEAR = 8,
    H264_LOG_100_TO_1 = 9,
    H264_LOG_316_TO_1 = 10,
};
pub const VA_TRANSFER_CHARACTERISTICS_ITU_R_BT_709 = VA_TRANSFER_CHARACTERISTICS.ITU_R_BT_709;
pub const VA_TRANSFER_CHARACTERISTICS_UNSPECIFIED = VA_TRANSFER_CHARACTERISTICS.UNSPECIFIED;
pub const VA_TRANSFER_CHARACTERISTICS_ITU_R_BT_470_SYSTEM_M = VA_TRANSFER_CHARACTERISTICS.ITU_R_BT_470_SYSTEM_M;
pub const VA_TRANSFER_CHARACTERISTICS_ITU_R_BT_470_SYSTEM_B_G = VA_TRANSFER_CHARACTERISTICS.ITU_R_BT_470_SYSTEM_B_G;
pub const VA_TRANSFER_CHARACTERISTICS_SMPTE_170M = VA_TRANSFER_CHARACTERISTICS.SMPTE_170M;
pub const VA_TRANSFER_CHARACTERISTICS_SMPTE_240M = VA_TRANSFER_CHARACTERISTICS.SMPTE_240M;
pub const VA_TRANSFER_CHARACTERISTICS_LINEAR = VA_TRANSFER_CHARACTERISTICS.LINEAR;
pub const VA_TRANSFER_CHARACTERISTICS_H264_LOG_100_TO_1 = VA_TRANSFER_CHARACTERISTICS.H264_LOG_100_TO_1;
pub const VA_TRANSFER_CHARACTERISTICS_H264_LOG_316_TO_1 = VA_TRANSFER_CHARACTERISTICS.H264_LOG_316_TO_1;

pub const VA_MATRIX_COEFFICIENTS = enum(i32) {
    H264_RGB = 0,
    ITU_R_BT_709 = 1,
    UNSPECIFIED = 2,
    FCC = 4,
    ITU_R_BT_470_SYSTEM_B_G = 5,
    SMPTE_170M = 6,
    SMPTE_240M = 7,
    H264_YCgCo = 8,
};
pub const VA_MATRIX_COEFF_H264_RGB = VA_MATRIX_COEFFICIENTS.H264_RGB;
pub const VA_MATRIX_COEFF_ITU_R_BT_709 = VA_MATRIX_COEFFICIENTS.ITU_R_BT_709;
pub const VA_MATRIX_COEFF_UNSPECIFIED = VA_MATRIX_COEFFICIENTS.UNSPECIFIED;
pub const VA_MATRIX_COEFF_FCC = VA_MATRIX_COEFFICIENTS.FCC;
pub const VA_MATRIX_COEFF_ITU_R_BT_470_SYSTEM_B_G = VA_MATRIX_COEFFICIENTS.ITU_R_BT_470_SYSTEM_B_G;
pub const VA_MATRIX_COEFF_SMPTE_170M = VA_MATRIX_COEFFICIENTS.SMPTE_170M;
pub const VA_MATRIX_COEFF_SMPTE_240M = VA_MATRIX_COEFFICIENTS.SMPTE_240M;
pub const VA_MATRIX_COEFF_H264_YCgCo = VA_MATRIX_COEFFICIENTS.H264_YCgCo;

pub const VA_OPTIONAL_VIDEO_PROPERTIES = extern struct {
    dwPictureHeight: u16,
    dwPictureWidth: u16,
    dwAspectRatioX: u16,
    dwAspectRatioY: u16,
    VAVideoFormat: VA_VIDEO_FORMAT,
    VAColorPrimaries: VA_COLOR_PRIMARIES,
    VATransferCharacteristics: VA_TRANSFER_CHARACTERISTICS,
    VAMatrixCoefficients: VA_MATRIX_COEFFICIENTS,
};

pub const TRANSPORT_PROPERTIES = extern struct {
    PID: u32,
    PCR: i64,
    Fields: extern union {
        pub const _Others = extern struct {
            _bitfield: i64,
        };
        Others: _Others,
        Value: i64,
    },
};

pub const PBDA_TAG_ATTRIBUTE = extern struct {
    TableUUId: Guid,
    TableId: u8,
    VersionNo: u16,
    TableDataSize: u32,
    TableData: [1]u8,
};

pub const CAPTURE_STREAMTIME = extern struct {
    StreamTime: i64,
};

pub const DSHOW_STREAM_DESC = extern struct {
    VersionNo: u32,
    StreamId: u32,
    Default: BOOL,
    Creation: BOOL,
    Reserved: u32,
};

pub const SAMPLE_LIVE_STREAM_TIME = extern struct {
    qwStreamTime: u64,
    qwLiveTime: u64,
};

const CLSID_TIFLoad_Value = Guid.initString("14eb8748-1753-4393-95ae-4f7e7a87aad6");
pub const CLSID_TIFLoad = &CLSID_TIFLoad_Value;

pub const DVB_STRCONV_MODE = enum(i32) {
    DVB = 0,
    DVB_EMPHASIS = 1,
    DVB_WITHOUT_EMPHASIS = 2,
    ISDB = 3,
};
pub const STRCONV_MODE_DVB = DVB_STRCONV_MODE.DVB;
pub const STRCONV_MODE_DVB_EMPHASIS = DVB_STRCONV_MODE.DVB_EMPHASIS;
pub const STRCONV_MODE_DVB_WITHOUT_EMPHASIS = DVB_STRCONV_MODE.DVB_WITHOUT_EMPHASIS;
pub const STRCONV_MODE_ISDB = DVB_STRCONV_MODE.ISDB;

const IID_IDvbSiParser_Value = Guid.initString("b758a7bd-14dc-449d-b828-35909acb3b1e");
pub const IID_IDvbSiParser = &IID_IDvbSiParser_Value;
pub const IDvbSiParser = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                punkMpeg2Data: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                punkMpeg2Data: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPAT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                ppPAT: ?*?*IPAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                ppPAT: ?*?*IPAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCAT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                dwTimeout: u32,
                ppCAT: ?*?*ICAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                dwTimeout: u32,
                ppCAT: ?*?*ICAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPMT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                pid: u16,
                pwProgramNumber: ?*u16,
                ppPMT: ?*?*IPMT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                pid: u16,
                pwProgramNumber: ?*u16,
                ppPMT: ?*?*IPMT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTSDT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                ppTSDT: ?*?*ITSDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                ppTSDT: ?*?*ITSDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNIT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                tableId: u8,
                pwNetworkId: ?*u16,
                ppNIT: ?*?*IDVB_NIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                tableId: u8,
                pwNetworkId: ?*u16,
                ppNIT: ?*?*IDVB_NIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSDT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                tableId: u8,
                pwTransportStreamId: ?*u16,
                ppSDT: ?*?*IDVB_SDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                tableId: u8,
                pwTransportStreamId: ?*u16,
                ppSDT: ?*?*IDVB_SDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEIT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                tableId: u8,
                pwServiceId: ?*u16,
                ppEIT: ?*?*IDVB_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                tableId: u8,
                pwServiceId: ?*u16,
                ppEIT: ?*?*IDVB_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBAT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                pwBouquetId: ?*u16,
                ppBAT: ?*?*IDVB_BAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                pwBouquetId: ?*u16,
                ppBAT: ?*?*IDVB_BAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRST: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                dwTimeout: u32,
                ppRST: ?*?*IDVB_RST,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                dwTimeout: u32,
                ppRST: ?*?*IDVB_RST,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetST: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                pid: u16,
                dwTimeout: u32,
                ppST: ?*?*IDVB_ST,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                pid: u16,
                dwTimeout: u32,
                ppST: ?*?*IDVB_ST,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTDT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                ppTDT: ?*?*IDVB_TDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                ppTDT: ?*?*IDVB_TDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTOT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                ppTOT: ?*?*IDVB_TOT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                ppTOT: ?*?*IDVB_TOT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDIT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                dwTimeout: u32,
                ppDIT: ?*?*IDVB_DIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                dwTimeout: u32,
                ppDIT: ?*?*IDVB_DIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSIT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser,
                dwTimeout: u32,
                ppSIT: ?*?*IDVB_SIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser,
                dwTimeout: u32,
                ppSIT: ?*?*IDVB_SIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_Initialize(self: *const T, punkMpeg2Data: ?*IUnknown) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDvbSiParser, @ptrCast(self)), punkMpeg2Data);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetPAT(self: *const T, ppPAT: ?*?*IPAT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetPAT(@as(*const IDvbSiParser, @ptrCast(self)), ppPAT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetCAT(self: *const T, dwTimeout: u32, ppCAT: ?*?*ICAT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetCAT(@as(*const IDvbSiParser, @ptrCast(self)), dwTimeout, ppCAT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetPMT(self: *const T, pid: u16, pwProgramNumber: ?*u16, ppPMT: ?*?*IPMT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetPMT(@as(*const IDvbSiParser, @ptrCast(self)), pid, pwProgramNumber, ppPMT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetTSDT(self: *const T, ppTSDT: ?*?*ITSDT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetTSDT(@as(*const IDvbSiParser, @ptrCast(self)), ppTSDT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetNIT(self: *const T, tableId: u8, pwNetworkId: ?*u16, ppNIT: ?*?*IDVB_NIT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetNIT(@as(*const IDvbSiParser, @ptrCast(self)), tableId, pwNetworkId, ppNIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetSDT(self: *const T, tableId: u8, pwTransportStreamId: ?*u16, ppSDT: ?*?*IDVB_SDT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetSDT(@as(*const IDvbSiParser, @ptrCast(self)), tableId, pwTransportStreamId, ppSDT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetEIT(self: *const T, tableId: u8, pwServiceId: ?*u16, ppEIT: ?*?*IDVB_EIT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetEIT(@as(*const IDvbSiParser, @ptrCast(self)), tableId, pwServiceId, ppEIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetBAT(self: *const T, pwBouquetId: ?*u16, ppBAT: ?*?*IDVB_BAT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetBAT(@as(*const IDvbSiParser, @ptrCast(self)), pwBouquetId, ppBAT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetRST(self: *const T, dwTimeout: u32, ppRST: ?*?*IDVB_RST) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetRST(@as(*const IDvbSiParser, @ptrCast(self)), dwTimeout, ppRST);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetST(self: *const T, pid: u16, dwTimeout: u32, ppST: ?*?*IDVB_ST) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetST(@as(*const IDvbSiParser, @ptrCast(self)), pid, dwTimeout, ppST);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetTDT(self: *const T, ppTDT: ?*?*IDVB_TDT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetTDT(@as(*const IDvbSiParser, @ptrCast(self)), ppTDT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetTOT(self: *const T, ppTOT: ?*?*IDVB_TOT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetTOT(@as(*const IDvbSiParser, @ptrCast(self)), ppTOT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetDIT(self: *const T, dwTimeout: u32, ppDIT: ?*?*IDVB_DIT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetDIT(@as(*const IDvbSiParser, @ptrCast(self)), dwTimeout, ppDIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser_GetSIT(self: *const T, dwTimeout: u32, ppSIT: ?*?*IDVB_SIT) HRESULT {
                return @as(*const IDvbSiParser.VTable, @ptrCast(self.vtable)).GetSIT(@as(*const IDvbSiParser, @ptrCast(self)), dwTimeout, ppSIT);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbSiParser2_Value = Guid.initString("0ac5525f-f816-42f4-93ba-4c0f32f46e54");
pub const IID_IDvbSiParser2 = &IID_IDvbSiParser2_Value;
pub const IDvbSiParser2 = extern struct {
    pub const VTable = extern struct {
        base: IDvbSiParser.VTable,
        GetEIT2: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSiParser2,
                tableId: u8,
                pwServiceId: ?*u16,
                pbSegment: ?*u8,
                ppEIT: ?*?*IDVB_EIT2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSiParser2,
                tableId: u8,
                pwServiceId: ?*u16,
                pbSegment: ?*u8,
                ppEIT: ?*?*IDVB_EIT2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDvbSiParser.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSiParser2_GetEIT2(self: *const T, tableId: u8, pwServiceId: ?*u16, pbSegment: ?*u8, ppEIT: ?*?*IDVB_EIT2) HRESULT {
                return @as(*const IDvbSiParser2.VTable, @ptrCast(self.vtable)).GetEIT2(@as(*const IDvbSiParser2, @ptrCast(self)), tableId, pwServiceId, pbSegment, ppEIT);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IIsdbSiParser2_Value = Guid.initString("900e4bb7-18cd-453f-98be-3be6aa211772");
pub const IID_IIsdbSiParser2 = &IID_IIsdbSiParser2_Value;
pub const IIsdbSiParser2 = extern struct {
    pub const VTable = extern struct {
        base: IDvbSiParser2.VTable,
        GetSDT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwTransportStreamId: ?*u16,
                ppSDT: ?*?*IISDB_SDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwTransportStreamId: ?*u16,
                ppSDT: ?*?*IISDB_SDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBIT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwOriginalNetworkId: ?*u16,
                ppBIT: ?*?*IISDB_BIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwOriginalNetworkId: ?*u16,
                ppBIT: ?*?*IISDB_BIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNBIT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwOriginalNetworkId: ?*u16,
                ppNBIT: ?*?*IISDB_NBIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwOriginalNetworkId: ?*u16,
                ppNBIT: ?*?*IISDB_NBIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLDT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwOriginalServiceId: ?*u16,
                ppLDT: ?*?*IISDB_LDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwOriginalServiceId: ?*u16,
                ppLDT: ?*?*IISDB_LDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSDTT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwTableIdExt: ?*u16,
                ppSDTT: ?*?*IISDB_SDTT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                pwTableIdExt: ?*u16,
                ppSDTT: ?*?*IISDB_SDTT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCDT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                bSectionNumber: u8,
                pwDownloadDataId: ?*u16,
                ppCDT: ?*?*IISDB_CDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSiParser2,
                tableId: u8,
                bSectionNumber: u8,
                pwDownloadDataId: ?*u16,
                ppCDT: ?*?*IISDB_CDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEMM: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSiParser2,
                pid: u16,
                wTableIdExt: u16,
                ppEMM: ?*?*IISDB_EMM,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSiParser2,
                pid: u16,
                wTableIdExt: u16,
                ppEMM: ?*?*IISDB_EMM,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDvbSiParser2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSiParser2_GetSDT(self: *const T, tableId: u8, pwTransportStreamId: ?*u16, ppSDT: ?*?*IISDB_SDT) HRESULT {
                return @as(*const IIsdbSiParser2.VTable, @ptrCast(self.vtable)).GetSDT(@as(*const IIsdbSiParser2, @ptrCast(self)), tableId, pwTransportStreamId, ppSDT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSiParser2_GetBIT(self: *const T, tableId: u8, pwOriginalNetworkId: ?*u16, ppBIT: ?*?*IISDB_BIT) HRESULT {
                return @as(*const IIsdbSiParser2.VTable, @ptrCast(self.vtable)).GetBIT(@as(*const IIsdbSiParser2, @ptrCast(self)), tableId, pwOriginalNetworkId, ppBIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSiParser2_GetNBIT(self: *const T, tableId: u8, pwOriginalNetworkId: ?*u16, ppNBIT: ?*?*IISDB_NBIT) HRESULT {
                return @as(*const IIsdbSiParser2.VTable, @ptrCast(self.vtable)).GetNBIT(@as(*const IIsdbSiParser2, @ptrCast(self)), tableId, pwOriginalNetworkId, ppNBIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSiParser2_GetLDT(self: *const T, tableId: u8, pwOriginalServiceId: ?*u16, ppLDT: ?*?*IISDB_LDT) HRESULT {
                return @as(*const IIsdbSiParser2.VTable, @ptrCast(self.vtable)).GetLDT(@as(*const IIsdbSiParser2, @ptrCast(self)), tableId, pwOriginalServiceId, ppLDT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSiParser2_GetSDTT(self: *const T, tableId: u8, pwTableIdExt: ?*u16, ppSDTT: ?*?*IISDB_SDTT) HRESULT {
                return @as(*const IIsdbSiParser2.VTable, @ptrCast(self.vtable)).GetSDTT(@as(*const IIsdbSiParser2, @ptrCast(self)), tableId, pwTableIdExt, ppSDTT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSiParser2_GetCDT(self: *const T, tableId: u8, bSectionNumber: u8, pwDownloadDataId: ?*u16, ppCDT: ?*?*IISDB_CDT) HRESULT {
                return @as(*const IIsdbSiParser2.VTable, @ptrCast(self.vtable)).GetCDT(@as(*const IIsdbSiParser2, @ptrCast(self)), tableId, bSectionNumber, pwDownloadDataId, ppCDT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSiParser2_GetEMM(self: *const T, pid: u16, wTableIdExt: u16, ppEMM: ?*?*IISDB_EMM) HRESULT {
                return @as(*const IIsdbSiParser2.VTable, @ptrCast(self.vtable)).GetEMM(@as(*const IIsdbSiParser2, @ptrCast(self)), pid, wTableIdExt, ppEMM);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_NIT_Value = Guid.initString("c64935f4-29e4-4e22-911a-63f7f55cb097");
pub const IID_IDVB_NIT = &IID_IDVB_NIT_Value;
pub const IDVB_NIT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                ppNIT: ?*?*IDVB_NIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                ppNIT: ?*?*IDVB_NIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForWhenCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertNextToCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionHash: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_NIT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_NIT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_NIT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IDVB_NIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetNetworkId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetNetworkId(@as(*const IDVB_NIT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IDVB_NIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IDVB_NIT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IDVB_NIT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDVB_NIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetRecordTransportStreamId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetRecordTransportStreamId(@as(*const IDVB_NIT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetRecordOriginalNetworkId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetRecordOriginalNetworkId(@as(*const IDVB_NIT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IDVB_NIT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IDVB_NIT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IDVB_NIT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_RegisterForNextTable(self: *const T, hNextTableAvailable: ?HANDLE) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).RegisterForNextTable(@as(*const IDVB_NIT, @ptrCast(self)), hNextTableAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetNextTable(self: *const T, ppNIT: ?*?*IDVB_NIT) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetNextTable(@as(*const IDVB_NIT, @ptrCast(self)), ppNIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_RegisterForWhenCurrent(self: *const T, hNextTableIsCurrent: ?HANDLE) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).RegisterForWhenCurrent(@as(*const IDVB_NIT, @ptrCast(self)), hNextTableIsCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_ConvertNextToCurrent(self: *const T) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).ConvertNextToCurrent(@as(*const IDVB_NIT, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_NIT_GetVersionHash(self: *const T, pdwVersionHash: ?*u32) HRESULT {
                return @as(*const IDVB_NIT.VTable, @ptrCast(self.vtable)).GetVersionHash(@as(*const IDVB_NIT, @ptrCast(self)), pdwVersionHash);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_SDT_Value = Guid.initString("02cad8d3-fe43-48e2-90bd-450ed9a8a5fd");
pub const IID_IDVB_SDT = &IID_IDVB_SDT_Value;
pub const IDVB_SDT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordEITScheduleFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordEITPresentFollowingFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRunningStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordFreeCAMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                ppSDT: ?*?*IDVB_SDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                ppSDT: ?*?*IDVB_SDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForWhenCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertNextToCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionHash: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SDT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SDT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_SDT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IDVB_SDT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetTransportStreamId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetTransportStreamId(@as(*const IDVB_SDT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetOriginalNetworkId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetOriginalNetworkId(@as(*const IDVB_SDT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDVB_SDT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetRecordServiceId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetRecordServiceId(@as(*const IDVB_SDT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetRecordEITScheduleFlag(self: *const T, dwRecordIndex: u32, pfVal: ?*BOOL) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetRecordEITScheduleFlag(@as(*const IDVB_SDT, @ptrCast(self)), dwRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetRecordEITPresentFollowingFlag(self: *const T, dwRecordIndex: u32, pfVal: ?*BOOL) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetRecordEITPresentFollowingFlag(@as(*const IDVB_SDT, @ptrCast(self)), dwRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetRecordRunningStatus(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetRecordRunningStatus(@as(*const IDVB_SDT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetRecordFreeCAMode(self: *const T, dwRecordIndex: u32, pfVal: ?*BOOL) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetRecordFreeCAMode(@as(*const IDVB_SDT, @ptrCast(self)), dwRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IDVB_SDT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IDVB_SDT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IDVB_SDT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_RegisterForNextTable(self: *const T, hNextTableAvailable: ?HANDLE) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).RegisterForNextTable(@as(*const IDVB_SDT, @ptrCast(self)), hNextTableAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetNextTable(self: *const T, ppSDT: ?*?*IDVB_SDT) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetNextTable(@as(*const IDVB_SDT, @ptrCast(self)), ppSDT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_RegisterForWhenCurrent(self: *const T, hNextTableIsCurrent: ?HANDLE) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).RegisterForWhenCurrent(@as(*const IDVB_SDT, @ptrCast(self)), hNextTableIsCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_ConvertNextToCurrent(self: *const T) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).ConvertNextToCurrent(@as(*const IDVB_SDT, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SDT_GetVersionHash(self: *const T, pdwVersionHash: ?*u32) HRESULT {
                return @as(*const IDVB_SDT.VTable, @ptrCast(self.vtable)).GetVersionHash(@as(*const IDVB_SDT, @ptrCast(self)), pdwVersionHash);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IISDB_SDT_Value = Guid.initString("3f3dc9a2-bb32-4fb9-ae9e-d856848927a3");
pub const IID_IISDB_SDT = &IID_IISDB_SDT_Value;
pub const IISDB_SDT = extern struct {
    pub const VTable = extern struct {
        base: IDVB_SDT.VTable,
        GetRecordEITUserDefinedFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDVB_SDT.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDT_GetRecordEITUserDefinedFlags(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_SDT.VTable, @ptrCast(self.vtable)).GetRecordEITUserDefinedFlags(@as(*const IISDB_SDT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_EIT_Value = Guid.initString("442db029-02cb-4495-8b92-1c13375bce99");
pub const IID_IDVB_EIT = &IID_IDVB_EIT_Value;
pub const IDVB_EIT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSegmentLastSectionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastTableId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordEventId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordStartTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pmdVal: ?*MPEG_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pmdVal: ?*MPEG_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRunningStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordFreeCAMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                ppEIT: ?*?*IDVB_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                ppEIT: ?*?*IDVB_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForWhenCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertNextToCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionHash: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_EIT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IDVB_EIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetServiceId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetServiceId(@as(*const IDVB_EIT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetTransportStreamId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetTransportStreamId(@as(*const IDVB_EIT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetOriginalNetworkId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetOriginalNetworkId(@as(*const IDVB_EIT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetSegmentLastSectionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetSegmentLastSectionNumber(@as(*const IDVB_EIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetLastTableId(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetLastTableId(@as(*const IDVB_EIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDVB_EIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetRecordEventId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetRecordEventId(@as(*const IDVB_EIT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetRecordStartTime(self: *const T, dwRecordIndex: u32, pmdtVal: ?*MPEG_DATE_AND_TIME) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetRecordStartTime(@as(*const IDVB_EIT, @ptrCast(self)), dwRecordIndex, pmdtVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetRecordDuration(self: *const T, dwRecordIndex: u32, pmdVal: ?*MPEG_TIME) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetRecordDuration(@as(*const IDVB_EIT, @ptrCast(self)), dwRecordIndex, pmdVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetRecordRunningStatus(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetRecordRunningStatus(@as(*const IDVB_EIT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetRecordFreeCAMode(self: *const T, dwRecordIndex: u32, pfVal: ?*BOOL) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetRecordFreeCAMode(@as(*const IDVB_EIT, @ptrCast(self)), dwRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IDVB_EIT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IDVB_EIT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IDVB_EIT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_RegisterForNextTable(self: *const T, hNextTableAvailable: ?HANDLE) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).RegisterForNextTable(@as(*const IDVB_EIT, @ptrCast(self)), hNextTableAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetNextTable(self: *const T, ppEIT: ?*?*IDVB_EIT) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetNextTable(@as(*const IDVB_EIT, @ptrCast(self)), ppEIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_RegisterForWhenCurrent(self: *const T, hNextTableIsCurrent: ?HANDLE) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).RegisterForWhenCurrent(@as(*const IDVB_EIT, @ptrCast(self)), hNextTableIsCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_ConvertNextToCurrent(self: *const T) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).ConvertNextToCurrent(@as(*const IDVB_EIT, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT_GetVersionHash(self: *const T, pdwVersionHash: ?*u32) HRESULT {
                return @as(*const IDVB_EIT.VTable, @ptrCast(self.vtable)).GetVersionHash(@as(*const IDVB_EIT, @ptrCast(self)), pdwVersionHash);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDVB_EIT2_Value = Guid.initString("61a389e0-9b9e-4ba0-aeea-5ddd159820ea");
pub const IID_IDVB_EIT2 = &IID_IDVB_EIT2_Value;
pub const IDVB_EIT2 = extern struct {
    pub const VTable = extern struct {
        base: IDVB_EIT.VTable,
        GetSegmentInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT2,
                pbTid: ?*u8,
                pbSegment: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT2,
                pbTid: ?*u8,
                pbSegment: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordSection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_EIT2,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_EIT2,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDVB_EIT.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT2_GetSegmentInfo(self: *const T, pbTid: ?*u8, pbSegment: ?*u8) HRESULT {
                return @as(*const IDVB_EIT2.VTable, @ptrCast(self.vtable)).GetSegmentInfo(@as(*const IDVB_EIT2, @ptrCast(self)), pbTid, pbSegment);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_EIT2_GetRecordSection(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_EIT2.VTable, @ptrCast(self.vtable)).GetRecordSection(@as(*const IDVB_EIT2, @ptrCast(self)), dwRecordIndex, pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_BAT_Value = Guid.initString("ece9bb0c-43b6-4558-a0ec-1812c34cd6ca");
pub const IID_IDVB_BAT = &IID_IDVB_BAT_Value;
pub const IDVB_BAT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBouquetId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                ppBAT: ?*?*IDVB_BAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                ppBAT: ?*?*IDVB_BAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForWhenCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertNextToCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_BAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_BAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_BAT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IDVB_BAT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetBouquetId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetBouquetId(@as(*const IDVB_BAT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IDVB_BAT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IDVB_BAT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IDVB_BAT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDVB_BAT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetRecordTransportStreamId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetRecordTransportStreamId(@as(*const IDVB_BAT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetRecordOriginalNetworkId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetRecordOriginalNetworkId(@as(*const IDVB_BAT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IDVB_BAT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IDVB_BAT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IDVB_BAT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_RegisterForNextTable(self: *const T, hNextTableAvailable: ?HANDLE) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).RegisterForNextTable(@as(*const IDVB_BAT, @ptrCast(self)), hNextTableAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_GetNextTable(self: *const T, ppBAT: ?*?*IDVB_BAT) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).GetNextTable(@as(*const IDVB_BAT, @ptrCast(self)), ppBAT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_RegisterForWhenCurrent(self: *const T, hNextTableIsCurrent: ?HANDLE) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).RegisterForWhenCurrent(@as(*const IDVB_BAT, @ptrCast(self)), hNextTableIsCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_BAT_ConvertNextToCurrent(self: *const T) HRESULT {
                return @as(*const IDVB_BAT.VTable, @ptrCast(self.vtable)).ConvertNextToCurrent(@as(*const IDVB_BAT, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_RST_Value = Guid.initString("f47dcd04-1e23-4fb7-9f96-b40eead10b2b");
pub const IID_IDVB_RST = &IID_IDVB_RST_Value;
pub const IDVB_RST = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_RST,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_RST,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_RST,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_RST,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordEventId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRunningStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_RST,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_RST_Initialize(self: *const T, pSectionList: ?*ISectionList) HRESULT {
                return @as(*const IDVB_RST.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_RST, @ptrCast(self)), pSectionList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_RST_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_RST.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDVB_RST, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_RST_GetRecordTransportStreamId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_RST.VTable, @ptrCast(self.vtable)).GetRecordTransportStreamId(@as(*const IDVB_RST, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_RST_GetRecordOriginalNetworkId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_RST.VTable, @ptrCast(self.vtable)).GetRecordOriginalNetworkId(@as(*const IDVB_RST, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_RST_GetRecordServiceId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_RST.VTable, @ptrCast(self.vtable)).GetRecordServiceId(@as(*const IDVB_RST, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_RST_GetRecordEventId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_RST.VTable, @ptrCast(self.vtable)).GetRecordEventId(@as(*const IDVB_RST, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_RST_GetRecordRunningStatus(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_RST.VTable, @ptrCast(self.vtable)).GetRecordRunningStatus(@as(*const IDVB_RST, @ptrCast(self)), dwRecordIndex, pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_ST_Value = Guid.initString("4d5b9f23-2a02-45de-bcda-5d5dbfbfbe62");
pub const IID_IDVB_ST = &IID_IDVB_ST_Value;
pub const IDVB_ST = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_ST,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_ST,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDataLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_ST,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_ST,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_ST,
                ppData: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_ST,
                ppData: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_ST_Initialize(self: *const T, pSectionList: ?*ISectionList) HRESULT {
                return @as(*const IDVB_ST.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_ST, @ptrCast(self)), pSectionList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_ST_GetDataLength(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_ST.VTable, @ptrCast(self.vtable)).GetDataLength(@as(*const IDVB_ST, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_ST_GetData(self: *const T, ppData: ?*?*u8) HRESULT {
                return @as(*const IDVB_ST.VTable, @ptrCast(self.vtable)).GetData(@as(*const IDVB_ST, @ptrCast(self)), ppData);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_TDT_Value = Guid.initString("0780dc7d-d55c-4aef-97e6-6b75906e2796");
pub const IID_IDVB_TDT = &IID_IDVB_TDT_Value;
pub const IDVB_TDT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_TDT,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_TDT,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetUTCTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_TDT,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_TDT,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_TDT_Initialize(self: *const T, pSectionList: ?*ISectionList) HRESULT {
                return @as(*const IDVB_TDT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_TDT, @ptrCast(self)), pSectionList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_TDT_GetUTCTime(self: *const T, pmdtVal: ?*MPEG_DATE_AND_TIME) HRESULT {
                return @as(*const IDVB_TDT.VTable, @ptrCast(self.vtable)).GetUTCTime(@as(*const IDVB_TDT, @ptrCast(self)), pmdtVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_TOT_Value = Guid.initString("83295d6a-faba-4ee1-9b15-8067696910ae");
pub const IID_IDVB_TOT = &IID_IDVB_TOT_Value;
pub const IDVB_TOT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_TOT,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_TOT,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetUTCTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_TOT,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_TOT,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_TOT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_TOT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_TOT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_TOT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_TOT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_TOT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_TOT_Initialize(self: *const T, pSectionList: ?*ISectionList) HRESULT {
                return @as(*const IDVB_TOT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_TOT, @ptrCast(self)), pSectionList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_TOT_GetUTCTime(self: *const T, pmdtVal: ?*MPEG_DATE_AND_TIME) HRESULT {
                return @as(*const IDVB_TOT.VTable, @ptrCast(self.vtable)).GetUTCTime(@as(*const IDVB_TOT, @ptrCast(self)), pmdtVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_TOT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_TOT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IDVB_TOT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_TOT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_TOT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IDVB_TOT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_TOT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_TOT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IDVB_TOT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_DIT_Value = Guid.initString("91bffdf9-9432-410f-86ef-1c228ed0ad70");
pub const IID_IDVB_DIT = &IID_IDVB_DIT_Value;
pub const IDVB_DIT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_DIT,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_DIT,
                pSectionList: ?*ISectionList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransitionFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_DIT,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_DIT,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_DIT_Initialize(self: *const T, pSectionList: ?*ISectionList) HRESULT {
                return @as(*const IDVB_DIT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_DIT, @ptrCast(self)), pSectionList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_DIT_GetTransitionFlag(self: *const T, pfVal: ?*BOOL) HRESULT {
                return @as(*const IDVB_DIT.VTable, @ptrCast(self.vtable)).GetTransitionFlag(@as(*const IDVB_DIT, @ptrCast(self)), pfVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDVB_SIT_Value = Guid.initString("68cdce53-8bea-45c2-9d9d-acf575a089b5");
pub const IID_IDVB_SIT = &IID_IDVB_SIT_Value;
pub const IDVB_SIT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRunningStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                hNextTableAvailable: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                dwTimeout: u32,
                ppSIT: ?*?*IDVB_SIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                dwTimeout: u32,
                ppSIT: ?*?*IDVB_SIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterForWhenCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
                hNextTableIsCurrent: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertNextToCurrent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDVB_SIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDVB_SIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDVB_SIT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IDVB_SIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IDVB_SIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IDVB_SIT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IDVB_SIT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDVB_SIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetRecordServiceId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetRecordServiceId(@as(*const IDVB_SIT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetRecordRunningStatus(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetRecordRunningStatus(@as(*const IDVB_SIT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IDVB_SIT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IDVB_SIT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IDVB_SIT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_RegisterForNextTable(self: *const T, hNextTableAvailable: ?HANDLE) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).RegisterForNextTable(@as(*const IDVB_SIT, @ptrCast(self)), hNextTableAvailable);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_GetNextTable(self: *const T, dwTimeout: u32, ppSIT: ?*?*IDVB_SIT) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).GetNextTable(@as(*const IDVB_SIT, @ptrCast(self)), dwTimeout, ppSIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_RegisterForWhenCurrent(self: *const T, hNextTableIsCurrent: ?HANDLE) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).RegisterForWhenCurrent(@as(*const IDVB_SIT, @ptrCast(self)), hNextTableIsCurrent);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDVB_SIT_ConvertNextToCurrent(self: *const T) HRESULT {
                return @as(*const IDVB_SIT.VTable, @ptrCast(self.vtable)).ConvertNextToCurrent(@as(*const IDVB_SIT, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IISDB_BIT_Value = Guid.initString("537cd71e-0e46-4173-9001-ba043f3e49e2");
pub const IID_IISDB_BIT = &IID_IISDB_BIT_Value;
pub const IISDB_BIT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBroadcastViewPropriety: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordBroadcasterId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionHash: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_BIT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_BIT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IISDB_BIT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IISDB_BIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetOriginalNetworkId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetOriginalNetworkId(@as(*const IISDB_BIT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetBroadcastViewPropriety(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetBroadcastViewPropriety(@as(*const IISDB_BIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IISDB_BIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IISDB_BIT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IISDB_BIT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IISDB_BIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetRecordBroadcasterId(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetRecordBroadcasterId(@as(*const IISDB_BIT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IISDB_BIT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IISDB_BIT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IISDB_BIT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_BIT_GetVersionHash(self: *const T, pdwVersionHash: ?*u32) HRESULT {
                return @as(*const IISDB_BIT.VTable, @ptrCast(self.vtable)).GetVersionHash(@as(*const IISDB_BIT, @ptrCast(self)), pdwVersionHash);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IISDB_NBIT_Value = Guid.initString("1b1863ef-08f1-40b7-a559-3b1eff8cafa6");
pub const IID_IISDB_NBIT = &IID_IISDB_NBIT_Value;
pub const IISDB_NBIT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordInformationId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordInformationType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptionBodyLocation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordMessageSectionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordUserDefined: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordNumberOfKeys: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordKeys: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbKeys: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pbKeys: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionHash: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_NBIT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_NBIT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IISDB_NBIT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IISDB_NBIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetOriginalNetworkId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetOriginalNetworkId(@as(*const IISDB_NBIT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IISDB_NBIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordInformationId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordInformationId(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordInformationType(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordInformationType(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordDescriptionBodyLocation(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptionBodyLocation(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordMessageSectionNumber(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordMessageSectionNumber(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordUserDefined(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordUserDefined(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordNumberOfKeys(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordNumberOfKeys(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordKeys(self: *const T, dwRecordIndex: u32, pbKeys: ?*?*u8) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordKeys(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, pbKeys);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IISDB_NBIT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_NBIT_GetVersionHash(self: *const T, pdwVersionHash: ?*u32) HRESULT {
                return @as(*const IISDB_NBIT.VTable, @ptrCast(self.vtable)).GetVersionHash(@as(*const IISDB_NBIT, @ptrCast(self)), pdwVersionHash);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IISDB_LDT_Value = Guid.initString("141a546b-02ff-4fb9-a3a3-2f074b74a9a9");
pub const IID_IISDB_LDT = &IID_IISDB_LDT_Value;
pub const IISDB_LDT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOriginalServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptionId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionHash: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_LDT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_LDT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IISDB_LDT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IISDB_LDT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetOriginalServiceId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetOriginalServiceId(@as(*const IISDB_LDT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetTransportStreamId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetTransportStreamId(@as(*const IISDB_LDT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetOriginalNetworkId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetOriginalNetworkId(@as(*const IISDB_LDT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IISDB_LDT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetRecordDescriptionId(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetRecordDescriptionId(@as(*const IISDB_LDT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IISDB_LDT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IISDB_LDT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IISDB_LDT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_LDT_GetVersionHash(self: *const T, pdwVersionHash: ?*u32) HRESULT {
                return @as(*const IISDB_LDT.VTable, @ptrCast(self.vtable)).GetVersionHash(@as(*const IISDB_LDT, @ptrCast(self)), pdwVersionHash);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IISDB_SDTT_Value = Guid.initString("ee60ef2d-813a-4dc7-bf92-ea13dac85313");
pub const IID_IISDB_SDTT = &IID_IISDB_SDTT_Value;
pub const IISDB_SDTT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableIdExt: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransportStreamId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordGroup: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTargetVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordNewVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDownloadLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordVersionIndicator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordScheduleTimeShiftInformation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfSchedules: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordStartTimeByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                dwIndex: u32,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                dwIndex: u32,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDurationByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                dwIndex: u32,
                pmdVal: ?*MPEG_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                dwIndex: u32,
                pmdVal: ?*MPEG_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionHash: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_SDTT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_SDTT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IISDB_SDTT, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IISDB_SDTT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetTableIdExt(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetTableIdExt(@as(*const IISDB_SDTT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetTransportStreamId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetTransportStreamId(@as(*const IISDB_SDTT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetOriginalNetworkId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetOriginalNetworkId(@as(*const IISDB_SDTT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetServiceId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetServiceId(@as(*const IISDB_SDTT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IISDB_SDTT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordGroup(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordGroup(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordTargetVersion(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordTargetVersion(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordNewVersion(self: *const T, dwRecordIndex: u32, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordNewVersion(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordDownloadLevel(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordDownloadLevel(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordVersionIndicator(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordVersionIndicator(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordScheduleTimeShiftInformation(self: *const T, dwRecordIndex: u32, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordScheduleTimeShiftInformation(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordCountOfSchedules(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordCountOfSchedules(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordStartTimeByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, pmdtVal: ?*MPEG_DATE_AND_TIME) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordStartTimeByIndex(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, dwIndex, pmdtVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordDurationByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, pmdVal: ?*MPEG_TIME) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordDurationByIndex(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, dwIndex, pmdVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IISDB_SDTT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_SDTT_GetVersionHash(self: *const T, pdwVersionHash: ?*u32) HRESULT {
                return @as(*const IISDB_SDTT.VTable, @ptrCast(self.vtable)).GetVersionHash(@as(*const IISDB_SDTT, @ptrCast(self)), pdwVersionHash);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IISDB_CDT_Value = Guid.initString("25fa92c2-8b80-4787-a841-3a0e8f17984b");
pub const IID_IISDB_CDT = &IID_IISDB_CDT_Value;
pub const IISDB_CDT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
                bSectionNumber: u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
                bSectionNumber: u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDownloadDataId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSectionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOriginalNetworkId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDataType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfTableDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSizeOfDataModule: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDataModule: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pbData: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pbData: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionHash: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_CDT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_CDT,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data, bSectionNumber: u8) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IISDB_CDT, @ptrCast(self)), pSectionList, pMPEGData, bSectionNumber);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IISDB_CDT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetDownloadDataId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetDownloadDataId(@as(*const IISDB_CDT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetSectionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetSectionNumber(@as(*const IISDB_CDT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetOriginalNetworkId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetOriginalNetworkId(@as(*const IISDB_CDT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetDataType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetDataType(@as(*const IISDB_CDT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetCountOfTableDescriptors(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetCountOfTableDescriptors(@as(*const IISDB_CDT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetTableDescriptorByIndex(self: *const T, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByIndex(@as(*const IISDB_CDT, @ptrCast(self)), dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetTableDescriptorByTag(self: *const T, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetTableDescriptorByTag(@as(*const IISDB_CDT, @ptrCast(self)), bTag, pdwCookie, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetSizeOfDataModule(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetSizeOfDataModule(@as(*const IISDB_CDT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetDataModule(self: *const T, pbData: ?*?*u8) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetDataModule(@as(*const IISDB_CDT, @ptrCast(self)), pbData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_CDT_GetVersionHash(self: *const T, pdwVersionHash: ?*u32) HRESULT {
                return @as(*const IISDB_CDT.VTable, @ptrCast(self.vtable)).GetVersionHash(@as(*const IISDB_CDT, @ptrCast(self)), pdwVersionHash);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IISDB_EMM_Value = Guid.initString("0edb556d-43ad-4938-9668-321b2ffecfd3");
pub const IID_IISDB_EMM = &IID_IISDB_EMM_Value;
pub const IISDB_EMM = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_EMM,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_EMM,
                pSectionList: ?*ISectionList,
                pMPEGData: ?*IMpeg2Data,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_EMM,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_EMM,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableIdExtension: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_EMM,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_EMM,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDataBytes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_EMM,
                pwBufferLength: ?*u16,
                pbBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_EMM,
                pwBufferLength: ?*u16,
                pbBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSharedEmmMessage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_EMM,
                pwLength: ?*u16,
                ppbMessage: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_EMM,
                pwLength: ?*u16,
                ppbMessage: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetIndividualEmmMessage: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_EMM,
                pUnknown: ?*IUnknown,
                pwLength: ?*u16,
                ppbMessage: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_EMM,
                pUnknown: ?*IUnknown,
                pwLength: ?*u16,
                ppbMessage: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionHash: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IISDB_EMM,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IISDB_EMM,
                pdwVersionHash: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_EMM_Initialize(self: *const T, pSectionList: ?*ISectionList, pMPEGData: ?*IMpeg2Data) HRESULT {
                return @as(*const IISDB_EMM.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IISDB_EMM, @ptrCast(self)), pSectionList, pMPEGData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_EMM_GetVersionNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IISDB_EMM.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IISDB_EMM, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_EMM_GetTableIdExtension(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IISDB_EMM.VTable, @ptrCast(self.vtable)).GetTableIdExtension(@as(*const IISDB_EMM, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_EMM_GetDataBytes(self: *const T, pwBufferLength: ?*u16, pbBuffer: ?*u8) HRESULT {
                return @as(*const IISDB_EMM.VTable, @ptrCast(self.vtable)).GetDataBytes(@as(*const IISDB_EMM, @ptrCast(self)), pwBufferLength, pbBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_EMM_GetSharedEmmMessage(self: *const T, pwLength: ?*u16, ppbMessage: ?*?*u8) HRESULT {
                return @as(*const IISDB_EMM.VTable, @ptrCast(self.vtable)).GetSharedEmmMessage(@as(*const IISDB_EMM, @ptrCast(self)), pwLength, ppbMessage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_EMM_GetIndividualEmmMessage(self: *const T, pUnknown: ?*IUnknown, pwLength: ?*u16, ppbMessage: ?*?*u8) HRESULT {
                return @as(*const IISDB_EMM.VTable, @ptrCast(self.vtable)).GetIndividualEmmMessage(@as(*const IISDB_EMM, @ptrCast(self)), pUnknown, pwLength, ppbMessage);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IISDB_EMM_GetVersionHash(self: *const T, pdwVersionHash: ?*u32) HRESULT {
                return @as(*const IISDB_EMM.VTable, @ptrCast(self.vtable)).GetVersionHash(@as(*const IISDB_EMM, @ptrCast(self)), pdwVersionHash);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDvbServiceAttributeDescriptor_Value = Guid.initString("0f37bd92-d6a1-4854-b950-3a969d27f30e");
pub const IID_IDvbServiceAttributeDescriptor = &IID_IDvbServiceAttributeDescriptor_Value;
pub const IDvbServiceAttributeDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceAttributeDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceAttributeDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceAttributeDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceAttributeDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceAttributeDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceAttributeDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceAttributeDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceAttributeDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordNumericSelectionFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceAttributeDescriptor,
                bRecordIndex: u8,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceAttributeDescriptor,
                bRecordIndex: u8,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordVisibleServiceFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceAttributeDescriptor,
                bRecordIndex: u8,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceAttributeDescriptor,
                bRecordIndex: u8,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceAttributeDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceAttributeDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbServiceAttributeDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceAttributeDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceAttributeDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbServiceAttributeDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceAttributeDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceAttributeDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbServiceAttributeDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceAttributeDescriptor_GetRecordServiceId(self: *const T, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbServiceAttributeDescriptor.VTable, @ptrCast(self.vtable)).GetRecordServiceId(@as(*const IDvbServiceAttributeDescriptor, @ptrCast(self)), bRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceAttributeDescriptor_GetRecordNumericSelectionFlag(self: *const T, bRecordIndex: u8, pfVal: ?*BOOL) HRESULT {
                return @as(*const IDvbServiceAttributeDescriptor.VTable, @ptrCast(self.vtable)).GetRecordNumericSelectionFlag(@as(*const IDvbServiceAttributeDescriptor, @ptrCast(self)), bRecordIndex, pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceAttributeDescriptor_GetRecordVisibleServiceFlag(self: *const T, bRecordIndex: u8, pfVal: ?*BOOL) HRESULT {
                return @as(*const IDvbServiceAttributeDescriptor.VTable, @ptrCast(self.vtable)).GetRecordVisibleServiceFlag(@as(*const IDvbServiceAttributeDescriptor, @ptrCast(self)), bRecordIndex, pfVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const CRID_LOCATION = enum(i32) {
    IN_DESCRIPTOR = 0,
    IN_CIT = 1,
    DVB_RESERVED1 = 2,
    DVB_RESERVED2 = 3,
};
pub const CRID_LOCATION_IN_DESCRIPTOR = CRID_LOCATION.IN_DESCRIPTOR;
pub const CRID_LOCATION_IN_CIT = CRID_LOCATION.IN_CIT;
pub const CRID_LOCATION_DVB_RESERVED1 = CRID_LOCATION.DVB_RESERVED1;
pub const CRID_LOCATION_DVB_RESERVED2 = CRID_LOCATION.DVB_RESERVED2;

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbContentIdentifierDescriptor_Value = Guid.initString("05e0c1ea-f661-4053-9fbf-d93b28359838");
pub const IID_IDvbContentIdentifierDescriptor = &IID_IDvbContentIdentifierDescriptor_Value;
pub const IDvbContentIdentifierDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbContentIdentifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbContentIdentifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbContentIdentifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbContentIdentifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbContentIdentifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbContentIdentifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCrid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbContentIdentifierDescriptor,
                bRecordIndex: u8,
                pbType: ?*u8,
                pbLocation: ?*u8,
                pbLength: ?*u8,
                ppbBytes: [*]?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbContentIdentifierDescriptor,
                bRecordIndex: u8,
                pbType: ?*u8,
                pbLocation: ?*u8,
                pbLength: ?*u8,
                ppbBytes: [*]?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbContentIdentifierDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbContentIdentifierDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbContentIdentifierDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbContentIdentifierDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbContentIdentifierDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbContentIdentifierDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbContentIdentifierDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbContentIdentifierDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbContentIdentifierDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbContentIdentifierDescriptor_GetRecordCrid(self: *const T, bRecordIndex: u8, pbType: ?*u8, pbLocation: ?*u8, pbLength: ?*u8, ppbBytes: [*]?*u8) HRESULT {
                return @as(*const IDvbContentIdentifierDescriptor.VTable, @ptrCast(self.vtable)).GetRecordCrid(@as(*const IDvbContentIdentifierDescriptor, @ptrCast(self)), bRecordIndex, pbType, pbLocation, pbLength, ppbBytes);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbDefaultAuthorityDescriptor_Value = Guid.initString("05ec24d1-3a31-44e7-b408-67c60a352276");
pub const IID_IDvbDefaultAuthorityDescriptor = &IID_IDvbDefaultAuthorityDescriptor_Value;
pub const IDvbDefaultAuthorityDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDefaultAuthorityDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDefaultAuthorityDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDefaultAuthorityDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDefaultAuthorityDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDefaultAuthority: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDefaultAuthorityDescriptor,
                pbLength: ?*u8,
                ppbBytes: [*]?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDefaultAuthorityDescriptor,
                pbLength: ?*u8,
                ppbBytes: [*]?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDefaultAuthorityDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDefaultAuthorityDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbDefaultAuthorityDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDefaultAuthorityDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDefaultAuthorityDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbDefaultAuthorityDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDefaultAuthorityDescriptor_GetDefaultAuthority(self: *const T, pbLength: ?*u8, ppbBytes: [*]?*u8) HRESULT {
                return @as(*const IDvbDefaultAuthorityDescriptor.VTable, @ptrCast(self.vtable)).GetDefaultAuthority(@as(*const IDvbDefaultAuthorityDescriptor, @ptrCast(self)), pbLength, ppbBytes);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDvbSatelliteDeliverySystemDescriptor_Value = Guid.initString("02f2225a-805b-4ec5-a9a6-f9b5913cd470");
pub const IID_IDvbSatelliteDeliverySystemDescriptor = &IID_IDvbSatelliteDeliverySystemDescriptor_Value;
pub const IDvbSatelliteDeliverySystemDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFrequency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOrbitalPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetWestEastFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPolarization: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetModulation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSymbolRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFECInner: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSatelliteDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSatelliteDeliverySystemDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSatelliteDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbSatelliteDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSatelliteDeliverySystemDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSatelliteDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbSatelliteDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSatelliteDeliverySystemDescriptor_GetFrequency(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDvbSatelliteDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetFrequency(@as(*const IDvbSatelliteDeliverySystemDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSatelliteDeliverySystemDescriptor_GetOrbitalPosition(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbSatelliteDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetOrbitalPosition(@as(*const IDvbSatelliteDeliverySystemDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSatelliteDeliverySystemDescriptor_GetWestEastFlag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSatelliteDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetWestEastFlag(@as(*const IDvbSatelliteDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSatelliteDeliverySystemDescriptor_GetPolarization(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSatelliteDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetPolarization(@as(*const IDvbSatelliteDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSatelliteDeliverySystemDescriptor_GetModulation(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSatelliteDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetModulation(@as(*const IDvbSatelliteDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSatelliteDeliverySystemDescriptor_GetSymbolRate(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDvbSatelliteDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetSymbolRate(@as(*const IDvbSatelliteDeliverySystemDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSatelliteDeliverySystemDescriptor_GetFECInner(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSatelliteDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetFECInner(@as(*const IDvbSatelliteDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDvbCableDeliverySystemDescriptor_Value = Guid.initString("dfb98e36-9e1a-4862-9946-993a4e59017b");
pub const IID_IDvbCableDeliverySystemDescriptor = &IID_IDvbCableDeliverySystemDescriptor_Value;
pub const IDvbCableDeliverySystemDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFrequency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFECOuter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetModulation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSymbolRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFECInner: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbCableDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbCableDeliverySystemDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbCableDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbCableDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbCableDeliverySystemDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbCableDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbCableDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbCableDeliverySystemDescriptor_GetFrequency(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDvbCableDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetFrequency(@as(*const IDvbCableDeliverySystemDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbCableDeliverySystemDescriptor_GetFECOuter(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbCableDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetFECOuter(@as(*const IDvbCableDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbCableDeliverySystemDescriptor_GetModulation(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbCableDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetModulation(@as(*const IDvbCableDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbCableDeliverySystemDescriptor_GetSymbolRate(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDvbCableDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetSymbolRate(@as(*const IDvbCableDeliverySystemDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbCableDeliverySystemDescriptor_GetFECInner(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbCableDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetFECInner(@as(*const IDvbCableDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDvbTerrestrialDeliverySystemDescriptor_Value = Guid.initString("ed7e1b91-d12e-420c-b41d-a49d84fe1823");
pub const IID_IDvbTerrestrialDeliverySystemDescriptor = &IID_IDvbTerrestrialDeliverySystemDescriptor_Value;
pub const IDvbTerrestrialDeliverySystemDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCentreFrequency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBandwidth: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetConstellation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetHierarchyInformation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCodeRateHPStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCodeRateLPStream: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGuardInterval: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransmissionMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOtherFrequencyFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetCentreFrequency(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetCentreFrequency(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetBandwidth(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetBandwidth(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetConstellation(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetConstellation(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetHierarchyInformation(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetHierarchyInformation(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetCodeRateHPStream(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetCodeRateHPStream(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetCodeRateLPStream(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetCodeRateLPStream(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetGuardInterval(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetGuardInterval(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetTransmissionMode(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTransmissionMode(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrialDeliverySystemDescriptor_GetOtherFrequencyFlag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetOtherFrequencyFlag(@as(*const IDvbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDvbTerrestrial2DeliverySystemDescriptor_Value = Guid.initString("20ee9be9-cd57-49ab-8f6e-1d07aeb8e482");
pub const IID_IDvbTerrestrial2DeliverySystemDescriptor = &IID_IDvbTerrestrial2DeliverySystemDescriptor_Value;
pub const IDvbTerrestrial2DeliverySystemDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTagExtension: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCentreFrequency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPLPId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetT2SystemId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMultipleInputMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBandwidth: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGuardInterval: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransmissionMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCellId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOtherFrequencyFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTFSFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTerrestrial2DeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetTagExtension(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTagExtension(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetCentreFrequency(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetCentreFrequency(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetPLPId(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetPLPId(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetT2SystemId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetT2SystemId(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetMultipleInputMode(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetMultipleInputMode(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetBandwidth(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetBandwidth(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetGuardInterval(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetGuardInterval(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetTransmissionMode(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTransmissionMode(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetCellId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetCellId(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetOtherFrequencyFlag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetOtherFrequencyFlag(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTerrestrial2DeliverySystemDescriptor_GetTFSFlag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTerrestrial2DeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTFSFlag(@as(*const IDvbTerrestrial2DeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDvbFrequencyListDescriptor_Value = Guid.initString("1cadb613-e1dd-4512-afa8-bb7a007ef8b1");
pub const IID_IDvbFrequencyListDescriptor = &IID_IDvbFrequencyListDescriptor_Value;
pub const IDvbFrequencyListDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbFrequencyListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbFrequencyListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbFrequencyListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbFrequencyListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCodingType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbFrequencyListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbFrequencyListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbFrequencyListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbFrequencyListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCentreFrequency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbFrequencyListDescriptor,
                bRecordIndex: u8,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbFrequencyListDescriptor,
                bRecordIndex: u8,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbFrequencyListDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbFrequencyListDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbFrequencyListDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbFrequencyListDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbFrequencyListDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbFrequencyListDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbFrequencyListDescriptor_GetCodingType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbFrequencyListDescriptor.VTable, @ptrCast(self.vtable)).GetCodingType(@as(*const IDvbFrequencyListDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbFrequencyListDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbFrequencyListDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbFrequencyListDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbFrequencyListDescriptor_GetRecordCentreFrequency(self: *const T, bRecordIndex: u8, pdwVal: ?*u32) HRESULT {
                return @as(*const IDvbFrequencyListDescriptor.VTable, @ptrCast(self.vtable)).GetRecordCentreFrequency(@as(*const IDvbFrequencyListDescriptor, @ptrCast(self)), bRecordIndex, pdwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbPrivateDataSpecifierDescriptor_Value = Guid.initString("5660a019-e75a-4b82-9b4c-ed2256d165a2");
pub const IID_IDvbPrivateDataSpecifierDescriptor = &IID_IDvbPrivateDataSpecifierDescriptor_Value;
pub const IDvbPrivateDataSpecifierDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbPrivateDataSpecifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbPrivateDataSpecifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbPrivateDataSpecifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbPrivateDataSpecifierDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPrivateDataSpecifier: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbPrivateDataSpecifierDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbPrivateDataSpecifierDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbPrivateDataSpecifierDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbPrivateDataSpecifierDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbPrivateDataSpecifierDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbPrivateDataSpecifierDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbPrivateDataSpecifierDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbPrivateDataSpecifierDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbPrivateDataSpecifierDescriptor_GetPrivateDataSpecifier(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IDvbPrivateDataSpecifierDescriptor.VTable, @ptrCast(self.vtable)).GetPrivateDataSpecifier(@as(*const IDvbPrivateDataSpecifierDescriptor, @ptrCast(self)), pdwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDvbLogicalChannelDescriptor_Value = Guid.initString("cf1edaff-3ffd-4cf7-8201-35756acbf85f");
pub const IID_IDvbLogicalChannelDescriptor = &IID_IDvbLogicalChannelDescriptor_Value;
pub const IDvbLogicalChannelDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannelDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannelDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannelDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannelDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannelDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannelDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannelDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannelDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordLogicalChannelNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannelDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannelDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannelDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLogicalChannelDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbLogicalChannelDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannelDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLogicalChannelDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbLogicalChannelDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannelDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLogicalChannelDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbLogicalChannelDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannelDescriptor_GetRecordServiceId(self: *const T, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbLogicalChannelDescriptor.VTable, @ptrCast(self.vtable)).GetRecordServiceId(@as(*const IDvbLogicalChannelDescriptor, @ptrCast(self)), bRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannelDescriptor_GetRecordLogicalChannelNumber(self: *const T, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbLogicalChannelDescriptor.VTable, @ptrCast(self.vtable)).GetRecordLogicalChannelNumber(@as(*const IDvbLogicalChannelDescriptor, @ptrCast(self)), bRecordIndex, pwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbLogicalChannelDescriptor2_Value = Guid.initString("43aca974-4be8-4b98-bc17-9eafd788b1d7");
pub const IID_IDvbLogicalChannelDescriptor2 = &IID_IDvbLogicalChannelDescriptor2_Value;
pub const IDvbLogicalChannelDescriptor2 = extern struct {
    pub const VTable = extern struct {
        base: IDvbLogicalChannelDescriptor.VTable,
        GetRecordLogicalChannelAndVisibility: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannelDescriptor2,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannelDescriptor2,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDvbLogicalChannelDescriptor.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannelDescriptor2_GetRecordLogicalChannelAndVisibility(self: *const T, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbLogicalChannelDescriptor2.VTable, @ptrCast(self.vtable)).GetRecordLogicalChannelAndVisibility(@as(*const IDvbLogicalChannelDescriptor2, @ptrCast(self)), bRecordIndex, pwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbLogicalChannel2Descriptor_Value = Guid.initString("f69c3747-8a30-4980-998c-01fe7f0ba35a");
pub const IID_IDvbLogicalChannel2Descriptor = &IID_IDvbLogicalChannel2Descriptor_Value;
pub const IDvbLogicalChannel2Descriptor = extern struct {
    pub const VTable = extern struct {
        base: IDvbLogicalChannelDescriptor2.VTable,
        GetCountOfLists: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannel2Descriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannel2Descriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetListId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetListNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetListCountryCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetListCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bChannelListIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bChannelListIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetListRecordServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetListRecordLogicalChannelNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetListRecordLogicalChannelAndVisibility: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLogicalChannel2Descriptor,
                bListIndex: u8,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDvbLogicalChannelDescriptor2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannel2Descriptor_GetCountOfLists(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLogicalChannel2Descriptor.VTable, @ptrCast(self.vtable)).GetCountOfLists(@as(*const IDvbLogicalChannel2Descriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannel2Descriptor_GetListId(self: *const T, bListIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLogicalChannel2Descriptor.VTable, @ptrCast(self.vtable)).GetListId(@as(*const IDvbLogicalChannel2Descriptor, @ptrCast(self)), bListIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannel2Descriptor_GetListNameW(self: *const T, bListIndex: u8, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbLogicalChannel2Descriptor.VTable, @ptrCast(self.vtable)).GetListNameW(@as(*const IDvbLogicalChannel2Descriptor, @ptrCast(self)), bListIndex, convMode, pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannel2Descriptor_GetListCountryCode(self: *const T, bListIndex: u8, pszCode: *[4]u8) HRESULT {
                return @as(*const IDvbLogicalChannel2Descriptor.VTable, @ptrCast(self.vtable)).GetListCountryCode(@as(*const IDvbLogicalChannel2Descriptor, @ptrCast(self)), bListIndex, pszCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannel2Descriptor_GetListCountOfRecords(self: *const T, bChannelListIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLogicalChannel2Descriptor.VTable, @ptrCast(self.vtable)).GetListCountOfRecords(@as(*const IDvbLogicalChannel2Descriptor, @ptrCast(self)), bChannelListIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannel2Descriptor_GetListRecordServiceId(self: *const T, bListIndex: u8, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbLogicalChannel2Descriptor.VTable, @ptrCast(self.vtable)).GetListRecordServiceId(@as(*const IDvbLogicalChannel2Descriptor, @ptrCast(self)), bListIndex, bRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannel2Descriptor_GetListRecordLogicalChannelNumber(self: *const T, bListIndex: u8, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbLogicalChannel2Descriptor.VTable, @ptrCast(self.vtable)).GetListRecordLogicalChannelNumber(@as(*const IDvbLogicalChannel2Descriptor, @ptrCast(self)), bListIndex, bRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLogicalChannel2Descriptor_GetListRecordLogicalChannelAndVisibility(self: *const T, bListIndex: u8, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbLogicalChannel2Descriptor.VTable, @ptrCast(self.vtable)).GetListRecordLogicalChannelAndVisibility(@as(*const IDvbLogicalChannel2Descriptor, @ptrCast(self)), bListIndex, bRecordIndex, pwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbHDSimulcastLogicalChannelDescriptor_Value = Guid.initString("1ea8b738-a307-4680-9e26-d0a908c824f4");
pub const IID_IDvbHDSimulcastLogicalChannelDescriptor = &IID_IDvbHDSimulcastLogicalChannelDescriptor_Value;
pub const IDvbHDSimulcastLogicalChannelDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IDvbLogicalChannelDescriptor2.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDvbLogicalChannelDescriptor2.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbDataBroadcastIDDescriptor_Value = Guid.initString("5f26f518-65c8-4048-91f2-9290f59f7b90");
pub const IID_IDvbDataBroadcastIDDescriptor = &IID_IDvbDataBroadcastIDDescriptor_Value;
pub const IDvbDataBroadcastIDDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastIDDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastIDDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastIDDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastIDDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDataBroadcastID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastIDDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastIDDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetIDSelectorBytes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastIDDescriptor,
                pbLen: ?*u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastIDDescriptor,
                pbLen: ?*u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastIDDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastIDDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbDataBroadcastIDDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastIDDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastIDDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbDataBroadcastIDDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastIDDescriptor_GetDataBroadcastID(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbDataBroadcastIDDescriptor.VTable, @ptrCast(self.vtable)).GetDataBroadcastID(@as(*const IDvbDataBroadcastIDDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastIDDescriptor_GetIDSelectorBytes(self: *const T, pbLen: ?*u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastIDDescriptor.VTable, @ptrCast(self.vtable)).GetIDSelectorBytes(@as(*const IDvbDataBroadcastIDDescriptor, @ptrCast(self)), pbLen, pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbDataBroadcastDescriptor_Value = Guid.initString("d1ebc1d6-8b60-4c20-9caf-e59382e7c400");
pub const IID_IDvbDataBroadcastDescriptor = &IID_IDvbDataBroadcastDescriptor_Value;
pub const IDvbDataBroadcastDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDataBroadcastID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetComponentTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSelectorLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSelectorBytes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbLen: ?*u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbLen: ?*u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLangID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastDescriptor,
                pulVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastDescriptor,
                pulVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetText: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbLen: ?*u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbDataBroadcastDescriptor,
                pbLen: ?*u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbDataBroadcastDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbDataBroadcastDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastDescriptor_GetDataBroadcastID(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbDataBroadcastDescriptor.VTable, @ptrCast(self.vtable)).GetDataBroadcastID(@as(*const IDvbDataBroadcastDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastDescriptor_GetComponentTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastDescriptor.VTable, @ptrCast(self.vtable)).GetComponentTag(@as(*const IDvbDataBroadcastDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastDescriptor_GetSelectorLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastDescriptor.VTable, @ptrCast(self.vtable)).GetSelectorLength(@as(*const IDvbDataBroadcastDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastDescriptor_GetSelectorBytes(self: *const T, pbLen: ?*u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastDescriptor.VTable, @ptrCast(self.vtable)).GetSelectorBytes(@as(*const IDvbDataBroadcastDescriptor, @ptrCast(self)), pbLen, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastDescriptor_GetLangID(self: *const T, pulVal: ?*u32) HRESULT {
                return @as(*const IDvbDataBroadcastDescriptor.VTable, @ptrCast(self.vtable)).GetLangID(@as(*const IDvbDataBroadcastDescriptor, @ptrCast(self)), pulVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastDescriptor_GetTextLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastDescriptor.VTable, @ptrCast(self.vtable)).GetTextLength(@as(*const IDvbDataBroadcastDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbDataBroadcastDescriptor_GetText(self: *const T, pbLen: ?*u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbDataBroadcastDescriptor.VTable, @ptrCast(self.vtable)).GetText(@as(*const IDvbDataBroadcastDescriptor, @ptrCast(self)), pbLen, pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DESC_LINKAGE_TYPE = enum(i32) {
    RESERVED0 = 0,
    INFORMATION = 1,
    EPG = 2,
    CA_REPLACEMENT = 3,
    COMPLETE_NET_BOUQUET_SI = 4,
    REPLACEMENT = 5,
    DATA = 6,
    RESERVED1 = 7,
    USER = 8,
    RESERVED2 = 255,
};
pub const DESC_LINKAGE_RESERVED0 = DESC_LINKAGE_TYPE.RESERVED0;
pub const DESC_LINKAGE_INFORMATION = DESC_LINKAGE_TYPE.INFORMATION;
pub const DESC_LINKAGE_EPG = DESC_LINKAGE_TYPE.EPG;
pub const DESC_LINKAGE_CA_REPLACEMENT = DESC_LINKAGE_TYPE.CA_REPLACEMENT;
pub const DESC_LINKAGE_COMPLETE_NET_BOUQUET_SI = DESC_LINKAGE_TYPE.COMPLETE_NET_BOUQUET_SI;
pub const DESC_LINKAGE_REPLACEMENT = DESC_LINKAGE_TYPE.REPLACEMENT;
pub const DESC_LINKAGE_DATA = DESC_LINKAGE_TYPE.DATA;
pub const DESC_LINKAGE_RESERVED1 = DESC_LINKAGE_TYPE.RESERVED1;
pub const DESC_LINKAGE_USER = DESC_LINKAGE_TYPE.USER;
pub const DESC_LINKAGE_RESERVED2 = DESC_LINKAGE_TYPE.RESERVED2;

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbLinkageDescriptor_Value = Guid.initString("1cdf8b31-994a-46fc-acfd-6a6be8934dd5");
pub const IID_IDvbLinkageDescriptor = &IID_IDvbLinkageDescriptor_Value;
pub const IDvbLinkageDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLinkageDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLinkageDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLinkageDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLinkageDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTSId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLinkageDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLinkageDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetONId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLinkageDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLinkageDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLinkageDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLinkageDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLinkageType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLinkageDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLinkageDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPrivateDataLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLinkageDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLinkageDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPrivateData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbLinkageDescriptor,
                pbLen: ?*u8,
                pbData: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbLinkageDescriptor,
                pbLen: ?*u8,
                pbData: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLinkageDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLinkageDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbLinkageDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLinkageDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLinkageDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbLinkageDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLinkageDescriptor_GetTSId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbLinkageDescriptor.VTable, @ptrCast(self.vtable)).GetTSId(@as(*const IDvbLinkageDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLinkageDescriptor_GetONId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbLinkageDescriptor.VTable, @ptrCast(self.vtable)).GetONId(@as(*const IDvbLinkageDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLinkageDescriptor_GetServiceId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbLinkageDescriptor.VTable, @ptrCast(self.vtable)).GetServiceId(@as(*const IDvbLinkageDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLinkageDescriptor_GetLinkageType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLinkageDescriptor.VTable, @ptrCast(self.vtable)).GetLinkageType(@as(*const IDvbLinkageDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLinkageDescriptor_GetPrivateDataLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbLinkageDescriptor.VTable, @ptrCast(self.vtable)).GetPrivateDataLength(@as(*const IDvbLinkageDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbLinkageDescriptor_GetPrivateData(self: *const T, pbLen: ?*u8, pbData: ?*u8) HRESULT {
                return @as(*const IDvbLinkageDescriptor.VTable, @ptrCast(self.vtable)).GetPrivateData(@as(*const IDvbLinkageDescriptor, @ptrCast(self)), pbLen, pbData);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbTeletextDescriptor_Value = Guid.initString("9cd29d47-69c6-4f92-98a9-210af1b7303a");
pub const IID_IDvbTeletextDescriptor = &IID_IDvbTeletextDescriptor_Value;
pub const IDvbTeletextDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTeletextDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTeletextDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTeletextDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTeletextDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTeletextDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTeletextDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordLangId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTeletextDescriptor,
                bRecordIndex: u8,
                pulVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTeletextDescriptor,
                bRecordIndex: u8,
                pulVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTeletextType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTeletextDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTeletextDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordMagazineNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTeletextDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTeletextDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordPageNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbTeletextDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbTeletextDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTeletextDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTeletextDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbTeletextDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTeletextDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTeletextDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbTeletextDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTeletextDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTeletextDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbTeletextDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTeletextDescriptor_GetRecordLangId(self: *const T, bRecordIndex: u8, pulVal: ?*u32) HRESULT {
                return @as(*const IDvbTeletextDescriptor.VTable, @ptrCast(self.vtable)).GetRecordLangId(@as(*const IDvbTeletextDescriptor, @ptrCast(self)), bRecordIndex, pulVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTeletextDescriptor_GetRecordTeletextType(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTeletextDescriptor.VTable, @ptrCast(self.vtable)).GetRecordTeletextType(@as(*const IDvbTeletextDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTeletextDescriptor_GetRecordMagazineNumber(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTeletextDescriptor.VTable, @ptrCast(self.vtable)).GetRecordMagazineNumber(@as(*const IDvbTeletextDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbTeletextDescriptor_GetRecordPageNumber(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbTeletextDescriptor.VTable, @ptrCast(self.vtable)).GetRecordPageNumber(@as(*const IDvbTeletextDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbSubtitlingDescriptor_Value = Guid.initString("9b25fe1d-fa23-4e50-9784-6df8b26f8a49");
pub const IID_IDvbSubtitlingDescriptor = &IID_IDvbSubtitlingDescriptor_Value;
pub const IDvbSubtitlingDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSubtitlingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSubtitlingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSubtitlingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSubtitlingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSubtitlingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSubtitlingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordLangId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSubtitlingDescriptor,
                bRecordIndex: u8,
                pulVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSubtitlingDescriptor,
                bRecordIndex: u8,
                pulVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordSubtitlingType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSubtitlingDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSubtitlingDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCompositionPageID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSubtitlingDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSubtitlingDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordAncillaryPageID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbSubtitlingDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbSubtitlingDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSubtitlingDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSubtitlingDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbSubtitlingDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSubtitlingDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSubtitlingDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbSubtitlingDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSubtitlingDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSubtitlingDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbSubtitlingDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSubtitlingDescriptor_GetRecordLangId(self: *const T, bRecordIndex: u8, pulVal: ?*u32) HRESULT {
                return @as(*const IDvbSubtitlingDescriptor.VTable, @ptrCast(self.vtable)).GetRecordLangId(@as(*const IDvbSubtitlingDescriptor, @ptrCast(self)), bRecordIndex, pulVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSubtitlingDescriptor_GetRecordSubtitlingType(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbSubtitlingDescriptor.VTable, @ptrCast(self.vtable)).GetRecordSubtitlingType(@as(*const IDvbSubtitlingDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSubtitlingDescriptor_GetRecordCompositionPageID(self: *const T, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbSubtitlingDescriptor.VTable, @ptrCast(self.vtable)).GetRecordCompositionPageID(@as(*const IDvbSubtitlingDescriptor, @ptrCast(self)), bRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbSubtitlingDescriptor_GetRecordAncillaryPageID(self: *const T, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbSubtitlingDescriptor.VTable, @ptrCast(self.vtable)).GetRecordAncillaryPageID(@as(*const IDvbSubtitlingDescriptor, @ptrCast(self)), bRecordIndex, pwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDvbServiceDescriptor_Value = Guid.initString("f9c7fbcf-e2d6-464d-b32d-2ef526e49290");
pub const IID_IDvbServiceDescriptor = &IID_IDvbServiceDescriptor_Value;
pub const IDvbServiceDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceProviderName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor,
                pszName: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor,
                pszName: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceProviderNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor,
                pszName: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor,
                pszName: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProcessedServiceName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceNameEmphasized: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbServiceDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbServiceDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor_GetServiceType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceDescriptor.VTable, @ptrCast(self.vtable)).GetServiceType(@as(*const IDvbServiceDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor_GetServiceProviderName(self: *const T, pszName: ?*?*u8) HRESULT {
                return @as(*const IDvbServiceDescriptor.VTable, @ptrCast(self.vtable)).GetServiceProviderName(@as(*const IDvbServiceDescriptor, @ptrCast(self)), pszName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor_GetServiceProviderNameW(self: *const T, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbServiceDescriptor.VTable, @ptrCast(self.vtable)).GetServiceProviderNameW(@as(*const IDvbServiceDescriptor, @ptrCast(self)), pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor_GetServiceName(self: *const T, pszName: ?*?*u8) HRESULT {
                return @as(*const IDvbServiceDescriptor.VTable, @ptrCast(self.vtable)).GetServiceName(@as(*const IDvbServiceDescriptor, @ptrCast(self)), pszName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor_GetProcessedServiceName(self: *const T, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbServiceDescriptor.VTable, @ptrCast(self.vtable)).GetProcessedServiceName(@as(*const IDvbServiceDescriptor, @ptrCast(self)), pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor_GetServiceNameEmphasized(self: *const T, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbServiceDescriptor.VTable, @ptrCast(self.vtable)).GetServiceNameEmphasized(@as(*const IDvbServiceDescriptor, @ptrCast(self)), pbstrName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbServiceDescriptor2_Value = Guid.initString("d6c76506-85ab-487c-9b2b-36416511e4a2");
pub const IID_IDvbServiceDescriptor2 = &IID_IDvbServiceDescriptor2_Value;
pub const IDvbServiceDescriptor2 = extern struct {
    pub const VTable = extern struct {
        base: IDvbServiceDescriptor.VTable,
        GetServiceProviderNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor2,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor2,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceDescriptor2,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceDescriptor2,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDvbServiceDescriptor.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor2_GetServiceProviderNameW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbServiceDescriptor2.VTable, @ptrCast(self.vtable)).GetServiceProviderNameW(@as(*const IDvbServiceDescriptor2, @ptrCast(self)), convMode, pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceDescriptor2_GetServiceNameW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbServiceDescriptor2.VTable, @ptrCast(self.vtable)).GetServiceNameW(@as(*const IDvbServiceDescriptor2, @ptrCast(self)), convMode, pbstrName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbServiceListDescriptor_Value = Guid.initString("05db0d8f-6008-491a-acd3-7090952707d0");
pub const IID_IDvbServiceListDescriptor = &IID_IDvbServiceListDescriptor_Value;
pub const IDvbServiceListDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceListDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceListDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceListDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbServiceListDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbServiceListDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceListDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceListDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbServiceListDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceListDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceListDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbServiceListDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceListDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceListDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbServiceListDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceListDescriptor_GetRecordServiceId(self: *const T, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IDvbServiceListDescriptor.VTable, @ptrCast(self.vtable)).GetRecordServiceId(@as(*const IDvbServiceListDescriptor, @ptrCast(self)), bRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbServiceListDescriptor_GetRecordServiceType(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbServiceListDescriptor.VTable, @ptrCast(self.vtable)).GetRecordServiceType(@as(*const IDvbServiceListDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbMultilingualServiceNameDescriptor_Value = Guid.initString("2d80433b-b32c-47ef-987f-e78ebb773e34");
pub const IID_IDvbMultilingualServiceNameDescriptor = &IID_IDvbMultilingualServiceNameDescriptor_Value;
pub const IDvbMultilingualServiceNameDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordLangId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                bRecordIndex: u8,
                ulVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                bRecordIndex: u8,
                ulVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceProviderNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                bRecordIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                bRecordIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                bRecordIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbMultilingualServiceNameDescriptor,
                bRecordIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbMultilingualServiceNameDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbMultilingualServiceNameDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbMultilingualServiceNameDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbMultilingualServiceNameDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbMultilingualServiceNameDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbMultilingualServiceNameDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbMultilingualServiceNameDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbMultilingualServiceNameDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbMultilingualServiceNameDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbMultilingualServiceNameDescriptor_GetRecordLangId(self: *const T, bRecordIndex: u8, ulVal: ?*u32) HRESULT {
                return @as(*const IDvbMultilingualServiceNameDescriptor.VTable, @ptrCast(self.vtable)).GetRecordLangId(@as(*const IDvbMultilingualServiceNameDescriptor, @ptrCast(self)), bRecordIndex, ulVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbMultilingualServiceNameDescriptor_GetRecordServiceProviderNameW(self: *const T, bRecordIndex: u8, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbMultilingualServiceNameDescriptor.VTable, @ptrCast(self.vtable)).GetRecordServiceProviderNameW(@as(*const IDvbMultilingualServiceNameDescriptor, @ptrCast(self)), bRecordIndex, convMode, pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbMultilingualServiceNameDescriptor_GetRecordServiceNameW(self: *const T, bRecordIndex: u8, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbMultilingualServiceNameDescriptor.VTable, @ptrCast(self.vtable)).GetRecordServiceNameW(@as(*const IDvbMultilingualServiceNameDescriptor, @ptrCast(self)), bRecordIndex, convMode, pbstrName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbNetworkNameDescriptor_Value = Guid.initString("5b2a80cf-35b9-446c-b3e4-048b761dbc51");
pub const IID_IDvbNetworkNameDescriptor = &IID_IDvbNetworkNameDescriptor_Value;
pub const IDvbNetworkNameDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbNetworkNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbNetworkNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbNetworkNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbNetworkNameDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNetworkName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbNetworkNameDescriptor,
                pszName: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbNetworkNameDescriptor,
                pszName: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNetworkNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbNetworkNameDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbNetworkNameDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbNetworkNameDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbNetworkNameDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbNetworkNameDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbNetworkNameDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbNetworkNameDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbNetworkNameDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbNetworkNameDescriptor_GetNetworkName(self: *const T, pszName: ?*?*u8) HRESULT {
                return @as(*const IDvbNetworkNameDescriptor.VTable, @ptrCast(self.vtable)).GetNetworkName(@as(*const IDvbNetworkNameDescriptor, @ptrCast(self)), pszName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbNetworkNameDescriptor_GetNetworkNameW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbNetworkNameDescriptor.VTable, @ptrCast(self.vtable)).GetNetworkNameW(@as(*const IDvbNetworkNameDescriptor, @ptrCast(self)), convMode, pbstrName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbShortEventDescriptor_Value = Guid.initString("b170be92-5b75-458e-9c6e-b0008231491a");
pub const IID_IDvbShortEventDescriptor = &IID_IDvbShortEventDescriptor_Value;
pub const IDvbShortEventDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbShortEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbShortEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbShortEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbShortEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLanguageCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbShortEventDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbShortEventDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEventNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbShortEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbShortEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbShortEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbShortEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbShortEventDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbShortEventDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbShortEventDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbShortEventDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbShortEventDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbShortEventDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbShortEventDescriptor_GetLanguageCode(self: *const T, pszCode: *[4]u8) HRESULT {
                return @as(*const IDvbShortEventDescriptor.VTable, @ptrCast(self.vtable)).GetLanguageCode(@as(*const IDvbShortEventDescriptor, @ptrCast(self)), pszCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbShortEventDescriptor_GetEventNameW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IDvbShortEventDescriptor.VTable, @ptrCast(self.vtable)).GetEventNameW(@as(*const IDvbShortEventDescriptor, @ptrCast(self)), convMode, pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbShortEventDescriptor_GetTextW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrText: ?*?BSTR) HRESULT {
                return @as(*const IDvbShortEventDescriptor.VTable, @ptrCast(self.vtable)).GetTextW(@as(*const IDvbShortEventDescriptor, @ptrCast(self)), convMode, pbstrText);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbExtendedEventDescriptor_Value = Guid.initString("c9b22eca-85f4-499f-b1db-efa93a91ee57");
pub const IID_IDvbExtendedEventDescriptor = &IID_IDvbExtendedEventDescriptor_Value;
pub const IDvbExtendedEventDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDescriptorNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastDescriptorNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLanguageCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordItemW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                bRecordIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrDesc: ?*?BSTR,
                pbstrItem: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                bRecordIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrDesc: ?*?BSTR,
                pbstrItem: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetConcatenatedItemW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                pFollowingDescriptor: ?*IDvbExtendedEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrDesc: ?*?BSTR,
                pbstrItem: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                pFollowingDescriptor: ?*IDvbExtendedEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrDesc: ?*?BSTR,
                pbstrItem: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetConcatenatedTextW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                FollowingDescriptor: ?*IDvbExtendedEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                FollowingDescriptor: ?*IDvbExtendedEventDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordItemRawBytes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbExtendedEventDescriptor,
                bRecordIndex: u8,
                ppbRawItem: ?*?*u8,
                pbItemLength: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbExtendedEventDescriptor,
                bRecordIndex: u8,
                ppbRawItem: ?*?*u8,
                pbItemLength: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetDescriptorNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetDescriptorNumber(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetLastDescriptorNumber(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetLastDescriptorNumber(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetLanguageCode(self: *const T, pszCode: *[4]u8) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetLanguageCode(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), pszCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetRecordItemW(self: *const T, bRecordIndex: u8, convMode: DVB_STRCONV_MODE, pbstrDesc: ?*?BSTR, pbstrItem: ?*?BSTR) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetRecordItemW(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), bRecordIndex, convMode, pbstrDesc, pbstrItem);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetConcatenatedItemW(self: *const T, pFollowingDescriptor: ?*IDvbExtendedEventDescriptor, convMode: DVB_STRCONV_MODE, pbstrDesc: ?*?BSTR, pbstrItem: ?*?BSTR) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetConcatenatedItemW(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), pFollowingDescriptor, convMode, pbstrDesc, pbstrItem);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetTextW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrText: ?*?BSTR) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetTextW(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), convMode, pbstrText);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetConcatenatedTextW(self: *const T, FollowingDescriptor: ?*IDvbExtendedEventDescriptor, convMode: DVB_STRCONV_MODE, pbstrText: ?*?BSTR) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetConcatenatedTextW(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), FollowingDescriptor, convMode, pbstrText);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbExtendedEventDescriptor_GetRecordItemRawBytes(self: *const T, bRecordIndex: u8, ppbRawItem: ?*?*u8, pbItemLength: ?*u8) HRESULT {
                return @as(*const IDvbExtendedEventDescriptor.VTable, @ptrCast(self.vtable)).GetRecordItemRawBytes(@as(*const IDvbExtendedEventDescriptor, @ptrCast(self)), bRecordIndex, ppbRawItem, pbItemLength);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbComponentDescriptor_Value = Guid.initString("91e405cf-80e7-457f-9096-1b9d1ce32141");
pub const IID_IDvbComponentDescriptor = &IID_IDvbComponentDescriptor_Value;
pub const IDvbComponentDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamContent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetComponentType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetComponentTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLanguageCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbComponentDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbComponentDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbComponentDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbComponentDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbComponentDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbComponentDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbComponentDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbComponentDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbComponentDescriptor_GetStreamContent(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbComponentDescriptor.VTable, @ptrCast(self.vtable)).GetStreamContent(@as(*const IDvbComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbComponentDescriptor_GetComponentType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbComponentDescriptor.VTable, @ptrCast(self.vtable)).GetComponentType(@as(*const IDvbComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbComponentDescriptor_GetComponentTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbComponentDescriptor.VTable, @ptrCast(self.vtable)).GetComponentTag(@as(*const IDvbComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbComponentDescriptor_GetLanguageCode(self: *const T, pszCode: *[4]u8) HRESULT {
                return @as(*const IDvbComponentDescriptor.VTable, @ptrCast(self.vtable)).GetLanguageCode(@as(*const IDvbComponentDescriptor, @ptrCast(self)), pszCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbComponentDescriptor_GetTextW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrText: ?*?BSTR) HRESULT {
                return @as(*const IDvbComponentDescriptor.VTable, @ptrCast(self.vtable)).GetTextW(@as(*const IDvbComponentDescriptor, @ptrCast(self)), convMode, pbstrText);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbContentDescriptor_Value = Guid.initString("2e883881-a467-412a-9d63-6f2b6da05bf0");
pub const IID_IDvbContentDescriptor = &IID_IDvbContentDescriptor_Value;
pub const IDvbContentDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordContentNibbles: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbContentDescriptor,
                bRecordIndex: u8,
                pbValLevel1: ?*u8,
                pbValLevel2: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbContentDescriptor,
                bRecordIndex: u8,
                pbValLevel1: ?*u8,
                pbValLevel2: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordUserNibbles: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbContentDescriptor,
                bRecordIndex: u8,
                pbVal1: ?*u8,
                pbVal2: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbContentDescriptor,
                bRecordIndex: u8,
                pbVal1: ?*u8,
                pbVal2: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbContentDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbContentDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbContentDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbContentDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbContentDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbContentDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbContentDescriptor_GetRecordContentNibbles(self: *const T, bRecordIndex: u8, pbValLevel1: ?*u8, pbValLevel2: ?*u8) HRESULT {
                return @as(*const IDvbContentDescriptor.VTable, @ptrCast(self.vtable)).GetRecordContentNibbles(@as(*const IDvbContentDescriptor, @ptrCast(self)), bRecordIndex, pbValLevel1, pbValLevel2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbContentDescriptor_GetRecordUserNibbles(self: *const T, bRecordIndex: u8, pbVal1: ?*u8, pbVal2: ?*u8) HRESULT {
                return @as(*const IDvbContentDescriptor.VTable, @ptrCast(self.vtable)).GetRecordUserNibbles(@as(*const IDvbContentDescriptor, @ptrCast(self)), bRecordIndex, pbVal1, pbVal2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDvbParentalRatingDescriptor_Value = Guid.initString("3ad9dde1-fb1b-4186-937f-22e6b5a72a10");
pub const IID_IDvbParentalRatingDescriptor = &IID_IDvbParentalRatingDescriptor_Value;
pub const IDvbParentalRatingDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbParentalRatingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbParentalRatingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbParentalRatingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbParentalRatingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbParentalRatingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbParentalRatingDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordRating: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDvbParentalRatingDescriptor,
                bRecordIndex: u8,
                pszCountryCode: *[4]u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDvbParentalRatingDescriptor,
                bRecordIndex: u8,
                pszCountryCode: *[4]u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbParentalRatingDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbParentalRatingDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IDvbParentalRatingDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbParentalRatingDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbParentalRatingDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IDvbParentalRatingDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbParentalRatingDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbParentalRatingDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IDvbParentalRatingDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDvbParentalRatingDescriptor_GetRecordRating(self: *const T, bRecordIndex: u8, pszCountryCode: *[4]u8, pbVal: ?*u8) HRESULT {
                return @as(*const IDvbParentalRatingDescriptor.VTable, @ptrCast(self.vtable)).GetRecordRating(@as(*const IDvbParentalRatingDescriptor, @ptrCast(self)), bRecordIndex, pszCountryCode, pbVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbTerrestrialDeliverySystemDescriptor_Value = Guid.initString("39fae0a6-d151-44dd-a28a-765de5991670");
pub const IID_IIsdbTerrestrialDeliverySystemDescriptor = &IID_IIsdbTerrestrialDeliverySystemDescriptor_Value;
pub const IIsdbTerrestrialDeliverySystemDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAreaCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGuardInterval: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTransmissionMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordFrequency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                bRecordIndex: u8,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTerrestrialDeliverySystemDescriptor,
                bRecordIndex: u8,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTerrestrialDeliverySystemDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTerrestrialDeliverySystemDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTerrestrialDeliverySystemDescriptor_GetAreaCode(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetAreaCode(@as(*const IIsdbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTerrestrialDeliverySystemDescriptor_GetGuardInterval(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetGuardInterval(@as(*const IIsdbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTerrestrialDeliverySystemDescriptor_GetTransmissionMode(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetTransmissionMode(@as(*const IIsdbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTerrestrialDeliverySystemDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IIsdbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTerrestrialDeliverySystemDescriptor_GetRecordFrequency(self: *const T, bRecordIndex: u8, pdwVal: ?*u32) HRESULT {
                return @as(*const IIsdbTerrestrialDeliverySystemDescriptor.VTable, @ptrCast(self.vtable)).GetRecordFrequency(@as(*const IIsdbTerrestrialDeliverySystemDescriptor, @ptrCast(self)), bRecordIndex, pdwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbTSInformationDescriptor_Value = Guid.initString("d7ad183e-38f5-4210-b55f-ec8d601bbd47");
pub const IID_IIsdbTSInformationDescriptor = &IID_IIsdbTSInformationDescriptor_Value;
pub const IIsdbTSInformationDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTSInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTSInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTSInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTSInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRemoteControlKeyId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTSInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTSInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTSNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTSInformationDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTSInformationDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTSInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTSInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTransmissionTypeInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTSInformationDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTSInformationDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordNumberOfServices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTSInformationDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTSInformationDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordServiceIdByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbTSInformationDescriptor,
                bRecordIndex: u8,
                bServiceIndex: u8,
                pdwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbTSInformationDescriptor,
                bRecordIndex: u8,
                bServiceIndex: u8,
                pdwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTSInformationDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTSInformationDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbTSInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTSInformationDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTSInformationDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbTSInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTSInformationDescriptor_GetRemoteControlKeyId(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTSInformationDescriptor.VTable, @ptrCast(self.vtable)).GetRemoteControlKeyId(@as(*const IIsdbTSInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTSInformationDescriptor_GetTSNameW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IIsdbTSInformationDescriptor.VTable, @ptrCast(self.vtable)).GetTSNameW(@as(*const IIsdbTSInformationDescriptor, @ptrCast(self)), convMode, pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTSInformationDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTSInformationDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IIsdbTSInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTSInformationDescriptor_GetRecordTransmissionTypeInfo(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTSInformationDescriptor.VTable, @ptrCast(self.vtable)).GetRecordTransmissionTypeInfo(@as(*const IIsdbTSInformationDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTSInformationDescriptor_GetRecordNumberOfServices(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbTSInformationDescriptor.VTable, @ptrCast(self.vtable)).GetRecordNumberOfServices(@as(*const IIsdbTSInformationDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbTSInformationDescriptor_GetRecordServiceIdByIndex(self: *const T, bRecordIndex: u8, bServiceIndex: u8, pdwVal: ?*u16) HRESULT {
                return @as(*const IIsdbTSInformationDescriptor.VTable, @ptrCast(self.vtable)).GetRecordServiceIdByIndex(@as(*const IIsdbTSInformationDescriptor, @ptrCast(self)), bRecordIndex, bServiceIndex, pdwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbDigitalCopyControlDescriptor_Value = Guid.initString("1a28417e-266a-4bb8-a4bd-d782bcfb8161");
pub const IID_IIsdbDigitalCopyControlDescriptor = &IID_IIsdbDigitalCopyControlDescriptor_Value;
pub const IIsdbDigitalCopyControlDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCopyControl: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                pbDigitalRecordingControlData: ?*u8,
                pbCopyControlType: ?*u8,
                pbAPSControlData: ?*u8,
                pbMaximumBitrate: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                pbDigitalRecordingControlData: ?*u8,
                pbCopyControlType: ?*u8,
                pbAPSControlData: ?*u8,
                pbMaximumBitrate: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCopyControl: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                bRecordIndex: u8,
                pbComponentTag: ?*u8,
                pbDigitalRecordingControlData: ?*u8,
                pbCopyControlType: ?*u8,
                pbAPSControlData: ?*u8,
                pbMaximumBitrate: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDigitalCopyControlDescriptor,
                bRecordIndex: u8,
                pbComponentTag: ?*u8,
                pbDigitalRecordingControlData: ?*u8,
                pbCopyControlType: ?*u8,
                pbAPSControlData: ?*u8,
                pbMaximumBitrate: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDigitalCopyControlDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDigitalCopyControlDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbDigitalCopyControlDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDigitalCopyControlDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDigitalCopyControlDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbDigitalCopyControlDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDigitalCopyControlDescriptor_GetCopyControl(self: *const T, pbDigitalRecordingControlData: ?*u8, pbCopyControlType: ?*u8, pbAPSControlData: ?*u8, pbMaximumBitrate: ?*u8) HRESULT {
                return @as(*const IIsdbDigitalCopyControlDescriptor.VTable, @ptrCast(self.vtable)).GetCopyControl(@as(*const IIsdbDigitalCopyControlDescriptor, @ptrCast(self)), pbDigitalRecordingControlData, pbCopyControlType, pbAPSControlData, pbMaximumBitrate);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDigitalCopyControlDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDigitalCopyControlDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IIsdbDigitalCopyControlDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDigitalCopyControlDescriptor_GetRecordCopyControl(self: *const T, bRecordIndex: u8, pbComponentTag: ?*u8, pbDigitalRecordingControlData: ?*u8, pbCopyControlType: ?*u8, pbAPSControlData: ?*u8, pbMaximumBitrate: ?*u8) HRESULT {
                return @as(*const IIsdbDigitalCopyControlDescriptor.VTable, @ptrCast(self.vtable)).GetRecordCopyControl(@as(*const IIsdbDigitalCopyControlDescriptor, @ptrCast(self)), bRecordIndex, pbComponentTag, pbDigitalRecordingControlData, pbCopyControlType, pbAPSControlData, pbMaximumBitrate);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbAudioComponentDescriptor_Value = Guid.initString("679d2002-2425-4be4-a4c7-d6632a574f4d");
pub const IID_IIsdbAudioComponentDescriptor = &IID_IIsdbAudioComponentDescriptor_Value;
pub const IIsdbAudioComponentDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamContent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetComponentType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetComponentTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStreamType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSimulcastGroupTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetESMultiLingualFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMainComponentFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pfVal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetQualityIndicator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSamplingRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLanguageCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLanguageCode2: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbAudioComponentDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbAudioComponentDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetStreamContent(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetStreamContent(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetComponentType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetComponentType(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetComponentTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetComponentTag(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetStreamType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetStreamType(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetSimulcastGroupTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetSimulcastGroupTag(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetESMultiLingualFlag(self: *const T, pfVal: ?*BOOL) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetESMultiLingualFlag(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetMainComponentFlag(self: *const T, pfVal: ?*BOOL) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetMainComponentFlag(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pfVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetQualityIndicator(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetQualityIndicator(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetSamplingRate(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetSamplingRate(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetLanguageCode(self: *const T, pszCode: *[4]u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetLanguageCode(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pszCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetLanguageCode2(self: *const T, pszCode: *[4]u8) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetLanguageCode2(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), pszCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbAudioComponentDescriptor_GetTextW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrText: ?*?BSTR) HRESULT {
                return @as(*const IIsdbAudioComponentDescriptor.VTable, @ptrCast(self.vtable)).GetTextW(@as(*const IIsdbAudioComponentDescriptor, @ptrCast(self)), convMode, pbstrText);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbDataContentDescriptor_Value = Guid.initString("a428100a-e646-4bd6-aa14-6087bdc08cd5");
pub const IID_IIsdbDataContentDescriptor = &IID_IIsdbDataContentDescriptor_Value;
pub const IIsdbDataContentDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDataComponentId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEntryComponent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSelectorLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSelectorBytes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                bBufLength: u8,
                pbBuf: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                bBufLength: u8,
                pbBuf: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordComponentRef: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLanguageCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                pszCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDataContentDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDataContentDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetDataComponentId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetDataComponentId(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetEntryComponent(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetEntryComponent(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetSelectorLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetSelectorLength(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetSelectorBytes(self: *const T, bBufLength: u8, pbBuf: ?*u8) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetSelectorBytes(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), bBufLength, pbBuf);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetRecordComponentRef(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetRecordComponentRef(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetLanguageCode(self: *const T, pszCode: *[4]u8) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetLanguageCode(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), pszCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDataContentDescriptor_GetTextW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrText: ?*?BSTR) HRESULT {
                return @as(*const IIsdbDataContentDescriptor.VTable, @ptrCast(self.vtable)).GetTextW(@as(*const IIsdbDataContentDescriptor, @ptrCast(self)), convMode, pbstrText);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbCAContractInformationDescriptor_Value = Guid.initString("08e18b25-a28f-4e92-821e-4fced5cc2291");
pub const IID_IIsdbCAContractInformationDescriptor = &IID_IIsdbCAContractInformationDescriptor_Value;
pub const IIsdbCAContractInformationDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCASystemId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCAUnitId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordComponentTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAContractInformationDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAContractInformationDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetContractVerificationInfoLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAContractInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetContractVerificationInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAContractInformationDescriptor,
                bBufLength: u8,
                pbBuf: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAContractInformationDescriptor,
                bBufLength: u8,
                pbBuf: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFeeNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAContractInformationDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAContractInformationDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAContractInformationDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAContractInformationDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbCAContractInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAContractInformationDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAContractInformationDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbCAContractInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAContractInformationDescriptor_GetCASystemId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbCAContractInformationDescriptor.VTable, @ptrCast(self.vtable)).GetCASystemId(@as(*const IIsdbCAContractInformationDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAContractInformationDescriptor_GetCAUnitId(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAContractInformationDescriptor.VTable, @ptrCast(self.vtable)).GetCAUnitId(@as(*const IIsdbCAContractInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAContractInformationDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAContractInformationDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IIsdbCAContractInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAContractInformationDescriptor_GetRecordComponentTag(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAContractInformationDescriptor.VTable, @ptrCast(self.vtable)).GetRecordComponentTag(@as(*const IIsdbCAContractInformationDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAContractInformationDescriptor_GetContractVerificationInfoLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAContractInformationDescriptor.VTable, @ptrCast(self.vtable)).GetContractVerificationInfoLength(@as(*const IIsdbCAContractInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAContractInformationDescriptor_GetContractVerificationInfo(self: *const T, bBufLength: u8, pbBuf: ?*u8) HRESULT {
                return @as(*const IIsdbCAContractInformationDescriptor.VTable, @ptrCast(self.vtable)).GetContractVerificationInfo(@as(*const IIsdbCAContractInformationDescriptor, @ptrCast(self)), bBufLength, pbBuf);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAContractInformationDescriptor_GetFeeNameW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IIsdbCAContractInformationDescriptor.VTable, @ptrCast(self.vtable)).GetFeeNameW(@as(*const IIsdbCAContractInformationDescriptor, @ptrCast(self)), convMode, pbstrName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbEventGroupDescriptor_Value = Guid.initString("94b06780-2e2a-44dc-a966-cc56fdabc6c2");
pub const IID_IIsdbEventGroupDescriptor = &IID_IIsdbEventGroupDescriptor_Value;
pub const IIsdbEventGroupDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGroupType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEventGroupDescriptor,
                bRecordIndex: u8,
                pwServiceId: ?*u16,
                pwEventId: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEventGroupDescriptor,
                bRecordIndex: u8,
                pwServiceId: ?*u16,
                pwEventId: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRefRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEventGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRefRecordEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEventGroupDescriptor,
                bRecordIndex: u8,
                pwOriginalNetworkId: ?*u16,
                pwTransportStreamId: ?*u16,
                pwServiceId: ?*u16,
                pwEventId: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEventGroupDescriptor,
                bRecordIndex: u8,
                pwOriginalNetworkId: ?*u16,
                pwTransportStreamId: ?*u16,
                pwServiceId: ?*u16,
                pwEventId: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEventGroupDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbEventGroupDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbEventGroupDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEventGroupDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbEventGroupDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbEventGroupDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEventGroupDescriptor_GetGroupType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbEventGroupDescriptor.VTable, @ptrCast(self.vtable)).GetGroupType(@as(*const IIsdbEventGroupDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEventGroupDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbEventGroupDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IIsdbEventGroupDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEventGroupDescriptor_GetRecordEvent(self: *const T, bRecordIndex: u8, pwServiceId: ?*u16, pwEventId: ?*u16) HRESULT {
                return @as(*const IIsdbEventGroupDescriptor.VTable, @ptrCast(self.vtable)).GetRecordEvent(@as(*const IIsdbEventGroupDescriptor, @ptrCast(self)), bRecordIndex, pwServiceId, pwEventId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEventGroupDescriptor_GetCountOfRefRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbEventGroupDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRefRecords(@as(*const IIsdbEventGroupDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEventGroupDescriptor_GetRefRecordEvent(self: *const T, bRecordIndex: u8, pwOriginalNetworkId: ?*u16, pwTransportStreamId: ?*u16, pwServiceId: ?*u16, pwEventId: ?*u16) HRESULT {
                return @as(*const IIsdbEventGroupDescriptor.VTable, @ptrCast(self.vtable)).GetRefRecordEvent(@as(*const IIsdbEventGroupDescriptor, @ptrCast(self)), bRecordIndex, pwOriginalNetworkId, pwTransportStreamId, pwServiceId, pwEventId);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbComponentGroupDescriptor_Value = Guid.initString("a494f17f-c592-47d8-8943-64c9a34be7b9");
pub const IID_IIsdbComponentGroupDescriptor = &IID_IIsdbComponentGroupDescriptor_Value;
pub const IIsdbComponentGroupDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetComponentGroupType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordGroupId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordNumberOfCAUnit: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCAUnitCAUnitId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                bCAUnitIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                bCAUnitIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCAUnitNumberOfComponents: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                bCAUnitIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                bCAUnitIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCAUnitComponentTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                bCAUnitIndex: u8,
                bComponentIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                bCAUnitIndex: u8,
                bComponentIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTotalBitRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordTextW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbComponentGroupDescriptor,
                bRecordIndex: u8,
                convMode: DVB_STRCONV_MODE,
                pbstrText: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetComponentGroupType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetComponentGroupType(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetRecordGroupId(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetRecordGroupId(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetRecordNumberOfCAUnit(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetRecordNumberOfCAUnit(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetRecordCAUnitCAUnitId(self: *const T, bRecordIndex: u8, bCAUnitIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetRecordCAUnitCAUnitId(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), bRecordIndex, bCAUnitIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetRecordCAUnitNumberOfComponents(self: *const T, bRecordIndex: u8, bCAUnitIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetRecordCAUnitNumberOfComponents(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), bRecordIndex, bCAUnitIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetRecordCAUnitComponentTag(self: *const T, bRecordIndex: u8, bCAUnitIndex: u8, bComponentIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetRecordCAUnitComponentTag(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), bRecordIndex, bCAUnitIndex, bComponentIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetRecordTotalBitRate(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetRecordTotalBitRate(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbComponentGroupDescriptor_GetRecordTextW(self: *const T, bRecordIndex: u8, convMode: DVB_STRCONV_MODE, pbstrText: ?*?BSTR) HRESULT {
                return @as(*const IIsdbComponentGroupDescriptor.VTable, @ptrCast(self.vtable)).GetRecordTextW(@as(*const IIsdbComponentGroupDescriptor, @ptrCast(self)), bRecordIndex, convMode, pbstrText);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbSeriesDescriptor_Value = Guid.initString("07ef6370-1660-4f26-87fc-614adab24b11");
pub const IID_IIsdbSeriesDescriptor = &IID_IIsdbSeriesDescriptor_Value;
pub const IIsdbSeriesDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSeriesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSeriesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSeriesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSeriesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSeriesId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSeriesDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSeriesDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRepeatLabel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSeriesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSeriesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProgramPattern: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSeriesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSeriesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetExpireDate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSeriesDescriptor,
                pfValid: ?*BOOL,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSeriesDescriptor,
                pfValid: ?*BOOL,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEpisodeNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSeriesDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSeriesDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastEpisodeNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSeriesDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSeriesDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSeriesNameW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSeriesDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSeriesDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSeriesDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSeriesDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbSeriesDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSeriesDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSeriesDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbSeriesDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSeriesDescriptor_GetSeriesId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbSeriesDescriptor.VTable, @ptrCast(self.vtable)).GetSeriesId(@as(*const IIsdbSeriesDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSeriesDescriptor_GetRepeatLabel(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSeriesDescriptor.VTable, @ptrCast(self.vtable)).GetRepeatLabel(@as(*const IIsdbSeriesDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSeriesDescriptor_GetProgramPattern(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSeriesDescriptor.VTable, @ptrCast(self.vtable)).GetProgramPattern(@as(*const IIsdbSeriesDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSeriesDescriptor_GetExpireDate(self: *const T, pfValid: ?*BOOL, pmdtVal: ?*MPEG_DATE_AND_TIME) HRESULT {
                return @as(*const IIsdbSeriesDescriptor.VTable, @ptrCast(self.vtable)).GetExpireDate(@as(*const IIsdbSeriesDescriptor, @ptrCast(self)), pfValid, pmdtVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSeriesDescriptor_GetEpisodeNumber(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbSeriesDescriptor.VTable, @ptrCast(self.vtable)).GetEpisodeNumber(@as(*const IIsdbSeriesDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSeriesDescriptor_GetLastEpisodeNumber(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbSeriesDescriptor.VTable, @ptrCast(self.vtable)).GetLastEpisodeNumber(@as(*const IIsdbSeriesDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSeriesDescriptor_GetSeriesNameW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IIsdbSeriesDescriptor.VTable, @ptrCast(self.vtable)).GetSeriesNameW(@as(*const IIsdbSeriesDescriptor, @ptrCast(self)), convMode, pbstrName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbDownloadContentDescriptor_Value = Guid.initString("5298661e-cb88-4f5f-a1de-5f440c185b92");
pub const IID_IIsdbDownloadContentDescriptor = &IID_IIsdbDownloadContentDescriptor_Value;
pub const IIsdbDownloadContentDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFlags: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pfReboot: ?*BOOL,
                pfAddOn: ?*BOOL,
                pfCompatibility: ?*BOOL,
                pfModuleInfo: ?*BOOL,
                pfTextInfo: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pfReboot: ?*BOOL,
                pfAddOn: ?*BOOL,
                pfCompatibility: ?*BOOL,
                pfModuleInfo: ?*BOOL,
                pfTextInfo: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetComponentSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDownloadId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTimeOutValueDII: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLeakRate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetComponentTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCompatiblityDescriptorLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pwLength: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pwLength: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCompatiblityDescriptor: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                ppbData: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                ppbData: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordModuleId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                wRecordIndex: u16,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                wRecordIndex: u16,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordModuleSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                wRecordIndex: u16,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                wRecordIndex: u16,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordModuleInfoLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                wRecordIndex: u16,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                wRecordIndex: u16,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordModuleInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                wRecordIndex: u16,
                ppbData: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                wRecordIndex: u16,
                ppbData: ?*?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextLanguageCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                szCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                szCode: *[4]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbDownloadContentDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbDownloadContentDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetFlags(self: *const T, pfReboot: ?*BOOL, pfAddOn: ?*BOOL, pfCompatibility: ?*BOOL, pfModuleInfo: ?*BOOL, pfTextInfo: ?*BOOL) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetFlags(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pfReboot, pfAddOn, pfCompatibility, pfModuleInfo, pfTextInfo);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetComponentSize(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetComponentSize(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetDownloadId(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetDownloadId(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetTimeOutValueDII(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetTimeOutValueDII(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetLeakRate(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetLeakRate(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetComponentTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetComponentTag(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetCompatiblityDescriptorLength(self: *const T, pwLength: ?*u16) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetCompatiblityDescriptorLength(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pwLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetCompatiblityDescriptor(self: *const T, ppbData: ?*?*u8) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetCompatiblityDescriptor(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), ppbData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetCountOfRecords(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetRecordModuleId(self: *const T, wRecordIndex: u16, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetRecordModuleId(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), wRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetRecordModuleSize(self: *const T, wRecordIndex: u16, pdwVal: ?*u32) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetRecordModuleSize(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), wRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetRecordModuleInfoLength(self: *const T, wRecordIndex: u16, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetRecordModuleInfoLength(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), wRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetRecordModuleInfo(self: *const T, wRecordIndex: u16, ppbData: ?*?*u8) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetRecordModuleInfo(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), wRecordIndex, ppbData);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetTextLanguageCode(self: *const T, szCode: *[4]u8) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetTextLanguageCode(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), szCode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbDownloadContentDescriptor_GetTextW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IIsdbDownloadContentDescriptor.VTable, @ptrCast(self.vtable)).GetTextW(@as(*const IIsdbDownloadContentDescriptor, @ptrCast(self)), convMode, pbstrName);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbLogoTransmissionDescriptor_Value = Guid.initString("e0103f49-4ae1-4f07-9098-756db1fa88cd");
pub const IID_IIsdbLogoTransmissionDescriptor = &IID_IIsdbLogoTransmissionDescriptor_Value;
pub const IIsdbLogoTransmissionDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLogoTransmissionType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLogoId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLogoVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDownloadDataId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLogoCharW: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrChar: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbLogoTransmissionDescriptor,
                convMode: DVB_STRCONV_MODE,
                pbstrChar: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbLogoTransmissionDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbLogoTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbLogoTransmissionDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbLogoTransmissionDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbLogoTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbLogoTransmissionDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbLogoTransmissionDescriptor_GetLogoTransmissionType(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbLogoTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetLogoTransmissionType(@as(*const IIsdbLogoTransmissionDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbLogoTransmissionDescriptor_GetLogoId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbLogoTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetLogoId(@as(*const IIsdbLogoTransmissionDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbLogoTransmissionDescriptor_GetLogoVersion(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbLogoTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetLogoVersion(@as(*const IIsdbLogoTransmissionDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbLogoTransmissionDescriptor_GetDownloadDataId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbLogoTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetDownloadDataId(@as(*const IIsdbLogoTransmissionDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbLogoTransmissionDescriptor_GetLogoCharW(self: *const T, convMode: DVB_STRCONV_MODE, pbstrChar: ?*?BSTR) HRESULT {
                return @as(*const IIsdbLogoTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetLogoCharW(@as(*const IIsdbLogoTransmissionDescriptor, @ptrCast(self)), convMode, pbstrChar);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbSIParameterDescriptor_Value = Guid.initString("f837dc36-867c-426a-9111-f62093951a45");
pub const IID_IIsdbSIParameterDescriptor = &IID_IIsdbSIParameterDescriptor_Value;
pub const IIsdbSIParameterDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSIParameterDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSIParameterDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSIParameterDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSIParameterDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParameterVersion: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSIParameterDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSIParameterDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetUpdateTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSIParameterDescriptor,
                pVal: ?*MPEG_DATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSIParameterDescriptor,
                pVal: ?*MPEG_DATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordNumberOfTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSIParameterDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSIParameterDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSIParameterDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSIParameterDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptionLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSIParameterDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSIParameterDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableDescriptionBytes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbSIParameterDescriptor,
                bRecordIndex: u8,
                pbBufferLength: ?*u8,
                pbBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbSIParameterDescriptor,
                bRecordIndex: u8,
                pbBufferLength: ?*u8,
                pbBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSIParameterDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSIParameterDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbSIParameterDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSIParameterDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSIParameterDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbSIParameterDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSIParameterDescriptor_GetParameterVersion(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSIParameterDescriptor.VTable, @ptrCast(self.vtable)).GetParameterVersion(@as(*const IIsdbSIParameterDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSIParameterDescriptor_GetUpdateTime(self: *const T, pVal: ?*MPEG_DATE) HRESULT {
                return @as(*const IIsdbSIParameterDescriptor.VTable, @ptrCast(self.vtable)).GetUpdateTime(@as(*const IIsdbSIParameterDescriptor, @ptrCast(self)), pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSIParameterDescriptor_GetRecordNumberOfTable(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSIParameterDescriptor.VTable, @ptrCast(self.vtable)).GetRecordNumberOfTable(@as(*const IIsdbSIParameterDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSIParameterDescriptor_GetTableId(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSIParameterDescriptor.VTable, @ptrCast(self.vtable)).GetTableId(@as(*const IIsdbSIParameterDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSIParameterDescriptor_GetTableDescriptionLength(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbSIParameterDescriptor.VTable, @ptrCast(self.vtable)).GetTableDescriptionLength(@as(*const IIsdbSIParameterDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbSIParameterDescriptor_GetTableDescriptionBytes(self: *const T, bRecordIndex: u8, pbBufferLength: ?*u8, pbBuffer: ?*u8) HRESULT {
                return @as(*const IIsdbSIParameterDescriptor.VTable, @ptrCast(self.vtable)).GetTableDescriptionBytes(@as(*const IIsdbSIParameterDescriptor, @ptrCast(self)), bRecordIndex, pbBufferLength, pbBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbEmergencyInformationDescriptor_Value = Guid.initString("ba6fa681-b973-4da1-9207-ac3e7f0341eb");
pub const IID_IIsdbEmergencyInformationDescriptor = &IID_IIsdbEmergencyInformationDescriptor_Value;
pub const IIsdbEmergencyInformationDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                bRecordIndex: u8,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStartEndFlag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                bRecordIndex: u8,
                pVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                bRecordIndex: u8,
                pVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSignalLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                bRecordIndex: u8,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAreaCode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                bRecordIndex: u8,
                ppwVal: ?*?*u16,
                pbNumAreaCodes: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbEmergencyInformationDescriptor,
                bRecordIndex: u8,
                ppwVal: ?*?*u16,
                pbNumAreaCodes: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEmergencyInformationDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbEmergencyInformationDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbEmergencyInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEmergencyInformationDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbEmergencyInformationDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbEmergencyInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEmergencyInformationDescriptor_GetCountOfRecords(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbEmergencyInformationDescriptor.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IIsdbEmergencyInformationDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEmergencyInformationDescriptor_GetServiceId(self: *const T, bRecordIndex: u8, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbEmergencyInformationDescriptor.VTable, @ptrCast(self.vtable)).GetServiceId(@as(*const IIsdbEmergencyInformationDescriptor, @ptrCast(self)), bRecordIndex, pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEmergencyInformationDescriptor_GetStartEndFlag(self: *const T, bRecordIndex: u8, pVal: ?*u8) HRESULT {
                return @as(*const IIsdbEmergencyInformationDescriptor.VTable, @ptrCast(self.vtable)).GetStartEndFlag(@as(*const IIsdbEmergencyInformationDescriptor, @ptrCast(self)), bRecordIndex, pVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEmergencyInformationDescriptor_GetSignalLevel(self: *const T, bRecordIndex: u8, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbEmergencyInformationDescriptor.VTable, @ptrCast(self.vtable)).GetSignalLevel(@as(*const IIsdbEmergencyInformationDescriptor, @ptrCast(self)), bRecordIndex, pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbEmergencyInformationDescriptor_GetAreaCode(self: *const T, bRecordIndex: u8, ppwVal: ?*?*u16, pbNumAreaCodes: ?*u8) HRESULT {
                return @as(*const IIsdbEmergencyInformationDescriptor.VTable, @ptrCast(self.vtable)).GetAreaCode(@as(*const IIsdbEmergencyInformationDescriptor, @ptrCast(self)), bRecordIndex, ppwVal, pbNumAreaCodes);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbCADescriptor_Value = Guid.initString("0570aa47-52bc-42ae-8ca5-969f41e81aea");
pub const IID_IIsdbCADescriptor = &IID_IIsdbCADescriptor_Value;
pub const IIsdbCADescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCADescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCADescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCADescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCADescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCASystemId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCADescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCADescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetReservedBits: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCADescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCADescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCAPID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCADescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCADescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPrivateDataBytes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCADescriptor,
                pbBufferLength: ?*u8,
                pbBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCADescriptor,
                pbBufferLength: ?*u8,
                pbBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCADescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCADescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbCADescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCADescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCADescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbCADescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCADescriptor_GetCASystemId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbCADescriptor.VTable, @ptrCast(self.vtable)).GetCASystemId(@as(*const IIsdbCADescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCADescriptor_GetReservedBits(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCADescriptor.VTable, @ptrCast(self.vtable)).GetReservedBits(@as(*const IIsdbCADescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCADescriptor_GetCAPID(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbCADescriptor.VTable, @ptrCast(self.vtable)).GetCAPID(@as(*const IIsdbCADescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCADescriptor_GetPrivateDataBytes(self: *const T, pbBufferLength: ?*u8, pbBuffer: ?*u8) HRESULT {
                return @as(*const IIsdbCADescriptor.VTable, @ptrCast(self.vtable)).GetPrivateDataBytes(@as(*const IIsdbCADescriptor, @ptrCast(self)), pbBufferLength, pbBuffer);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbCAServiceDescriptor_Value = Guid.initString("39cbeb97-ff0b-42a7-9ab9-7b9cfe70a77a");
pub const IID_IIsdbCAServiceDescriptor = &IID_IIsdbCAServiceDescriptor_Value;
pub const IIsdbCAServiceDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCASystemId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAServiceDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAServiceDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCABroadcasterGroupId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMessageControl: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAServiceDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceIds: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbCAServiceDescriptor,
                pbNumServiceIds: ?*u8,
                pwServiceIds: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbCAServiceDescriptor,
                pbNumServiceIds: ?*u8,
                pwServiceIds: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAServiceDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAServiceDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbCAServiceDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAServiceDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAServiceDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbCAServiceDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAServiceDescriptor_GetCASystemId(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbCAServiceDescriptor.VTable, @ptrCast(self.vtable)).GetCASystemId(@as(*const IIsdbCAServiceDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAServiceDescriptor_GetCABroadcasterGroupId(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAServiceDescriptor.VTable, @ptrCast(self.vtable)).GetCABroadcasterGroupId(@as(*const IIsdbCAServiceDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAServiceDescriptor_GetMessageControl(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbCAServiceDescriptor.VTable, @ptrCast(self.vtable)).GetMessageControl(@as(*const IIsdbCAServiceDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbCAServiceDescriptor_GetServiceIds(self: *const T, pbNumServiceIds: ?*u8, pwServiceIds: ?*u16) HRESULT {
                return @as(*const IIsdbCAServiceDescriptor.VTable, @ptrCast(self.vtable)).GetServiceIds(@as(*const IIsdbCAServiceDescriptor, @ptrCast(self)), pbNumServiceIds, pwServiceIds);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IIsdbHierarchicalTransmissionDescriptor_Value = Guid.initString("b7b3ae90-ee0b-446d-8769-f7e2aa266aa6");
pub const IID_IIsdbHierarchicalTransmissionDescriptor = &IID_IIsdbHierarchicalTransmissionDescriptor_Value;
pub const IIsdbHierarchicalTransmissionDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFutureUse1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetQualityLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFutureUse2: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetReferencePid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IIsdbHierarchicalTransmissionDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbHierarchicalTransmissionDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbHierarchicalTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IIsdbHierarchicalTransmissionDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbHierarchicalTransmissionDescriptor_GetLength(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbHierarchicalTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IIsdbHierarchicalTransmissionDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbHierarchicalTransmissionDescriptor_GetFutureUse1(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbHierarchicalTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetFutureUse1(@as(*const IIsdbHierarchicalTransmissionDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbHierarchicalTransmissionDescriptor_GetQualityLevel(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbHierarchicalTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetQualityLevel(@as(*const IIsdbHierarchicalTransmissionDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbHierarchicalTransmissionDescriptor_GetFutureUse2(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IIsdbHierarchicalTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetFutureUse2(@as(*const IIsdbHierarchicalTransmissionDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IIsdbHierarchicalTransmissionDescriptor_GetReferencePid(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IIsdbHierarchicalTransmissionDescriptor.VTable, @ptrCast(self.vtable)).GetReferencePid(@as(*const IIsdbHierarchicalTransmissionDescriptor, @ptrCast(self)), pwVal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IPBDASiParser_Value = Guid.initString("9de49a74-aba2-4a18-93e1-21f17f95c3c3");
pub const IID_IPBDASiParser = &IID_IPBDASiParser_Value;
pub const IPBDASiParser = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDASiParser,
                punk: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDASiParser,
                punk: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEIT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDASiParser,
                dwSize: u32,
                pBuffer: ?*u8,
                ppEIT: ?*?*IPBDA_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDASiParser,
                dwSize: u32,
                pBuffer: ?*u8,
                ppEIT: ?*?*IPBDA_EIT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDASiParser,
                dwSize: u32,
                pBuffer: ?*const u8,
                ppServices: ?*?*IPBDA_Services,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDASiParser,
                dwSize: u32,
                pBuffer: ?*const u8,
                ppServices: ?*?*IPBDA_Services,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDASiParser_Initialize(self: *const T, punk: ?*IUnknown) HRESULT {
                return @as(*const IPBDASiParser.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IPBDASiParser, @ptrCast(self)), punk);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDASiParser_GetEIT(self: *const T, dwSize: u32, pBuffer: ?*u8, ppEIT: ?*?*IPBDA_EIT) HRESULT {
                return @as(*const IPBDASiParser.VTable, @ptrCast(self.vtable)).GetEIT(@as(*const IPBDASiParser, @ptrCast(self)), dwSize, pBuffer, ppEIT);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDASiParser_GetServices(self: *const T, dwSize: u32, pBuffer: ?*const u8, ppServices: ?*?*IPBDA_Services) HRESULT {
                return @as(*const IPBDASiParser.VTable, @ptrCast(self.vtable)).GetServices(@as(*const IPBDASiParser, @ptrCast(self)), dwSize, pBuffer, ppServices);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IPBDA_EIT_Value = Guid.initString("a35f2dea-098f-4ebd-984c-2bd4c3c8ce0a");
pub const IID_IPBDA_EIT = &IID_IPBDA_EIT_Value;
pub const IPBDA_EIT = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                size: u32,
                pBuffer: ?*const u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                size: u32,
                pBuffer: ?*const u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTableId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersionNumber: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceIdx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                plwVal: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                plwVal: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordEventId: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                plwVal: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                plwVal: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordStartTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                pmdtVal: ?*MPEG_DATE_AND_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDuration: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                pmdVal: ?*MPEG_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                pmdVal: ?*MPEG_TIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordCountOfDescriptors: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                dwIndex: u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordDescriptorByTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_EIT,
                dwRecordIndex: u32,
                bTag: u8,
                pdwCookie: ?*u32,
                ppDescriptor: ?*?*IGenericDescriptor,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_Initialize(self: *const T, size: u32, pBuffer: ?*const u8) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IPBDA_EIT, @ptrCast(self)), size, pBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetTableId(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetTableId(@as(*const IPBDA_EIT, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetVersionNumber(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetVersionNumber(@as(*const IPBDA_EIT, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetServiceIdx(self: *const T, plwVal: ?*u64) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetServiceIdx(@as(*const IPBDA_EIT, @ptrCast(self)), plwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IPBDA_EIT, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetRecordEventId(self: *const T, dwRecordIndex: u32, plwVal: ?*u64) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetRecordEventId(@as(*const IPBDA_EIT, @ptrCast(self)), dwRecordIndex, plwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetRecordStartTime(self: *const T, dwRecordIndex: u32, pmdtVal: ?*MPEG_DATE_AND_TIME) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetRecordStartTime(@as(*const IPBDA_EIT, @ptrCast(self)), dwRecordIndex, pmdtVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetRecordDuration(self: *const T, dwRecordIndex: u32, pmdVal: ?*MPEG_TIME) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetRecordDuration(@as(*const IPBDA_EIT, @ptrCast(self)), dwRecordIndex, pmdVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetRecordCountOfDescriptors(self: *const T, dwRecordIndex: u32, pdwVal: ?*u32) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetRecordCountOfDescriptors(@as(*const IPBDA_EIT, @ptrCast(self)), dwRecordIndex, pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetRecordDescriptorByIndex(self: *const T, dwRecordIndex: u32, dwIndex: u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByIndex(@as(*const IPBDA_EIT, @ptrCast(self)), dwRecordIndex, dwIndex, ppDescriptor);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_EIT_GetRecordDescriptorByTag(self: *const T, dwRecordIndex: u32, bTag: u8, pdwCookie: ?*u32, ppDescriptor: ?*?*IGenericDescriptor) HRESULT {
                return @as(*const IPBDA_EIT.VTable, @ptrCast(self.vtable)).GetRecordDescriptorByTag(@as(*const IPBDA_EIT, @ptrCast(self)), dwRecordIndex, bTag, pdwCookie, ppDescriptor);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IPBDA_Services_Value = Guid.initString("944eab37-eed4-4850-afd2-77e7efeb4427");
pub const IID_IPBDA_Services = &IID_IPBDA_Services_Value;
pub const IPBDA_Services = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_Services,
                size: u32,
                pBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_Services,
                size: u32,
                pBuffer: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCountOfRecords: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_Services,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_Services,
                pdwVal: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecordByIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDA_Services,
                dwRecordIndex: u32,
                pul64ServiceIdx: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDA_Services,
                dwRecordIndex: u32,
                pul64ServiceIdx: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_Services_Initialize(self: *const T, size: u32, pBuffer: ?*u8) HRESULT {
                return @as(*const IPBDA_Services.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IPBDA_Services, @ptrCast(self)), size, pBuffer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_Services_GetCountOfRecords(self: *const T, pdwVal: ?*u32) HRESULT {
                return @as(*const IPBDA_Services.VTable, @ptrCast(self.vtable)).GetCountOfRecords(@as(*const IPBDA_Services, @ptrCast(self)), pdwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDA_Services_GetRecordByIndex(self: *const T, dwRecordIndex: u32, pul64ServiceIdx: ?*u64) HRESULT {
                return @as(*const IPBDA_Services.VTable, @ptrCast(self.vtable)).GetRecordByIndex(@as(*const IPBDA_Services, @ptrCast(self)), dwRecordIndex, pul64ServiceIdx);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IPBDAEntitlementDescriptor_Value = Guid.initString("22632497-0de3-4587-aadc-d8d99017e760");
pub const IID_IPBDAEntitlementDescriptor = &IID_IPBDAEntitlementDescriptor_Value;
pub const IPBDAEntitlementDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDAEntitlementDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDAEntitlementDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDAEntitlementDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDAEntitlementDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetToken: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDAEntitlementDescriptor,
                ppbTokenBuffer: ?*?*u8,
                pdwTokenLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDAEntitlementDescriptor,
                ppbTokenBuffer: ?*?*u8,
                pdwTokenLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDAEntitlementDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IPBDAEntitlementDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IPBDAEntitlementDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDAEntitlementDescriptor_GetLength(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IPBDAEntitlementDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IPBDAEntitlementDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDAEntitlementDescriptor_GetToken(self: *const T, ppbTokenBuffer: ?*?*u8, pdwTokenLength: ?*u32) HRESULT {
                return @as(*const IPBDAEntitlementDescriptor.VTable, @ptrCast(self.vtable)).GetToken(@as(*const IPBDAEntitlementDescriptor, @ptrCast(self)), ppbTokenBuffer, pdwTokenLength);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IPBDAAttributesDescriptor_Value = Guid.initString("313b3620-3263-45a6-9533-968befbeac03");
pub const IID_IPBDAAttributesDescriptor = &IID_IPBDAAttributesDescriptor_Value;
pub const IPBDAAttributesDescriptor = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTag: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDAAttributesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDAAttributesDescriptor,
                pbVal: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDAAttributesDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDAAttributesDescriptor,
                pwVal: ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAttributePayload: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IPBDAAttributesDescriptor,
                ppbAttributeBuffer: ?*?*u8,
                pdwAttributeLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IPBDAAttributesDescriptor,
                ppbAttributeBuffer: ?*?*u8,
                pdwAttributeLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDAAttributesDescriptor_GetTag(self: *const T, pbVal: ?*u8) HRESULT {
                return @as(*const IPBDAAttributesDescriptor.VTable, @ptrCast(self.vtable)).GetTag(@as(*const IPBDAAttributesDescriptor, @ptrCast(self)), pbVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDAAttributesDescriptor_GetLength(self: *const T, pwVal: ?*u16) HRESULT {
                return @as(*const IPBDAAttributesDescriptor.VTable, @ptrCast(self.vtable)).GetLength(@as(*const IPBDAAttributesDescriptor, @ptrCast(self)), pwVal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IPBDAAttributesDescriptor_GetAttributePayload(self: *const T, ppbAttributeBuffer: ?*?*u8, pdwAttributeLength: ?*u32) HRESULT {
                return @as(*const IPBDAAttributesDescriptor.VTable, @ptrCast(self.vtable)).GetAttributePayload(@as(*const IPBDAAttributesDescriptor, @ptrCast(self)), ppbAttributeBuffer, pdwAttributeLength);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IBDA_TIF_REGISTRATION_Value = Guid.initString("dfef4a68-ee61-415f-9ccb-cd95f2f98a3a");
pub const IID_IBDA_TIF_REGISTRATION = &IID_IBDA_TIF_REGISTRATION_Value;
pub const IBDA_TIF_REGISTRATION = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        RegisterTIFEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_TIF_REGISTRATION,
                pTIFInputPin: ?*IPin,
                ppvRegistrationContext: ?*u32,
                ppMpeg2DataControl: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_TIF_REGISTRATION,
                pTIFInputPin: ?*IPin,
                ppvRegistrationContext: ?*u32,
                ppMpeg2DataControl: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnregisterTIF: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IBDA_TIF_REGISTRATION,
                pvRegistrationContext: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IBDA_TIF_REGISTRATION,
                pvRegistrationContext: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_TIF_REGISTRATION_RegisterTIFEx(self: *const T, pTIFInputPin: ?*IPin, ppvRegistrationContext: ?*u32, ppMpeg2DataControl: ?*?*IUnknown) HRESULT {
                return @as(*const IBDA_TIF_REGISTRATION.VTable, @ptrCast(self.vtable)).RegisterTIFEx(@as(*const IBDA_TIF_REGISTRATION, @ptrCast(self)), pTIFInputPin, ppvRegistrationContext, ppMpeg2DataControl);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IBDA_TIF_REGISTRATION_UnregisterTIF(self: *const T, pvRegistrationContext: u32) HRESULT {
                return @as(*const IBDA_TIF_REGISTRATION.VTable, @ptrCast(self.vtable)).UnregisterTIF(@as(*const IBDA_TIF_REGISTRATION, @ptrCast(self)), pvRegistrationContext);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IMPEG2_TIF_CONTROL_Value = Guid.initString("f9bac2f9-4149-4916-b2ef-faa202326862");
pub const IID_IMPEG2_TIF_CONTROL = &IID_IMPEG2_TIF_CONTROL_Value;
pub const IMPEG2_TIF_CONTROL = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        RegisterTIF: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2_TIF_CONTROL,
                pUnkTIF: ?*IUnknown,
                ppvRegistrationContext: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2_TIF_CONTROL,
                pUnkTIF: ?*IUnknown,
                ppvRegistrationContext: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnregisterTIF: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2_TIF_CONTROL,
                pvRegistrationContext: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2_TIF_CONTROL,
                pvRegistrationContext: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddPIDs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2_TIF_CONTROL,
                ulcPIDs: u32,
                pulPIDs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2_TIF_CONTROL,
                ulcPIDs: u32,
                pulPIDs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DeletePIDs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2_TIF_CONTROL,
                ulcPIDs: u32,
                pulPIDs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2_TIF_CONTROL,
                ulcPIDs: u32,
                pulPIDs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPIDCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2_TIF_CONTROL,
                pulcPIDs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2_TIF_CONTROL,
                pulcPIDs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPIDs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IMPEG2_TIF_CONTROL,
                pulcPIDs: ?*u32,
                pulPIDs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IMPEG2_TIF_CONTROL,
                pulcPIDs: ?*u32,
                pulPIDs: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2_TIF_CONTROL_RegisterTIF(self: *const T, pUnkTIF: ?*IUnknown, ppvRegistrationContext: ?*u32) HRESULT {
                return @as(*const IMPEG2_TIF_CONTROL.VTable, @ptrCast(self.vtable)).RegisterTIF(@as(*const IMPEG2_TIF_CONTROL, @ptrCast(self)), pUnkTIF, ppvRegistrationContext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2_TIF_CONTROL_UnregisterTIF(self: *const T, pvRegistrationContext: u32) HRESULT {
                return @as(*const IMPEG2_TIF_CONTROL.VTable, @ptrCast(self.vtable)).UnregisterTIF(@as(*const IMPEG2_TIF_CONTROL, @ptrCast(self)), pvRegistrationContext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2_TIF_CONTROL_AddPIDs(self: *const T, ulcPIDs: u32, pulPIDs: ?*u32) HRESULT {
                return @as(*const IMPEG2_TIF_CONTROL.VTable, @ptrCast(self.vtable)).AddPIDs(@as(*const IMPEG2_TIF_CONTROL, @ptrCast(self)), ulcPIDs, pulPIDs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2_TIF_CONTROL_DeletePIDs(self: *const T, ulcPIDs: u32, pulPIDs: ?*u32) HRESULT {
                return @as(*const IMPEG2_TIF_CONTROL.VTable, @ptrCast(self.vtable)).DeletePIDs(@as(*const IMPEG2_TIF_CONTROL, @ptrCast(self)), ulcPIDs, pulPIDs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2_TIF_CONTROL_GetPIDCount(self: *const T, pulcPIDs: ?*u32) HRESULT {
                return @as(*const IMPEG2_TIF_CONTROL.VTable, @ptrCast(self.vtable)).GetPIDCount(@as(*const IMPEG2_TIF_CONTROL, @ptrCast(self)), pulcPIDs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IMPEG2_TIF_CONTROL_GetPIDs(self: *const T, pulcPIDs: ?*u32, pulPIDs: ?*u32) HRESULT {
                return @as(*const IMPEG2_TIF_CONTROL.VTable, @ptrCast(self.vtable)).GetPIDs(@as(*const IMPEG2_TIF_CONTROL, @ptrCast(self)), pulcPIDs, pulPIDs);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ITuneRequestInfo_Value = Guid.initString("a3b152df-7a90-4218-ac54-9830bee8c0b6");
pub const IID_ITuneRequestInfo = &IID_ITuneRequestInfo_Value;
pub const ITuneRequestInfo = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetLocatorData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuneRequestInfo,
                Request: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuneRequestInfo,
                Request: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetComponentData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateComponentList: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextProgram: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPreviousProgram: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNextLocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPreviousLocator: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuneRequestInfo,
                CurrentRequest: ?*ITuneRequest,
                TuneRequest: ?*?*ITuneRequest,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequestInfo_GetLocatorData(self: *const T, Request: ?*ITuneRequest) HRESULT {
                return @as(*const ITuneRequestInfo.VTable, @ptrCast(self.vtable)).GetLocatorData(@as(*const ITuneRequestInfo, @ptrCast(self)), Request);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequestInfo_GetComponentData(self: *const T, CurrentRequest: ?*ITuneRequest) HRESULT {
                return @as(*const ITuneRequestInfo.VTable, @ptrCast(self.vtable)).GetComponentData(@as(*const ITuneRequestInfo, @ptrCast(self)), CurrentRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequestInfo_CreateComponentList(self: *const T, CurrentRequest: ?*ITuneRequest) HRESULT {
                return @as(*const ITuneRequestInfo.VTable, @ptrCast(self.vtable)).CreateComponentList(@as(*const ITuneRequestInfo, @ptrCast(self)), CurrentRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequestInfo_GetNextProgram(self: *const T, CurrentRequest: ?*ITuneRequest, TuneRequest: ?*?*ITuneRequest) HRESULT {
                return @as(*const ITuneRequestInfo.VTable, @ptrCast(self.vtable)).GetNextProgram(@as(*const ITuneRequestInfo, @ptrCast(self)), CurrentRequest, TuneRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequestInfo_GetPreviousProgram(self: *const T, CurrentRequest: ?*ITuneRequest, TuneRequest: ?*?*ITuneRequest) HRESULT {
                return @as(*const ITuneRequestInfo.VTable, @ptrCast(self.vtable)).GetPreviousProgram(@as(*const ITuneRequestInfo, @ptrCast(self)), CurrentRequest, TuneRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequestInfo_GetNextLocator(self: *const T, CurrentRequest: ?*ITuneRequest, TuneRequest: ?*?*ITuneRequest) HRESULT {
                return @as(*const ITuneRequestInfo.VTable, @ptrCast(self.vtable)).GetNextLocator(@as(*const ITuneRequestInfo, @ptrCast(self)), CurrentRequest, TuneRequest);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequestInfo_GetPreviousLocator(self: *const T, CurrentRequest: ?*ITuneRequest, TuneRequest: ?*?*ITuneRequest) HRESULT {
                return @as(*const ITuneRequestInfo.VTable, @ptrCast(self.vtable)).GetPreviousLocator(@as(*const ITuneRequestInfo, @ptrCast(self)), CurrentRequest, TuneRequest);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ITuneRequestInfoEx_Value = Guid.initString("ee957c52-b0d0-4e78-8dd1-b87a08bfd893");
pub const IID_ITuneRequestInfoEx = &IID_ITuneRequestInfoEx_Value;
pub const ITuneRequestInfoEx = extern struct {
    pub const VTable = extern struct {
        base: ITuneRequestInfo.VTable,
        CreateComponentListEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITuneRequestInfoEx,
                CurrentRequest: ?*ITuneRequest,
                ppCurPMT: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITuneRequestInfoEx,
                CurrentRequest: ?*ITuneRequest,
                ppCurPMT: ?*?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITuneRequestInfo.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITuneRequestInfoEx_CreateComponentListEx(self: *const T, CurrentRequest: ?*ITuneRequest, ppCurPMT: ?*?*IUnknown) HRESULT {
                return @as(*const ITuneRequestInfoEx.VTable, @ptrCast(self.vtable)).CreateComponentListEx(@as(*const ITuneRequestInfoEx, @ptrCast(self)), CurrentRequest, ppCurPMT);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ISIInbandEPGEvent_Value = Guid.initString("7e47913a-5a89-423d-9a2b-e15168858934");
pub const IID_ISIInbandEPGEvent = &IID_ISIInbandEPGEvent_Value;
pub const ISIInbandEPGEvent = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SIObjectEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISIInbandEPGEvent,
                pIDVB_EIT: ?*IDVB_EIT2,
                dwTable_ID: u32,
                dwService_ID: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISIInbandEPGEvent,
                pIDVB_EIT: ?*IDVB_EIT2,
                dwTable_ID: u32,
                dwService_ID: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISIInbandEPGEvent_SIObjectEvent(self: *const T, pIDVB_EIT: ?*IDVB_EIT2, dwTable_ID: u32, dwService_ID: u32) HRESULT {
                return @as(*const ISIInbandEPGEvent.VTable, @ptrCast(self.vtable)).SIObjectEvent(@as(*const ISIInbandEPGEvent, @ptrCast(self)), pIDVB_EIT, dwTable_ID, dwService_ID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ISIInbandEPG_Value = Guid.initString("f90ad9d0-b854-4b68-9cc1-b2cc96119d85");
pub const IID_ISIInbandEPG = &IID_ISIInbandEPG_Value;
pub const ISIInbandEPG = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        StartSIEPGScan: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISIInbandEPG,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISIInbandEPG,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StopSIEPGScan: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISIInbandEPG,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISIInbandEPG,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsSIEPGScanRunning: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ISIInbandEPG,
                bRunning: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ISIInbandEPG,
                bRunning: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISIInbandEPG_StartSIEPGScan(self: *const T) HRESULT {
                return @as(*const ISIInbandEPG.VTable, @ptrCast(self.vtable)).StartSIEPGScan(@as(*const ISIInbandEPG, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISIInbandEPG_StopSIEPGScan(self: *const T) HRESULT {
                return @as(*const ISIInbandEPG.VTable, @ptrCast(self.vtable)).StopSIEPGScan(@as(*const ISIInbandEPG, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ISIInbandEPG_IsSIEPGScanRunning(self: *const T, bRunning: ?*BOOL) HRESULT {
                return @as(*const ISIInbandEPG.VTable, @ptrCast(self.vtable)).IsSIEPGScanRunning(@as(*const ISIInbandEPG, @ptrCast(self)), bRunning);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IGuideDataEvent_Value = Guid.initString("efda0c80-f395-42c3-9b3c-56b37dec7bb7");
pub const IID_IGuideDataEvent = &IID_IGuideDataEvent_Value;
pub const IGuideDataEvent = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GuideDataAcquired: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideDataEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideDataEvent,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ProgramChanged: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideDataEvent,
                varProgramDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideDataEvent,
                varProgramDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ServiceChanged: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideDataEvent,
                varServiceDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideDataEvent,
                varServiceDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ScheduleEntryChanged: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideDataEvent,
                varScheduleEntryDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideDataEvent,
                varScheduleEntryDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ProgramDeleted: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideDataEvent,
                varProgramDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideDataEvent,
                varProgramDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ServiceDeleted: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideDataEvent,
                varServiceDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideDataEvent,
                varServiceDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ScheduleDeleted: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideDataEvent,
                varScheduleEntryDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideDataEvent,
                varScheduleEntryDescriptionID: VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataEvent_GuideDataAcquired(self: *const T) HRESULT {
                return @as(*const IGuideDataEvent.VTable, @ptrCast(self.vtable)).GuideDataAcquired(@as(*const IGuideDataEvent, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataEvent_ProgramChanged(self: *const T, varProgramDescriptionID: VARIANT) HRESULT {
                return @as(*const IGuideDataEvent.VTable, @ptrCast(self.vtable)).ProgramChanged(@as(*const IGuideDataEvent, @ptrCast(self)), varProgramDescriptionID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataEvent_ServiceChanged(self: *const T, varServiceDescriptionID: VARIANT) HRESULT {
                return @as(*const IGuideDataEvent.VTable, @ptrCast(self.vtable)).ServiceChanged(@as(*const IGuideDataEvent, @ptrCast(self)), varServiceDescriptionID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataEvent_ScheduleEntryChanged(self: *const T, varScheduleEntryDescriptionID: VARIANT) HRESULT {
                return @as(*const IGuideDataEvent.VTable, @ptrCast(self.vtable)).ScheduleEntryChanged(@as(*const IGuideDataEvent, @ptrCast(self)), varScheduleEntryDescriptionID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataEvent_ProgramDeleted(self: *const T, varProgramDescriptionID: VARIANT) HRESULT {
                return @as(*const IGuideDataEvent.VTable, @ptrCast(self.vtable)).ProgramDeleted(@as(*const IGuideDataEvent, @ptrCast(self)), varProgramDescriptionID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataEvent_ServiceDeleted(self: *const T, varServiceDescriptionID: VARIANT) HRESULT {
                return @as(*const IGuideDataEvent.VTable, @ptrCast(self.vtable)).ServiceDeleted(@as(*const IGuideDataEvent, @ptrCast(self)), varServiceDescriptionID);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataEvent_ScheduleDeleted(self: *const T, varScheduleEntryDescriptionID: VARIANT) HRESULT {
                return @as(*const IGuideDataEvent.VTable, @ptrCast(self.vtable)).ScheduleDeleted(@as(*const IGuideDataEvent, @ptrCast(self)), varScheduleEntryDescriptionID);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IGuideDataProperty_Value = Guid.initString("88ec5e58-bb73-41d6-99ce-66c524b8b591");
pub const IID_IGuideDataProperty = &IID_IGuideDataProperty_Value;
pub const IGuideDataProperty = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Name: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IGuideDataProperty,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IGuideDataProperty,
                pbstrName: ?*?BSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Language: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IGuideDataProperty,
                idLang: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IGuideDataProperty,
                idLang: ?*i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        // TODO: this function has a "SpecialName", should Zig do anything with this?
        get_Value: switch (@import("builtin").zig_backend) {
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            .stage1 => fn (
                self: *const IGuideDataProperty,
                pvar: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            // TODO: this function has a "SpecialName", should Zig do anything with this?
            else => *const fn (
                self: *const IGuideDataProperty,
                pvar: ?*VARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataProperty_get_Name(self: *const T, pbstrName: ?*?BSTR) HRESULT {
                return @as(*const IGuideDataProperty.VTable, @ptrCast(self.vtable)).get_Name(@as(*const IGuideDataProperty, @ptrCast(self)), pbstrName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataProperty_get_Language(self: *const T, idLang: ?*i32) HRESULT {
                return @as(*const IGuideDataProperty.VTable, @ptrCast(self.vtable)).get_Language(@as(*const IGuideDataProperty, @ptrCast(self)), idLang);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataProperty_get_Value(self: *const T, pvar: ?*VARIANT) HRESULT {
                return @as(*const IGuideDataProperty.VTable, @ptrCast(self.vtable)).get_Value(@as(*const IGuideDataProperty, @ptrCast(self)), pvar);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IEnumGuideDataProperties_Value = Guid.initString("ae44423b-4571-475c-ad2c-f40a771d80ef");
pub const IID_IEnumGuideDataProperties = &IID_IEnumGuideDataProperties_Value;
pub const IEnumGuideDataProperties = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumGuideDataProperties,
                celt: u32,
                ppprop: ?*?*IGuideDataProperty,
                pcelt: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumGuideDataProperties,
                celt: u32,
                ppprop: ?*?*IGuideDataProperty,
                pcelt: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumGuideDataProperties,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumGuideDataProperties,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumGuideDataProperties,
                ppenum: ?*?*IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumGuideDataProperties,
                ppenum: ?*?*IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumGuideDataProperties_Next(self: *const T, celt: u32, ppprop: ?*?*IGuideDataProperty, pcelt: ?*u32) HRESULT {
                return @as(*const IEnumGuideDataProperties.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumGuideDataProperties, @ptrCast(self)), celt, ppprop, pcelt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumGuideDataProperties_Skip(self: *const T, celt: u32) HRESULT {
                return @as(*const IEnumGuideDataProperties.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumGuideDataProperties, @ptrCast(self)), celt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumGuideDataProperties_Reset(self: *const T) HRESULT {
                return @as(*const IEnumGuideDataProperties.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumGuideDataProperties, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumGuideDataProperties_Clone(self: *const T, ppenum: ?*?*IEnumGuideDataProperties) HRESULT {
                return @as(*const IEnumGuideDataProperties.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumGuideDataProperties, @ptrCast(self)), ppenum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IEnumTuneRequests_Value = Guid.initString("1993299c-ced6-4788-87a3-420067dce0c7");
pub const IID_IEnumTuneRequests = &IID_IEnumTuneRequests_Value;
pub const IEnumTuneRequests = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Next: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumTuneRequests,
                celt: u32,
                ppprop: ?*?*ITuneRequest,
                pcelt: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumTuneRequests,
                celt: u32,
                ppprop: ?*?*ITuneRequest,
                pcelt: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Skip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumTuneRequests,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumTuneRequests,
                celt: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Reset: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumTuneRequests,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumTuneRequests,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Clone: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IEnumTuneRequests,
                ppenum: ?*?*IEnumTuneRequests,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IEnumTuneRequests,
                ppenum: ?*?*IEnumTuneRequests,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumTuneRequests_Next(self: *const T, celt: u32, ppprop: ?*?*ITuneRequest, pcelt: ?*u32) HRESULT {
                return @as(*const IEnumTuneRequests.VTable, @ptrCast(self.vtable)).Next(@as(*const IEnumTuneRequests, @ptrCast(self)), celt, ppprop, pcelt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumTuneRequests_Skip(self: *const T, celt: u32) HRESULT {
                return @as(*const IEnumTuneRequests.VTable, @ptrCast(self.vtable)).Skip(@as(*const IEnumTuneRequests, @ptrCast(self)), celt);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumTuneRequests_Reset(self: *const T) HRESULT {
                return @as(*const IEnumTuneRequests.VTable, @ptrCast(self.vtable)).Reset(@as(*const IEnumTuneRequests, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IEnumTuneRequests_Clone(self: *const T, ppenum: ?*?*IEnumTuneRequests) HRESULT {
                return @as(*const IEnumTuneRequests.VTable, @ptrCast(self.vtable)).Clone(@as(*const IEnumTuneRequests, @ptrCast(self)), ppenum);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IGuideData_Value = Guid.initString("61571138-5b01-43cd-aeaf-60b784a0bf93");
pub const IID_IGuideData = &IID_IGuideData_Value;
pub const IGuideData = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetServices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideData,
                ppEnumTuneRequests: ?*?*IEnumTuneRequests,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideData,
                ppEnumTuneRequests: ?*?*IEnumTuneRequests,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetServiceProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideData,
                pTuneRequest: ?*ITuneRequest,
                ppEnumProperties: ?*?*IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideData,
                pTuneRequest: ?*ITuneRequest,
                ppEnumProperties: ?*?*IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGuideProgramIDs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideData,
                pEnumPrograms: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideData,
                pEnumPrograms: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProgramProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideData,
                varProgramDescriptionID: VARIANT,
                ppEnumProperties: ?*?*IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideData,
                varProgramDescriptionID: VARIANT,
                ppEnumProperties: ?*?*IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetScheduleEntryIDs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideData,
                pEnumScheduleEntries: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideData,
                pEnumScheduleEntries: ?*?*IEnumVARIANT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetScheduleEntryProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideData,
                varScheduleEntryDescriptionID: VARIANT,
                ppEnumProperties: ?*?*IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideData,
                varScheduleEntryDescriptionID: VARIANT,
                ppEnumProperties: ?*?*IEnumGuideDataProperties,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideData_GetServices(self: *const T, ppEnumTuneRequests: ?*?*IEnumTuneRequests) HRESULT {
                return @as(*const IGuideData.VTable, @ptrCast(self.vtable)).GetServices(@as(*const IGuideData, @ptrCast(self)), ppEnumTuneRequests);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideData_GetServiceProperties(self: *const T, pTuneRequest: ?*ITuneRequest, ppEnumProperties: ?*?*IEnumGuideDataProperties) HRESULT {
                return @as(*const IGuideData.VTable, @ptrCast(self.vtable)).GetServiceProperties(@as(*const IGuideData, @ptrCast(self)), pTuneRequest, ppEnumProperties);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideData_GetGuideProgramIDs(self: *const T, pEnumPrograms: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IGuideData.VTable, @ptrCast(self.vtable)).GetGuideProgramIDs(@as(*const IGuideData, @ptrCast(self)), pEnumPrograms);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideData_GetProgramProperties(self: *const T, varProgramDescriptionID: VARIANT, ppEnumProperties: ?*?*IEnumGuideDataProperties) HRESULT {
                return @as(*const IGuideData.VTable, @ptrCast(self.vtable)).GetProgramProperties(@as(*const IGuideData, @ptrCast(self)), varProgramDescriptionID, ppEnumProperties);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideData_GetScheduleEntryIDs(self: *const T, pEnumScheduleEntries: ?*?*IEnumVARIANT) HRESULT {
                return @as(*const IGuideData.VTable, @ptrCast(self.vtable)).GetScheduleEntryIDs(@as(*const IGuideData, @ptrCast(self)), pEnumScheduleEntries);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideData_GetScheduleEntryProperties(self: *const T, varScheduleEntryDescriptionID: VARIANT, ppEnumProperties: ?*?*IEnumGuideDataProperties) HRESULT {
                return @as(*const IGuideData.VTable, @ptrCast(self.vtable)).GetScheduleEntryProperties(@as(*const IGuideData, @ptrCast(self)), varScheduleEntryDescriptionID, ppEnumProperties);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IGuideDataLoader_Value = Guid.initString("4764ff7c-fa95-4525-af4d-d32236db9e38");
pub const IID_IGuideDataLoader = &IID_IGuideDataLoader_Value;
pub const IGuideDataLoader = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Init: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideDataLoader,
                pGuideStore: ?*IGuideData,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideDataLoader,
                pGuideStore: ?*IGuideData,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Terminate: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IGuideDataLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IGuideDataLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataLoader_Init(self: *const T, pGuideStore: ?*IGuideData) HRESULT {
                return @as(*const IGuideDataLoader.VTable, @ptrCast(self.vtable)).Init(@as(*const IGuideDataLoader, @ptrCast(self)), pGuideStore);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IGuideDataLoader_Terminate(self: *const T) HRESULT {
                return @as(*const IGuideDataLoader.VTable, @ptrCast(self.vtable)).Terminate(@as(*const IGuideDataLoader, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const KSP_BDA_NODE_PIN = extern struct {
    Property: KSIDENTIFIER,
    ulNodeType: u32,
    ulInputPinId: u32,
    ulOutputPinId: u32,
};

pub const KSM_BDA_PIN = extern struct {
    Method: KSIDENTIFIER,
    Anonymous: extern union {
        PinId: u32,
        PinType: u32,
    },
    Reserved: u32,
};

pub const KSM_BDA_PIN_PAIR = extern struct {
    Method: KSIDENTIFIER,
    Anonymous1: extern union {
        InputPinId: u32,
        InputPinType: u32,
    },
    Anonymous2: extern union {
        OutputPinId: u32,
        OutputPinType: u32,
    },
};

pub const KSP_NODE_ESPID = extern struct {
    Property: KSP_NODE,
    EsPid: u32,
};

pub const KSM_BDA_DEBUG_LEVEL = extern struct {
    Method: KSIDENTIFIER,
    ucDebugLevel: u8,
    ulDebugStringSize: u32,
    argbDebugString: [1]u8,
};

pub const BDA_DEBUG_DATA = extern struct {
    lResult: i32,
    uuidDebugDataType: Guid,
    ulDataSize: u32,
    argbDebugData: [1]u8,
};

pub const BDA_EVENT_DATA = extern struct {
    lResult: i32,
    ulEventID: u32,
    uuidEventType: Guid,
    ulEventDataLength: u32,
    argbEventData: [1]u8,
};

pub const KSM_BDA_EVENT_COMPLETE = extern struct {
    Method: KSIDENTIFIER,
    ulEventID: u32,
    ulEventResult: u32,
};

pub const KSM_BDA_DRM_SETDRM = extern struct {
    NodeMethod: KSM_NODE,
    NewDRMuuid: Guid,
};

pub const KSM_BDA_BUFFER = extern struct {
    NodeMethod: KSM_NODE,
    ulBufferSize: u32,
    argbBuffer: [1]u8,
};

pub const KSM_BDA_WMDRM_LICENSE = extern struct {
    NodeMethod: KSM_NODE,
    uuidKeyID: Guid,
};

pub const KSM_BDA_WMDRM_RENEWLICENSE = extern struct {
    NodeMethod: KSM_NODE,
    ulXMRLicenseLength: u32,
    ulEntitlementTokenLength: u32,
    argbDataBuffer: [1]u8,
};

pub const KSM_BDA_WMDRMTUNER_PURCHASEENTITLEMENT = extern struct {
    NodeMethod: KSM_NODE,
    ulDialogRequest: u32,
    cLanguage: [12]CHAR,
    ulPurchaseTokenLength: u32,
    argbDataBuffer: [1]u8,
};

pub const KSM_BDA_WMDRMTUNER_SETPIDPROTECTION = extern struct {
    NodeMethod: KSM_NODE,
    ulPID: u32,
    uuidKeyID: Guid,
};

pub const KSM_BDA_WMDRMTUNER_GETPIDPROTECTION = extern struct {
    NodeMethod: KSM_NODE,
    ulPID: u32,
};

pub const KSM_BDA_WMDRMTUNER_SYNCVALUE = extern struct {
    NodeMethod: KSM_NODE,
    ulSyncValue: u32,
};

pub const KSM_BDA_TUNER_TUNEREQUEST = extern struct {
    Method: KSIDENTIFIER,
    ulTuneLength: u32,
    argbTuneData: [1]u8,
};

pub const KSM_BDA_GPNV_GETVALUE = extern struct {
    Method: KSIDENTIFIER,
    ulNameLength: u32,
    cLanguage: [12]CHAR,
    argbData: [1]u8,
};

pub const KSM_BDA_GPNV_SETVALUE = extern struct {
    Method: KSIDENTIFIER,
    ulDialogRequest: u32,
    cLanguage: [12]CHAR,
    ulNameLength: u32,
    ulValueLength: u32,
    argbName: [1]u8,
};

pub const KSM_BDA_GPNV_NAMEINDEX = extern struct {
    Method: KSIDENTIFIER,
    ulValueNameIndex: u32,
};

pub const KSM_BDA_SCAN_CAPABILTIES = extern struct {
    Method: KSIDENTIFIER,
    uuidBroadcastStandard: Guid,
};

pub const KSM_BDA_SCAN_FILTER = extern struct {
    Method: KSIDENTIFIER,
    ulScanModulationTypeSize: u32,
    AnalogVideoStandards: u64,
    argbScanModulationTypes: [1]u8,
};

pub const KSM_BDA_SCAN_START = extern struct {
    Method: KSIDENTIFIER,
    LowerFrequency: u32,
    HigherFrequency: u32,
};

pub const KSM_BDA_GDDS_TUNEXMLFROMIDX = extern struct {
    Method: KSIDENTIFIER,
    ulIdx: u64,
};

pub const KSM_BDA_GDDS_SERVICEFROMTUNEXML = extern struct {
    Method: KSIDENTIFIER,
    ulTuneXmlLength: u32,
    argbTuneXml: [1]u8,
};

pub const KSM_BDA_USERACTIVITY_USEREASON = extern struct {
    Method: KSIDENTIFIER,
    ulUseReason: u32,
};

pub const KSM_BDA_CAS_ENTITLEMENTTOKEN = extern struct {
    NodeMethod: KSM_NODE,
    ulDialogRequest: u32,
    cLanguage: [12]CHAR,
    ulRequestType: u32,
    ulEntitlementTokenLen: u32,
    argbEntitlementToken: [1]u8,
};

pub const KSM_BDA_CAS_CAPTURETOKEN = extern struct {
    NodeMethod: KSM_NODE,
    ulTokenLength: u32,
    argbToken: [1]u8,
};

pub const KSM_BDA_CAS_OPENBROADCASTMMI = extern struct {
    NodeMethod: KSM_NODE,
    ulDialogRequest: u32,
    cLanguage: [12]CHAR,
    ulEventId: u32,
};

pub const KSM_BDA_CAS_CLOSEMMIDIALOG = extern struct {
    NodeMethod: KSM_NODE,
    ulDialogRequest: u32,
    cLanguage: [12]CHAR,
    ulDialogNumber: u32,
    ulReason: u32,
};

pub const KSM_BDA_ISDBCAS_REQUEST = extern struct {
    NodeMethod: KSM_NODE,
    ulRequestID: u32,
    ulIsdbCommandSize: u32,
    argbIsdbCommandData: [1]u8,
};

pub const KSM_BDA_TS_SELECTOR_SETTSID = extern struct {
    NodeMethod: KSM_NODE,
    usTSID: u16,
};

pub const KS_DATARANGE_BDA_ANTENNA = extern struct {
    DataRange: KSDATAFORMAT,
};

pub const BDA_TRANSPORT_INFO = extern struct {
    ulcbPhyiscalPacket: u32,
    ulcbPhyiscalFrame: u32,
    ulcbPhyiscalFrameAlignment: u32,
    AvgTimePerFrame: i64,
};

pub const KS_DATARANGE_BDA_TRANSPORT = extern struct {
    DataRange: KSDATAFORMAT,
    BdaTransportInfo: BDA_TRANSPORT_INFO,
};

const CLSID_EVENTID_TuningChanging_Value = Guid.initString("83183c03-c09e-45c4-a719-807a94952bf9");
pub const CLSID_EVENTID_TuningChanging = &CLSID_EVENTID_TuningChanging_Value;

const CLSID_EVENTID_TuningChanged_Value = Guid.initString("9d7e6235-4b7d-425d-a6d1-d717c33b9c4c");
pub const CLSID_EVENTID_TuningChanged = &CLSID_EVENTID_TuningChanged_Value;

const CLSID_EVENTID_CandidatePostTuneData_Value = Guid.initString("9f02d3d0-9f06-4369-9f1e-3ad6ca19807e");
pub const CLSID_EVENTID_CandidatePostTuneData = &CLSID_EVENTID_CandidatePostTuneData_Value;

const CLSID_EVENTID_CADenialCountChanged_Value = Guid.initString("2a65c528-2249-4070-ac16-00390cdfb2dd");
pub const CLSID_EVENTID_CADenialCountChanged = &CLSID_EVENTID_CADenialCountChanged_Value;

const CLSID_EVENTID_SignalStatusChanged_Value = Guid.initString("6d9cfaf2-702d-4b01-8dff-6892ad20d191");
pub const CLSID_EVENTID_SignalStatusChanged = &CLSID_EVENTID_SignalStatusChanged_Value;

const CLSID_EVENTID_NewSignalAcquired_Value = Guid.initString("c87ec52d-cd18-404a-a076-c02a273d3de7");
pub const CLSID_EVENTID_NewSignalAcquired = &CLSID_EVENTID_NewSignalAcquired_Value;

const CLSID_EVENTID_EASMessageReceived_Value = Guid.initString("d10df9d5-c261-4b85-9e8a-517b3299cab2");
pub const CLSID_EVENTID_EASMessageReceived = &CLSID_EVENTID_EASMessageReceived_Value;

const CLSID_EVENTID_PSITable_Value = Guid.initString("1b9c3703-d447-4e16-97bb-01799fc031ed");
pub const CLSID_EVENTID_PSITable = &CLSID_EVENTID_PSITable_Value;

const CLSID_EVENTID_ServiceTerminated_Value = Guid.initString("0a1d591c-e0d2-4f8e-8960-2335bef45ccb");
pub const CLSID_EVENTID_ServiceTerminated = &CLSID_EVENTID_ServiceTerminated_Value;

const CLSID_EVENTID_CardStatusChanged_Value = Guid.initString("a265faea-f874-4b38-9ff7-c53d02969996");
pub const CLSID_EVENTID_CardStatusChanged = &CLSID_EVENTID_CardStatusChanged_Value;

const CLSID_EVENTID_DRMParingStatusChanged_Value = Guid.initString("000906f5-f0d1-41d6-a7df-4028697669f6");
pub const CLSID_EVENTID_DRMParingStatusChanged = &CLSID_EVENTID_DRMParingStatusChanged_Value;

const CLSID_EVENTID_DRMParingStepComplete_Value = Guid.initString("5b2ebf78-b752-4420-b41e-a472dc95828e");
pub const CLSID_EVENTID_DRMParingStepComplete = &CLSID_EVENTID_DRMParingStepComplete_Value;

const CLSID_EVENTID_MMIMessage_Value = Guid.initString("052c29af-09a4-4b93-890f-bd6a348968a4");
pub const CLSID_EVENTID_MMIMessage = &CLSID_EVENTID_MMIMessage_Value;

const CLSID_EVENTID_EntitlementChanged_Value = Guid.initString("9071ad5d-2359-4c95-8694-afa81d70bfd5");
pub const CLSID_EVENTID_EntitlementChanged = &CLSID_EVENTID_EntitlementChanged_Value;

const CLSID_EVENTID_STBChannelNumber_Value = Guid.initString("17c4d730-d0f0-413a-8c99-500469de35ad");
pub const CLSID_EVENTID_STBChannelNumber = &CLSID_EVENTID_STBChannelNumber_Value;

const CLSID_EVENTID_BDAEventingServicePendingEvent_Value = Guid.initString("5ca51711-5ddc-41a6-9430-e41b8b3bbc5b");
pub const CLSID_EVENTID_BDAEventingServicePendingEvent = &CLSID_EVENTID_BDAEventingServicePendingEvent_Value;

const CLSID_EVENTID_BDAConditionalAccessTAG_Value = Guid.initString("efc3a459-ae8b-4b4a-8fe9-79a0d097f3ea");
pub const CLSID_EVENTID_BDAConditionalAccessTAG = &CLSID_EVENTID_BDAConditionalAccessTAG_Value;

const CLSID_EVENTTYPE_CASDescrambleFailureEvent_Value = Guid.initString("b2127d42-7be5-4f4b-9130-6679899f4f4b");
pub const CLSID_EVENTTYPE_CASDescrambleFailureEvent = &CLSID_EVENTTYPE_CASDescrambleFailureEvent_Value;

const CLSID_EVENTID_CASFailureSpanningEvent_Value = Guid.initString("ead831ae-5529-4d1f-afce-0d8cd1257d30");
pub const CLSID_EVENTID_CASFailureSpanningEvent = &CLSID_EVENTID_CASFailureSpanningEvent_Value;

pub const ChannelChangeSpanningEvent_State = enum(i32) {
    Start = 0,
    End = 2,
};
pub const ChannelChangeSpanningEvent_Start = ChannelChangeSpanningEvent_State.Start;
pub const ChannelChangeSpanningEvent_End = ChannelChangeSpanningEvent_State.End;

const CLSID_EVENTID_ChannelChangeSpanningEvent_Value = Guid.initString("9067c5e5-4c5c-4205-86c8-7afe20fe1efa");
pub const CLSID_EVENTID_ChannelChangeSpanningEvent = &CLSID_EVENTID_ChannelChangeSpanningEvent_Value;

pub const ChannelChangeInfo = extern struct {
    state: ChannelChangeSpanningEvent_State,
    TimeStamp: u64,
};

const CLSID_EVENTID_ChannelTypeSpanningEvent_Value = Guid.initString("72ab1d51-87d2-489b-ba11-0e08dc210243");
pub const CLSID_EVENTID_ChannelTypeSpanningEvent = &CLSID_EVENTID_ChannelTypeSpanningEvent_Value;

pub const ChannelType = enum(i32) {
    None = 0,
    Other = 1,
    Video = 2,
    Audio = 4,
    Text = 8,
    Subtitles = 16,
    Captions = 32,
    Superimpose = 64,
    Data = 128,
};
pub const ChannelTypeNone = ChannelType.None;
pub const ChannelTypeOther = ChannelType.Other;
pub const ChannelTypeVideo = ChannelType.Video;
pub const ChannelTypeAudio = ChannelType.Audio;
pub const ChannelTypeText = ChannelType.Text;
pub const ChannelTypeSubtitles = ChannelType.Subtitles;
pub const ChannelTypeCaptions = ChannelType.Captions;
pub const ChannelTypeSuperimpose = ChannelType.Superimpose;
pub const ChannelTypeData = ChannelType.Data;

pub const ChannelTypeInfo = extern struct {
    channelType: ChannelType,
    timeStamp: u64,
};

pub const ChannelInfo = extern struct {
    lFrequency: i32,
    Anonymous: extern union {
        DVB: extern struct {
            lONID: i32,
            lTSID: i32,
            lSID: i32,
        },
        DC: extern struct {
            lProgNumber: i32,
        },
        ATSC: extern struct {
            lProgNumber: i32,
        },
    },
};

const CLSID_EVENTID_ChannelInfoSpanningEvent_Value = Guid.initString("41f36d80-4132-4cc2-b121-01a43219d81b");
pub const CLSID_EVENTID_ChannelInfoSpanningEvent = &CLSID_EVENTID_ChannelInfoSpanningEvent_Value;

const CLSID_EVENTID_RRTSpanningEvent_Value = Guid.initString("f6cfc8f4-da93-4f2f-bff8-ba1ee6fca3a2");
pub const CLSID_EVENTID_RRTSpanningEvent = &CLSID_EVENTID_RRTSpanningEvent_Value;

pub const SpanningEventDescriptor = extern struct {
    wDataLen: u16,
    wProgNumber: u16,
    wSID: u16,
    bDescriptor: [1]u8,
};

const CLSID_EVENTID_CSDescriptorSpanningEvent_Value = Guid.initString("efe779d9-97f0-4786-800d-95cf505ddc66");
pub const CLSID_EVENTID_CSDescriptorSpanningEvent = &CLSID_EVENTID_CSDescriptorSpanningEvent_Value;

const CLSID_EVENTID_CtxADescriptorSpanningEvent_Value = Guid.initString("3ab4a2e6-4247-4b34-896c-30afa5d21c24");
pub const CLSID_EVENTID_CtxADescriptorSpanningEvent = &CLSID_EVENTID_CtxADescriptorSpanningEvent_Value;

pub const DVBScramblingControlSpanningEvent = extern struct {
    ulPID: u32,
    fScrambled: BOOL,
};

const CLSID_EVENTID_DVBScramblingControlSpanningEvent_Value = Guid.initString("4bd4e1c4-90a1-4109-8236-27f00e7dcc5b");
pub const CLSID_EVENTID_DVBScramblingControlSpanningEvent = &CLSID_EVENTID_DVBScramblingControlSpanningEvent_Value;

pub const SignalAndServiceStatusSpanningEvent_State = enum(i32) {
    None = -1,
    Clear = 0,
    NoTVSignal = 1,
    ServiceOffAir = 2,
    WeakTVSignal = 3,
    NoSubscription = 4,
    AllAVScrambled = 5,
};
pub const SignalAndServiceStatusSpanningEvent_None = SignalAndServiceStatusSpanningEvent_State.None;
pub const SignalAndServiceStatusSpanningEvent_Clear = SignalAndServiceStatusSpanningEvent_State.Clear;
pub const SignalAndServiceStatusSpanningEvent_NoTVSignal = SignalAndServiceStatusSpanningEvent_State.NoTVSignal;
pub const SignalAndServiceStatusSpanningEvent_ServiceOffAir = SignalAndServiceStatusSpanningEvent_State.ServiceOffAir;
pub const SignalAndServiceStatusSpanningEvent_WeakTVSignal = SignalAndServiceStatusSpanningEvent_State.WeakTVSignal;
pub const SignalAndServiceStatusSpanningEvent_NoSubscription = SignalAndServiceStatusSpanningEvent_State.NoSubscription;
pub const SignalAndServiceStatusSpanningEvent_AllAVScrambled = SignalAndServiceStatusSpanningEvent_State.AllAVScrambled;

const CLSID_EVENTID_SignalAndServiceStatusSpanningEvent_Value = Guid.initString("8068c5cb-3c04-492b-b47d-0308820dce51");
pub const CLSID_EVENTID_SignalAndServiceStatusSpanningEvent = &CLSID_EVENTID_SignalAndServiceStatusSpanningEvent_Value;

pub const SpanningEventEmmMessage = extern struct {
    bCAbroadcasterGroupId: u8,
    bMessageControl: u8,
    wServiceId: u16,
    wTableIdExtension: u16,
    bDeletionStatus: u8,
    bDisplayingDuration1: u8,
    bDisplayingDuration2: u8,
    bDisplayingDuration3: u8,
    bDisplayingCycle: u8,
    bFormatVersion: u8,
    bDisplayPosition: u8,
    wMessageLength: u16,
    szMessageArea: [1]u16,
};

const CLSID_EVENTID_EmmMessageSpanningEvent_Value = Guid.initString("6bf00268-4f7e-4294-aa87-e9e953e43f14");
pub const CLSID_EVENTID_EmmMessageSpanningEvent = &CLSID_EVENTID_EmmMessageSpanningEvent_Value;

const CLSID_EVENTID_AudioTypeSpanningEvent_Value = Guid.initString("501cbfbe-b849-42ce-9be9-3db869fb82b3");
pub const CLSID_EVENTID_AudioTypeSpanningEvent = &CLSID_EVENTID_AudioTypeSpanningEvent_Value;

const CLSID_EVENTID_StreamTypeSpanningEvent_Value = Guid.initString("82af2ebc-30a6-4264-a80b-ad2e1372ac60");
pub const CLSID_EVENTID_StreamTypeSpanningEvent = &CLSID_EVENTID_StreamTypeSpanningEvent_Value;

const CLSID_EVENTID_ARIBcontentSpanningEvent_Value = Guid.initString("3a954083-93d0-463e-90b2-0742c496edf0");
pub const CLSID_EVENTID_ARIBcontentSpanningEvent = &CLSID_EVENTID_ARIBcontentSpanningEvent_Value;

const CLSID_EVENTID_LanguageSpanningEvent_Value = Guid.initString("e292666d-9c02-448d-aa8d-781a93fdc395");
pub const CLSID_EVENTID_LanguageSpanningEvent = &CLSID_EVENTID_LanguageSpanningEvent_Value;

pub const LanguageInfo = extern struct {
    LangID: u16,
    lISOLangCode: i32,
};

const CLSID_EVENTID_DualMonoSpanningEvent_Value = Guid.initString("a9a29b56-a84b-488c-89d5-0d4e7657c8ce");
pub const CLSID_EVENTID_DualMonoSpanningEvent = &CLSID_EVENTID_DualMonoSpanningEvent_Value;

pub const DualMonoInfo = extern struct {
    LangID1: u16,
    LangID2: u16,
    lISOLangCode1: i32,
    lISOLangCode2: i32,
};

const CLSID_EVENTID_PIDListSpanningEvent_Value = Guid.initString("47fc8f65-e2bb-4634-9cef-fdbfe6261d5c");
pub const CLSID_EVENTID_PIDListSpanningEvent = &CLSID_EVENTID_PIDListSpanningEvent_Value;

pub const PIDListSpanningEvent = extern struct {
    wPIDCount: u16,
    pulPIDs: [1]u32,
};

const CLSID_EVENTID_AudioDescriptorSpanningEvent_Value = Guid.initString("107bd41c-a6da-4691-8369-11b2cdaa288e");
pub const CLSID_EVENTID_AudioDescriptorSpanningEvent = &CLSID_EVENTID_AudioDescriptorSpanningEvent_Value;

const CLSID_EVENTID_SubtitleSpanningEvent_Value = Guid.initString("5dcec048-d0b9-4163-872c-4f32223be88a");
pub const CLSID_EVENTID_SubtitleSpanningEvent = &CLSID_EVENTID_SubtitleSpanningEvent_Value;

const CLSID_EVENTID_TeletextSpanningEvent_Value = Guid.initString("9599d950-5f33-4617-af7c-1e54b510daa3");
pub const CLSID_EVENTID_TeletextSpanningEvent = &CLSID_EVENTID_TeletextSpanningEvent_Value;

const CLSID_EVENTID_StreamIDSpanningEvent_Value = Guid.initString("caf1ab68-e153-4d41-a6b3-a7c998db75ee");
pub const CLSID_EVENTID_StreamIDSpanningEvent = &CLSID_EVENTID_StreamIDSpanningEvent_Value;

const CLSID_EVENTID_PBDAParentalControlEvent_Value = Guid.initString("f947aa85-fb52-48e8-b9c5-e1e1f411a51a");
pub const CLSID_EVENTID_PBDAParentalControlEvent = &CLSID_EVENTID_PBDAParentalControlEvent_Value;

pub const RATING_ATTRIBUTE = extern struct {
    rating_attribute_id: u32 align(1),
    rating_attribute_value: u32 align(1),
};

pub const RATING_SYSTEM = extern struct {
    rating_system_id: Guid align(1),
    _bitfield: u8 align(1),
    country_code: [3]u8 align(1),
    rating_attribute_count: u32 align(1),
    lpratingattrib: ?*RATING_ATTRIBUTE align(1),
};

pub const RATING_INFO = extern struct {
    rating_system_count: u32 align(1),
    lpratingsystem: ?*RATING_SYSTEM align(1),
};

pub const PBDAParentalControl = extern struct {
    rating_system_count: u32 align(1),
    rating_systems: ?*RATING_SYSTEM align(1),
};

const CLSID_EVENTID_TuneFailureEvent_Value = Guid.initString("d97287b2-2dfd-436a-9485-99d7d4ab5a69");
pub const CLSID_EVENTID_TuneFailureEvent = &CLSID_EVENTID_TuneFailureEvent_Value;

const CLSID_EVENTID_TuneFailureSpanningEvent_Value = Guid.initString("6f8aa455-5ee1-48ab-a27c-4c8d70b9aeba");
pub const CLSID_EVENTID_TuneFailureSpanningEvent = &CLSID_EVENTID_TuneFailureSpanningEvent_Value;

const CLSID_EVENTID_DvbParentalRatingDescriptor_Value = Guid.initString("2a67a58d-eca5-4eac-abcb-e734d3776d0a");
pub const CLSID_EVENTID_DvbParentalRatingDescriptor = &CLSID_EVENTID_DvbParentalRatingDescriptor_Value;

pub const DvbParentalRatingParam = extern struct {
    szCountryCode: [4]CHAR,
    bRating: u8,
};

pub const DvbParentalRatingDescriptor = extern struct {
    ulNumParams: u32,
    pParams: [1]DvbParentalRatingParam,
};

const CLSID_EVENTID_DFNWithNoActualAVData_Value = Guid.initString("f5689ffe-55f9-4bb3-96be-ae971c63bae0");
pub const CLSID_EVENTID_DFNWithNoActualAVData = &CLSID_EVENTID_DFNWithNoActualAVData_Value;

const CLSID_KSDATAFORMAT_TYPE_BDA_ANTENNA_Value = Guid.initString("71985f41-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSDATAFORMAT_TYPE_BDA_ANTENNA = &CLSID_KSDATAFORMAT_TYPE_BDA_ANTENNA_Value;

const CLSID_KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT_Value = Guid.initString("f4aeb342-0329-4fdd-a8fd-4aff4926c978");
pub const CLSID_KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT = &CLSID_KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT_Value;

const CLSID_KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT_Value = Guid.initString("8deda6fd-ac5f-4334-8ecf-a4ba8fa7d0f0");
pub const CLSID_KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT = &CLSID_KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT_Value;

const CLSID_KSDATAFORMAT_TYPE_BDA_IF_SIGNAL_Value = Guid.initString("61be0b47-a5eb-499b-9a85-5b16c07f1258");
pub const CLSID_KSDATAFORMAT_TYPE_BDA_IF_SIGNAL = &CLSID_KSDATAFORMAT_TYPE_BDA_IF_SIGNAL_Value;

const CLSID_KSDATAFORMAT_TYPE_MPEG2_SECTIONS_Value = Guid.initString("455f176c-4b06-47ce-9aef-8caef73df7b5");
pub const CLSID_KSDATAFORMAT_TYPE_MPEG2_SECTIONS = &CLSID_KSDATAFORMAT_TYPE_MPEG2_SECTIONS_Value;

const CLSID_KSDATAFORMAT_SUBTYPE_ATSC_SI_Value = Guid.initString("b3c7397c-d303-414d-b33c-4ed2c9d29733");
pub const CLSID_KSDATAFORMAT_SUBTYPE_ATSC_SI = &CLSID_KSDATAFORMAT_SUBTYPE_ATSC_SI_Value;

const CLSID_KSDATAFORMAT_SUBTYPE_DVB_SI_Value = Guid.initString("e9dd31a3-221d-4adb-8532-9af309c1a408");
pub const CLSID_KSDATAFORMAT_SUBTYPE_DVB_SI = &CLSID_KSDATAFORMAT_SUBTYPE_DVB_SI_Value;

const CLSID_KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_PSIP_Value = Guid.initString("762e3f66-336f-48d1-bf83-2b00352c11f0");
pub const CLSID_KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_PSIP = &CLSID_KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_PSIP_Value;

const CLSID_KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_OOB_PSIP_Value = Guid.initString("951727db-d2ce-4528-96f6-3301fabb2de0");
pub const CLSID_KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_OOB_PSIP = &CLSID_KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_OOB_PSIP_Value;

const CLSID_KSDATAFORMAT_SUBTYPE_ISDB_SI_Value = Guid.initString("4a2eeb99-6458-4538-b187-04017c41413f");
pub const CLSID_KSDATAFORMAT_SUBTYPE_ISDB_SI = &CLSID_KSDATAFORMAT_SUBTYPE_ISDB_SI_Value;

const CLSID_KSDATAFORMAT_SUBTYPE_PBDA_TRANSPORT_RAW_Value = Guid.initString("0d7aed42-cb9a-11db-9705-005056c00008");
pub const CLSID_KSDATAFORMAT_SUBTYPE_PBDA_TRANSPORT_RAW = &CLSID_KSDATAFORMAT_SUBTYPE_PBDA_TRANSPORT_RAW_Value;

const CLSID_PINNAME_BDA_TRANSPORT_Value = Guid.initString("78216a81-cfa8-493e-9711-36a61c08bd9d");
pub const CLSID_PINNAME_BDA_TRANSPORT = &CLSID_PINNAME_BDA_TRANSPORT_Value;

const CLSID_PINNAME_BDA_ANALOG_VIDEO_Value = Guid.initString("5c0c8281-5667-486c-8482-63e31f01a6e9");
pub const CLSID_PINNAME_BDA_ANALOG_VIDEO = &CLSID_PINNAME_BDA_ANALOG_VIDEO_Value;

const CLSID_PINNAME_BDA_ANALOG_AUDIO_Value = Guid.initString("d28a580a-9b1f-4b0c-9c33-9bf0a8ea636b");
pub const CLSID_PINNAME_BDA_ANALOG_AUDIO = &CLSID_PINNAME_BDA_ANALOG_AUDIO_Value;

const CLSID_PINNAME_BDA_FM_RADIO_Value = Guid.initString("d2855fed-b2d3-4eeb-9bd0-193436a2f890");
pub const CLSID_PINNAME_BDA_FM_RADIO = &CLSID_PINNAME_BDA_FM_RADIO_Value;

const CLSID_PINNAME_BDA_IF_PIN_Value = Guid.initString("1a9d4a42-f3cd-48a1-9aea-71de133cbe14");
pub const CLSID_PINNAME_BDA_IF_PIN = &CLSID_PINNAME_BDA_IF_PIN_Value;

const CLSID_PINNAME_BDA_OPENCABLE_PSIP_PIN_Value = Guid.initString("297bb104-e5c9-4ace-b123-95c3cbb24d4f");
pub const CLSID_PINNAME_BDA_OPENCABLE_PSIP_PIN = &CLSID_PINNAME_BDA_OPENCABLE_PSIP_PIN_Value;

const CLSID_KSPROPSETID_BdaEthernetFilter_Value = Guid.initString("71985f43-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSPROPSETID_BdaEthernetFilter = &CLSID_KSPROPSETID_BdaEthernetFilter_Value;

pub const KSPROPERTY_BDA_ETHERNET_FILTER = enum(i32) {
    LIST_SIZE = 0,
    LIST = 1,
    MODE = 2,
};
pub const KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_LIST_SIZE = KSPROPERTY_BDA_ETHERNET_FILTER.LIST_SIZE;
pub const KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_LIST = KSPROPERTY_BDA_ETHERNET_FILTER.LIST;
pub const KSPROPERTY_BDA_ETHERNET_FILTER_MULTICAST_MODE = KSPROPERTY_BDA_ETHERNET_FILTER.MODE;

const CLSID_KSPROPSETID_BdaIPv4Filter_Value = Guid.initString("71985f44-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSPROPSETID_BdaIPv4Filter = &CLSID_KSPROPSETID_BdaIPv4Filter_Value;

pub const KSPROPERTY_BDA_IPv4_FILTER = enum(i32) {
    LIST_SIZE = 0,
    LIST = 1,
    MODE = 2,
};
pub const KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_LIST_SIZE = KSPROPERTY_BDA_IPv4_FILTER.LIST_SIZE;
pub const KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_LIST = KSPROPERTY_BDA_IPv4_FILTER.LIST;
pub const KSPROPERTY_BDA_IPv4_FILTER_MULTICAST_MODE = KSPROPERTY_BDA_IPv4_FILTER.MODE;

const CLSID_KSPROPSETID_BdaIPv6Filter_Value = Guid.initString("e1785a74-2a23-4fb3-9245-a8f88017ef33");
pub const CLSID_KSPROPSETID_BdaIPv6Filter = &CLSID_KSPROPSETID_BdaIPv6Filter_Value;

pub const KSPROPERTY_BDA_IPv6_FILTER = enum(i32) {
    LIST_SIZE = 0,
    LIST = 1,
    MODE = 2,
};
pub const KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_LIST_SIZE = KSPROPERTY_BDA_IPv6_FILTER.LIST_SIZE;
pub const KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_LIST = KSPROPERTY_BDA_IPv6_FILTER.LIST;
pub const KSPROPERTY_BDA_IPv6_FILTER_MULTICAST_MODE = KSPROPERTY_BDA_IPv6_FILTER.MODE;

const CLSID_KSPROPSETID_BdaSignalStats_Value = Guid.initString("1347d106-cf3a-428a-a5cb-ac0d9a2a4338");
pub const CLSID_KSPROPSETID_BdaSignalStats = &CLSID_KSPROPSETID_BdaSignalStats_Value;

pub const KSPROPERTY_BDA_SIGNAL_STATS = enum(i32) {
    IGNAL_STRENGTH = 0,
    IGNAL_QUALITY = 1,
    IGNAL_PRESENT = 2,
    IGNAL_LOCKED = 3,
    AMPLE_TIME = 4,
    IGNAL_LOCK_CAPS = 5,
    IGNAL_LOCK_TYPE = 6,
};
pub const KSPROPERTY_BDA_SIGNAL_STRENGTH = KSPROPERTY_BDA_SIGNAL_STATS.IGNAL_STRENGTH;
pub const KSPROPERTY_BDA_SIGNAL_QUALITY = KSPROPERTY_BDA_SIGNAL_STATS.IGNAL_QUALITY;
pub const KSPROPERTY_BDA_SIGNAL_PRESENT = KSPROPERTY_BDA_SIGNAL_STATS.IGNAL_PRESENT;
pub const KSPROPERTY_BDA_SIGNAL_LOCKED = KSPROPERTY_BDA_SIGNAL_STATS.IGNAL_LOCKED;
pub const KSPROPERTY_BDA_SAMPLE_TIME = KSPROPERTY_BDA_SIGNAL_STATS.AMPLE_TIME;
pub const KSPROPERTY_BDA_SIGNAL_LOCK_CAPS = KSPROPERTY_BDA_SIGNAL_STATS.IGNAL_LOCK_CAPS;
pub const KSPROPERTY_BDA_SIGNAL_LOCK_TYPE = KSPROPERTY_BDA_SIGNAL_STATS.IGNAL_LOCK_TYPE;

pub const BDA_LockType = enum(i32) {
    None = 0,
    PLL = 1,
    DecoderDemod = 2,
    Complete = 128,
};
pub const Bda_LockType_None = BDA_LockType.None;
pub const Bda_LockType_PLL = BDA_LockType.PLL;
pub const Bda_LockType_DecoderDemod = BDA_LockType.DecoderDemod;
pub const Bda_LockType_Complete = BDA_LockType.Complete;

const CLSID_KSMETHODSETID_BdaChangeSync_Value = Guid.initString("fd0a5af3-b41d-11d2-9c95-00c04f7971e0");
pub const CLSID_KSMETHODSETID_BdaChangeSync = &CLSID_KSMETHODSETID_BdaChangeSync_Value;

pub const KSMETHOD_BDA_CHANGE_SYNC = enum(i32) {
    START_CHANGES = 0,
    CHECK_CHANGES = 1,
    COMMIT_CHANGES = 2,
    GET_CHANGE_STATE = 3,
};
pub const KSMETHOD_BDA_START_CHANGES = KSMETHOD_BDA_CHANGE_SYNC.START_CHANGES;
pub const KSMETHOD_BDA_CHECK_CHANGES = KSMETHOD_BDA_CHANGE_SYNC.CHECK_CHANGES;
pub const KSMETHOD_BDA_COMMIT_CHANGES = KSMETHOD_BDA_CHANGE_SYNC.COMMIT_CHANGES;
pub const KSMETHOD_BDA_GET_CHANGE_STATE = KSMETHOD_BDA_CHANGE_SYNC.GET_CHANGE_STATE;

const CLSID_KSMETHODSETID_BdaDeviceConfiguration_Value = Guid.initString("71985f45-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSMETHODSETID_BdaDeviceConfiguration = &CLSID_KSMETHODSETID_BdaDeviceConfiguration_Value;

pub const KSMETHOD_BDA_DEVICE_CONFIGURATION = enum(i32) {
    CREATE_PIN_FACTORY = 0,
    DELETE_PIN_FACTORY = 1,
    CREATE_TOPOLOGY = 2,
};
pub const KSMETHOD_BDA_CREATE_PIN_FACTORY = KSMETHOD_BDA_DEVICE_CONFIGURATION.CREATE_PIN_FACTORY;
pub const KSMETHOD_BDA_DELETE_PIN_FACTORY = KSMETHOD_BDA_DEVICE_CONFIGURATION.DELETE_PIN_FACTORY;
pub const KSMETHOD_BDA_CREATE_TOPOLOGY = KSMETHOD_BDA_DEVICE_CONFIGURATION.CREATE_TOPOLOGY;

const CLSID_KSPROPSETID_BdaTopology_Value = Guid.initString("a14ee835-0a23-11d3-9cc7-00c04f7971e0");
pub const CLSID_KSPROPSETID_BdaTopology = &CLSID_KSPROPSETID_BdaTopology_Value;

pub const KSPROPERTY_BDA_TOPOLOGY = enum(i32) {
    NODE_TYPES = 0,
    PIN_TYPES = 1,
    TEMPLATE_CONNECTIONS = 2,
    NODE_METHODS = 3,
    NODE_PROPERTIES = 4,
    NODE_EVENTS = 5,
    CONTROLLING_PIN_ID = 6,
    NODE_DESCRIPTORS = 7,
};
pub const KSPROPERTY_BDA_NODE_TYPES = KSPROPERTY_BDA_TOPOLOGY.NODE_TYPES;
pub const KSPROPERTY_BDA_PIN_TYPES = KSPROPERTY_BDA_TOPOLOGY.PIN_TYPES;
pub const KSPROPERTY_BDA_TEMPLATE_CONNECTIONS = KSPROPERTY_BDA_TOPOLOGY.TEMPLATE_CONNECTIONS;
pub const KSPROPERTY_BDA_NODE_METHODS = KSPROPERTY_BDA_TOPOLOGY.NODE_METHODS;
pub const KSPROPERTY_BDA_NODE_PROPERTIES = KSPROPERTY_BDA_TOPOLOGY.NODE_PROPERTIES;
pub const KSPROPERTY_BDA_NODE_EVENTS = KSPROPERTY_BDA_TOPOLOGY.NODE_EVENTS;
pub const KSPROPERTY_BDA_CONTROLLING_PIN_ID = KSPROPERTY_BDA_TOPOLOGY.CONTROLLING_PIN_ID;
pub const KSPROPERTY_BDA_NODE_DESCRIPTORS = KSPROPERTY_BDA_TOPOLOGY.NODE_DESCRIPTORS;

const CLSID_KSPROPSETID_BdaPinControl_Value = Guid.initString("0ded49d5-a8b7-4d5d-97a1-12b0c195874d");
pub const CLSID_KSPROPSETID_BdaPinControl = &CLSID_KSPROPSETID_BdaPinControl_Value;

pub const KSPROPERTY_BDA_PIN_CONTROL = enum(i32) {
    ID = 0,
    TYPE = 1,
};
pub const KSPROPERTY_BDA_PIN_ID = KSPROPERTY_BDA_PIN_CONTROL.ID;
pub const KSPROPERTY_BDA_PIN_TYPE = KSPROPERTY_BDA_PIN_CONTROL.TYPE;

const CLSID_KSEVENTSETID_BdaPinEvent_Value = Guid.initString("104781cd-50bd-40d5-95fb-087e0e86a591");
pub const CLSID_KSEVENTSETID_BdaPinEvent = &CLSID_KSEVENTSETID_BdaPinEvent_Value;

pub const KSPROPERTY_BDA_PIN_EVENT = enum(i32) {
    CONNECTED = 0,
    DISCONNECTED = 1,
};
pub const KSEVENT_BDA_PIN_CONNECTED = KSPROPERTY_BDA_PIN_EVENT.CONNECTED;
pub const KSEVENT_BDA_PIN_DISCONNECTED = KSPROPERTY_BDA_PIN_EVENT.DISCONNECTED;

const CLSID_KSPROPSETID_BdaVoidTransform_Value = Guid.initString("71985f46-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSPROPSETID_BdaVoidTransform = &CLSID_KSPROPSETID_BdaVoidTransform_Value;

pub const KSPROPERTY_BDA_VOID_TRANSFORM = enum(i32) {
    ART = 0,
    OP = 1,
};
pub const KSPROPERTY_BDA_VOID_TRANSFORM_START = KSPROPERTY_BDA_VOID_TRANSFORM.ART;
pub const KSPROPERTY_BDA_VOID_TRANSFORM_STOP = KSPROPERTY_BDA_VOID_TRANSFORM.OP;

const CLSID_KSPROPSETID_BdaNullTransform_Value = Guid.initString("ddf15b0d-bd25-11d2-9ca0-00c04f7971e0");
pub const CLSID_KSPROPSETID_BdaNullTransform = &CLSID_KSPROPSETID_BdaNullTransform_Value;

pub const KSPROPERTY_BDA_NULL_TRANSFORM = enum(i32) {
    ART = 0,
    OP = 1,
};
pub const KSPROPERTY_BDA_NULL_TRANSFORM_START = KSPROPERTY_BDA_NULL_TRANSFORM.ART;
pub const KSPROPERTY_BDA_NULL_TRANSFORM_STOP = KSPROPERTY_BDA_NULL_TRANSFORM.OP;

const CLSID_KSPROPSETID_BdaFrequencyFilter_Value = Guid.initString("71985f47-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSPROPSETID_BdaFrequencyFilter = &CLSID_KSPROPSETID_BdaFrequencyFilter_Value;

pub const KSPROPERTY_BDA_FREQUENCY_FILTER = enum(i32) {
    FREQUENCY = 0,
    POLARITY = 1,
    RANGE = 2,
    TRANSPONDER = 3,
    BANDWIDTH = 4,
    FREQUENCY_MULTIPLIER = 5,
    CAPS = 6,
    SCAN_STATUS = 7,
    STANDARD = 8,
    STANDARD_MODE = 9,
};
pub const KSPROPERTY_BDA_RF_TUNER_FREQUENCY = KSPROPERTY_BDA_FREQUENCY_FILTER.FREQUENCY;
pub const KSPROPERTY_BDA_RF_TUNER_POLARITY = KSPROPERTY_BDA_FREQUENCY_FILTER.POLARITY;
pub const KSPROPERTY_BDA_RF_TUNER_RANGE = KSPROPERTY_BDA_FREQUENCY_FILTER.RANGE;
pub const KSPROPERTY_BDA_RF_TUNER_TRANSPONDER = KSPROPERTY_BDA_FREQUENCY_FILTER.TRANSPONDER;
pub const KSPROPERTY_BDA_RF_TUNER_BANDWIDTH = KSPROPERTY_BDA_FREQUENCY_FILTER.BANDWIDTH;
pub const KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER = KSPROPERTY_BDA_FREQUENCY_FILTER.FREQUENCY_MULTIPLIER;
pub const KSPROPERTY_BDA_RF_TUNER_CAPS = KSPROPERTY_BDA_FREQUENCY_FILTER.CAPS;
pub const KSPROPERTY_BDA_RF_TUNER_SCAN_STATUS = KSPROPERTY_BDA_FREQUENCY_FILTER.SCAN_STATUS;
pub const KSPROPERTY_BDA_RF_TUNER_STANDARD = KSPROPERTY_BDA_FREQUENCY_FILTER.STANDARD;
pub const KSPROPERTY_BDA_RF_TUNER_STANDARD_MODE = KSPROPERTY_BDA_FREQUENCY_FILTER.STANDARD_MODE;

pub const BDA_SignalType = enum(i32) {
    Unknown = 0,
    Analog = 1,
    Digital = 2,
};
pub const Bda_SignalType_Unknown = BDA_SignalType.Unknown;
pub const Bda_SignalType_Analog = BDA_SignalType.Analog;
pub const Bda_SignalType_Digital = BDA_SignalType.Digital;

pub const BDA_DigitalSignalStandard = enum(i32) {
    None = 0,
    DVB_T = 1,
    DVB_S = 2,
    DVB_C = 4,
    ATSC = 8,
    ISDB_T = 16,
    ISDB_S = 32,
    ISDB_C = 64,
};
pub const Bda_DigitalStandard_None = BDA_DigitalSignalStandard.None;
pub const Bda_DigitalStandard_DVB_T = BDA_DigitalSignalStandard.DVB_T;
pub const Bda_DigitalStandard_DVB_S = BDA_DigitalSignalStandard.DVB_S;
pub const Bda_DigitalStandard_DVB_C = BDA_DigitalSignalStandard.DVB_C;
pub const Bda_DigitalStandard_ATSC = BDA_DigitalSignalStandard.ATSC;
pub const Bda_DigitalStandard_ISDB_T = BDA_DigitalSignalStandard.ISDB_T;
pub const Bda_DigitalStandard_ISDB_S = BDA_DigitalSignalStandard.ISDB_S;
pub const Bda_DigitalStandard_ISDB_C = BDA_DigitalSignalStandard.ISDB_C;

pub const KSPROPERTY_BDA_RF_TUNER_CAPS_S = extern struct {
    Property: KSP_NODE,
    Mode: u32,
    AnalogStandardsSupported: u32,
    DigitalStandardsSupported: u32,
    MinFrequency: u32,
    MaxFrequency: u32,
    SettlingTime: u32,
    AnalogSensingRange: u32,
    DigitalSensingRange: u32,
    MilliSecondsPerMHz: u32,
};

pub const KSPROPERTY_BDA_RF_TUNER_SCAN_STATUS_S = extern struct {
    Property: KSP_NODE,
    CurrentFrequency: u32,
    FrequencyRangeMin: u32,
    FrequencyRangeMax: u32,
    MilliSecondsLeft: u32,
};

pub const KSPROPERTY_BDA_RF_TUNER_STANDARD_S = extern struct {
    Property: KSP_NODE,
    SignalType: BDA_SignalType,
    SignalStandard: u32,
};

pub const KSPROPERTY_BDA_RF_TUNER_STANDARD_MODE_S = extern struct {
    Property: KSP_NODE,
    AutoDetect: BOOL,
};

const CLSID_KSEVENTSETID_BdaTunerEvent_Value = Guid.initString("aab59e17-01c9-4ebf-93f2-fc3b79b46f91");
pub const CLSID_KSEVENTSETID_BdaTunerEvent = &CLSID_KSEVENTSETID_BdaTunerEvent_Value;

pub const KSEVENT_BDA_TUNER = enum(i32) {
    N = 0,
};
pub const KSEVENT_BDA_TUNER_SCAN = KSEVENT_BDA_TUNER.N;

pub const KSEVENTDATA_BDA_RF_TUNER_SCAN_S = extern struct {
    EventData: KSEVENTDATA,
    StartFrequency: u32,
    EndFrequency: u32,
    LockRequested: BDA_LockType,
};

const CLSID_KSPROPSETID_BdaLNBInfo_Value = Guid.initString("992cf102-49f9-4719-a664-c4f23e2408f4");
pub const CLSID_KSPROPSETID_BdaLNBInfo = &CLSID_KSPROPSETID_BdaLNBInfo_Value;

pub const KSPROPERTY_BDA_LNB_INFO = enum(i32) {
    LOF_LOW_BAND = 0,
    LOF_HIGH_BAND = 1,
    SWITCH_FREQUENCY = 2,
};
pub const KSPROPERTY_BDA_LNB_LOF_LOW_BAND = KSPROPERTY_BDA_LNB_INFO.LOF_LOW_BAND;
pub const KSPROPERTY_BDA_LNB_LOF_HIGH_BAND = KSPROPERTY_BDA_LNB_INFO.LOF_HIGH_BAND;
pub const KSPROPERTY_BDA_LNB_SWITCH_FREQUENCY = KSPROPERTY_BDA_LNB_INFO.SWITCH_FREQUENCY;

const CLSID_KSPROPSETID_BdaDiseqCommand_Value = Guid.initString("f84e2ab0-3c6b-45e3-a0fc-8669d4b81f11");
pub const CLSID_KSPROPSETID_BdaDiseqCommand = &CLSID_KSPROPSETID_BdaDiseqCommand_Value;

pub const KSPROPERTY_BDA_DISEQC_COMMAND = enum(i32) {
    ENABLE = 0,
    LNB_SOURCE = 1,
    USETONEBURST = 2,
    REPEATS = 3,
    SEND = 4,
    RESPONSE = 5,
};
pub const KSPROPERTY_BDA_DISEQC_ENABLE = KSPROPERTY_BDA_DISEQC_COMMAND.ENABLE;
pub const KSPROPERTY_BDA_DISEQC_LNB_SOURCE = KSPROPERTY_BDA_DISEQC_COMMAND.LNB_SOURCE;
pub const KSPROPERTY_BDA_DISEQC_USETONEBURST = KSPROPERTY_BDA_DISEQC_COMMAND.USETONEBURST;
pub const KSPROPERTY_BDA_DISEQC_REPEATS = KSPROPERTY_BDA_DISEQC_COMMAND.REPEATS;
pub const KSPROPERTY_BDA_DISEQC_SEND = KSPROPERTY_BDA_DISEQC_COMMAND.SEND;
pub const KSPROPERTY_BDA_DISEQC_RESPONSE = KSPROPERTY_BDA_DISEQC_COMMAND.RESPONSE;

const CLSID_KSEVENTSETID_BdaDiseqCEvent_Value = Guid.initString("8b19bbf0-4184-43ac-ad3c-0c889be4c212");
pub const CLSID_KSEVENTSETID_BdaDiseqCEvent = &CLSID_KSEVENTSETID_BdaDiseqCEvent_Value;

pub const KSPROPERTY_BDA_DISEQC_EVENT = enum(i32) {
    D = 0,
};
pub const KSEVENT_BDA_DISEQC_DATA_RECEIVED = KSPROPERTY_BDA_DISEQC_EVENT.D;

const CLSID_KSPROPSETID_BdaDigitalDemodulator_Value = Guid.initString("ef30f379-985b-4d10-b640-a79d5e04e1e0");
pub const CLSID_KSPROPSETID_BdaDigitalDemodulator = &CLSID_KSPROPSETID_BdaDigitalDemodulator_Value;

pub const KSPROPERTY_BDA_DIGITAL_DEMODULATOR = enum(i32) {
    MODULATION_TYPE = 0,
    INNER_FEC_TYPE = 1,
    INNER_FEC_RATE = 2,
    OUTER_FEC_TYPE = 3,
    OUTER_FEC_RATE = 4,
    SYMBOL_RATE = 5,
    SPECTRAL_INVERSION = 6,
    GUARD_INTERVAL = 7,
    TRANSMISSION_MODE = 8,
    ROLL_OFF = 9,
    PILOT = 10,
    SIGNALTIMEOUTS = 11,
    PLP_NUMBER = 12,
};
pub const KSPROPERTY_BDA_MODULATION_TYPE = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.MODULATION_TYPE;
pub const KSPROPERTY_BDA_INNER_FEC_TYPE = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.INNER_FEC_TYPE;
pub const KSPROPERTY_BDA_INNER_FEC_RATE = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.INNER_FEC_RATE;
pub const KSPROPERTY_BDA_OUTER_FEC_TYPE = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.OUTER_FEC_TYPE;
pub const KSPROPERTY_BDA_OUTER_FEC_RATE = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.OUTER_FEC_RATE;
pub const KSPROPERTY_BDA_SYMBOL_RATE = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.SYMBOL_RATE;
pub const KSPROPERTY_BDA_SPECTRAL_INVERSION = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.SPECTRAL_INVERSION;
pub const KSPROPERTY_BDA_GUARD_INTERVAL = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.GUARD_INTERVAL;
pub const KSPROPERTY_BDA_TRANSMISSION_MODE = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.TRANSMISSION_MODE;
pub const KSPROPERTY_BDA_ROLL_OFF = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.ROLL_OFF;
pub const KSPROPERTY_BDA_PILOT = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.PILOT;
pub const KSPROPERTY_BDA_SIGNALTIMEOUTS = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.SIGNALTIMEOUTS;
pub const KSPROPERTY_BDA_PLP_NUMBER = KSPROPERTY_BDA_DIGITAL_DEMODULATOR.PLP_NUMBER;

const CLSID_KSPROPSETID_BdaAutodemodulate_Value = Guid.initString("ddf15b12-bd25-11d2-9ca0-00c04f7971e0");
pub const CLSID_KSPROPSETID_BdaAutodemodulate = &CLSID_KSPROPSETID_BdaAutodemodulate_Value;

pub const KSPROPERTY_BDA_AUTODEMODULATE = enum(i32) {
    ART = 0,
    OP = 1,
};
pub const KSPROPERTY_BDA_AUTODEMODULATE_START = KSPROPERTY_BDA_AUTODEMODULATE.ART;
pub const KSPROPERTY_BDA_AUTODEMODULATE_STOP = KSPROPERTY_BDA_AUTODEMODULATE.OP;

const CLSID_KSPROPSETID_BdaTableSection_Value = Guid.initString("516b99c5-971c-4aaf-b3f3-d9fda8a15e16");
pub const CLSID_KSPROPSETID_BdaTableSection = &CLSID_KSPROPSETID_BdaTableSection_Value;

pub const KSPROPERTY_IDS_BDA_TABLE = enum(i32) {
    N = 0,
};
pub const KSPROPERTY_BDA_TABLE_SECTION = KSPROPERTY_IDS_BDA_TABLE.N;

const CLSID_KSPROPSETID_BdaPIDFilter_Value = Guid.initString("d0a67d65-08df-4fec-8533-e5b550410b85");
pub const CLSID_KSPROPSETID_BdaPIDFilter = &CLSID_KSPROPSETID_BdaPIDFilter_Value;

pub const KSPROPERTY_BDA_PIDFILTER = enum(i32) {
    MAP_PIDS = 0,
    UNMAP_PIDS = 1,
    LIST_PIDS = 2,
};
pub const KSPROPERTY_BDA_PIDFILTER_MAP_PIDS = KSPROPERTY_BDA_PIDFILTER.MAP_PIDS;
pub const KSPROPERTY_BDA_PIDFILTER_UNMAP_PIDS = KSPROPERTY_BDA_PIDFILTER.UNMAP_PIDS;
pub const KSPROPERTY_BDA_PIDFILTER_LIST_PIDS = KSPROPERTY_BDA_PIDFILTER.LIST_PIDS;

const CLSID_KSPROPSETID_BdaCA_Value = Guid.initString("b0693766-5278-4ec6-b9e1-3ce40560ef5a");
pub const CLSID_KSPROPSETID_BdaCA = &CLSID_KSPROPSETID_BdaCA_Value;

pub const KSPROPERTY_BDA_CA = enum(i32) {
    ECM_MAP_STATUS = 0,
    CA_MODULE_STATUS = 1,
    CA_SMART_CARD_STATUS = 2,
    CA_MODULE_UI = 3,
    CA_SET_PROGRAM_PIDS = 4,
    CA_REMOVE_PROGRAM = 5,
};
pub const KSPROPERTY_BDA_ECM_MAP_STATUS = KSPROPERTY_BDA_CA.ECM_MAP_STATUS;
pub const KSPROPERTY_BDA_CA_MODULE_STATUS = KSPROPERTY_BDA_CA.CA_MODULE_STATUS;
pub const KSPROPERTY_BDA_CA_SMART_CARD_STATUS = KSPROPERTY_BDA_CA.CA_SMART_CARD_STATUS;
pub const KSPROPERTY_BDA_CA_MODULE_UI = KSPROPERTY_BDA_CA.CA_MODULE_UI;
pub const KSPROPERTY_BDA_CA_SET_PROGRAM_PIDS = KSPROPERTY_BDA_CA.CA_SET_PROGRAM_PIDS;
pub const KSPROPERTY_BDA_CA_REMOVE_PROGRAM = KSPROPERTY_BDA_CA.CA_REMOVE_PROGRAM;

const CLSID_KSEVENTSETID_BdaCAEvent_Value = Guid.initString("488c4ccc-b768-4129-8eb1-b00a071f9068");
pub const CLSID_KSEVENTSETID_BdaCAEvent = &CLSID_KSEVENTSETID_BdaCAEvent_Value;

pub const KSPROPERTY_BDA_CA_EVENT = enum(i32) {
    PROGRAM_FLOW_STATUS_CHANGED = 0,
    CA_MODULE_STATUS_CHANGED = 1,
    CA_SMART_CARD_STATUS_CHANGED = 2,
    CA_MODULE_UI_REQUESTED = 3,
};
pub const KSEVENT_BDA_PROGRAM_FLOW_STATUS_CHANGED = KSPROPERTY_BDA_CA_EVENT.PROGRAM_FLOW_STATUS_CHANGED;
pub const KSEVENT_BDA_CA_MODULE_STATUS_CHANGED = KSPROPERTY_BDA_CA_EVENT.CA_MODULE_STATUS_CHANGED;
pub const KSEVENT_BDA_CA_SMART_CARD_STATUS_CHANGED = KSPROPERTY_BDA_CA_EVENT.CA_SMART_CARD_STATUS_CHANGED;
pub const KSEVENT_BDA_CA_MODULE_UI_REQUESTED = KSPROPERTY_BDA_CA_EVENT.CA_MODULE_UI_REQUESTED;

const CLSID_KSMETHODSETID_BdaDrmService_Value = Guid.initString("bff6b5bb-b0ae-484c-9dca-73528fb0b46e");
pub const CLSID_KSMETHODSETID_BdaDrmService = &CLSID_KSMETHODSETID_BdaDrmService_Value;

pub const KSMETHOD_BDA_DRM = enum(i32) {
    CURRENT = 0,
    DRMSTATUS = 1,
};
pub const KSMETHOD_BDA_DRM_CURRENT = KSMETHOD_BDA_DRM.CURRENT;
pub const KSMETHOD_BDA_DRM_DRMSTATUS = KSMETHOD_BDA_DRM.DRMSTATUS;

const CLSID_KSMETHODSETID_BdaWmdrmSession_Value = Guid.initString("4be6fa3d-07cd-4139-8b80-8c18ba3aec88");
pub const CLSID_KSMETHODSETID_BdaWmdrmSession = &CLSID_KSMETHODSETID_BdaWmdrmSession_Value;

pub const KSMETHOD_BDA_WMDRM = enum(i32) {
    STATUS = 0,
    REVINFO = 1,
    CRL = 2,
    MESSAGE = 3,
    REISSUELICENSE = 4,
    RENEWLICENSE = 5,
    LICENSE = 6,
    KEYINFO = 7,
};
pub const KSMETHOD_BDA_WMDRM_STATUS = KSMETHOD_BDA_WMDRM.STATUS;
pub const KSMETHOD_BDA_WMDRM_REVINFO = KSMETHOD_BDA_WMDRM.REVINFO;
pub const KSMETHOD_BDA_WMDRM_CRL = KSMETHOD_BDA_WMDRM.CRL;
pub const KSMETHOD_BDA_WMDRM_MESSAGE = KSMETHOD_BDA_WMDRM.MESSAGE;
pub const KSMETHOD_BDA_WMDRM_REISSUELICENSE = KSMETHOD_BDA_WMDRM.REISSUELICENSE;
pub const KSMETHOD_BDA_WMDRM_RENEWLICENSE = KSMETHOD_BDA_WMDRM.RENEWLICENSE;
pub const KSMETHOD_BDA_WMDRM_LICENSE = KSMETHOD_BDA_WMDRM.LICENSE;
pub const KSMETHOD_BDA_WMDRM_KEYINFO = KSMETHOD_BDA_WMDRM.KEYINFO;

const CLSID_KSMETHODSETID_BdaWmdrmTuner_Value = Guid.initString("86d979cf-a8a7-4f94-b5fb-14c0aca68fe6");
pub const CLSID_KSMETHODSETID_BdaWmdrmTuner = &CLSID_KSMETHODSETID_BdaWmdrmTuner_Value;

pub const KSMETHOD_BDA_WMDRM_TUNER = enum(i32) {
    CANCELCAPTURETOKEN = 0,
    SETPIDPROTECTION = 1,
    GETPIDPROTECTION = 2,
    SETSYNCVALUE = 3,
    STARTCODEPROFILE = 4,
    PURCHASE_ENTITLEMENT = 5,
};
pub const KSMETHOD_BDA_WMDRMTUNER_CANCELCAPTURETOKEN = KSMETHOD_BDA_WMDRM_TUNER.CANCELCAPTURETOKEN;
pub const KSMETHOD_BDA_WMDRMTUNER_SETPIDPROTECTION = KSMETHOD_BDA_WMDRM_TUNER.SETPIDPROTECTION;
pub const KSMETHOD_BDA_WMDRMTUNER_GETPIDPROTECTION = KSMETHOD_BDA_WMDRM_TUNER.GETPIDPROTECTION;
pub const KSMETHOD_BDA_WMDRMTUNER_SETSYNCVALUE = KSMETHOD_BDA_WMDRM_TUNER.SETSYNCVALUE;
pub const KSMETHOD_BDA_WMDRMTUNER_STARTCODEPROFILE = KSMETHOD_BDA_WMDRM_TUNER.STARTCODEPROFILE;
pub const KSMETHOD_BDA_WMDRMTUNER_PURCHASE_ENTITLEMENT = KSMETHOD_BDA_WMDRM_TUNER.PURCHASE_ENTITLEMENT;

const CLSID_KSMETHODSETID_BdaEventing_Value = Guid.initString("f99492da-6193-4eb0-8690-6686cbff713e");
pub const CLSID_KSMETHODSETID_BdaEventing = &CLSID_KSMETHODSETID_BdaEventing_Value;

pub const KSMETHOD_BDA_EVENTING_SERVICE = enum(i32) {
    DATA = 0,
    COMPLETE = 1,
};
pub const KSMETHOD_BDA_EVENT_DATA = KSMETHOD_BDA_EVENTING_SERVICE.DATA;
pub const KSMETHOD_BDA_EVENT_COMPLETE = KSMETHOD_BDA_EVENTING_SERVICE.COMPLETE;

const CLSID_KSEVENTSETID_BdaEvent_Value = Guid.initString("ae7e55b2-96d7-4e29-908f-62f95b2a1679");
pub const CLSID_KSEVENTSETID_BdaEvent = &CLSID_KSEVENTSETID_BdaEvent_Value;

pub const KSEVENT_BDA_EVENT_TYPE = enum(i32) {
    T = 0,
};
pub const KSEVENT_BDA_EVENT_PENDINGEVENT = KSEVENT_BDA_EVENT_TYPE.T;

const CLSID_KSMETHODSETID_BdaDebug_Value = Guid.initString("0d4a90ec-c69d-4ee2-8c5a-fb1f63a50da1");
pub const CLSID_KSMETHODSETID_BdaDebug = &CLSID_KSMETHODSETID_BdaDebug_Value;

pub const KSMETHOD_BDA_DEBUG_SERVICE = enum(i32) {
    LEVEL = 0,
    DATA = 1,
};
pub const KSMETHOD_BDA_DEBUG_LEVEL = KSMETHOD_BDA_DEBUG_SERVICE.LEVEL;
pub const KSMETHOD_BDA_DEBUG_DATA = KSMETHOD_BDA_DEBUG_SERVICE.DATA;

const CLSID_KSMETHODSETID_BdaTuner_Value = Guid.initString("b774102f-ac07-478a-8228-2742d961fa7e");
pub const CLSID_KSMETHODSETID_BdaTuner = &CLSID_KSMETHODSETID_BdaTuner_Value;

pub const KSMETHOD_BDA_TUNER_SERVICE = enum(i32) {
    SETTUNER = 0,
    GETTUNERSTATE = 1,
    SIGNALNOISERATIO = 2,
};
pub const KSMETHOD_BDA_TUNER_SETTUNER = KSMETHOD_BDA_TUNER_SERVICE.SETTUNER;
pub const KSMETHOD_BDA_TUNER_GETTUNERSTATE = KSMETHOD_BDA_TUNER_SERVICE.GETTUNERSTATE;
pub const KSMETHOD_BDA_TUNER_SIGNALNOISERATIO = KSMETHOD_BDA_TUNER_SERVICE.SIGNALNOISERATIO;

const CLSID_KSMETHODSETID_BdaNameValueA_Value = Guid.initString("0c24096d-5ff5-47de-a856-062e587e3727");
pub const CLSID_KSMETHODSETID_BdaNameValueA = &CLSID_KSMETHODSETID_BdaNameValueA_Value;

const CLSID_KSMETHODSETID_BdaNameValue_Value = Guid.initString("36e07304-9f0d-4e88-9118-ac0ba317b7f2");
pub const CLSID_KSMETHODSETID_BdaNameValue = &CLSID_KSMETHODSETID_BdaNameValue_Value;

pub const KSMETHOD_BDA_GPNV_SERVICE = enum(i32) {
    GETVALUE = 0,
    SETVALUE = 1,
    NAMEFROMINDEX = 2,
    GETVALUEUPDATENAME = 3,
};
pub const KSMETHOD_BDA_GPNV_GETVALUE = KSMETHOD_BDA_GPNV_SERVICE.GETVALUE;
pub const KSMETHOD_BDA_GPNV_SETVALUE = KSMETHOD_BDA_GPNV_SERVICE.SETVALUE;
pub const KSMETHOD_BDA_GPNV_NAMEFROMINDEX = KSMETHOD_BDA_GPNV_SERVICE.NAMEFROMINDEX;
pub const KSMETHOD_BDA_GPNV_GETVALUEUPDATENAME = KSMETHOD_BDA_GPNV_SERVICE.GETVALUEUPDATENAME;

const CLSID_KSMETHODSETID_BdaMux_Value = Guid.initString("942aafec-4c05-4c74-b8eb-8706c2a4943f");
pub const CLSID_KSMETHODSETID_BdaMux = &CLSID_KSMETHODSETID_BdaMux_Value;

pub const KSMETHOD_BDA_MUX_SERVICE = enum(i32) {
    GETPIDLIST = 0,
    SETPIDLIST = 1,
};
pub const KSMETHOD_BDA_MUX_GETPIDLIST = KSMETHOD_BDA_MUX_SERVICE.GETPIDLIST;
pub const KSMETHOD_BDA_MUX_SETPIDLIST = KSMETHOD_BDA_MUX_SERVICE.SETPIDLIST;

const CLSID_KSMETHODSETID_BdaScanning_Value = Guid.initString("12eb49df-6249-47f3-b190-e21e6e2f8a9c");
pub const CLSID_KSMETHODSETID_BdaScanning = &CLSID_KSMETHODSETID_BdaScanning_Value;

pub const KSMETHOD_BDA_SCAN_SERVICE = enum(i32) {
    _CAPABILTIES = 0,
    NING_STATE = 1,
    _FILTER = 2,
    _START = 3,
    _RESUME = 4,
    _STOP = 5,
};
pub const KSMETHOD_BDA_SCAN_CAPABILTIES = KSMETHOD_BDA_SCAN_SERVICE._CAPABILTIES;
pub const KSMETHOD_BDA_SCANNING_STATE = KSMETHOD_BDA_SCAN_SERVICE.NING_STATE;
pub const KSMETHOD_BDA_SCAN_FILTER = KSMETHOD_BDA_SCAN_SERVICE._FILTER;
pub const KSMETHOD_BDA_SCAN_START = KSMETHOD_BDA_SCAN_SERVICE._START;
pub const KSMETHOD_BDA_SCAN_RESUME = KSMETHOD_BDA_SCAN_SERVICE._RESUME;
pub const KSMETHOD_BDA_SCAN_STOP = KSMETHOD_BDA_SCAN_SERVICE._STOP;

const CLSID_KSMETHODSETID_BdaGuideDataDeliveryService_Value = Guid.initString("8d9d5562-1589-417d-99ce-ac531dda19f9");
pub const CLSID_KSMETHODSETID_BdaGuideDataDeliveryService = &CLSID_KSMETHODSETID_BdaGuideDataDeliveryService_Value;

pub const KSMETHOD_BDA_GDDS_SERVICE = enum(i32) {
    DATATYPE = 0,
    DATA = 1,
    TUNEXMLFROMIDX = 2,
    GETSERVICES = 3,
    SERVICEFROMTUNEXML = 4,
    DATAUPDATE = 5,
};
pub const KSMETHOD_BDA_GDDS_DATATYPE = KSMETHOD_BDA_GDDS_SERVICE.DATATYPE;
pub const KSMETHOD_BDA_GDDS_DATA = KSMETHOD_BDA_GDDS_SERVICE.DATA;
pub const KSMETHOD_BDA_GDDS_TUNEXMLFROMIDX = KSMETHOD_BDA_GDDS_SERVICE.TUNEXMLFROMIDX;
pub const KSMETHOD_BDA_GDDS_GETSERVICES = KSMETHOD_BDA_GDDS_SERVICE.GETSERVICES;
pub const KSMETHOD_BDA_GDDS_SERVICEFROMTUNEXML = KSMETHOD_BDA_GDDS_SERVICE.SERVICEFROMTUNEXML;
pub const KSMETHOD_BDA_GDDS_DATAUPDATE = KSMETHOD_BDA_GDDS_SERVICE.DATAUPDATE;

const CLSID_KSMETHODSETID_BdaConditionalAccessService_Value = Guid.initString("10ced3b4-320b-41bf-9824-1b2e68e71eb9");
pub const CLSID_KSMETHODSETID_BdaConditionalAccessService = &CLSID_KSMETHODSETID_BdaConditionalAccessService_Value;

pub const KSMETHOD_BDA_CAS_SERVICE = enum(i32) {
    CHECKENTITLEMENTTOKEN = 0,
    SETCAPTURETOKEN = 1,
    OPENBROADCASTMMI = 2,
    CLOSEMMIDIALOG = 3,
};
pub const KSMETHOD_BDA_CAS_CHECKENTITLEMENTTOKEN = KSMETHOD_BDA_CAS_SERVICE.CHECKENTITLEMENTTOKEN;
pub const KSMETHOD_BDA_CAS_SETCAPTURETOKEN = KSMETHOD_BDA_CAS_SERVICE.SETCAPTURETOKEN;
pub const KSMETHOD_BDA_CAS_OPENBROADCASTMMI = KSMETHOD_BDA_CAS_SERVICE.OPENBROADCASTMMI;
pub const KSMETHOD_BDA_CAS_CLOSEMMIDIALOG = KSMETHOD_BDA_CAS_SERVICE.CLOSEMMIDIALOG;

const CLSID_KSMETHODSETID_BdaIsdbConditionalAccess_Value = Guid.initString("5e68c627-16c2-4e6c-b1e2-d00170cdaa0f");
pub const CLSID_KSMETHODSETID_BdaIsdbConditionalAccess = &CLSID_KSMETHODSETID_BdaIsdbConditionalAccess_Value;

pub const KSMETHOD_BDA_ISDB_CAS = enum(i32) {
    SETREQUEST = 0,
    RESPONSEDATA = 1,
};
pub const KSMETHOD_BDA_ISDBCAS_SETREQUEST = KSMETHOD_BDA_ISDB_CAS.SETREQUEST;
pub const KSMETHOD_BDA_ISDBCAS_RESPONSEDATA = KSMETHOD_BDA_ISDB_CAS.RESPONSEDATA;

const CLSID_KSMETHODSETID_BdaTSSelector_Value = Guid.initString("1dcfafe9-b45e-41b3-bb2a-561eb129ae98");
pub const CLSID_KSMETHODSETID_BdaTSSelector = &CLSID_KSMETHODSETID_BdaTSSelector_Value;

pub const KSMETHOD_BDA_TS_SELECTOR = enum(i32) {
    SETTSID = 0,
    GETTSINFORMATION = 1,
};
pub const KSMETHOD_BDA_TS_SELECTOR_SETTSID = KSMETHOD_BDA_TS_SELECTOR.SETTSID;
pub const KSMETHOD_BDA_TS_SELECTOR_GETTSINFORMATION = KSMETHOD_BDA_TS_SELECTOR.GETTSINFORMATION;

const CLSID_KSMETHODSETID_BdaUserActivity_Value = Guid.initString("eda5c834-4531-483c-be0a-94e6c96ff396");
pub const CLSID_KSMETHODSETID_BdaUserActivity = &CLSID_KSMETHODSETID_BdaUserActivity_Value;

pub const KSMETHOD_BDA_USERACTIVITY_SERVICE = enum(i32) {
    USEREASON = 0,
    INTERVAL = 1,
    DETECTED = 2,
};
pub const KSMETHOD_BDA_USERACTIVITY_USEREASON = KSMETHOD_BDA_USERACTIVITY_SERVICE.USEREASON;
pub const KSMETHOD_BDA_USERACTIVITY_INTERVAL = KSMETHOD_BDA_USERACTIVITY_SERVICE.INTERVAL;
pub const KSMETHOD_BDA_USERACTIVITY_DETECTED = KSMETHOD_BDA_USERACTIVITY_SERVICE.DETECTED;

const CLSID_KSCATEGORY_BDA_RECEIVER_COMPONENT_Value = Guid.initString("fd0a5af4-b41d-11d2-9c95-00c04f7971e0");
pub const CLSID_KSCATEGORY_BDA_RECEIVER_COMPONENT = &CLSID_KSCATEGORY_BDA_RECEIVER_COMPONENT_Value;

const CLSID_KSCATEGORY_BDA_NETWORK_TUNER_Value = Guid.initString("71985f48-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSCATEGORY_BDA_NETWORK_TUNER = &CLSID_KSCATEGORY_BDA_NETWORK_TUNER_Value;

const CLSID_KSCATEGORY_BDA_NETWORK_EPG_Value = Guid.initString("71985f49-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSCATEGORY_BDA_NETWORK_EPG = &CLSID_KSCATEGORY_BDA_NETWORK_EPG_Value;

const CLSID_KSCATEGORY_BDA_IP_SINK_Value = Guid.initString("71985f4a-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSCATEGORY_BDA_IP_SINK = &CLSID_KSCATEGORY_BDA_IP_SINK_Value;

const CLSID_KSCATEGORY_BDA_NETWORK_PROVIDER_Value = Guid.initString("71985f4b-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSCATEGORY_BDA_NETWORK_PROVIDER = &CLSID_KSCATEGORY_BDA_NETWORK_PROVIDER_Value;

const CLSID_KSCATEGORY_BDA_TRANSPORT_INFORMATION_Value = Guid.initString("a2e3074f-6c3d-11d3-b653-00c04f79498e");
pub const CLSID_KSCATEGORY_BDA_TRANSPORT_INFORMATION = &CLSID_KSCATEGORY_BDA_TRANSPORT_INFORMATION_Value;

const CLSID_KSNODE_BDA_RF_TUNER_Value = Guid.initString("71985f4c-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSNODE_BDA_RF_TUNER = &CLSID_KSNODE_BDA_RF_TUNER_Value;

const CLSID_KSNODE_BDA_ANALOG_DEMODULATOR_Value = Guid.initString("634db199-27dd-46b8-acfb-ecc98e61a2ad");
pub const CLSID_KSNODE_BDA_ANALOG_DEMODULATOR = &CLSID_KSNODE_BDA_ANALOG_DEMODULATOR_Value;

const CLSID_KSNODE_BDA_QAM_DEMODULATOR_Value = Guid.initString("71985f4d-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSNODE_BDA_QAM_DEMODULATOR = &CLSID_KSNODE_BDA_QAM_DEMODULATOR_Value;

const CLSID_KSNODE_BDA_QPSK_DEMODULATOR_Value = Guid.initString("6390c905-27c1-4d67-bdb7-77c50d079300");
pub const CLSID_KSNODE_BDA_QPSK_DEMODULATOR = &CLSID_KSNODE_BDA_QPSK_DEMODULATOR_Value;

const CLSID_KSNODE_BDA_8VSB_DEMODULATOR_Value = Guid.initString("71985f4f-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSNODE_BDA_8VSB_DEMODULATOR = &CLSID_KSNODE_BDA_8VSB_DEMODULATOR_Value;

const CLSID_KSNODE_BDA_COFDM_DEMODULATOR_Value = Guid.initString("2dac6e05-edbe-4b9c-b387-1b6fad7d6495");
pub const CLSID_KSNODE_BDA_COFDM_DEMODULATOR = &CLSID_KSNODE_BDA_COFDM_DEMODULATOR_Value;

const CLSID_KSNODE_BDA_8PSK_DEMODULATOR_Value = Guid.initString("e957a0e7-dd98-4a3c-810b-3525157ab62e");
pub const CLSID_KSNODE_BDA_8PSK_DEMODULATOR = &CLSID_KSNODE_BDA_8PSK_DEMODULATOR_Value;

const CLSID_KSNODE_BDA_ISDB_T_DEMODULATOR_Value = Guid.initString("fcea3ae3-2cb2-464d-8f5d-305c0bb778a2");
pub const CLSID_KSNODE_BDA_ISDB_T_DEMODULATOR = &CLSID_KSNODE_BDA_ISDB_T_DEMODULATOR_Value;

const CLSID_KSNODE_BDA_ISDB_S_DEMODULATOR_Value = Guid.initString("edde230a-9086-432d-b8a5-6670263807e9");
pub const CLSID_KSNODE_BDA_ISDB_S_DEMODULATOR = &CLSID_KSNODE_BDA_ISDB_S_DEMODULATOR_Value;

const CLSID_KSNODE_BDA_OPENCABLE_POD_Value = Guid.initString("345812a0-fb7c-4790-aa7e-b1db88ac19c9");
pub const CLSID_KSNODE_BDA_OPENCABLE_POD = &CLSID_KSNODE_BDA_OPENCABLE_POD_Value;

const CLSID_KSNODE_BDA_COMMON_CA_POD_Value = Guid.initString("d83ef8fc-f3b8-45ab-8b71-ecf7c339deb4");
pub const CLSID_KSNODE_BDA_COMMON_CA_POD = &CLSID_KSNODE_BDA_COMMON_CA_POD_Value;

const CLSID_KSNODE_BDA_PID_FILTER_Value = Guid.initString("f5412789-b0a0-44e1-ae4f-ee999b1b7fbe");
pub const CLSID_KSNODE_BDA_PID_FILTER = &CLSID_KSNODE_BDA_PID_FILTER_Value;

const CLSID_KSNODE_BDA_IP_SINK_Value = Guid.initString("71985f4e-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_KSNODE_BDA_IP_SINK = &CLSID_KSNODE_BDA_IP_SINK_Value;

const CLSID_KSNODE_BDA_VIDEO_ENCODER_Value = Guid.initString("d98429e3-65c9-4ac4-93aa-766782833b7a");
pub const CLSID_KSNODE_BDA_VIDEO_ENCODER = &CLSID_KSNODE_BDA_VIDEO_ENCODER_Value;

const CLSID_KSNODE_BDA_PBDA_CAS_Value = Guid.initString("c026869f-7129-4e71-8696-ec8f75299b77");
pub const CLSID_KSNODE_BDA_PBDA_CAS = &CLSID_KSNODE_BDA_PBDA_CAS_Value;

const CLSID_KSNODE_BDA_PBDA_ISDBCAS_Value = Guid.initString("f2cf2ab3-5b9d-40ae-ab7c-4e7ad0bd1c52");
pub const CLSID_KSNODE_BDA_PBDA_ISDBCAS = &CLSID_KSNODE_BDA_PBDA_ISDBCAS_Value;

const CLSID_KSNODE_BDA_PBDA_TUNER_Value = Guid.initString("aa5e8286-593c-4979-9494-46a2a9dfe076");
pub const CLSID_KSNODE_BDA_PBDA_TUNER = &CLSID_KSNODE_BDA_PBDA_TUNER_Value;

const CLSID_KSNODE_BDA_PBDA_MUX_Value = Guid.initString("f88c7787-6678-4f4b-a13e-da09861d682b");
pub const CLSID_KSNODE_BDA_PBDA_MUX = &CLSID_KSNODE_BDA_PBDA_MUX_Value;

const CLSID_KSNODE_BDA_PBDA_DRM_Value = Guid.initString("9eeebd03-eea1-450f-96ae-633e6de63cce");
pub const CLSID_KSNODE_BDA_PBDA_DRM = &CLSID_KSNODE_BDA_PBDA_DRM_Value;

const CLSID_KSNODE_BDA_DRI_DRM_Value = Guid.initString("4f95ad74-cefb-42d2-94a9-68c5b2c1aabe");
pub const CLSID_KSNODE_BDA_DRI_DRM = &CLSID_KSNODE_BDA_DRI_DRM_Value;

const CLSID_KSNODE_BDA_TS_SELECTOR_Value = Guid.initString("5eddf185-fed1-4f45-9685-bbb73c323cfc");
pub const CLSID_KSNODE_BDA_TS_SELECTOR = &CLSID_KSNODE_BDA_TS_SELECTOR_Value;

const CLSID_PINNAME_IPSINK_INPUT_Value = Guid.initString("3fdffa70-ac9a-11d2-8f17-00c04f7971e2");
pub const CLSID_PINNAME_IPSINK_INPUT = &CLSID_PINNAME_IPSINK_INPUT_Value;

const CLSID_KSDATAFORMAT_TYPE_BDA_IP_Value = Guid.initString("e25f7b8e-cccc-11d2-8f25-00c04f7971e2");
pub const CLSID_KSDATAFORMAT_TYPE_BDA_IP = &CLSID_KSDATAFORMAT_TYPE_BDA_IP_Value;

const CLSID_KSDATAFORMAT_SUBTYPE_BDA_IP_Value = Guid.initString("5a9a213c-db08-11d2-8f32-00c04f7971e2");
pub const CLSID_KSDATAFORMAT_SUBTYPE_BDA_IP = &CLSID_KSDATAFORMAT_SUBTYPE_BDA_IP_Value;

const CLSID_KSDATAFORMAT_SPECIFIER_BDA_IP_Value = Guid.initString("6b891420-db09-11d2-8f32-00c04f7971e2");
pub const CLSID_KSDATAFORMAT_SPECIFIER_BDA_IP = &CLSID_KSDATAFORMAT_SPECIFIER_BDA_IP_Value;

const CLSID_KSDATAFORMAT_TYPE_BDA_IP_CONTROL_Value = Guid.initString("dadd5799-7d5b-4b63-80fb-d1442f26b621");
pub const CLSID_KSDATAFORMAT_TYPE_BDA_IP_CONTROL = &CLSID_KSDATAFORMAT_TYPE_BDA_IP_CONTROL_Value;

const CLSID_KSDATAFORMAT_SUBTYPE_BDA_IP_CONTROL_Value = Guid.initString("499856e8-e85b-48ed-9bea-410d0dd4ef81");
pub const CLSID_KSDATAFORMAT_SUBTYPE_BDA_IP_CONTROL = &CLSID_KSDATAFORMAT_SUBTYPE_BDA_IP_CONTROL_Value;

const CLSID_PINNAME_MPE_Value = Guid.initString("c1b06d73-1dbb-11d3-8f46-00c04f7971e2");
pub const CLSID_PINNAME_MPE = &CLSID_PINNAME_MPE_Value;

const CLSID_KSDATAFORMAT_TYPE_MPE_Value = Guid.initString("455f176c-4b06-47ce-9aef-8caef73df7b5");
pub const CLSID_KSDATAFORMAT_TYPE_MPE = &CLSID_KSDATAFORMAT_TYPE_MPE_Value;

const CLSID_DIGITAL_CABLE_NETWORK_TYPE_Value = Guid.initString("143827ab-f77b-498d-81ca-5a007aec28bf");
pub const CLSID_DIGITAL_CABLE_NETWORK_TYPE = &CLSID_DIGITAL_CABLE_NETWORK_TYPE_Value;

const CLSID_ANALOG_TV_NETWORK_TYPE_Value = Guid.initString("b820d87e-e0e3-478f-8a38-4e13f7b3df42");
pub const CLSID_ANALOG_TV_NETWORK_TYPE = &CLSID_ANALOG_TV_NETWORK_TYPE_Value;

const CLSID_ANALOG_AUXIN_NETWORK_TYPE_Value = Guid.initString("742ef867-09e1-40a3-82d3-9669ba35325f");
pub const CLSID_ANALOG_AUXIN_NETWORK_TYPE = &CLSID_ANALOG_AUXIN_NETWORK_TYPE_Value;

const CLSID_ANALOG_FM_NETWORK_TYPE_Value = Guid.initString("7728087b-2bb9-4e30-8078-449476e59dbb");
pub const CLSID_ANALOG_FM_NETWORK_TYPE = &CLSID_ANALOG_FM_NETWORK_TYPE_Value;

const CLSID_ISDB_TERRESTRIAL_TV_NETWORK_TYPE_Value = Guid.initString("95037f6f-3ac7-4452-b6c4-45a9ce9292a2");
pub const CLSID_ISDB_TERRESTRIAL_TV_NETWORK_TYPE = &CLSID_ISDB_TERRESTRIAL_TV_NETWORK_TYPE_Value;

const CLSID_ISDB_T_NETWORK_TYPE_Value = Guid.initString("fc3855a6-c901-4f2e-aba8-90815afc6c83");
pub const CLSID_ISDB_T_NETWORK_TYPE = &CLSID_ISDB_T_NETWORK_TYPE_Value;

const CLSID_ISDB_SATELLITE_TV_NETWORK_TYPE_Value = Guid.initString("b0a4e6a0-6a1a-4b83-bb5b-903e1d90e6b6");
pub const CLSID_ISDB_SATELLITE_TV_NETWORK_TYPE = &CLSID_ISDB_SATELLITE_TV_NETWORK_TYPE_Value;

const CLSID_ISDB_S_NETWORK_TYPE_Value = Guid.initString("a1e78202-1459-41b1-9ca9-2a92587a42cc");
pub const CLSID_ISDB_S_NETWORK_TYPE = &CLSID_ISDB_S_NETWORK_TYPE_Value;

const CLSID_ISDB_CABLE_TV_NETWORK_TYPE_Value = Guid.initString("c974ddb5-41fe-4b25-9741-92f049f1d5d1");
pub const CLSID_ISDB_CABLE_TV_NETWORK_TYPE = &CLSID_ISDB_CABLE_TV_NETWORK_TYPE_Value;

const CLSID_DIRECT_TV_SATELLITE_TV_NETWORK_TYPE_Value = Guid.initString("93b66fb5-93d4-4323-921c-c1f52df61d3f");
pub const CLSID_DIRECT_TV_SATELLITE_TV_NETWORK_TYPE = &CLSID_DIRECT_TV_SATELLITE_TV_NETWORK_TYPE_Value;

const CLSID_ECHOSTAR_SATELLITE_TV_NETWORK_TYPE_Value = Guid.initString("c4f6b31b-c6bf-4759-886f-a7386dca27a0");
pub const CLSID_ECHOSTAR_SATELLITE_TV_NETWORK_TYPE = &CLSID_ECHOSTAR_SATELLITE_TV_NETWORK_TYPE_Value;

const CLSID_ATSC_TERRESTRIAL_TV_NETWORK_TYPE_Value = Guid.initString("0dad2fdd-5fd7-11d3-8f50-00c04f7971e2");
pub const CLSID_ATSC_TERRESTRIAL_TV_NETWORK_TYPE = &CLSID_ATSC_TERRESTRIAL_TV_NETWORK_TYPE_Value;

const CLSID_DVB_TERRESTRIAL_TV_NETWORK_TYPE_Value = Guid.initString("216c62df-6d7f-4e9a-8571-05f14edb766a");
pub const CLSID_DVB_TERRESTRIAL_TV_NETWORK_TYPE = &CLSID_DVB_TERRESTRIAL_TV_NETWORK_TYPE_Value;

const CLSID_BSKYB_TERRESTRIAL_TV_NETWORK_TYPE_Value = Guid.initString("9e9e46c6-3aba-4f08-ad0e-cc5ac8148c2b");
pub const CLSID_BSKYB_TERRESTRIAL_TV_NETWORK_TYPE = &CLSID_BSKYB_TERRESTRIAL_TV_NETWORK_TYPE_Value;

const CLSID_DVB_SATELLITE_TV_NETWORK_TYPE_Value = Guid.initString("fa4b375a-45b4-4d45-8440-263957b11623");
pub const CLSID_DVB_SATELLITE_TV_NETWORK_TYPE = &CLSID_DVB_SATELLITE_TV_NETWORK_TYPE_Value;

const CLSID_DVB_CABLE_TV_NETWORK_TYPE_Value = Guid.initString("dc0c0fe7-0485-4266-b93f-68fbf80ed834");
pub const CLSID_DVB_CABLE_TV_NETWORK_TYPE = &CLSID_DVB_CABLE_TV_NETWORK_TYPE_Value;

const CLSID_BDA_DEBUG_DATA_AVAILABLE_Value = Guid.initString("69c24f54-9983-497e-b415-282be4c555fb");
pub const CLSID_BDA_DEBUG_DATA_AVAILABLE = &CLSID_BDA_DEBUG_DATA_AVAILABLE_Value;

const CLSID_BDA_DEBUG_DATA_TYPE_STRING_Value = Guid.initString("a806e767-de5c-430c-80bf-a21ebe06c748");
pub const CLSID_BDA_DEBUG_DATA_TYPE_STRING = &CLSID_BDA_DEBUG_DATA_TYPE_STRING_Value;

const CLSID_EVENTID_BDA_IsdbCASResponse_Value = Guid.initString("d4cb1966-41bc-4ced-9a20-fdceac78f70d");
pub const CLSID_EVENTID_BDA_IsdbCASResponse = &CLSID_EVENTID_BDA_IsdbCASResponse_Value;

const CLSID_EVENTID_BDA_CASRequestTuner_Value = Guid.initString("cf39a9d8-f5d3-4685-be57-ed81dba46b27");
pub const CLSID_EVENTID_BDA_CASRequestTuner = &CLSID_EVENTID_BDA_CASRequestTuner_Value;

const CLSID_EVENTID_BDA_CASReleaseTuner_Value = Guid.initString("20c1a16b-441f-49a5-bb5c-e9a04495c6c1");
pub const CLSID_EVENTID_BDA_CASReleaseTuner = &CLSID_EVENTID_BDA_CASReleaseTuner_Value;

const CLSID_EVENTID_BDA_CASOpenMMI_Value = Guid.initString("85dac915-e593-410d-8471-d6812105f28e");
pub const CLSID_EVENTID_BDA_CASOpenMMI = &CLSID_EVENTID_BDA_CASOpenMMI_Value;

const CLSID_EVENTID_BDA_CASCloseMMI_Value = Guid.initString("5d0f550f-de2e-479d-8345-ec0e9557e8a2");
pub const CLSID_EVENTID_BDA_CASCloseMMI = &CLSID_EVENTID_BDA_CASCloseMMI_Value;

const CLSID_EVENTID_BDA_CASBroadcastMMI_Value = Guid.initString("676876f0-1132-404c-a7ca-e72069a9d54f");
pub const CLSID_EVENTID_BDA_CASBroadcastMMI = &CLSID_EVENTID_BDA_CASBroadcastMMI_Value;

const CLSID_EVENTID_BDA_TunerSignalLock_Value = Guid.initString("1872e740-f573-429b-a00e-d9c1e408af09");
pub const CLSID_EVENTID_BDA_TunerSignalLock = &CLSID_EVENTID_BDA_TunerSignalLock_Value;

const CLSID_EVENTID_BDA_TunerNoSignal_Value = Guid.initString("e29b382b-1edd-4930-bc46-682fd72d2dfb");
pub const CLSID_EVENTID_BDA_TunerNoSignal = &CLSID_EVENTID_BDA_TunerNoSignal_Value;

const CLSID_EVENTID_BDA_GPNVValueUpdate_Value = Guid.initString("ff75c68c-f416-4e7e-bf17-6d55c5df1575");
pub const CLSID_EVENTID_BDA_GPNVValueUpdate = &CLSID_EVENTID_BDA_GPNVValueUpdate_Value;

const CLSID_EVENTID_BDA_UpdateDrmStatus_Value = Guid.initString("65a6f681-1462-473b-88ce-cb731427bdb5");
pub const CLSID_EVENTID_BDA_UpdateDrmStatus = &CLSID_EVENTID_BDA_UpdateDrmStatus_Value;

const CLSID_EVENTID_BDA_UpdateScanState_Value = Guid.initString("55702b50-7b49-42b8-a82f-4afb691b0628");
pub const CLSID_EVENTID_BDA_UpdateScanState = &CLSID_EVENTID_BDA_UpdateScanState_Value;

const CLSID_EVENTID_BDA_GuideDataAvailable_Value = Guid.initString("98db717a-478a-4cd4-92d0-95f66b89e5b1");
pub const CLSID_EVENTID_BDA_GuideDataAvailable = &CLSID_EVENTID_BDA_GuideDataAvailable_Value;

const CLSID_EVENTID_BDA_GuideServiceInformationUpdated_Value = Guid.initString("a1c3ea2b-175f-4458-b735-507d22db23a6");
pub const CLSID_EVENTID_BDA_GuideServiceInformationUpdated = &CLSID_EVENTID_BDA_GuideServiceInformationUpdated_Value;

const CLSID_EVENTID_BDA_GuideDataError_Value = Guid.initString("ac33c448-6f73-4fd7-b341-594c360d8d74");
pub const CLSID_EVENTID_BDA_GuideDataError = &CLSID_EVENTID_BDA_GuideDataError_Value;

const CLSID_EVENTID_BDA_DiseqCResponseAvailable_Value = Guid.initString("efa628f8-1f2c-4b67-9ea5-acf6fa9a1f36");
pub const CLSID_EVENTID_BDA_DiseqCResponseAvailable = &CLSID_EVENTID_BDA_DiseqCResponseAvailable_Value;

const CLSID_EVENTID_BDA_LbigsOpenConnection_Value = Guid.initString("356207b2-6f31-4eb0-a271-b3fa6bb7680f");
pub const CLSID_EVENTID_BDA_LbigsOpenConnection = &CLSID_EVENTID_BDA_LbigsOpenConnection_Value;

const CLSID_EVENTID_BDA_LbigsSendData_Value = Guid.initString("1123277b-f1c6-4154-8b0d-48e6157059aa");
pub const CLSID_EVENTID_BDA_LbigsSendData = &CLSID_EVENTID_BDA_LbigsSendData_Value;

const CLSID_EVENTID_BDA_LbigsCloseConnectionHandle_Value = Guid.initString("c2f08b99-65ef-4314-9671-e99d4cce0bae");
pub const CLSID_EVENTID_BDA_LbigsCloseConnectionHandle = &CLSID_EVENTID_BDA_LbigsCloseConnectionHandle_Value;

const CLSID_EVENTID_BDA_EncoderSignalLock_Value = Guid.initString("5ec90eb9-39fa-4cfc-b93f-00bb11077f5e");
pub const CLSID_EVENTID_BDA_EncoderSignalLock = &CLSID_EVENTID_BDA_EncoderSignalLock_Value;

const CLSID_EVENTID_BDA_FdcStatus_Value = Guid.initString("05f25366-d0eb-43d2-bc3c-682b863df142");
pub const CLSID_EVENTID_BDA_FdcStatus = &CLSID_EVENTID_BDA_FdcStatus_Value;

const CLSID_EVENTID_BDA_FdcTableSection_Value = Guid.initString("6a0cd757-4ce3-4e5b-9444-7187b87152c5");
pub const CLSID_EVENTID_BDA_FdcTableSection = &CLSID_EVENTID_BDA_FdcTableSection_Value;

const CLSID_EVENTID_BDA_TransprtStreamSelectorInfo_Value = Guid.initString("c40f9f85-09d0-489c-9e9c-0abbb56951b0");
pub const CLSID_EVENTID_BDA_TransprtStreamSelectorInfo = &CLSID_EVENTID_BDA_TransprtStreamSelectorInfo_Value;

const CLSID_EVENTID_BDA_RatingPinReset_Value = Guid.initString("c6e048c0-c574-4c26-bcda-2f4d35eb5e85");
pub const CLSID_EVENTID_BDA_RatingPinReset = &CLSID_EVENTID_BDA_RatingPinReset_Value;

const CLSID_PBDA_ALWAYS_TUNE_IN_MUX_Value = Guid.initString("1e1d7141-583f-4ac2-b019-1f430eda0f4c");
pub const CLSID_PBDA_ALWAYS_TUNE_IN_MUX = &CLSID_PBDA_ALWAYS_TUNE_IN_MUX_Value;

pub const PID_BITS = extern struct {
    _bitfield: u16 align(1),
};

pub const MPEG_HEADER_BITS = extern struct {
    _bitfield: u16 align(1),
};

pub const MPEG_HEADER_VERSION_BITS = extern struct {
    _bitfield: u8,
};

const CLSID_BDANETWORKTYPE_ATSC_Value = Guid.initString("71985f51-1ca1-11d3-9cc8-00c04f7971e0");
pub const CLSID_BDANETWORKTYPE_ATSC = &CLSID_BDANETWORKTYPE_ATSC_Value;

pub const MPEG1WAVEFORMAT = extern struct {
    wfx: WAVEFORMATEX align(1),
    fwHeadLayer: u16 align(1),
    dwHeadBitrate: u32 align(1),
    fwHeadMode: u16 align(1),
    fwHeadModeExt: u16 align(1),
    wHeadEmphasis: u16 align(1),
    fwHeadFlags: u16 align(1),
    dwPTSLow: u32 align(1),
    dwPTSHigh: u32 align(1),
};

pub const MPEGLAYER3WAVEFORMAT = extern struct {
    wfx: WAVEFORMATEX align(1),
    wID: u16 align(1),
    fdwFlags: MPEGLAYER3WAVEFORMAT_FLAGS align(1),
    nBlockSize: u16 align(1),
    nFramesPerBlock: u16 align(1),
    nCodecDelay: u16 align(1),
};

pub const HEAACWAVEINFO = extern struct {
    wfx: WAVEFORMATEX align(1),
    wPayloadType: u16 align(1),
    wAudioProfileLevelIndication: u16 align(1),
    wStructType: u16 align(1),
    wReserved1: u16 align(1),
    dwReserved2: u32 align(1),
};

pub const HEAACWAVEFORMAT = extern struct {
    wfInfo: HEAACWAVEINFO,
    pbAudioSpecificConfig: [1]u8,
};

pub const VIDEOENCODER_BITRATE_MODE = enum(i32) {
    ConstantBitRate = 0,
    VariableBitRateAverage = 1,
    VariableBitRatePeak = 2,
};
pub const ConstantBitRate = VIDEOENCODER_BITRATE_MODE.ConstantBitRate;
pub const VariableBitRateAverage = VIDEOENCODER_BITRATE_MODE.VariableBitRateAverage;
pub const VariableBitRatePeak = VIDEOENCODER_BITRATE_MODE.VariableBitRatePeak;

pub const DXVA_COPPSetProtectionLevelCmdData = extern struct {
    ProtType: u32,
    ProtLevel: u32,
    ExtendedInfoChangeMask: u32,
    ExtendedInfoData: u32,
};

pub const COPP_HDCP_Protection_Level = enum(i32) {
    Level0 = 0,
    // LevelMin = 0, this enum value conflicts with Level0
    Level1 = 1,
    // LevelMax = 1, this enum value conflicts with Level1
    ForceDWORD = 2147483647,
};
pub const COPP_HDCP_Level0 = COPP_HDCP_Protection_Level.Level0;
pub const COPP_HDCP_LevelMin = COPP_HDCP_Protection_Level.Level0;
pub const COPP_HDCP_Level1 = COPP_HDCP_Protection_Level.Level1;
pub const COPP_HDCP_LevelMax = COPP_HDCP_Protection_Level.Level1;
pub const COPP_HDCP_ForceDWORD = COPP_HDCP_Protection_Level.ForceDWORD;

pub const COPP_CGMSA_Protection_Level = enum(i32) {
    Disabled = 0,
    // LevelMin = 0, this enum value conflicts with Disabled
    CopyFreely = 1,
    CopyNoMore = 2,
    CopyOneGeneration = 3,
    CopyNever = 4,
    RedistributionControlRequired = 8,
    LevelMax = 12,
    ForceDWORD = 2147483647,
};
pub const COPP_CGMSA_Disabled = COPP_CGMSA_Protection_Level.Disabled;
pub const COPP_CGMSA_LevelMin = COPP_CGMSA_Protection_Level.Disabled;
pub const COPP_CGMSA_CopyFreely = COPP_CGMSA_Protection_Level.CopyFreely;
pub const COPP_CGMSA_CopyNoMore = COPP_CGMSA_Protection_Level.CopyNoMore;
pub const COPP_CGMSA_CopyOneGeneration = COPP_CGMSA_Protection_Level.CopyOneGeneration;
pub const COPP_CGMSA_CopyNever = COPP_CGMSA_Protection_Level.CopyNever;
pub const COPP_CGMSA_RedistributionControlRequired = COPP_CGMSA_Protection_Level.RedistributionControlRequired;
pub const COPP_CGMSA_LevelMax = COPP_CGMSA_Protection_Level.LevelMax;
pub const COPP_CGMSA_ForceDWORD = COPP_CGMSA_Protection_Level.ForceDWORD;

pub const COPP_ACP_Protection_Level = enum(i32) {
    Level0 = 0,
    // LevelMin = 0, this enum value conflicts with Level0
    Level1 = 1,
    Level2 = 2,
    Level3 = 3,
    // LevelMax = 3, this enum value conflicts with Level3
    ForceDWORD = 2147483647,
};
pub const COPP_ACP_Level0 = COPP_ACP_Protection_Level.Level0;
pub const COPP_ACP_LevelMin = COPP_ACP_Protection_Level.Level0;
pub const COPP_ACP_Level1 = COPP_ACP_Protection_Level.Level1;
pub const COPP_ACP_Level2 = COPP_ACP_Protection_Level.Level2;
pub const COPP_ACP_Level3 = COPP_ACP_Protection_Level.Level3;
pub const COPP_ACP_LevelMax = COPP_ACP_Protection_Level.Level3;
pub const COPP_ACP_ForceDWORD = COPP_ACP_Protection_Level.ForceDWORD;

pub const DXVA_COPPSetSignalingCmdData = extern struct {
    ActiveTVProtectionStandard: u32,
    AspectRatioChangeMask1: u32,
    AspectRatioData1: u32,
    AspectRatioChangeMask2: u32,
    AspectRatioData2: u32,
    AspectRatioChangeMask3: u32,
    AspectRatioData3: u32,
    ExtendedInfoChangeMask: [4]u32,
    ExtendedInfoData: [4]u32,
    Reserved: u32,
};

pub const COPP_TVProtectionStandard = enum(i32) {
    Unknown = -2147483648,
    None = 0,
    IEC61880_525i = 1,
    IEC61880_2_525i = 2,
    IEC62375_625p = 4,
    EIA608B_525 = 8,
    EN300294_625i = 16,
    CEA805A_TypeA_525p = 32,
    CEA805A_TypeA_750p = 64,
    CEA805A_TypeA_1125i = 128,
    CEA805A_TypeB_525p = 256,
    CEA805A_TypeB_750p = 512,
    CEA805A_TypeB_1125i = 1024,
    ARIBTRB15_525i = 2048,
    ARIBTRB15_525p = 4096,
    ARIBTRB15_750p = 8192,
    ARIBTRB15_1125i = 16384,
    Mask = -2147450881,
    Reserved = 2147450880,
};
pub const COPP_ProtectionStandard_Unknown = COPP_TVProtectionStandard.Unknown;
pub const COPP_ProtectionStandard_None = COPP_TVProtectionStandard.None;
pub const COPP_ProtectionStandard_IEC61880_525i = COPP_TVProtectionStandard.IEC61880_525i;
pub const COPP_ProtectionStandard_IEC61880_2_525i = COPP_TVProtectionStandard.IEC61880_2_525i;
pub const COPP_ProtectionStandard_IEC62375_625p = COPP_TVProtectionStandard.IEC62375_625p;
pub const COPP_ProtectionStandard_EIA608B_525 = COPP_TVProtectionStandard.EIA608B_525;
pub const COPP_ProtectionStandard_EN300294_625i = COPP_TVProtectionStandard.EN300294_625i;
pub const COPP_ProtectionStandard_CEA805A_TypeA_525p = COPP_TVProtectionStandard.CEA805A_TypeA_525p;
pub const COPP_ProtectionStandard_CEA805A_TypeA_750p = COPP_TVProtectionStandard.CEA805A_TypeA_750p;
pub const COPP_ProtectionStandard_CEA805A_TypeA_1125i = COPP_TVProtectionStandard.CEA805A_TypeA_1125i;
pub const COPP_ProtectionStandard_CEA805A_TypeB_525p = COPP_TVProtectionStandard.CEA805A_TypeB_525p;
pub const COPP_ProtectionStandard_CEA805A_TypeB_750p = COPP_TVProtectionStandard.CEA805A_TypeB_750p;
pub const COPP_ProtectionStandard_CEA805A_TypeB_1125i = COPP_TVProtectionStandard.CEA805A_TypeB_1125i;
pub const COPP_ProtectionStandard_ARIBTRB15_525i = COPP_TVProtectionStandard.ARIBTRB15_525i;
pub const COPP_ProtectionStandard_ARIBTRB15_525p = COPP_TVProtectionStandard.ARIBTRB15_525p;
pub const COPP_ProtectionStandard_ARIBTRB15_750p = COPP_TVProtectionStandard.ARIBTRB15_750p;
pub const COPP_ProtectionStandard_ARIBTRB15_1125i = COPP_TVProtectionStandard.ARIBTRB15_1125i;
pub const COPP_ProtectionStandard_Mask = COPP_TVProtectionStandard.Mask;
pub const COPP_ProtectionStandard_Reserved = COPP_TVProtectionStandard.Reserved;

pub const COPP_ImageAspectRatio_EN300294 = enum(i32) {
    EN300294_FullFormat4by3 = 0,
    EN300294_Box14by9Center = 1,
    EN300294_Box14by9Top = 2,
    EN300294_Box16by9Center = 3,
    EN300294_Box16by9Top = 4,
    EN300294_BoxGT16by9Center = 5,
    EN300294_FullFormat4by3ProtectedCenter = 6,
    EN300294_FullFormat16by9Anamorphic = 7,
    ForceDWORD = 2147483647,
};
pub const COPP_AspectRatio_EN300294_FullFormat4by3 = COPP_ImageAspectRatio_EN300294.EN300294_FullFormat4by3;
pub const COPP_AspectRatio_EN300294_Box14by9Center = COPP_ImageAspectRatio_EN300294.EN300294_Box14by9Center;
pub const COPP_AspectRatio_EN300294_Box14by9Top = COPP_ImageAspectRatio_EN300294.EN300294_Box14by9Top;
pub const COPP_AspectRatio_EN300294_Box16by9Center = COPP_ImageAspectRatio_EN300294.EN300294_Box16by9Center;
pub const COPP_AspectRatio_EN300294_Box16by9Top = COPP_ImageAspectRatio_EN300294.EN300294_Box16by9Top;
pub const COPP_AspectRatio_EN300294_BoxGT16by9Center = COPP_ImageAspectRatio_EN300294.EN300294_BoxGT16by9Center;
pub const COPP_AspectRatio_EN300294_FullFormat4by3ProtectedCenter = COPP_ImageAspectRatio_EN300294.EN300294_FullFormat4by3ProtectedCenter;
pub const COPP_AspectRatio_EN300294_FullFormat16by9Anamorphic = COPP_ImageAspectRatio_EN300294.EN300294_FullFormat16by9Anamorphic;
pub const COPP_AspectRatio_ForceDWORD = COPP_ImageAspectRatio_EN300294.ForceDWORD;

pub const COPP_StatusFlags = enum(i32) {
    StatusNormal = 0,
    LinkLost = 1,
    RenegotiationRequired = 2,
    StatusFlagsReserved = -4,
};
pub const COPP_StatusNormal = COPP_StatusFlags.StatusNormal;
pub const COPP_LinkLost = COPP_StatusFlags.LinkLost;
pub const COPP_RenegotiationRequired = COPP_StatusFlags.RenegotiationRequired;
pub const COPP_StatusFlagsReserved = COPP_StatusFlags.StatusFlagsReserved;

pub const DXVA_COPPStatusData = extern struct {
    rApp: Guid,
    dwFlags: u32,
    dwData: u32,
    ExtendedInfoValidMask: u32,
    ExtendedInfoData: u32,
};

pub const DXVA_COPPStatusDisplayData = extern struct {
    rApp: Guid,
    dwFlags: u32,
    DisplayWidth: u32,
    DisplayHeight: u32,
    Format: u32,
    d3dFormat: u32,
    FreqNumerator: u32,
    FreqDenominator: u32,
};

pub const COPP_StatusHDCPFlags = enum(i32) {
    Repeater = 1,
    FlagsReserved = -2,
};
pub const COPP_HDCPRepeater = COPP_StatusHDCPFlags.Repeater;
pub const COPP_HDCPFlagsReserved = COPP_StatusHDCPFlags.FlagsReserved;

pub const DXVA_COPPStatusHDCPKeyData = extern struct {
    rApp: Guid,
    dwFlags: u32,
    dwHDCPFlags: u32,
    BKey: Guid,
    Reserved1: Guid,
    Reserved2: Guid,
};

pub const COPP_ConnectorType = enum(i32) {
    Unknown = -1,
    VGA = 0,
    SVideo = 1,
    CompositeVideo = 2,
    ComponentVideo = 3,
    DVI = 4,
    HDMI = 5,
    LVDS = 6,
    TMDS = 7,
    D_JPN = 8,
    Internal = -2147483648,
    ForceDWORD = 2147483647,
};
pub const COPP_ConnectorType_Unknown = COPP_ConnectorType.Unknown;
pub const COPP_ConnectorType_VGA = COPP_ConnectorType.VGA;
pub const COPP_ConnectorType_SVideo = COPP_ConnectorType.SVideo;
pub const COPP_ConnectorType_CompositeVideo = COPP_ConnectorType.CompositeVideo;
pub const COPP_ConnectorType_ComponentVideo = COPP_ConnectorType.ComponentVideo;
pub const COPP_ConnectorType_DVI = COPP_ConnectorType.DVI;
pub const COPP_ConnectorType_HDMI = COPP_ConnectorType.HDMI;
pub const COPP_ConnectorType_LVDS = COPP_ConnectorType.LVDS;
pub const COPP_ConnectorType_TMDS = COPP_ConnectorType.TMDS;
pub const COPP_ConnectorType_D_JPN = COPP_ConnectorType.D_JPN;
pub const COPP_ConnectorType_Internal = COPP_ConnectorType.Internal;
pub const COPP_ConnectorType_ForceDWORD = COPP_ConnectorType.ForceDWORD;

pub const COPP_BusType = enum(i32) {
    Unknown = 0,
    PCI = 1,
    PCIX = 2,
    PCIExpress = 3,
    AGP = 4,
    Integrated = -2147483648,
    ForceDWORD = 2147483647,
};
pub const COPP_BusType_Unknown = COPP_BusType.Unknown;
pub const COPP_BusType_PCI = COPP_BusType.PCI;
pub const COPP_BusType_PCIX = COPP_BusType.PCIX;
pub const COPP_BusType_PCIExpress = COPP_BusType.PCIExpress;
pub const COPP_BusType_AGP = COPP_BusType.AGP;
pub const COPP_BusType_Integrated = COPP_BusType.Integrated;
pub const COPP_BusType_ForceDWORD = COPP_BusType.ForceDWORD;

pub const DXVA_COPPStatusSignalingCmdData = extern struct {
    rApp: Guid,
    dwFlags: u32,
    AvailableTVProtectionStandards: u32,
    ActiveTVProtectionStandard: u32,
    TVType: u32,
    AspectRatioValidMask1: u32,
    AspectRatioData1: u32,
    AspectRatioValidMask2: u32,
    AspectRatioData2: u32,
    AspectRatioValidMask3: u32,
    AspectRatioData3: u32,
    ExtendedInfoValidMask: [4]u32,
    ExtendedInfoData: [4]u32,
};

//--------------------------------------------------------------------------------
// Section: Functions (2)
//--------------------------------------------------------------------------------
pub extern "quartz" fn AMGetErrorTextA(
    hr: HRESULT,
    pbuffer: [*:0]u8,
    MaxLen: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "quartz" fn AMGetErrorTextW(
    hr: HRESULT,
    pbuffer: [*:0]u16,
    MaxLen: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

//--------------------------------------------------------------------------------
// Section: Unicode Aliases (2)
//--------------------------------------------------------------------------------
const thismodule = @This();
pub usingnamespace switch (@import("../zig.zig").unicode_mode) {
    .ansi => struct {
        pub const AMGETERRORTEXTPROC = thismodule.AMGETERRORTEXTPROCA;
        pub const AMGetErrorText = thismodule.AMGetErrorTextA;
    },
    .wide => struct {
        pub const AMGETERRORTEXTPROC = thismodule.AMGETERRORTEXTPROCW;
        pub const AMGetErrorText = thismodule.AMGetErrorTextW;
    },
    .unspecified => if (@import("builtin").is_test) struct {
        pub const AMGETERRORTEXTPROC = *opaque {};
        pub const AMGetErrorText = *opaque {};
    } else struct {
        pub const AMGETERRORTEXTPROC = @compileError("'AMGETERRORTEXTPROC' requires that UNICODE be set to true or false in the root module");
        pub const AMGetErrorText = @compileError("'AMGetErrorText' requires that UNICODE be set to true or false in the root module");
    },
};
//--------------------------------------------------------------------------------
// Section: Imports (79)
//--------------------------------------------------------------------------------
const Guid = @import("../zig.zig").Guid;
const BITMAPINFO = @import("../graphics/gdi.zig").BITMAPINFO;
const BITMAPINFOHEADER = @import("../graphics/gdi.zig").BITMAPINFOHEADER;
const BOOL = @import("../foundation.zig").BOOL;
const BOOLEAN = @import("../foundation.zig").BOOLEAN;
const BSTR = @import("../foundation.zig").BSTR;
const CAUUID = @import("../system/ole.zig").CAUUID;
const CHAR = @import("../foundation.zig").CHAR;
const D3DFORMAT = @import("../graphics/direct3d9.zig").D3DFORMAT;
const D3DPOOL = @import("../graphics/direct3d9.zig").D3DPOOL;
const DDCAPS_DX7 = @import("../graphics/direct_draw.zig").DDCAPS_DX7;
const DDCOLORCONTROL = @import("../graphics/direct_draw.zig").DDCOLORCONTROL;
const DDCOLORKEY = @import("../graphics/direct_draw.zig").DDCOLORKEY;
const DDPIXELFORMAT = @import("../graphics/direct_draw.zig").DDPIXELFORMAT;
const DDSCAPS2 = @import("../graphics/direct_draw.zig").DDSCAPS2;
const DDSURFACEDESC = @import("../graphics/direct_draw.zig").DDSURFACEDESC;
const DDVIDEOPORTCONNECT = @import("../graphics/direct_draw.zig").DDVIDEOPORTCONNECT;
const DXVA2_AYUVSample16 = @import("../media/media_foundation.zig").DXVA2_AYUVSample16;
const DXVA2_AYUVSample8 = @import("../media/media_foundation.zig").DXVA2_AYUVSample8;
const DXVA2_ExtendedFormat = @import("../media/media_foundation.zig").DXVA2_ExtendedFormat;
const DXVA2_FilterValues = @import("../media/media_foundation.zig").DXVA2_FilterValues;
const DXVA2_Fixed32 = @import("../media/media_foundation.zig").DXVA2_Fixed32;
const DXVA2_ProcAmpValues = @import("../media/media_foundation.zig").DXVA2_ProcAmpValues;
const DXVA2_ValueRange = @import("../media/media_foundation.zig").DXVA2_ValueRange;
const DXVA2_VideoDesc = @import("../media/media_foundation.zig").DXVA2_VideoDesc;
const DXVA2_VideoProcessorCaps = @import("../media/media_foundation.zig").DXVA2_VideoProcessorCaps;
const EVENT_TRACE_HEADER = @import("../system/diagnostics/etw.zig").EVENT_TRACE_HEADER;
const HACCEL = @import("../ui/windows_and_messaging.zig").HACCEL;
const HANDLE = @import("../foundation.zig").HANDLE;
const HDC = @import("../graphics/gdi.zig").HDC;
const HKEY = @import("../system/registry.zig").HKEY;
const HMONITOR = @import("../graphics/gdi.zig").HMONITOR;
const HRESULT = @import("../foundation.zig").HRESULT;
const HWND = @import("../foundation.zig").HWND;
const IBindCtx = @import("../system/com.zig").IBindCtx;
const IDirect3DDevice9 = @import("../graphics/direct3d9.zig").IDirect3DDevice9;
const IDirect3DSurface9 = @import("../graphics/direct3d9.zig").IDirect3DSurface9;
const IDirectDraw = @import("../graphics/direct_draw.zig").IDirectDraw;
const IDirectDraw7 = @import("../graphics/direct_draw.zig").IDirectDraw7;
const IDirectDrawPalette = @import("../graphics/direct_draw.zig").IDirectDrawPalette;
const IDirectDrawSurface = @import("../graphics/direct_draw.zig").IDirectDrawSurface;
const IDirectDrawSurface7 = @import("../graphics/direct_draw.zig").IDirectDrawSurface7;
const IDirectSound = @import("../media/audio/direct_sound.zig").IDirectSound;
const IDirectSoundBuffer = @import("../media/audio/direct_sound.zig").IDirectSoundBuffer;
const IDispatch = @import("../system/com.zig").IDispatch;
const IEnumGUID = @import("../system/com.zig").IEnumGUID;
const IEnumMoniker = @import("../system/com.zig").IEnumMoniker;
const IEnumVARIANT = @import("../system/ole.zig").IEnumVARIANT;
const IErrorLog = @import("../system/com.zig").IErrorLog;
const IMFVideoPresenter = @import("../media/media_foundation.zig").IMFVideoPresenter;
const IMoniker = @import("../system/com.zig").IMoniker;
const IPersist = @import("../system/com.zig").IPersist;
const IPictureDisp = @import("../system/ole.zig").IPictureDisp;
const IPropertyBag = @import("../system/com/structured_storage.zig").IPropertyBag;
const IReferenceClock = @import("../media.zig").IReferenceClock;
const IUnknown = @import("../system/com.zig").IUnknown;
const IWMProfile = @import("../media/windows_media_format.zig").IWMProfile;
const KSDATAFORMAT = @import("../media/kernel_streaming.zig").KSDATAFORMAT;
const KSEVENTDATA = @import("../media/kernel_streaming.zig").KSEVENTDATA;
const KSIDENTIFIER = @import("../media/kernel_streaming.zig").KSIDENTIFIER;
const KSM_NODE = @import("../media/kernel_streaming.zig").KSM_NODE;
const KSP_NODE = @import("../media/kernel_streaming.zig").KSP_NODE;
const KSTOPOLOGY_CONNECTION = @import("../media/kernel_streaming.zig").KSTOPOLOGY_CONNECTION;
const LARGE_INTEGER = @import("../foundation.zig").LARGE_INTEGER;
const PALETTEENTRY = @import("../graphics/gdi.zig").PALETTEENTRY;
const PAPCFUNC = @import("../foundation.zig").PAPCFUNC;
const POINT = @import("../foundation.zig").POINT;
const PSID = @import("../foundation.zig").PSID;
const PSTR = @import("../foundation.zig").PSTR;
const PWSTR = @import("../foundation.zig").PWSTR;
const RECT = @import("../foundation.zig").RECT;
const RGBQUAD = @import("../graphics/gdi.zig").RGBQUAD;
const RGNDATA = @import("../graphics/gdi.zig").RGNDATA;
const SAFEARRAY = @import("../system/com.zig").SAFEARRAY;
const SIZE = @import("../foundation.zig").SIZE;
const TIMECODE = @import("../media.zig").TIMECODE;
const TIMECODE_SAMPLE = @import("../media.zig").TIMECODE_SAMPLE;
const VARIANT = @import("../system/com.zig").VARIANT;
const WAVEFORMATEX = @import("../media/audio.zig").WAVEFORMATEX;

test {
    // The following '_ = <FuncPtrType>' lines are a workaround for https://github.com/ziglang/zig/issues/4476
    if (@hasDecl(@This(), "AMGETERRORTEXTPROCA")) {
        _ = AMGETERRORTEXTPROCA;
    }
    if (@hasDecl(@This(), "AMGETERRORTEXTPROCW")) {
        _ = AMGETERRORTEXTPROCW;
    }
    if (@hasDecl(@This(), "PDXVA2SW_GETVIDEOPROCESSORRENDERTARGETCOUNT")) {
        _ = PDXVA2SW_GETVIDEOPROCESSORRENDERTARGETCOUNT;
    }
    if (@hasDecl(@This(), "PDXVA2SW_GETVIDEOPROCESSORRENDERTARGETS")) {
        _ = PDXVA2SW_GETVIDEOPROCESSORRENDERTARGETS;
    }
    if (@hasDecl(@This(), "PDXVA2SW_GETVIDEOPROCESSORCAPS")) {
        _ = PDXVA2SW_GETVIDEOPROCESSORCAPS;
    }
    if (@hasDecl(@This(), "PDXVA2SW_GETVIDEOPROCESSORSUBSTREAMFORMATCOUNT")) {
        _ = PDXVA2SW_GETVIDEOPROCESSORSUBSTREAMFORMATCOUNT;
    }
    if (@hasDecl(@This(), "PDXVA2SW_GETVIDEOPROCESSORSUBSTREAMFORMATS")) {
        _ = PDXVA2SW_GETVIDEOPROCESSORSUBSTREAMFORMATS;
    }
    if (@hasDecl(@This(), "PDXVA2SW_GETPROCAMPRANGE")) {
        _ = PDXVA2SW_GETPROCAMPRANGE;
    }
    if (@hasDecl(@This(), "PDXVA2SW_GETFILTERPROPERTYRANGE")) {
        _ = PDXVA2SW_GETFILTERPROPERTYRANGE;
    }
    if (@hasDecl(@This(), "PDXVA2SW_CREATEVIDEOPROCESSDEVICE")) {
        _ = PDXVA2SW_CREATEVIDEOPROCESSDEVICE;
    }
    if (@hasDecl(@This(), "PDXVA2SW_DESTROYVIDEOPROCESSDEVICE")) {
        _ = PDXVA2SW_DESTROYVIDEOPROCESSDEVICE;
    }
    if (@hasDecl(@This(), "PDXVA2SW_VIDEOPROCESSBEGINFRAME")) {
        _ = PDXVA2SW_VIDEOPROCESSBEGINFRAME;
    }
    if (@hasDecl(@This(), "PDXVA2SW_VIDEOPROCESSENDFRAME")) {
        _ = PDXVA2SW_VIDEOPROCESSENDFRAME;
    }
    if (@hasDecl(@This(), "PDXVA2SW_VIDEOPROCESSSETRENDERTARGET")) {
        _ = PDXVA2SW_VIDEOPROCESSSETRENDERTARGET;
    }
    if (@hasDecl(@This(), "PDXVA2SW_VIDEOPROCESSBLT")) {
        _ = PDXVA2SW_VIDEOPROCESSBLT;
    }

    @setEvalBranchQuota(comptime @import("std").meta.declarations(@This()).len * 3);

    // reference all the pub declarations
    if (!@import("builtin").is_test) return;
    inline for (comptime @import("std").meta.declarations(@This())) |decl| {
        if (decl.is_pub) {
            _ = @field(@This(), decl.name);
        }
    }
}
//--------------------------------------------------------------------------------
// Section: SubModules (1)
//--------------------------------------------------------------------------------
pub const xml = @import("direct_show/xml.zig");
