|
| 1 | +/** |
| 2 | + * @file ccap_dshow_guids.h |
| 3 | + * @author wysaid (this@wysaid.org) |
| 4 | + * @brief DirectShow GUID definitions to avoid strmiids.lib dependency. |
| 5 | + * @date 2025-04 |
| 6 | + * |
| 7 | + * This header defines all DirectShow GUIDs required by ccap locally, |
| 8 | + * eliminating the need to link against strmiids.lib. This is particularly |
| 9 | + * useful for MinGW/cross-compilation scenarios where the library may not |
| 10 | + * be available or causes linking issues with static libraries. |
| 11 | + * |
| 12 | + * GUID values are sourced from Windows SDK headers (uuids.h, strmif.h, etc.) |
| 13 | + * and are verified by unit tests against strmiids.lib on MSVC. |
| 14 | + * |
| 15 | + * Usage: |
| 16 | + * - Include <initguid.h> BEFORE including this header in exactly ONE .cpp file |
| 17 | + * - This ensures GUIDs are defined (not just declared) in that compilation unit |
| 18 | + */ |
| 19 | + |
| 20 | +#pragma once |
| 21 | + |
| 22 | +#ifndef CCAP_DSHOW_GUIDS_H |
| 23 | +#define CCAP_DSHOW_GUIDS_H |
| 24 | + |
| 25 | +#if defined(_WIN32) || defined(_MSC_VER) |
| 26 | + |
| 27 | +#include <guiddef.h> |
| 28 | + |
| 29 | +// clang-format off |
| 30 | + |
| 31 | +// ============================================================================ |
| 32 | +// DirectShow Interface IIDs |
| 33 | +// ============================================================================ |
| 34 | +DEFINE_GUID(CCAP_IID_ICreateDevEnum, 0x29840822, 0x5b84, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86); |
| 35 | +DEFINE_GUID(CCAP_IID_IBaseFilter, 0x56a86895, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 36 | +DEFINE_GUID(CCAP_IID_IGraphBuilder, 0x56a868a9, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 37 | +DEFINE_GUID(CCAP_IID_ICaptureGraphBuilder2,0x93e5a4e0, 0x2d50, 0x11d2, 0xab, 0xfa, 0x00, 0xa0, 0xc9, 0xc6, 0xe3, 0x8d); |
| 38 | +DEFINE_GUID(CCAP_IID_IMediaControl, 0x56a868b1, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 39 | +DEFINE_GUID(CCAP_IID_IMediaFilter, 0x56a86899, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 40 | +DEFINE_GUID(CCAP_IID_IVideoWindow, 0x56a868b4, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 41 | +DEFINE_GUID(CCAP_IID_IAMStreamConfig, 0xc6e13340, 0x30ac, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56); |
| 42 | +DEFINE_GUID(CCAP_IID_IPropertyBag, 0x55272a00, 0x42cb, 0x11ce, 0x81, 0x35, 0x00, 0xaa, 0x00, 0x4b, 0xb8, 0x51); |
| 43 | +DEFINE_GUID(CCAP_IID_ISampleGrabber, 0x6b652fff, 0x11fe, 0x4fce, 0x92, 0xad, 0x02, 0x66, 0xb5, 0xd7, 0xc7, 0x8f); |
| 44 | + |
| 45 | +// ============================================================================ |
| 46 | +// DirectShow CLSIDs |
| 47 | +// ============================================================================ |
| 48 | +DEFINE_GUID(CCAP_CLSID_SystemDeviceEnum, 0x62be5d10, 0x60eb, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86); |
| 49 | +DEFINE_GUID(CCAP_CLSID_VideoInputDeviceCategory,0x860bb310,0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86); |
| 50 | +DEFINE_GUID(CCAP_CLSID_FilterGraph, 0xe436ebb3, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 51 | +DEFINE_GUID(CCAP_CLSID_CaptureGraphBuilder2, 0xbf87b6e1, 0x8c27, 0x11d0, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5); |
| 52 | +DEFINE_GUID(CCAP_CLSID_SampleGrabber, 0xc1f400a0, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37); |
| 53 | +DEFINE_GUID(CCAP_CLSID_NullRenderer, 0xc1f400a4, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37); |
| 54 | + |
| 55 | +// ============================================================================ |
| 56 | +// Media Types and Format Types |
| 57 | +// ============================================================================ |
| 58 | +DEFINE_GUID(CCAP_MEDIATYPE_Video, 0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); |
| 59 | +DEFINE_GUID(CCAP_FORMAT_VideoInfo, 0x05589f80, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a); |
| 60 | +DEFINE_GUID(CCAP_FORMAT_VideoInfo2, 0xf72a76a0, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba); |
| 61 | + |
| 62 | +// ============================================================================ |
| 63 | +// Pin Categories |
| 64 | +// ============================================================================ |
| 65 | +DEFINE_GUID(CCAP_PIN_CATEGORY_CAPTURE, 0xfb6c4281, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba); |
| 66 | +DEFINE_GUID(CCAP_PIN_CATEGORY_PREVIEW, 0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba); |
| 67 | + |
| 68 | +// ============================================================================ |
| 69 | +// Video Subtype GUIDs (MEDIASUBTYPE_*) |
| 70 | +// ============================================================================ |
| 71 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_None, 0xe436eb8e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 72 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_MJPG, 0x47504A4D, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); |
| 73 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_RGB24, 0xe436eb7d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 74 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_RGB32, 0xe436eb7e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 75 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_RGB555,0xe436eb7c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 76 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_RGB565,0xe436eb7b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); |
| 77 | + |
| 78 | +// YUV format GUIDs - FourCC based GUIDs follow the pattern: |
| 79 | +// {FOURCC-0000-0010-8000-00AA00389B71} |
| 80 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_NV12, 0x3231564E, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'NV12' |
| 81 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_I420, 0x30323449, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'I420' |
| 82 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_IYUV, 0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'IYUV' |
| 83 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_YUY2, 0x32595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'YUY2' |
| 84 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_YV12, 0x32315659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'YV12' |
| 85 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_UYVY, 0x59565955, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'UYVY' |
| 86 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_YUYV, 0x56595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'YUYV' |
| 87 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_YVYU, 0x55595659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'YVYU' |
| 88 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_YVU9, 0x39555659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'YVU9' |
| 89 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_Y411, 0x31313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'Y411' |
| 90 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_Y41P, 0x50313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'Y41P' |
| 91 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_CLJR, 0x524A4C43, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'CLJR' |
| 92 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_IF09, 0x39304649, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'IF09' |
| 93 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_CPLA, 0x414C5043, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'CPLA' |
| 94 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_AYUV, 0x56555941, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'AYUV' |
| 95 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_AI44, 0x34344941, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'AI44' |
| 96 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_IA44, 0x34344149, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'IA44' |
| 97 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_IMC1, 0x31434D49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'IMC1' |
| 98 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_IMC2, 0x32434D49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'IMC2' |
| 99 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_IMC3, 0x33434D49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'IMC3' |
| 100 | +DEFINE_GUID(CCAP_MEDIASUBTYPE_IMC4, 0x34434D49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // 'IMC4' |
| 101 | + |
| 102 | +// clang-format on |
| 103 | + |
| 104 | +// ============================================================================ |
| 105 | +// Aliases for compatibility - allows source code to use standard names |
| 106 | +// These are defined as macros to reference the CCAP_ prefixed versions |
| 107 | +// ============================================================================ |
| 108 | +#ifndef CCAP_NO_GUID_ALIASES |
| 109 | + |
| 110 | +#define IID_ICreateDevEnum CCAP_IID_ICreateDevEnum |
| 111 | +#define IID_IBaseFilter CCAP_IID_IBaseFilter |
| 112 | +#define IID_IGraphBuilder CCAP_IID_IGraphBuilder |
| 113 | +#define IID_ICaptureGraphBuilder2 CCAP_IID_ICaptureGraphBuilder2 |
| 114 | +#define IID_IMediaControl CCAP_IID_IMediaControl |
| 115 | +#define IID_IMediaFilter CCAP_IID_IMediaFilter |
| 116 | +#define IID_IVideoWindow CCAP_IID_IVideoWindow |
| 117 | +#define IID_IAMStreamConfig CCAP_IID_IAMStreamConfig |
| 118 | +#define IID_IPropertyBag CCAP_IID_IPropertyBag |
| 119 | +#define IID_ISampleGrabber CCAP_IID_ISampleGrabber |
| 120 | + |
| 121 | +#define CLSID_SystemDeviceEnum CCAP_CLSID_SystemDeviceEnum |
| 122 | +#define CLSID_VideoInputDeviceCategory CCAP_CLSID_VideoInputDeviceCategory |
| 123 | +#define CLSID_FilterGraph CCAP_CLSID_FilterGraph |
| 124 | +#define CLSID_CaptureGraphBuilder2 CCAP_CLSID_CaptureGraphBuilder2 |
| 125 | +#define CLSID_SampleGrabber CCAP_CLSID_SampleGrabber |
| 126 | +#define CLSID_NullRenderer CCAP_CLSID_NullRenderer |
| 127 | + |
| 128 | +#define MEDIATYPE_Video CCAP_MEDIATYPE_Video |
| 129 | +#define FORMAT_VideoInfo CCAP_FORMAT_VideoInfo |
| 130 | +#define FORMAT_VideoInfo2 CCAP_FORMAT_VideoInfo2 |
| 131 | + |
| 132 | +#define PIN_CATEGORY_CAPTURE CCAP_PIN_CATEGORY_CAPTURE |
| 133 | +#define PIN_CATEGORY_PREVIEW CCAP_PIN_CATEGORY_PREVIEW |
| 134 | + |
| 135 | +#define MEDIASUBTYPE_None CCAP_MEDIASUBTYPE_None |
| 136 | +#define MEDIASUBTYPE_MJPG CCAP_MEDIASUBTYPE_MJPG |
| 137 | +#define MEDIASUBTYPE_RGB24 CCAP_MEDIASUBTYPE_RGB24 |
| 138 | +#define MEDIASUBTYPE_RGB32 CCAP_MEDIASUBTYPE_RGB32 |
| 139 | +#define MEDIASUBTYPE_RGB555 CCAP_MEDIASUBTYPE_RGB555 |
| 140 | +#define MEDIASUBTYPE_RGB565 CCAP_MEDIASUBTYPE_RGB565 |
| 141 | +#define MEDIASUBTYPE_NV12 CCAP_MEDIASUBTYPE_NV12 |
| 142 | +#define MEDIASUBTYPE_I420 CCAP_MEDIASUBTYPE_I420 |
| 143 | +#define MEDIASUBTYPE_IYUV CCAP_MEDIASUBTYPE_IYUV |
| 144 | +#define MEDIASUBTYPE_YUY2 CCAP_MEDIASUBTYPE_YUY2 |
| 145 | +#define MEDIASUBTYPE_YV12 CCAP_MEDIASUBTYPE_YV12 |
| 146 | +#define MEDIASUBTYPE_UYVY CCAP_MEDIASUBTYPE_UYVY |
| 147 | +#define MEDIASUBTYPE_YUYV CCAP_MEDIASUBTYPE_YUYV |
| 148 | +#define MEDIASUBTYPE_YVYU CCAP_MEDIASUBTYPE_YVYU |
| 149 | +#define MEDIASUBTYPE_YVU9 CCAP_MEDIASUBTYPE_YVU9 |
| 150 | +#define MEDIASUBTYPE_Y411 CCAP_MEDIASUBTYPE_Y411 |
| 151 | +#define MEDIASUBTYPE_Y41P CCAP_MEDIASUBTYPE_Y41P |
| 152 | +#define MEDIASUBTYPE_CLJR CCAP_MEDIASUBTYPE_CLJR |
| 153 | +#define MEDIASUBTYPE_IF09 CCAP_MEDIASUBTYPE_IF09 |
| 154 | +#define MEDIASUBTYPE_CPLA CCAP_MEDIASUBTYPE_CPLA |
| 155 | +#define MEDIASUBTYPE_AYUV CCAP_MEDIASUBTYPE_AYUV |
| 156 | +#define MEDIASUBTYPE_AI44 CCAP_MEDIASUBTYPE_AI44 |
| 157 | +#define MEDIASUBTYPE_IA44 CCAP_MEDIASUBTYPE_IA44 |
| 158 | +#define MEDIASUBTYPE_IMC1 CCAP_MEDIASUBTYPE_IMC1 |
| 159 | +#define MEDIASUBTYPE_IMC2 CCAP_MEDIASUBTYPE_IMC2 |
| 160 | +#define MEDIASUBTYPE_IMC3 CCAP_MEDIASUBTYPE_IMC3 |
| 161 | +#define MEDIASUBTYPE_IMC4 CCAP_MEDIASUBTYPE_IMC4 |
| 162 | + |
| 163 | +#endif // CCAP_NO_GUID_ALIASES |
| 164 | + |
| 165 | +#endif // _WIN32 || _MSC_VER |
| 166 | + |
| 167 | +#endif // CCAP_DSHOW_GUIDS_H |
0 commit comments