home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / ksmedia.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  188.9 KB  |  4,276 lines

  1. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  2. /*++
  3.  
  4. Copyright (C) Microsoft Corporation, 1996 - 1999
  5.  
  6. Module Name:
  7.  
  8.     ksmedia.h
  9.  
  10. Abstract:
  11.  
  12.     WDM-CSA Multimedia Definitions.
  13.  
  14. --*/
  15.  
  16. #if !defined(_KS_)
  17. #error KS.H must be included before KSMEDIA.H
  18. #endif // !defined(_KS_)
  19.  
  20. #if !defined(_KSMEDIA_)
  21. #define _KSMEDIA_
  22.  
  23. typedef struct {
  24.     KSPROPERTY      Property;
  25.     KSMULTIPLE_ITEM MultipleItem;
  26. } KSMULTIPLE_DATA_PROP, *PKSMULTIPLE_DATA_PROP;
  27.  
  28. #define STATIC_KSMEDIUMSETID_MidiBus \
  29.     0x05908040L, 0x3246, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  30. DEFINE_GUIDSTRUCT("05908040-3246-11D0-A5D6-28DB04C10000", KSMEDIUMSETID_MidiBus);
  31. #define KSMEDIUMSETID_MidiBus DEFINE_GUIDNAMED(KSMEDIUMSETID_MidiBus)
  32.  
  33. #define STATIC_KSMEDIUMSETID_VPBus \
  34.     0xA18C15ECL, 0xCE43, 0x11D0, 0xAB, 0xE7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  35. DEFINE_GUIDSTRUCT("A18C15EC-CE43-11D0-ABE7-00A0C9223196", KSMEDIUMSETID_VPBus);
  36. #define KSMEDIUMSETID_VPBus DEFINE_GUIDNAMED(KSMEDIUMSETID_VPBus)
  37.  
  38. #define STATIC_KSINTERFACESETID_Media \
  39.     0x3A13EB40L, 0x30A7, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  40. DEFINE_GUIDSTRUCT("3A13EB40-30A7-11D0-A5D6-28DB04C10000", KSINTERFACESETID_Media);
  41. #define KSINTERFACESETID_Media DEFINE_GUIDNAMED(KSINTERFACESETID_Media)
  42.  
  43. typedef enum {
  44.     KSINTERFACE_MEDIA_MUSIC,
  45.     KSINTERFACE_MEDIA_WAVE_BUFFERED,
  46.     KSINTERFACE_MEDIA_WAVE_QUEUED
  47. } KSINTERFACE_MEDIA;
  48.  
  49.  
  50. // USB Terminals
  51. #define INIT_USB_TERMINAL(guid, id)\
  52. {\
  53.     (guid)->Data1 = 0xDFF219E0 + (USHORT)(id);\
  54.     (guid)->Data2 = 0xF70F;\
  55.     (guid)->Data3 = 0x11D0;\
  56.     (guid)->Data4[0] = 0xb9;\
  57.     (guid)->Data4[1] = 0x17;\
  58.     (guid)->Data4[2] = 0x00;\
  59.     (guid)->Data4[3] = 0xa0;\
  60.     (guid)->Data4[4] = 0xc9;\
  61.     (guid)->Data4[5] = 0x22;\
  62.     (guid)->Data4[6] = 0x31;\
  63.     (guid)->Data4[7] = 0x96;\
  64. }
  65. #define EXTRACT_USB_TERMINAL(guid)\
  66.     (USHORT)((guid)->Data1 - 0xDFF219E0)
  67. #define DEFINE_USB_TERMINAL_GUID(id)\
  68.     0xDFF219E0+(USHORT)(id), 0xF70F, 0x11D0, 0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  69.  
  70. #define STATIC_KSNODETYPE_MICROPHONE\
  71.     DEFINE_USB_TERMINAL_GUID(0x0201)
  72. DEFINE_GUIDSTRUCT("DFF21BE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MICROPHONE);
  73. #define KSNODETYPE_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE)
  74.  
  75. #define STATIC_KSNODETYPE_DESKTOP_MICROPHONE\
  76.     DEFINE_USB_TERMINAL_GUID(0x0202)
  77. DEFINE_GUIDSTRUCT("DFF21BE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DESKTOP_MICROPHONE);
  78. #define KSNODETYPE_DESKTOP_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_MICROPHONE)
  79.  
  80. #define STATIC_KSNODETYPE_PERSONAL_MICROPHONE\
  81.     DEFINE_USB_TERMINAL_GUID(0x0203)
  82. DEFINE_GUIDSTRUCT("DFF21BE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PERSONAL_MICROPHONE);
  83. #define KSNODETYPE_PERSONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_PERSONAL_MICROPHONE)
  84.  
  85. #define STATIC_KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE\
  86.     DEFINE_USB_TERMINAL_GUID(0x0204)
  87. DEFINE_GUIDSTRUCT("DFF21BE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE);
  88. #define KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE)
  89.  
  90. #define STATIC_KSNODETYPE_MICROPHONE_ARRAY\
  91.     DEFINE_USB_TERMINAL_GUID(0x0205)
  92. DEFINE_GUIDSTRUCT("DFF21BE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MICROPHONE_ARRAY);
  93. #define KSNODETYPE_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE_ARRAY)
  94.  
  95. #define STATIC_KSNODETYPE_PROCESSING_MICROPHONE_ARRAY\
  96.     DEFINE_USB_TERMINAL_GUID(0x0206)
  97. DEFINE_GUIDSTRUCT("DFF21BE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PROCESSING_MICROPHONE_ARRAY);
  98. #define KSNODETYPE_PROCESSING_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_PROCESSING_MICROPHONE_ARRAY)
  99.  
  100. #define STATIC_KSNODETYPE_SPEAKER\
  101.     DEFINE_USB_TERMINAL_GUID(0x0301)
  102. DEFINE_GUIDSTRUCT("DFF21CE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPEAKER);
  103. #define KSNODETYPE_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_SPEAKER)
  104.  
  105. #define STATIC_KSNODETYPE_HEADPHONES\
  106.     DEFINE_USB_TERMINAL_GUID(0x0302)
  107. DEFINE_GUIDSTRUCT("DFF21CE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEADPHONES);
  108. #define KSNODETYPE_HEADPHONES DEFINE_GUIDNAMED(KSNODETYPE_HEADPHONES)
  109.  
  110. #define STATIC_KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO\
  111.     DEFINE_USB_TERMINAL_GUID(0x0303)
  112. DEFINE_GUIDSTRUCT("DFF21CE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO);
  113. #define KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO)
  114.  
  115. #define STATIC_KSNODETYPE_DESKTOP_SPEAKER\
  116.     DEFINE_USB_TERMINAL_GUID(0x0304)
  117. DEFINE_GUIDSTRUCT("DFF21CE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DESKTOP_SPEAKER);
  118. #define KSNODETYPE_DESKTOP_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_SPEAKER)
  119.  
  120. #define STATIC_KSNODETYPE_ROOM_SPEAKER\
  121.     DEFINE_USB_TERMINAL_GUID(0x0305)
  122. DEFINE_GUIDSTRUCT("DFF21CE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ROOM_SPEAKER);
  123. #define KSNODETYPE_ROOM_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_ROOM_SPEAKER)
  124.  
  125. #define STATIC_KSNODETYPE_COMMUNICATION_SPEAKER\
  126.     DEFINE_USB_TERMINAL_GUID(0x0306)
  127. DEFINE_GUIDSTRUCT("DFF21CE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_COMMUNICATION_SPEAKER);
  128. #define KSNODETYPE_COMMUNICATION_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_COMMUNICATION_SPEAKER)
  129.  
  130. #define STATIC_KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER\
  131.     DEFINE_USB_TERMINAL_GUID(0x0307)
  132. DEFINE_GUIDSTRUCT("DFF21CE7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER);
  133. #define KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER)
  134.  
  135. #define STATIC_KSNODETYPE_HANDSET\
  136.     DEFINE_USB_TERMINAL_GUID(0x0401)
  137. DEFINE_GUIDSTRUCT("DFF21DE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HANDSET);
  138. #define KSNODETYPE_HANDSET DEFINE_GUIDNAMED(KSNODETYPE_HANDSET)
  139.  
  140. #define STATIC_KSNODETYPE_HEADSET\
  141.     DEFINE_USB_TERMINAL_GUID(0x0402)
  142. DEFINE_GUIDSTRUCT("DFF21DE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEADSET);
  143. #define KSNODETYPE_HEADSET DEFINE_GUIDNAMED(KSNODETYPE_HEADSET)
  144.  
  145. #define STATIC_KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION\
  146.     DEFINE_USB_TERMINAL_GUID(0x0403)
  147. DEFINE_GUIDSTRUCT("DFF21DE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION);
  148. #define KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION DEFINE_GUIDNAMED(KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION)
  149.  
  150. #define STATIC_KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE\
  151.     DEFINE_USB_TERMINAL_GUID(0x0404)
  152. DEFINE_GUIDSTRUCT("DFF21DE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE);
  153. #define KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE)
  154.  
  155. #define STATIC_KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE\
  156.     DEFINE_USB_TERMINAL_GUID(0x0405)
  157. DEFINE_GUIDSTRUCT("DFF21DE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE);
  158. #define KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE)
  159.  
  160. #define STATIC_KSNODETYPE_PHONE_LINE\
  161.     DEFINE_USB_TERMINAL_GUID(0x0501)
  162. DEFINE_GUIDSTRUCT("DFF21EE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PHONE_LINE);
  163. #define KSNODETYPE_PHONE_LINE DEFINE_GUIDNAMED(KSNODETYPE_PHONE_LINE)
  164.  
  165. #define STATIC_KSNODETYPE_TELEPHONE\
  166.     DEFINE_USB_TERMINAL_GUID(0x0502)
  167. DEFINE_GUIDSTRUCT("DFF21EE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_TELEPHONE);
  168. #define KSNODETYPE_TELEPHONE DEFINE_GUIDNAMED(KSNODETYPE_TELEPHONE)
  169.  
  170. #define STATIC_KSNODETYPE_DOWN_LINE_PHONE\
  171.     DEFINE_USB_TERMINAL_GUID(0x0503)
  172. DEFINE_GUIDSTRUCT("DFF21EE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DOWN_LINE_PHONE);
  173. #define KSNODETYPE_DOWN_LINE_PHONE DEFINE_GUIDNAMED(KSNODETYPE_DOWN_LINE_PHONE)
  174.  
  175. #define STATIC_KSNODETYPE_ANALOG_CONNECTOR\
  176.     DEFINE_USB_TERMINAL_GUID(0x601)
  177. DEFINE_GUIDSTRUCT("DFF21FE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ANALOG_CONNECTOR);
  178. #define KSNODETYPE_ANALOG_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_CONNECTOR)
  179.  
  180. #define STATIC_KSNODETYPE_DIGITAL_AUDIO_INTERFACE\
  181.     DEFINE_USB_TERMINAL_GUID(0x0602)
  182. DEFINE_GUIDSTRUCT("DFF21FE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DIGITAL_AUDIO_INTERFACE);
  183. #define KSNODETYPE_DIGITAL_AUDIO_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_DIGITAL_AUDIO_INTERFACE)
  184.  
  185. #define STATIC_KSNODETYPE_LINE_CONNECTOR\
  186.     DEFINE_USB_TERMINAL_GUID(0x0603)
  187. DEFINE_GUIDSTRUCT("DFF21FE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LINE_CONNECTOR);
  188. #define KSNODETYPE_LINE_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LINE_CONNECTOR)
  189.  
  190. #define STATIC_KSNODETYPE_LEGACY_AUDIO_CONNECTOR\
  191.     DEFINE_USB_TERMINAL_GUID(0x0604)
  192. DEFINE_GUIDSTRUCT("DFF21FE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LEGACY_AUDIO_CONNECTOR);
  193. #define KSNODETYPE_LEGACY_AUDIO_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LEGACY_AUDIO_CONNECTOR)
  194.  
  195. #define STATIC_KSNODETYPE_SPDIF_INTERFACE\
  196.     DEFINE_USB_TERMINAL_GUID(0x0605)
  197. DEFINE_GUIDSTRUCT("DFF21FE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPDIF_INTERFACE);
  198. #define KSNODETYPE_SPDIF_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_SPDIF_INTERFACE)
  199.  
  200. #define STATIC_KSNODETYPE_1394_DA_STREAM\
  201.     DEFINE_USB_TERMINAL_GUID(0x0606)
  202. DEFINE_GUIDSTRUCT("DFF21FE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_1394_DA_STREAM);
  203. #define KSNODETYPE_1394_DA_STREAM DEFINE_GUIDNAMED(KSNODETYPE_1394_DA_STREAM)
  204.  
  205. #define STATIC_KSNODETYPE_1394_DV_STREAM_SOUNDTRACK\
  206.     DEFINE_USB_TERMINAL_GUID(0x0607)
  207. DEFINE_GUIDSTRUCT("DFF21FE7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_1394_DV_STREAM_SOUNDTRACK);
  208. #define KSNODETYPE_1394_DV_STREAM_SOUNDTRACK DEFINE_GUIDNAMED(KSNODETYPE_1394_DV_STREAM_SOUNDTRACK)
  209.  
  210. #define STATIC_KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE\
  211.     DEFINE_USB_TERMINAL_GUID(0x0701)
  212. DEFINE_GUIDSTRUCT("DFF220E1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE);
  213. #define KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE DEFINE_GUIDNAMED(KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE)
  214.  
  215. #define STATIC_KSNODETYPE_EQUALIZATION_NOISE\
  216.     DEFINE_USB_TERMINAL_GUID(0x0702)
  217. DEFINE_GUIDSTRUCT("DFF220E2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_EQUALIZATION_NOISE);
  218. #define KSNODETYPE_EQUALIZATION_NOISE DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZATION_NOISE)
  219.  
  220. #define STATIC_KSNODETYPE_CD_PLAYER\
  221.     DEFINE_USB_TERMINAL_GUID(0x0703)
  222. DEFINE_GUIDSTRUCT("DFF220E3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_CD_PLAYER);
  223. #define KSNODETYPE_CD_PLAYER DEFINE_GUIDNAMED(KSNODETYPE_CD_PLAYER)
  224.  
  225. #define STATIC_KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE\
  226.     DEFINE_USB_TERMINAL_GUID(0x0704)
  227. DEFINE_GUIDSTRUCT("DFF220E4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE);
  228. #define KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE DEFINE_GUIDNAMED(KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE)
  229.  
  230. #define STATIC_KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE\
  231.     DEFINE_USB_TERMINAL_GUID(0x0705)
  232. DEFINE_GUIDSTRUCT("DFF220E5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE);
  233. #define KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE DEFINE_GUIDNAMED(KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE)
  234.  
  235. #define STATIC_KSNODETYPE_MINIDISK\
  236.     DEFINE_USB_TERMINAL_GUID(0x0706)
  237. DEFINE_GUIDSTRUCT("DFF220E6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MINIDISK);
  238. #define KSNODETYPE_MINIDISK DEFINE_GUIDNAMED(KSNODETYPE_MINIDISK)
  239.  
  240. #define STATIC_KSNODETYPE_ANALOG_TAPE\
  241.     DEFINE_USB_TERMINAL_GUID(0x0707)
  242. DEFINE_GUIDSTRUCT("DFF220E7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ANALOG_TAPE);
  243. #define KSNODETYPE_ANALOG_TAPE DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_TAPE)
  244.  
  245. #define STATIC_KSNODETYPE_PHONOGRAPH\
  246.     DEFINE_USB_TERMINAL_GUID(0x0708)
  247. DEFINE_GUIDSTRUCT("DFF220E8-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PHONOGRAPH);
  248. #define KSNODETYPE_PHONOGRAPH DEFINE_GUIDNAMED(KSNODETYPE_PHONOGRAPH)
  249.  
  250. #define STATIC_KSNODETYPE_VCR_AUDIO\
  251.     DEFINE_USB_TERMINAL_GUID(0x0708)
  252. DEFINE_GUIDSTRUCT("DFF220E9-F70F-11D0-B917-00A0C9223196", KSNODETYPE_VCR_AUDIO);
  253. #define KSNODETYPE_VCR_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VCR_AUDIO)
  254.  
  255. #define STATIC_KSNODETYPE_VIDEO_DISC_AUDIO\
  256.     DEFINE_USB_TERMINAL_GUID(0x070A)
  257. DEFINE_GUIDSTRUCT("DFF220EA-F70F-11D0-B917-00A0C9223196", KSNODETYPE_VIDEO_DISC_AUDIO);
  258. #define KSNODETYPE_VIDEO_DISC_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_DISC_AUDIO)
  259.  
  260. #define STATIC_KSNODETYPE_DVD_AUDIO\
  261.     DEFINE_USB_TERMINAL_GUID(0x070B)
  262. DEFINE_GUIDSTRUCT("DFF220EB-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DVD_AUDIO);
  263. #define KSNODETYPE_DVD_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DVD_AUDIO)
  264.  
  265. #define STATIC_KSNODETYPE_TV_TUNER_AUDIO\
  266.     DEFINE_USB_TERMINAL_GUID(0x070C)
  267. DEFINE_GUIDSTRUCT("DFF220EC-F70F-11D0-B917-00A0C9223196", KSNODETYPE_TV_TUNER_AUDIO);
  268. #define KSNODETYPE_TV_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_TV_TUNER_AUDIO)
  269.  
  270. #define STATIC_KSNODETYPE_SATELLITE_RECEIVER_AUDIO\
  271.     DEFINE_USB_TERMINAL_GUID(0x070D)
  272. DEFINE_GUIDSTRUCT("DFF220ED-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SATELLITE_RECEIVER_AUDIO);
  273. #define KSNODETYPE_SATELLITE_RECEIVER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_SATELLITE_RECEIVER_AUDIO)
  274.  
  275. #define STATIC_KSNODETYPE_CABLE_TUNER_AUDIO\
  276.     DEFINE_USB_TERMINAL_GUID(0x070E)
  277. DEFINE_GUIDSTRUCT("DFF220EE-F70F-11D0-B917-00A0C9223196", KSNODETYPE_CABLE_TUNER_AUDIO);
  278. #define KSNODETYPE_CABLE_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_CABLE_TUNER_AUDIO)
  279.  
  280. #define STATIC_KSNODETYPE_DSS_AUDIO\
  281.     DEFINE_USB_TERMINAL_GUID(0x070F)
  282. DEFINE_GUIDSTRUCT("DFF220EF-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DSS_AUDIO);
  283. #define KSNODETYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DSS_AUDIO)
  284.  
  285. #define STATIC_KSNODETYPE_RADIO_RECEIVER\
  286.     DEFINE_USB_TERMINAL_GUID(0x0710)
  287. DEFINE_GUIDSTRUCT("DFF220F0-F70F-11D0-B917-00A0C9223196", KSNODETYPE_RADIO_RECEIVER);
  288. #define KSNODETYPE_RADIO_RECEIVER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_RECEIVER)
  289.  
  290. #define STATIC_KSNODETYPE_RADIO_TRANSMITTER\
  291.     DEFINE_USB_TERMINAL_GUID(0x0711)
  292. DEFINE_GUIDSTRUCT("DFF220F1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_RADIO_TRANSMITTER);
  293. #define KSNODETYPE_RADIO_TRANSMITTER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_TRANSMITTER)
  294.  
  295. #define STATIC_KSNODETYPE_MULTITRACK_RECORDER\
  296.     DEFINE_USB_TERMINAL_GUID(0x0712)
  297. DEFINE_GUIDSTRUCT("DFF220F2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MULTITRACK_RECORDER);
  298. #define KSNODETYPE_MULTITRACK_RECORDER DEFINE_GUIDNAMED(KSNODETYPE_MULTITRACK_RECORDER)
  299.  
  300. #define STATIC_KSNODETYPE_SYNTHESIZER\
  301.     DEFINE_USB_TERMINAL_GUID(0x0713)
  302. DEFINE_GUIDSTRUCT("DFF220F3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SYNTHESIZER);
  303. #define KSNODETYPE_SYNTHESIZER DEFINE_GUIDNAMED(KSNODETYPE_SYNTHESIZER)
  304.  
  305. // Microsoft's WDMAUD virtual swsynth pin name guid
  306.  
  307. #define STATIC_KSNODETYPE_SWSYNTH\
  308.     0x423274A0L, 0x8B81, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  309. DEFINE_GUIDSTRUCT("423274A0-8B81-11D1-A050-0000F8004788", KSNODETYPE_SWSYNTH);
  310. #define KSNODETYPE_SWSYNTH DEFINE_GUIDNAMED(KSNODETYPE_SWSYNTH)
  311.  
  312. // Microsoft's SWMIDI midi pin and node name guid
  313.  
  314. #define STATIC_KSNODETYPE_SWMIDI\
  315.     0xCB9BEFA0L, 0xA251, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  316. DEFINE_GUIDSTRUCT("CB9BEFA0-A251-11D1-A050-0000F8004788", KSNODETYPE_SWMIDI);
  317. #define KSNODETYPE_SWMIDI DEFINE_GUIDNAMED(KSNODETYPE_SWMIDI)
  318.  
  319. // General categories
  320. #define STATIC_KSCATEGORY_AUDIO \
  321.     0x6994AD04L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  322. DEFINE_GUIDSTRUCT("6994AD04-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_AUDIO);
  323. #define KSCATEGORY_AUDIO DEFINE_GUIDNAMED(KSCATEGORY_AUDIO)
  324.  
  325. #define STATIC_KSCATEGORY_VIDEO \
  326.     0x6994AD05L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  327. DEFINE_GUIDSTRUCT("6994AD05-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_VIDEO);
  328. #define KSCATEGORY_VIDEO DEFINE_GUIDNAMED(KSCATEGORY_VIDEO)
  329.  
  330. #define STATIC_KSCATEGORY_TEXT \
  331.     0x6994AD06L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  332. DEFINE_GUIDSTRUCT("6994AD06-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_TEXT);
  333. #define KSCATEGORY_TEXT DEFINE_GUIDNAMED(KSCATEGORY_TEXT)
  334.  
  335. #define STATIC_KSCATEGORY_NETWORK \
  336.     0x67C9CC3CL, 0x69C4, 0x11D2, 0x87, 0x59, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  337. DEFINE_GUIDSTRUCT("67C9CC3C-69C4-11D2-8759-00A0C9223196", KSCATEGORY_NETWORK);
  338. #define KSCATEGORY_NETWORK DEFINE_GUIDNAMED(KSCATEGORY_NETWORK)
  339.  
  340. #define STATIC_KSCATEGORY_TOPOLOGY \
  341.     0xDDA54A40L, 0x1E4C, 0x11D1, 0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00
  342. DEFINE_GUIDSTRUCT("DDA54A40-1E4C-11D1-A050-405705C10000", KSCATEGORY_TOPOLOGY);
  343. #define KSCATEGORY_TOPOLOGY DEFINE_GUIDNAMED(KSCATEGORY_TOPOLOGY)
  344.  
  345. #define STATIC_KSCATEGORY_VIRTUAL \
  346.     0x3503EAC4L, 0x1F26, 0x11D1, 0x8A, 0xB0, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  347. DEFINE_GUIDSTRUCT("3503EAC4-1F26-11D1-8AB0-00A0C9223196", KSCATEGORY_VIRTUAL);
  348. #define KSCATEGORY_VIRTUAL DEFINE_GUIDNAMED(KSCATEGORY_VIRTUAL)
  349.  
  350. #define STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL \
  351.     0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  352. DEFINE_GUIDSTRUCT("BF963D80-C559-11D0-8A2B-00A0C9255AC1", KSCATEGORY_ACOUSTIC_ECHO_CANCEL);
  353. #define KSCATEGORY_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSCATEGORY_ACOUSTIC_ECHO_CANCEL)
  354.  
  355. #define STATIC_KSCATEGORY_SYSAUDIO \
  356.     0xA7C7A5B1L, 0x5AF3, 0x11D1, 0x9C, 0xED, 0x00, 0xA0, 0x24, 0xBF, 0x04, 0x07
  357. DEFINE_GUIDSTRUCT("A7C7A5B1-5AF3-11D1-9CED-00A024BF0407", KSCATEGORY_SYSAUDIO);
  358. #define KSCATEGORY_SYSAUDIO DEFINE_GUIDNAMED(KSCATEGORY_SYSAUDIO)
  359.  
  360. #define STATIC_KSCATEGORY_WDMAUD \
  361.     0x3E227E76L, 0x690D, 0x11D2, 0x81, 0x61, 0x00, 0x00, 0xF8, 0x77, 0x5B, 0xF1
  362. DEFINE_GUIDSTRUCT("3E227E76-690D-11D2-8161-0000F8775BF1", KSCATEGORY_WDMAUD);
  363. #define KSCATEGORY_WDMAUD DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD)
  364.  
  365. #define STATIC_KSCATEGORY_SYNTHESIZER STATIC_KSNODETYPE_SYNTHESIZER
  366. #define KSCATEGORY_SYNTHESIZER KSNODETYPE_SYNTHESIZER
  367.  
  368. #define STATIC_KSCATEGORY_AUDIO_DEVICE \
  369.     0xFBF6F530L, 0x07B9, 0x11D2, 0xA7, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  370. DEFINE_GUIDSTRUCT("FBF6F530-07B9-11D2-A71E-0000F8004788", KSCATEGORY_AUDIO_DEVICE);
  371. #define KSCATEGORY_AUDIO_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_DEVICE)
  372.  
  373. #define STATIC_KSCATEGORY_PREFERRED_WAVEOUT_DEVICE \
  374.     0xD6C5066EL, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  375. DEFINE_GUIDSTRUCT("D6C5066E-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_WAVEOUT_DEVICE);
  376. #define KSCATEGORY_PREFERRED_WAVEOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEOUT_DEVICE)
  377.  
  378. #define STATIC_KSCATEGORY_PREFERRED_WAVEIN_DEVICE \
  379.     0xD6C50671L, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  380. DEFINE_GUIDSTRUCT("D6C50671-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_WAVEIN_DEVICE);
  381. #define KSCATEGORY_PREFERRED_WAVEIN_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEIN_DEVICE)
  382.  
  383. #define STATIC_KSCATEGORY_PREFERRED_MIDIOUT_DEVICE \
  384.     0xD6C50674L, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  385. DEFINE_GUIDSTRUCT("D6C50674-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_MIDIOUT_DEVICE);
  386. #define KSCATEGORY_PREFERRED_MIDIOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_MIDIOUT_DEVICE)
  387.  
  388. // Special pin category for wdmaud
  389.  
  390. #define STATIC_KSCATEGORY_WDMAUD_USE_PIN_NAME \
  391.     0x47A4FA20L, 0xA251, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
  392. DEFINE_GUIDSTRUCT("47A4FA20-A251-11D1-A050-0000F8004788", KSCATEGORY_WDMAUD_USE_PIN_NAME);
  393. #define KSCATEGORY_WDMAUD_USE_PIN_NAME DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD_USE_PIN_NAME)
  394.  
  395. // Escalante Platform Interface
  396.  
  397. #define STATIC_KSCATEGORY_ESCALANTE_PLATFORM_DRIVER \
  398.     0x74f3aea8L, 0x9768, 0x11d1, 0x8e, 0x07, 0x00, 0xa0, 0xc9, 0x5e, 0xc2, 0x2e
  399. DEFINE_GUIDSTRUCT("74f3aea8-9768-11d1-8e07-00a0c95ec22e", KSCATEGORY_ESCALANTE_PLATFORM_DRIVER);
  400. #define KSCATEGORY_ESCALANTE_PLATFORM_DRIVER DEFINE_GUIDNAMED(KSCATEGORY_ESCALANTE_PLATFORM_DRIVER)
  401.  
  402. // -- major types ---
  403.  
  404. // 'vids' == MEDIATYPE_Video,
  405. #define STATIC_KSDATAFORMAT_TYPE_VIDEO\
  406.     0x73646976L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  407. DEFINE_GUIDSTRUCT("73646976-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_VIDEO);
  408. #define KSDATAFORMAT_TYPE_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VIDEO)
  409.  
  410. // 'auds' == MEDIATYPE_Audio
  411. #define STATIC_KSDATAFORMAT_TYPE_AUDIO\
  412.     0x73647561L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  413. DEFINE_GUIDSTRUCT("73647561-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_AUDIO);
  414. #define KSDATAFORMAT_TYPE_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUDIO)
  415.  
  416. // 'txts' == MEDIATYPE_Text
  417. #define STATIC_KSDATAFORMAT_TYPE_TEXT\
  418.     0x73747874L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  419. DEFINE_GUIDSTRUCT("73747874-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_TEXT);
  420. #define KSDATAFORMAT_TYPE_TEXT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_TEXT)
  421.  
  422. #if !defined( DEFINE_WAVEFORMATEX_GUID )
  423. #define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  424. #endif
  425.  
  426. #define STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX\
  427.     0x00000000L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  428. DEFINE_GUIDSTRUCT("00000000-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_WAVEFORMATEX);
  429. #define KSDATAFORMAT_SUBTYPE_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_WAVEFORMATEX)
  430.  
  431. #define INIT_WAVEFORMATEX_GUID(Guid, x)\
  432. {\
  433.     *(Guid) = KSDATAFORMAT_SUBTYPE_WAVEFORMATEX;\
  434.     (Guid)->Data1 = (USHORT)(x);\
  435. }
  436.  
  437. #define EXTRACT_WAVEFORMATEX_ID(Guid)\
  438.     (USHORT)((Guid)->Data1)
  439.  
  440. #define IS_VALID_WAVEFORMATEX_GUID(Guid)\
  441.     (!memcmp(((PUSHORT)&KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT)))
  442.  
  443. #if !defined(INIT_MMREG_MID)
  444. //{d5a47fa7-6d98-11d1-a21a-00a0c9223196}
  445. #define INIT_MMREG_MID(guid, id)\
  446. {\
  447.     (guid)->Data1 = 0xd5a47fa7 + (USHORT)(id);\
  448.     (guid)->Data2 = 0x6d98;\
  449.     (guid)->Data3 = 0x11d1;\
  450.     (guid)->Data4[0] = 0xa2;\
  451.     (guid)->Data4[1] = 0x1a;\
  452.     (guid)->Data4[2] = 0x00;\
  453.     (guid)->Data4[3] = 0xa0;\
  454.     (guid)->Data4[4] = 0xc9;\
  455.     (guid)->Data4[5] = 0x22;\
  456.     (guid)->Data4[6] = 0x31;\
  457.     (guid)->Data4[7] = 0x96;\
  458. }
  459. #define EXTRACT_MMREG_MID(guid)\
  460.     (USHORT)((guid)->Data1 - 0xd5a47fa7)
  461. #define DEFINE_MMREG_MID_GUID(id)\
  462.     0xd5a47fa7+(USHORT)(id), 0x6d98, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
  463.  
  464. #define IS_COMPATIBLE_MMREG_MID(guid)\
  465.     (((guid)->Data1 >= 0xd5a47fa7) &&\
  466.     ((guid)->Data1 < 0xd5a47fa7 + 0xffff) &&\
  467.     ((guid)->Data2 == 0x6d98) &&\
  468.     ((guid)->Data3 == 0x11d1) &&\
  469.     ((guid)->Data4[0] == 0xa2) &&\
  470.     ((guid)->Data4[1] == 0x1a) &&\
  471.     ((guid)->Data4[2] == 0x00) &&\
  472.     ((guid)->Data4[3] == 0xa0) &&\
  473.     ((guid)->Data4[4] == 0xc9) &&\
  474.     ((guid)->Data4[5] == 0x22) &&\
  475.     ((guid)->Data4[6] == 0x31) &&\
  476.     ((guid)->Data4[7] == 0x96))
  477. #endif // !defined(INIT_MMREG_MID)
  478.  
  479. #if !defined(INIT_MMREG_PID)
  480. //{e36dc2ac-6d9a-11d1-a21a-00a0c9223196}
  481. #define INIT_MMREG_PID(guid, id)\
  482. {\
  483.     (guid)->Data1 = 0xe36dc2ac + (USHORT)(id);\
  484.     (guid)->Data2 = 0x6d9a;\
  485.     (guid)->Data3 = 0x11d1;\
  486.     (guid)->Data4[0] = 0xa2;\
  487.     (guid)->Data4[1] = 0x1a;\
  488.     (guid)->Data4[2] = 0x00;\
  489.     (guid)->Data4[3] = 0xa0;\
  490.     (guid)->Data4[4] = 0xc9;\
  491.     (guid)->Data4[5] = 0x22;\
  492.     (guid)->Data4[6] = 0x31;\
  493.     (guid)->Data4[7] = 0x96;\
  494. }
  495. #define EXTRACT_MMREG_PID(guid)\
  496.     (USHORT)((guid)->Data1 - 0xe36dc2ac)
  497. #define DEFINE_MMREG_PID_GUID(id)\
  498.     0xe36dc2ac+(USHORT)(id), 0x6d9a, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
  499.  
  500. #define IS_COMPATIBLE_MMREG_PID(guid)\
  501.     (((guid)->Data1 >= 0xe36dc2ac) &&\
  502.     ((guid)->Data1 < 0xe36dc2ac + 0xffff) &&\
  503.     ((guid)->Data2 == 0x6d9a) &&\
  504.     ((guid)->Data3 == 0x11d1) &&\
  505.     ((guid)->Data4[0] == 0xa2) &&\
  506.     ((guid)->Data4[1] == 0x1a) &&\
  507.     ((guid)->Data4[2] == 0x00) &&\
  508.     ((guid)->Data4[3] == 0xa0) &&\
  509.     ((guid)->Data4[4] == 0xc9) &&\
  510.     ((guid)->Data4[5] == 0x22) &&\
  511.     ((guid)->Data4[6] == 0x31) &&\
  512.     ((guid)->Data4[7] == 0x96))
  513. #endif // !defined(INIT_MMREG_PID)
  514.  
  515. #define STATIC_KSDATAFORMAT_SUBTYPE_ANALOG\
  516.     0x6dba3190L, 0x67bd, 0x11cf, 0xa0, 0xf7, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
  517. DEFINE_GUIDSTRUCT("6dba3190-67bd-11cf-a0f7-0020afd156e4", KSDATAFORMAT_SUBTYPE_ANALOG);
  518. #define KSDATAFORMAT_SUBTYPE_ANALOG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ANALOG)
  519.  
  520. #define STATIC_KSDATAFORMAT_SUBTYPE_PCM\
  521.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_PCM)
  522. DEFINE_GUIDSTRUCT("00000001-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_PCM);
  523. #define KSDATAFORMAT_SUBTYPE_PCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_PCM)
  524.  
  525. #if defined(_INC_MMREG)
  526. #define STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\
  527.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_IEEE_FLOAT)
  528. DEFINE_GUIDSTRUCT("00000003-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);
  529. #define KSDATAFORMAT_SUBTYPE_IEEE_FLOAT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)
  530.  
  531. #define STATIC_KSDATAFORMAT_SUBTYPE_ALAW\
  532.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ALAW)
  533. DEFINE_GUIDSTRUCT("00000006-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ALAW);
  534. #define KSDATAFORMAT_SUBTYPE_ALAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ALAW)
  535.  
  536. #define STATIC_KSDATAFORMAT_SUBTYPE_MULAW\
  537.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MULAW)
  538. DEFINE_GUIDSTRUCT("00000007-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MULAW);
  539. #define KSDATAFORMAT_SUBTYPE_MULAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MULAW)
  540.  
  541. #define STATIC_KSDATAFORMAT_SUBTYPE_ADPCM\
  542.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ADPCM)
  543. DEFINE_GUIDSTRUCT("00000002-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ADPCM);
  544. #define KSDATAFORMAT_SUBTYPE_ADPCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ADPCM)
  545.  
  546. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG\
  547.     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MPEG)
  548. DEFINE_GUIDSTRUCT("00000050-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MPEG);
  549. #define KSDATAFORMAT_SUBTYPE_MPEG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG)
  550. #endif // defined(_INC_MMREG)
  551.  
  552. #define STATIC_KSDATAFORMAT_SPECIFIER_VC_ID\
  553.     0xAD98D184L, 0xAAC3, 0x11D0, 0xA4, 0x1C, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  554. DEFINE_GUIDSTRUCT("AD98D184-AAC3-11D0-A41C-00A0C9223196", KSDATAFORMAT_SPECIFIER_VC_ID);
  555. #define KSDATAFORMAT_SPECIFIER_VC_ID DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VC_ID)
  556.  
  557. #define STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX\
  558.     0x05589f81L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
  559. DEFINE_GUIDSTRUCT("05589f81-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_WAVEFORMATEX);
  560. #define KSDATAFORMAT_SPECIFIER_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
  561.  
  562. #define STATIC_KSDATAFORMAT_SPECIFIER_DSOUND\
  563.     0x518590a2L, 0xa184, 0x11d0, 0x85, 0x22, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  564. DEFINE_GUIDSTRUCT("518590a2-a184-11d0-8522-00c04fd9baf3", KSDATAFORMAT_SPECIFIER_DSOUND);
  565. #define KSDATAFORMAT_SPECIFIER_DSOUND DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DSOUND)
  566.  
  567. #if defined(_INC_MMSYSTEM) || defined(_INC_MMREG)
  568. #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  569. #include <pshpack1.h>
  570. #endif
  571. typedef struct {
  572.     KSDATAFORMAT    DataFormat;
  573.     WAVEFORMATEX    WaveFormatEx;
  574. } KSDATAFORMAT_WAVEFORMATEX, *PKSDATAFORMAT_WAVEFORMATEX;
  575.  
  576. #ifndef _WAVEFORMATEXTENSIBLE_
  577. #define _WAVEFORMATEXTENSIBLE_
  578. typedef struct {
  579.     WAVEFORMATEX    Format;
  580.     union {
  581.         WORD wValidBitsPerSample;       /* bits of precision  */
  582.         WORD wSamplesPerBlock;          /* valid if wBitsPerSample==0 */
  583.         WORD wReserved;                 /* If neither applies, set to zero. */
  584.     } Samples;
  585.     DWORD           dwChannelMask;      /* which channels are */
  586.                                         /* present in stream  */
  587.     GUID            SubFormat;
  588. } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
  589. #endif // !_WAVEFORMATEXTENSIBLE_
  590.  
  591. #if !defined(WAVE_FORMAT_EXTENSIBLE)
  592. #define  WAVE_FORMAT_EXTENSIBLE                 0xFFFE
  593. #endif // !defined(WAVE_FORMAT_EXTENSIBLE)
  594.  
  595. // DirectSound buffer description
  596. typedef struct {
  597.     ULONG               Flags;
  598.     ULONG               Control;
  599.     WAVEFORMATEX        WaveFormatEx;
  600. } KSDSOUND_BUFFERDESC, *PKSDSOUND_BUFFERDESC;
  601.  
  602. // DirectSound format
  603. typedef struct {
  604.     KSDATAFORMAT        DataFormat;
  605.     KSDSOUND_BUFFERDESC BufferDesc;
  606. } KSDATAFORMAT_DSOUND, *PKSDATAFORMAT_DSOUND;
  607.  
  608. #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  609. #include <poppack.h>
  610. #endif
  611. #endif // defined(_INC_MMSYSTEM) || defined(_INC_MMREG)
  612.  
  613.  
  614.  
  615. // DirectSound buffer flags
  616. #define KSDSOUND_BUFFER_PRIMARY             0x00000001
  617. #define KSDSOUND_BUFFER_STATIC              0x00000002
  618. #define KSDSOUND_BUFFER_LOCHARDWARE         0x00000004
  619. #define KSDSOUND_BUFFER_LOCSOFTWARE         0x00000008
  620.  
  621. // DirectSound buffer control flags
  622. #define KSDSOUND_BUFFER_CTRL_3D             0x00000001
  623. #define KSDSOUND_BUFFER_CTRL_FREQUENCY      0x00000002
  624. #define KSDSOUND_BUFFER_CTRL_PAN            0x00000004
  625. #define KSDSOUND_BUFFER_CTRL_VOLUME         0x00000008
  626. #define KSDSOUND_BUFFER_CTRL_POSITIONNOTIFY 0x00000010
  627.  
  628. #define KSDSOUND_BUFFER_CTRL_HRTF_3D        0x40000000
  629.  
  630. typedef struct {
  631. #if defined(_NTDDK_)
  632.     ULONGLONG        PlayOffset;
  633.     ULONGLONG        WriteOffset;
  634. #else // !_NTDDK_
  635.     DWORDLONG        PlayOffset;
  636.     DWORDLONG        WriteOffset;
  637. #endif // !_NTDDK_
  638. } KSAUDIO_POSITION, *PKSAUDIO_POSITION;
  639.  
  640. // DirectSound3D FIR context
  641. typedef struct {
  642.     LONG                Channel;
  643.     FLOAT               VolSmoothScale;
  644.     FLOAT               TotalDryAttenuation;
  645.     FLOAT               TotalWetAttenuation;
  646.     LONG                SmoothFrequency;
  647.     LONG                Delay;
  648. } KSDS3D_ITD_PARAMS, *PKSDS3D_ITD_PARAMS;
  649.  
  650. typedef struct {
  651.     ULONG                 Enabled;
  652.     KSDS3D_ITD_PARAMS     LeftParams;
  653.     KSDS3D_ITD_PARAMS     RightParams;
  654.     ULONG                 Reserved;
  655. } KSDS3D_ITD_PARAMS_MSG, *PKSDS3D_ITD_PARAMS_MSG;
  656.  
  657. // DirectSound3D HRTF messages
  658.  
  659. typedef struct {
  660.     ULONG                   Size;           // This is the size of the struct in bytes
  661.     ULONG                   Enabled;
  662.     BOOL                    SwapChannels;
  663.     BOOL                    ZeroAzimuth;
  664.     BOOL                    CrossFadeOutput;
  665.     ULONG                   FilterSize;     // This is the additional size of the filter coeff in bytes
  666. } KSDS3D_HRTF_PARAMS_MSG, *PKSDS3D_HRTF_PARAMS_MSG;
  667.  
  668.  
  669. // HRTF filter quality levels
  670. typedef enum {
  671.     FULL_FILTER,
  672.     LIGHT_FILTER,
  673.     KSDS3D_FILTER_QUALITY_COUNT
  674. } KSDS3D_HRTF_FILTER_QUALITY;
  675.  
  676. typedef struct {
  677.     ULONG                       Size;       // This is the size of the struct in bytes
  678.     KSDS3D_HRTF_FILTER_QUALITY  Quality;
  679.     FLOAT                       SampleRate;
  680.     ULONG                       MaxFilterSize;
  681.     ULONG                       FilterTransientMuteLength;
  682.     ULONG                       FilterOverlapBufferLength;
  683.     ULONG                       OutputOverlapBufferLength;
  684.     ULONG                       Reserved;
  685. } KSDS3D_HRTF_INIT_MSG, *PKSDS3D_HRTF_INIT_MSG;
  686.  
  687. // Coefficient formats
  688. typedef enum {
  689.     FLOAT_COEFF,
  690.     SHORT_COEFF,
  691.     KSDS3D_COEFF_COUNT
  692. } KSDS3D_HRTF_COEFF_FORMAT;
  693.  
  694. // Filter methods
  695. typedef enum {
  696.     DIRECT_FORM,
  697.     CASCADE_FORM,
  698.     KSDS3D_FILTER_METHOD_COUNT
  699. } KSDS3D_HRTF_FILTER_METHOD;
  700.  
  701. // Filter methods
  702. typedef enum {
  703.     DS3D_HRTF_VERSION_1
  704. } KSDS3D_HRTF_FILTER_VERSION;
  705.  
  706. typedef struct {
  707.     KSDS3D_HRTF_FILTER_METHOD    FilterMethod;
  708.     KSDS3D_HRTF_COEFF_FORMAT     CoeffFormat;
  709.     KSDS3D_HRTF_FILTER_VERSION   Version;
  710.     ULONG                        Reserved;
  711. } KSDS3D_HRTF_FILTER_FORMAT_MSG, *PKSDS3D_HRTF_FILTER_FORMAT_MSG;
  712.  
  713. //===========================================================================
  714. // DirectSound3D HAL
  715.  
  716.  
  717. typedef struct _DS3DVECTOR {
  718.     union {
  719.         FLOAT x;
  720.         FLOAT dvX;
  721.     };
  722.     union {
  723.         FLOAT y;
  724.         FLOAT dvY;
  725.     };
  726.     union {
  727.         FLOAT z;
  728.         FLOAT dvZ;
  729.     };
  730. } DS3DVECTOR, *PDS3DVECTOR;
  731.  
  732.  
  733. //===========================================================================
  734. //===========================================================================
  735.  
  736. // KSPROPSETID_DirectSound3DListener : {437B3414-D060-11d0-8583-00C04FD9BAF3}
  737.  
  738. #define STATIC_KSPROPSETID_DirectSound3DListener\
  739.     0x437b3414L, 0xd060, 0x11d0, 0x85, 0x83, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  740. DEFINE_GUIDSTRUCT("437b3414-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DListener);
  741. #define KSPROPSETID_DirectSound3DListener DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DListener)
  742.  
  743. typedef enum {
  744.     KSPROPERTY_DIRECTSOUND3DLISTENER_ALL,
  745.     KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION,
  746.     KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY,
  747.     KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION,
  748.     KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR,
  749.     KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR,
  750.     KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR,
  751.     KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH,
  752.     KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
  753. } KSPROPERTY_DIRECTSOUND3DLISTENER;
  754.  
  755. typedef struct {
  756.     DS3DVECTOR  Position;
  757.     DS3DVECTOR  Velocity;
  758.     DS3DVECTOR  OrientFront;
  759.     DS3DVECTOR  OrientTop;
  760.     FLOAT       DistanceFactor;
  761.     FLOAT       RolloffFactor;
  762.     FLOAT       DopplerFactor;
  763. } KSDS3D_LISTENER_ALL, *PKSDS3D_LISTENER_ALL;
  764.  
  765. typedef struct {
  766.     DS3DVECTOR  Front;
  767.     DS3DVECTOR  Top;
  768. } KSDS3D_LISTENER_ORIENTATION, *PKSDS3D_LISTENER_ORIENTATION;
  769.  
  770.  
  771. //===========================================================================
  772. //===========================================================================
  773. // KSPROPSETID_DirectSound3DBuffer : {437B3411-D060-11d0-8583-00C04FD9BAF3}
  774.  
  775. #define STATIC_KSPROPSETID_DirectSound3DBuffer\
  776.     0x437b3411L, 0xd060, 0x11d0, 0x85, 0x83, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  777. DEFINE_GUIDSTRUCT("437b3411-d060-11d0-8583-00c04fd9baf3", KSPROPSETID_DirectSound3DBuffer);
  778. #define KSPROPSETID_DirectSound3DBuffer DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DBuffer)
  779.  
  780.  
  781. typedef enum {
  782.     KSPROPERTY_DIRECTSOUND3DBUFFER_ALL,
  783.     KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION,
  784.     KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY,
  785.     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES,
  786.     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION,
  787.     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME,
  788.     KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE,
  789.     KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE,
  790.     KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
  791. } KSPROPERTY_DIRECTSOUND3DBUFFER;
  792.  
  793.  
  794. typedef struct {
  795.     DS3DVECTOR  Position;
  796.     DS3DVECTOR  Velocity;
  797.     ULONG       InsideConeAngle;
  798.     ULONG       OutsideConeAngle;
  799.     DS3DVECTOR  ConeOrientation;
  800.     LONG        ConeOutsideVolume;
  801.     FLOAT       MinDistance;
  802.     FLOAT       MaxDistance;
  803.     ULONG       Mode;
  804. } KSDS3D_BUFFER_ALL, *PKSDS3D_BUFFER_ALL;
  805.  
  806. typedef struct {
  807.     ULONG  InsideConeAngle;
  808.     ULONG  OutsideConeAngle;
  809. } KSDS3D_BUFFER_CONE_ANGLES, *PKSDS3D_BUFFER_CONE_ANGLES;
  810.  
  811. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_HEADPHONE   (-1)
  812. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MIN         5
  813. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_NARROW      10
  814. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_WIDE        20
  815. #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MAX         180
  816.  
  817. #define KSDSOUND_3D_MODE_NORMAL          0x00000000
  818. #define KSDSOUND_3D_MODE_HEADRELATIVE    0x00000001
  819. #define KSDSOUND_3D_MODE_DISABLE         0x00000002
  820.  
  821. typedef struct {
  822.    KSDATARANGE              DataRange;
  823.    ULONG                    MaximumChannels;
  824.    ULONG                    MinimumBitsPerSample;
  825.    ULONG                    MaximumBitsPerSample;
  826.    ULONG                    MinimumSampleFrequency;
  827.    ULONG                    MaximumSampleFrequency;
  828. } KSDATARANGE_AUDIO, *PKSDATARANGE_AUDIO;
  829.  
  830. //---------------------------------------------------------------------------
  831.  
  832. #define STATIC_KSDATAFORMAT_SUBTYPE_RIFF\
  833.     0x4995DAEEL, 0x9EE6, 0x11D0, 0xA4, 0x0E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  834. DEFINE_GUIDSTRUCT("4995DAEE-9EE6-11D0-A40E-00A0C9223196", KSDATAFORMAT_SUBTYPE_RIFF);
  835. #define KSDATAFORMAT_SUBTYPE_RIFF DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFF)
  836.  
  837. #define STATIC_KSDATAFORMAT_SUBTYPE_RIFFWAVE\
  838.     0xe436eb8bL, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  839. DEFINE_GUIDSTRUCT("e436eb8b-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_RIFFWAVE);
  840. #define KSDATAFORMAT_SUBTYPE_RIFFWAVE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFWAVE)
  841.  
  842. //===========================================================================
  843. //===========================================================================
  844.  
  845. #define STATIC_KSPROPSETID_Bibliographic \
  846.     0x07BA150EL, 0xE2B1, 0x11D0, 0xAC, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  847. DEFINE_GUIDSTRUCT("07BA150E-E2B1-11D0-AC17-00A0C9223196", KSPROPSETID_Bibliographic);
  848. #define KSPROPSETID_Bibliographic DEFINE_GUIDNAMED(KSPROPSETID_Bibliographic)
  849.  
  850. //Repeatable tags contain all entries within the property, each preceeded by length
  851. typedef enum {
  852.     KSPROPERTY_BIBLIOGRAPHIC_LEADER = 'RDL ',
  853.     KSPROPERTY_BIBLIOGRAPHIC_LCCN = '010 ',
  854.     KSPROPERTY_BIBLIOGRAPHIC_ISBN = '020 ',
  855.     KSPROPERTY_BIBLIOGRAPHIC_ISSN = '220 ',
  856.     KSPROPERTY_BIBLIOGRAPHIC_CATALOGINGSOURCE = '040 ',
  857.     KSPROPERTY_BIBLIOGRAPHIC_MAINPERSONALNAME = '001 ',
  858.     KSPROPERTY_BIBLIOGRAPHIC_MAINCORPORATEBODY = '011 ',
  859.     KSPROPERTY_BIBLIOGRAPHIC_MAINMEETINGNAME = '111 ',
  860.     KSPROPERTY_BIBLIOGRAPHIC_MAINUNIFORMTITLE = '031 ',
  861.     KSPROPERTY_BIBLIOGRAPHIC_UNIFORMTITLE = '042 ',
  862.     KSPROPERTY_BIBLIOGRAPHIC_TITLESTATEMENT = '542 ',
  863.     KSPROPERTY_BIBLIOGRAPHIC_VARYINGFORMTITLE = '642 ',
  864.     KSPROPERTY_BIBLIOGRAPHIC_PUBLICATION = '062 ',
  865.     KSPROPERTY_BIBLIOGRAPHIC_PHYSICALDESCRIPTION = '003 ',
  866.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTITLE = '044 ',
  867.     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENT = '094 ',
  868.     KSPROPERTY_BIBLIOGRAPHIC_GENERALNOTE = '005 ',
  869.     KSPROPERTY_BIBLIOGRAPHIC_BIBLIOGRAPHYNOTE = '405 ',
  870.     KSPROPERTY_BIBLIOGRAPHIC_CONTENTSNOTE = '505 ',
  871.     KSPROPERTY_BIBLIOGRAPHIC_CREATIONCREDIT = '805 ',
  872.     KSPROPERTY_BIBLIOGRAPHIC_CITATION = '015 ',
  873.     KSPROPERTY_BIBLIOGRAPHIC_PARTICIPANT = '115 ',
  874.     KSPROPERTY_BIBLIOGRAPHIC_SUMMARY = '025 ',
  875.     KSPROPERTY_BIBLIOGRAPHIC_TARGETAUDIENCE = '125 ',
  876.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDFORMAVAILABLE = '035 ',
  877.     KSPROPERTY_BIBLIOGRAPHIC_SYSTEMDETAILS = '835 ',
  878.     KSPROPERTY_BIBLIOGRAPHIC_AWARDS = '685 ',
  879.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYPERSONALNAME = '006 ',
  880.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTOPICALTERM = '056 ',
  881.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYGEOGRAPHIC = '156 ',
  882.     KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMGENRE = '556 ',
  883.     KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMCURRICULUM = '856 ',
  884.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYUNIFORMTITLE = '037 ',
  885.     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYRELATED = '047 ',
  886.     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTPERSONALNAME = '008 ',
  887.     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTUNIFORMTITLE = '038 '
  888. } KSPROPERTY_BIBLIOGRAPHIC;
  889.  
  890. #define STATIC_KSPROPSETID_TopologyNode\
  891.     0x45FFAAA1L, 0x6E1B, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  892. DEFINE_GUIDSTRUCT("45FFAAA1-6E1B-11D0-BCF2-444553540000", KSPROPSETID_TopologyNode);
  893. #define KSPROPSETID_TopologyNode DEFINE_GUIDNAMED(KSPROPSETID_TopologyNode)
  894.  
  895. typedef enum {
  896.     KSPROPERTY_TOPOLOGYNODE_ENABLE = 1
  897. } KSPROPERTY_TOPOLOGYNODE;
  898.  
  899. #define STATIC_KSPROPSETID_Audio\
  900.     0x45FFAAA0L, 0x6E1B, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  901. DEFINE_GUIDSTRUCT("45FFAAA0-6E1B-11D0-BCF2-444553540000", KSPROPSETID_Audio);
  902. #define KSPROPSETID_Audio DEFINE_GUIDNAMED(KSPROPSETID_Audio)
  903.  
  904. typedef enum {
  905.     KSPROPERTY_AUDIO_LATENCY = 1,
  906.     KSPROPERTY_AUDIO_COPY_PROTECTION,
  907.     KSPROPERTY_AUDIO_CHANNEL_CONFIG,
  908.     KSPROPERTY_AUDIO_VOLUMELEVEL,
  909.     KSPROPERTY_AUDIO_POSITION,
  910.     KSPROPERTY_AUDIO_DYNAMIC_RANGE,
  911.     KSPROPERTY_AUDIO_QUALITY,
  912.     KSPROPERTY_AUDIO_SAMPLING_RATE,
  913.     KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE,
  914.     KSPROPERTY_AUDIO_MIX_LEVEL_TABLE,
  915.     KSPROPERTY_AUDIO_MIX_LEVEL_CAPS,
  916.     KSPROPERTY_AUDIO_MUX_SOURCE,
  917.     KSPROPERTY_AUDIO_MUTE,
  918.     KSPROPERTY_AUDIO_BASS,
  919.     KSPROPERTY_AUDIO_MID,
  920.     KSPROPERTY_AUDIO_TREBLE,
  921.     KSPROPERTY_AUDIO_BASS_BOOST,
  922.     KSPROPERTY_AUDIO_EQ_LEVEL,
  923.     KSPROPERTY_AUDIO_NUM_EQ_BANDS,
  924.     KSPROPERTY_AUDIO_EQ_BANDS,
  925.     KSPROPERTY_AUDIO_AGC,
  926.     KSPROPERTY_AUDIO_DELAY,
  927.     KSPROPERTY_AUDIO_LOUDNESS,
  928.     KSPROPERTY_AUDIO_WIDE_MODE,
  929.     KSPROPERTY_AUDIO_WIDENESS,
  930.     KSPROPERTY_AUDIO_REVERB_LEVEL,
  931.     KSPROPERTY_AUDIO_CHORUS_LEVEL,
  932.     KSPROPERTY_AUDIO_DEV_SPECIFIC,
  933.     KSPROPERTY_AUDIO_DEMUX_DEST,
  934.     KSPROPERTY_AUDIO_STEREO_ENHANCE,
  935.     KSPROPERTY_AUDIO_MANUFACTURE_GUID,
  936.     KSPROPERTY_AUDIO_PRODUCT_GUID,
  937.     KSPROPERTY_AUDIO_CPU_RESOURCES,
  938.     KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY,
  939.     KSPROPERTY_AUDIO_SURROUND_ENCODE,
  940.     KSPROPERTY_AUDIO_3D_INTERFACE
  941. } KSPROPERTY_AUDIO;
  942.  
  943. // Audio quality constants
  944. #define KSAUDIO_QUALITY_WORST               0x0
  945. #define KSAUDIO_QUALITY_PC                  0x1
  946. #define KSAUDIO_QUALITY_BASIC               0x2
  947. #define KSAUDIO_QUALITY_ADVANCED            0x3
  948.  
  949. // Audio CPU resource constants
  950. #define KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU  0x00000000
  951. #define KSAUDIO_CPU_RESOURCES_HOST_CPU      0x7FFFFFFF
  952.  
  953. typedef struct {
  954.     BOOL    fCopyrighted;
  955.     BOOL    fOriginal;
  956. } KSAUDIO_COPY_PROTECTION, *PKSAUDIO_COPY_PROTECTION;
  957.  
  958. typedef struct {
  959.     LONG    ActiveSpeakerPositions;
  960. } KSAUDIO_CHANNEL_CONFIG;
  961.  
  962. // Speaker Positions:
  963. #define SPEAKER_FRONT_LEFT              0x1
  964. #define SPEAKER_FRONT_RIGHT             0x2
  965. #define SPEAKER_FRONT_CENTER            0x4
  966. #define SPEAKER_LOW_FREQUENCY           0x8
  967. #define SPEAKER_BACK_LEFT               0x10
  968. #define SPEAKER_BACK_RIGHT              0x20
  969. #define SPEAKER_FRONT_LEFT_OF_CENTER    0x40
  970. #define SPEAKER_FRONT_RIGHT_OF_CENTER   0x80
  971. #define SPEAKER_BACK_CENTER             0x100
  972. #define SPEAKER_SIDE_LEFT               0x200
  973. #define SPEAKER_SIDE_RIGHT              0x400
  974. #define SPEAKER_TOP_CENTER              0x800
  975. #define SPEAKER_TOP_FRONT_LEFT          0x1000
  976. #define SPEAKER_TOP_FRONT_CENTER        0x2000
  977. #define SPEAKER_TOP_FRONT_RIGHT         0x4000
  978. #define SPEAKER_TOP_BACK_LEFT           0x8000
  979. #define SPEAKER_TOP_BACK_CENTER         0x10000
  980. #define SPEAKER_TOP_BACK_RIGHT          0x20000
  981.  
  982. // Bit mask locations reserved for future use
  983. #define SPEAKER_RESERVED                0x7FFC0000
  984.  
  985. // Used to specify that any possible permutation of speaker configurations
  986. #define SPEAKER_ALL                     0x80000000
  987.  
  988. // DirectSound Speaker Config
  989. #define KSAUDIO_SPEAKER_MONO            (SPEAKER_FRONT_CENTER)
  990. #define KSAUDIO_SPEAKER_STEREO          (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
  991. #define KSAUDIO_SPEAKER_QUAD            (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  992.                                          SPEAKER_BACK_LEFT  | SPEAKER_BACK_RIGHT)
  993. #define KSAUDIO_SPEAKER_SURROUND        (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  994.                                          SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)
  995. #define KSAUDIO_SPEAKER_5POINT1         (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  996.                                          SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \
  997.                                          SPEAKER_BACK_LEFT  | SPEAKER_BACK_RIGHT)
  998. #define KSAUDIO_SPEAKER_7POINT1         (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
  999.                                          SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \
  1000.                                          SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | \
  1001.                                          SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)
  1002.  
  1003. // DVD Speaker Positions
  1004. #define KSAUDIO_SPEAKER_GROUND_FRONT_LEFT   SPEAKER_FRONT_LEFT
  1005. #define KSAUDIO_SPEAKER_GROUND_FRONT_CENTER SPEAKER_FRONT_CENTER
  1006. #define KSAUDIO_SPEAKER_GROUND_FRONT_RIGHT  SPEAKER_FRONT_RIGHT
  1007. #define KSAUDIO_SPEAKER_GROUND_REAR_LEFT    SPEAKER_BACK_LEFT
  1008. #define KSAUDIO_SPEAKER_GROUND_REAR_RIGHT   SPEAKER_BACK_RIGHT
  1009. #define KSAUDIO_SPEAKER_TOP_MIDDLE          SPEAKER_TOP_CENTER
  1010. #define KSAUDIO_SPEAKER_SUPER_WOOFER        SPEAKER_LOW_FREQUENCY
  1011.  
  1012. typedef struct {
  1013.     ULONG   QuietCompression;
  1014.     ULONG   LoudCompression;
  1015. } KSAUDIO_DYNAMIC_RANGE, *PKSAUDIO_DYNAMIC_RANGE;
  1016.  
  1017. typedef struct {
  1018.     BOOL    Mute;
  1019.     LONG    Level;
  1020. } KSAUDIO_MIXLEVEL, *PKSAUDIO_MIXLEVEL;
  1021.  
  1022. typedef struct {
  1023.     BOOL    Mute;
  1024.     LONG    Minimum;
  1025.     LONG    Maximum;
  1026.     LONG    Reset;
  1027. } KSAUDIO_MIX_CAPS, *PKSAUDIO_MIX_CAPS;
  1028.  
  1029. typedef struct {
  1030.     ULONG               InputChannels;
  1031.     ULONG               OutputChannels;
  1032.     KSAUDIO_MIX_CAPS    Capabilities[1];
  1033. } KSAUDIO_MIXCAP_TABLE, *PKSAUDIO_MIXCAP_TABLE;
  1034.  
  1035. typedef enum {
  1036.     SE_TECH_NONE,
  1037.     SE_TECH_ANALOG_DEVICES_PHAT,
  1038.     SE_TECH_CREATIVE,
  1039.     SE_TECH_NATIONAL_SEMI,
  1040.     SE_TECH_YAMAHA_YMERSION,
  1041.     SE_TECH_BBE,
  1042.     SE_TECH_CRYSTAL_SEMI,
  1043.     SE_TECH_QSOUND_QXPANDER,
  1044.     SE_TECH_SPATIALIZER,
  1045.     SE_TECH_SRS,
  1046.     SE_TECH_PLATFORM_TECH,
  1047.     SE_TECH_AKM,
  1048.     SE_TECH_AUREAL,
  1049.     SE_TECH_AZTECH,
  1050.     SE_TECH_BINAURA,
  1051.     SE_TECH_ESS_TECH,
  1052.     SE_TECH_HARMAN_VMAX,
  1053.     SE_TECH_NVIDEA,
  1054.     SE_TECH_PHILIPS_INCREDIBLE,
  1055.     SE_TECH_TEXAS_INST,
  1056.     SE_TECH_VLSI_TECH
  1057. } SE_TECHNIQUE;
  1058.  
  1059. typedef struct {
  1060.     SE_TECHNIQUE    Technique;
  1061.     ULONG   Center;
  1062.     ULONG   Depth;
  1063.     ULONG   Reserved;
  1064. } KSAUDIO_STEREO_ENHANCE, *PKSAUDIO_STEREO_ENHANCE;
  1065.  
  1066. //===========================================================================
  1067. // Topology Node Type GUIDs
  1068.  
  1069. #define STATIC_KSNODETYPE_DAC\
  1070.     0x507AE360L, 0xC554, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1071. DEFINE_GUIDSTRUCT("507AE360-C554-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DAC);
  1072. #define KSNODETYPE_DAC DEFINE_GUIDNAMED(KSNODETYPE_DAC)
  1073.  
  1074. #define STATIC_KSNODETYPE_ADC\
  1075.     0x4D837FE0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1076. DEFINE_GUIDSTRUCT("4D837FE0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_ADC);
  1077. #define KSNODETYPE_ADC DEFINE_GUIDNAMED(KSNODETYPE_ADC)
  1078.  
  1079. #define STATIC_KSNODETYPE_SRC\
  1080.     0x9DB7B9E0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1081. DEFINE_GUIDSTRUCT("9DB7B9E0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SRC);
  1082. #define KSNODETYPE_SRC DEFINE_GUIDNAMED(KSNODETYPE_SRC)
  1083.  
  1084. #define STATIC_KSNODETYPE_SUPERMIX\
  1085.     0xE573ADC0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1086. DEFINE_GUIDSTRUCT("E573ADC0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SUPERMIX);
  1087. #define KSNODETYPE_SUPERMIX DEFINE_GUIDNAMED(KSNODETYPE_SUPERMIX)
  1088.  
  1089. #define STATIC_KSNODETYPE_MUX\
  1090.     0x2CEAF780L, 0xC556, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1091. DEFINE_GUIDSTRUCT("2CEAF780-C556-11D0-8A2B-00A0C9255AC1", KSNODETYPE_MUX);
  1092. #define KSNODETYPE_MUX DEFINE_GUIDNAMED(KSNODETYPE_MUX)
  1093.  
  1094. #define STATIC_KSNODETYPE_DEMUX\
  1095.     0xC0EB67D4L, 0xE807, 0x11D0, 0x95, 0x8A, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1096. DEFINE_GUIDSTRUCT("C0EB67D4-E807-11D0-958A-00C04FB925D3", KSNODETYPE_DEMUX);
  1097. #define KSNODETYPE_DEMUX DEFINE_GUIDNAMED(KSNODETYPE_DEMUX)
  1098.  
  1099. #define STATIC_KSNODETYPE_SUM\
  1100.     0xDA441A60L, 0xC556, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1101. DEFINE_GUIDSTRUCT("DA441A60-C556-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SUM);
  1102. #define KSNODETYPE_SUM DEFINE_GUIDNAMED(KSNODETYPE_SUM)
  1103.  
  1104. #define STATIC_KSNODETYPE_MUTE\
  1105.     0x02B223C0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1106. DEFINE_GUIDSTRUCT("02B223C0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_MUTE);
  1107. #define KSNODETYPE_MUTE DEFINE_GUIDNAMED(KSNODETYPE_MUTE)
  1108.  
  1109. #define STATIC_KSNODETYPE_VOLUME\
  1110.     0x3A5ACC00L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1111. DEFINE_GUIDSTRUCT("3A5ACC00-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_VOLUME);
  1112. #define KSNODETYPE_VOLUME DEFINE_GUIDNAMED(KSNODETYPE_VOLUME)
  1113.  
  1114. #define STATIC_KSNODETYPE_TONE\
  1115.     0x7607E580L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1116. DEFINE_GUIDSTRUCT("7607E580-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_TONE);
  1117. #define KSNODETYPE_TONE DEFINE_GUIDNAMED(KSNODETYPE_TONE)
  1118.  
  1119. #define STATIC_KSNODETYPE_EQUALIZER\
  1120.     0x9D41B4A0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1121. DEFINE_GUIDSTRUCT("9D41B4A0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_EQUALIZER);
  1122. #define KSNODETYPE_EQUALIZER DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZER)
  1123.  
  1124. #define STATIC_KSNODETYPE_AGC\
  1125.     0xE88C9BA0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1126. DEFINE_GUIDSTRUCT("E88C9BA0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_AGC);
  1127. #define KSNODETYPE_AGC DEFINE_GUIDNAMED(KSNODETYPE_AGC)
  1128.  
  1129. #define STATIC_KSNODETYPE_DELAY\
  1130.     0x144981E0L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1131. DEFINE_GUIDSTRUCT("144981E0-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DELAY);
  1132. #define KSNODETYPE_DELAY DEFINE_GUIDNAMED(KSNODETYPE_DELAY)
  1133.  
  1134. #define STATIC_KSNODETYPE_LOUDNESS\
  1135.     0x41887440L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1136. DEFINE_GUIDSTRUCT("41887440-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_LOUDNESS);
  1137. #define KSNODETYPE_LOUDNESS DEFINE_GUIDNAMED(KSNODETYPE_LOUDNESS)
  1138.  
  1139. #define STATIC_KSNODETYPE_PROLOGIC_DECODER\
  1140.     0x831C2C80L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1141. DEFINE_GUIDSTRUCT("831C2C80-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_PROLOGIC_DECODER);
  1142. #define KSNODETYPE_PROLOGIC_DECODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_DECODER)
  1143.  
  1144. #define STATIC_KSNODETYPE_STEREO_WIDE\
  1145.     0xA9E69800L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1146. DEFINE_GUIDSTRUCT("A9E69800-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_STEREO_WIDE);
  1147. #define KSNODETYPE_STEREO_WIDE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_WIDE)
  1148.  
  1149. #define STATIC_KSNODETYPE_STEREO_ENHANCE\
  1150.     0xAF6878ACL, 0xE83F, 0x11D0, 0x95, 0x8A, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1151. DEFINE_GUIDSTRUCT("AF6878AC-E83F-11D0-958A-00C04FB925D3", KSNODETYPE_STEREO_ENHANCE);
  1152. #define KSNODETYPE_STEREO_ENHANCE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_ENHANCE)
  1153.  
  1154. #define STATIC_KSNODETYPE_REVERB\
  1155.     0xEF0328E0L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1156. DEFINE_GUIDSTRUCT("EF0328E0-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_REVERB);
  1157. #define KSNODETYPE_REVERB DEFINE_GUIDNAMED(KSNODETYPE_REVERB)
  1158.  
  1159. #define STATIC_KSNODETYPE_CHORUS\
  1160.     0x20173F20L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1161. DEFINE_GUIDSTRUCT("20173F20-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_CHORUS);
  1162. #define KSNODETYPE_CHORUS DEFINE_GUIDNAMED(KSNODETYPE_CHORUS)
  1163.  
  1164. #define STATIC_KSNODETYPE_3D_EFFECTS\
  1165.     0x55515860L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1166. DEFINE_GUIDSTRUCT("55515860-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_3D_EFFECTS);
  1167. #define KSNODETYPE_3D_EFFECTS DEFINE_GUIDNAMED(KSNODETYPE_3D_EFFECTS)
  1168.  
  1169. #define STATIC_KSNODETYPE_ACOUSTIC_ECHO_CANCEL STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL
  1170. #define KSNODETYPE_ACOUSTIC_ECHO_CANCEL KSCATEGORY_ACOUSTIC_ECHO_CANCEL
  1171.  
  1172. #define STATIC_KSNODETYPE_DEV_SPECIFIC\
  1173.     0x941C7AC0L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
  1174. DEFINE_GUIDSTRUCT("941C7AC0-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DEV_SPECIFIC);
  1175. #define KSNODETYPE_DEV_SPECIFIC DEFINE_GUIDNAMED(KSNODETYPE_DEV_SPECIFIC)
  1176.  
  1177. #define STATIC_KSNODETYPE_SURROUND_ENCODER\
  1178.     0x8074C5B2L, 0x3C66, 0x11D2, 0xB4, 0x5A, 0x30, 0x78, 0x30, 0x2C, 0x20, 0x30
  1179. DEFINE_GUIDSTRUCT("8074C5B2-3C66-11D2-B45A-3078302C2030", KSNODETYPE_SURROUND_ENCODER);
  1180. #define KSNODETYPE_SURROUND_ENCODER DEFINE_GUIDNAMED(KSNODETYPE_SURROUND_ENCODER)
  1181.  
  1182. //===========================================================================
  1183. // Topology Node Name GUIDs for common audio nodes
  1184. #define STATIC_KSAUDFNAME_BASS\
  1185.     0x185FEDE0L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1186. DEFINE_GUIDSTRUCT("185FEDE0-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_BASS);
  1187. #define KSAUDFNAME_BASS DEFINE_GUIDNAMED(KSAUDFNAME_BASS)
  1188.  
  1189. #define STATIC_KSAUDFNAME_TREBLE\
  1190.     0x185FEDE1L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1191. DEFINE_GUIDSTRUCT("185FEDE1-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_TREBLE);
  1192. #define KSAUDFNAME_TREBLE DEFINE_GUIDNAMED(KSAUDFNAME_TREBLE)
  1193.  
  1194. #define STATIC_KSAUDFNAME_3D_STEREO\
  1195.     0x185FEDE2L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1196. DEFINE_GUIDSTRUCT("185FEDE2-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_3D_STEREO);
  1197. #define KSAUDFNAME_3D_STEREO DEFINE_GUIDNAMED(KSAUDFNAME_3D_STEREO)
  1198.  
  1199. #define STATIC_KSAUDFNAME_MASTER_VOLUME\
  1200.     0x185FEDE3L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1201. DEFINE_GUIDSTRUCT("185FEDE3-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MASTER_VOLUME);
  1202. #define KSAUDFNAME_MASTER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_VOLUME)
  1203.  
  1204. #define STATIC_KSAUDFNAME_MASTER_MUTE\
  1205.     0x185FEDE4L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1206. DEFINE_GUIDSTRUCT("185FEDE4-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MASTER_MUTE);
  1207. #define KSAUDFNAME_MASTER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_MUTE)
  1208.  
  1209. #define STATIC_KSAUDFNAME_WAVE_VOLUME\
  1210.     0x185FEDE5L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1211. DEFINE_GUIDSTRUCT("185FEDE5-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_VOLUME);
  1212. #define KSAUDFNAME_WAVE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_VOLUME)
  1213.  
  1214. #define STATIC_KSAUDFNAME_WAVE_MUTE\
  1215.     0x185FEDE6L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1216. DEFINE_GUIDSTRUCT("185FEDE6-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_MUTE);
  1217. #define KSAUDFNAME_WAVE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_MUTE)
  1218.  
  1219. #define STATIC_KSAUDFNAME_MIDI_VOLUME\
  1220.     0x185FEDE7L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1221. DEFINE_GUIDSTRUCT("185FEDE7-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_VOLUME);
  1222. #define KSAUDFNAME_MIDI_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_VOLUME)
  1223.  
  1224. #define STATIC_KSAUDFNAME_MIDI_MUTE\
  1225.     0x185FEDE8L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1226. DEFINE_GUIDSTRUCT("185FEDE8-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_MUTE);
  1227. #define KSAUDFNAME_MIDI_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_MUTE)
  1228.  
  1229. #define STATIC_KSAUDFNAME_CD_VOLUME\
  1230.     0x185FEDE9L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1231. DEFINE_GUIDSTRUCT("185FEDE9-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_VOLUME);
  1232. #define KSAUDFNAME_CD_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_VOLUME)
  1233.  
  1234. #define STATIC_KSAUDFNAME_CD_MUTE\
  1235.     0x185FEDEAL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1236. DEFINE_GUIDSTRUCT("185FEDEA-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_MUTE);
  1237. #define KSAUDFNAME_CD_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_CD_MUTE)
  1238.  
  1239. #define STATIC_KSAUDFNAME_LINE_VOLUME\
  1240.     0x185FEDEBL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1241. DEFINE_GUIDSTRUCT("185FEDEB-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_VOLUME);
  1242. #define KSAUDFNAME_LINE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_VOLUME)
  1243.  
  1244. #define STATIC_KSAUDFNAME_LINE_MUTE\
  1245.     0x185FEDECL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1246. DEFINE_GUIDSTRUCT("185FEDEC-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_MUTE);
  1247. #define KSAUDFNAME_LINE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_LINE_MUTE)
  1248.  
  1249. #define STATIC_KSAUDFNAME_MIC_VOLUME\
  1250.     0x185FEDEDL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1251. DEFINE_GUIDSTRUCT("185FEDED-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_VOLUME);
  1252. #define KSAUDFNAME_MIC_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_VOLUME)
  1253.  
  1254. #define STATIC_KSAUDFNAME_MIC_MUTE\
  1255.     0x185FEDEEL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1256. DEFINE_GUIDSTRUCT("185FEDEE-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_MUTE);
  1257. #define KSAUDFNAME_MIC_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIC_MUTE)
  1258.  
  1259. #define STATIC_KSAUDFNAME_RECORDING_SOURCE\
  1260.     0x185FEDEFL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1261. DEFINE_GUIDSTRUCT("185FEDEF-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_RECORDING_SOURCE);
  1262. #define KSAUDFNAME_RECORDING_SOURCE DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_SOURCE)
  1263.  
  1264. #define STATIC_KSAUDFNAME_PC_SPEAKER_VOLUME\
  1265.     0x185FEDF0L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1266. DEFINE_GUIDSTRUCT("185FEDF0-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER_VOLUME);
  1267. #define KSAUDFNAME_PC_SPEAKER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_VOLUME)
  1268.  
  1269. #define STATIC_KSAUDFNAME_PC_SPEAKER_MUTE\
  1270.     0x185FEDF1L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1271. DEFINE_GUIDSTRUCT("185FEDF1-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER_MUTE);
  1272. #define KSAUDFNAME_PC_SPEAKER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_MUTE)
  1273.  
  1274. #define STATIC_KSAUDFNAME_MIDI_IN_VOLUME\
  1275.     0x185FEDF2L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1276. DEFINE_GUIDSTRUCT("185FEDF2-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_IN_VOLUME);
  1277. #define KSAUDFNAME_MIDI_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_IN_VOLUME)
  1278.  
  1279. #define STATIC_KSAUDFNAME_CD_IN_VOLUME\
  1280.     0x185FEDF3L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1281. DEFINE_GUIDSTRUCT("185FEDF3-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_IN_VOLUME);
  1282. #define KSAUDFNAME_CD_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_IN_VOLUME)
  1283.  
  1284. #define STATIC_KSAUDFNAME_LINE_IN_VOLUME\
  1285.     0x185FEDF4L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1286. DEFINE_GUIDSTRUCT("185FEDF4-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_IN_VOLUME);
  1287. #define KSAUDFNAME_LINE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN_VOLUME)
  1288.  
  1289. #define STATIC_KSAUDFNAME_MIC_IN_VOLUME\
  1290.     0x185FEDF5L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1291. DEFINE_GUIDSTRUCT("185FEDF5-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_IN_VOLUME);
  1292. #define KSAUDFNAME_MIC_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_IN_VOLUME)
  1293.  
  1294. #define STATIC_KSAUDFNAME_WAVE_IN_VOLUME\
  1295.     0x185FEDF6L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1296. DEFINE_GUIDSTRUCT("185FEDF6-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_IN_VOLUME);
  1297. #define KSAUDFNAME_WAVE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_IN_VOLUME)
  1298.  
  1299. #define STATIC_KSAUDFNAME_VOLUME_CONTROL\
  1300.     0x185FEDF7L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1301. DEFINE_GUIDSTRUCT("185FEDF7-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_VOLUME_CONTROL);
  1302. #define KSAUDFNAME_VOLUME_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_VOLUME_CONTROL)
  1303.  
  1304. #define STATIC_KSAUDFNAME_MIDI\
  1305.     0x185FEDF8L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1306. DEFINE_GUIDSTRUCT("185FEDF8-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI);
  1307. #define KSAUDFNAME_MIDI DEFINE_GUIDNAMED(KSAUDFNAME_MIDI)
  1308.  
  1309. #define STATIC_KSAUDFNAME_LINE_IN\
  1310.     0x185FEDF9L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1311. DEFINE_GUIDSTRUCT("185FEDF9-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_IN);
  1312. #define KSAUDFNAME_LINE_IN DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN)
  1313.  
  1314. #define STATIC_KSAUDFNAME_RECORDING_CONTROL\
  1315.     0x185FEDFAL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1316. DEFINE_GUIDSTRUCT("185FEDFA-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_RECORDING_CONTROL);
  1317. #define KSAUDFNAME_RECORDING_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_CONTROL)
  1318.  
  1319. #define STATIC_KSAUDFNAME_CD_AUDIO\
  1320.     0x185FEDFBL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1321. DEFINE_GUIDSTRUCT("185FEDFB-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_AUDIO);
  1322. #define KSAUDFNAME_CD_AUDIO DEFINE_GUIDNAMED(KSAUDFNAME_CD_AUDIO)
  1323.  
  1324. #define STATIC_KSAUDFNAME_AUX_VOLUME\
  1325.     0x185FEDFCL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1326. DEFINE_GUIDSTRUCT("185FEDFC-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX_VOLUME);
  1327. #define KSAUDFNAME_AUX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_AUX_VOLUME)
  1328.  
  1329. #define STATIC_KSAUDFNAME_AUX_MUTE\
  1330.     0x185FEDFDL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1331. DEFINE_GUIDSTRUCT("185FEDFD-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX_MUTE);
  1332. #define KSAUDFNAME_AUX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_AUX_MUTE)
  1333.  
  1334. #define STATIC_KSAUDFNAME_AUX\
  1335.     0x185FEDFEL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1336. DEFINE_GUIDSTRUCT("185FEDFE-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX);
  1337. #define KSAUDFNAME_AUX DEFINE_GUIDNAMED(KSAUDFNAME_AUX)
  1338.  
  1339. #define STATIC_KSAUDFNAME_PC_SPEAKER\
  1340.     0x185FEDFFL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1341. DEFINE_GUIDSTRUCT("185FEDFF-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER);
  1342. #define KSAUDFNAME_PC_SPEAKER DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER)
  1343.  
  1344. #define STATIC_KSAUDFNAME_WAVE_OUT_MIX\
  1345.     0x185FEE00L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1346. DEFINE_GUIDSTRUCT("185FEE00-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_OUT_MIX);
  1347. #define KSAUDFNAME_WAVE_OUT_MIX DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_OUT_MIX)
  1348.  
  1349. #define STATIC_KSAUDFNAME_MONO_OUT\
  1350.     0xf9b41dc3L, 0x96e2, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1351. DEFINE_GUIDSTRUCT("F9B41DC3-96E2-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT);
  1352. #define KSAUDFNAME_MONO_OUT DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT)
  1353.  
  1354. #define STATIC_KSAUDFNAME_STEREO_MIX\
  1355.     0xdff077L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1356. DEFINE_GUIDSTRUCT("00DFF077-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX);
  1357. #define KSAUDFNAME_STEREO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX)
  1358.  
  1359. #define STATIC_KSAUDFNAME_MONO_MIX\
  1360.     0xdff078L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1361. DEFINE_GUIDSTRUCT("00DFF078-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX);
  1362. #define KSAUDFNAME_MONO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX)
  1363.  
  1364. #define STATIC_KSAUDFNAME_MONO_OUT_VOLUME\
  1365.     0x1ad247ebL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1366. DEFINE_GUIDSTRUCT("1AD247EB-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT_VOLUME);
  1367. #define KSAUDFNAME_MONO_OUT_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_VOLUME)
  1368.  
  1369. #define STATIC_KSAUDFNAME_MONO_OUT_MUTE\
  1370.     0x1ad247ecL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1371. DEFINE_GUIDSTRUCT("1AD247EC-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT_MUTE);
  1372. #define KSAUDFNAME_MONO_OUT_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_MUTE)
  1373.  
  1374. #define STATIC_KSAUDFNAME_STEREO_MIX_VOLUME\
  1375.     0x1ad247edL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1376. DEFINE_GUIDSTRUCT("1AD247ED-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX_VOLUME);
  1377. #define KSAUDFNAME_STEREO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_VOLUME)
  1378.  
  1379. #define STATIC_KSAUDFNAME_STEREO_MIX_MUTE\
  1380.     0x22b0eafdL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1381. DEFINE_GUIDSTRUCT("22B0EAFD-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX_MUTE);
  1382. #define KSAUDFNAME_STEREO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_MUTE)
  1383.  
  1384. #define STATIC_KSAUDFNAME_MONO_MIX_VOLUME\
  1385.     0x22b0eafeL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1386. DEFINE_GUIDSTRUCT("22B0EAFE-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX_VOLUME);
  1387. #define KSAUDFNAME_MONO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_VOLUME)
  1388.  
  1389. #define STATIC_KSAUDFNAME_MONO_MIX_MUTE\
  1390.     0x2bc31d69L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1391. DEFINE_GUIDSTRUCT("2BC31D69-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX_MUTE);
  1392. #define KSAUDFNAME_MONO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_MUTE)
  1393.  
  1394. #define STATIC_KSAUDFNAME_MICROPHONE_BOOST\
  1395.     0x2bc31d6aL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1396. DEFINE_GUIDSTRUCT("2BC31D6A-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MICROPHONE_BOOST);
  1397. #define KSAUDFNAME_MICROPHONE_BOOST DEFINE_GUIDNAMED(KSAUDFNAME_MICROPHONE_BOOST)
  1398.  
  1399. #define STATIC_KSAUDFNAME_ALTERNATE_MICROPHONE\
  1400.     0x2bc31d6bL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1401. DEFINE_GUIDSTRUCT("2BC31D6B-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_ALTERNATE_MICROPHONE);
  1402. #define KSAUDFNAME_ALTERNATE_MICROPHONE DEFINE_GUIDNAMED(KSAUDFNAME_ALTERNATE_MICROPHONE)
  1403.  
  1404. #define STATIC_KSAUDFNAME_3D_DEPTH\
  1405.     0x63ff5747L, 0x991f, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1406. DEFINE_GUIDSTRUCT("63FF5747-991F-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_3D_DEPTH);
  1407. #define KSAUDFNAME_3D_DEPTH DEFINE_GUIDNAMED(KSAUDFNAME_3D_DEPTH)
  1408.  
  1409. #define STATIC_KSAUDFNAME_3D_CENTER\
  1410.     0x9f0670b4L, 0x991f, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1411. DEFINE_GUIDSTRUCT("9F0670B4-991F-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_3D_CENTER);
  1412. #define KSAUDFNAME_3D_CENTER DEFINE_GUIDNAMED(KSAUDFNAME_3D_CENTER)
  1413.  
  1414. #define STATIC_KSAUDFNAME_VIDEO_VOLUME\
  1415.     0x9b46e708L, 0x992a, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1416. DEFINE_GUIDSTRUCT("9B46E708-992A-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_VIDEO_VOLUME);
  1417. #define KSAUDFNAME_VIDEO_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_VOLUME)
  1418.  
  1419. #define STATIC_KSAUDFNAME_VIDEO_MUTE\
  1420.     0x9b46e709L, 0x992a, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1421. DEFINE_GUIDSTRUCT("9B46E709-992A-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_VIDEO_MUTE);
  1422. #define KSAUDFNAME_VIDEO_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_MUTE)
  1423.  
  1424. #define STATIC_KSAUDFNAME_VIDEO\
  1425.     0x915daec4L, 0xa434, 0x11d2, 0xac, 0x52, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
  1426. DEFINE_GUIDSTRUCT("915DAEC4-A434-11d2-AC52-00C04F8EFB68", KSAUDFNAME_VIDEO);
  1427. #define KSAUDFNAME_VIDEO DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO)
  1428.  
  1429. // Internal topology node pin definitions
  1430.  
  1431. #define KSNODEPIN_STANDARD_IN       1
  1432. #define KSNODEPIN_STANDARD_OUT      0
  1433.  
  1434. #define KSNODEPIN_SUM_MUX_IN        1   // can be >= 1
  1435. #define KSNODEPIN_SUM_MUX_OUT       0
  1436.  
  1437. #define KSNODEPIN_DEMUX_IN          0
  1438. #define KSNODEPIN_DEMUX_OUT         1   // can be >= 1
  1439.  
  1440. #define KSNODEPIN_AEC_RENDER_IN     1
  1441. #define KSNODEPIN_AEC_RENDER_OUT    0
  1442. #define KSNODEPIN_AEC_CAPTURE_IN    2
  1443. #define KSNODEPIN_AEC_CAPTURE_OUT   3
  1444.  
  1445. //===========================================================================
  1446. //===========================================================================
  1447.  
  1448. #define STATIC_KSMETHODSETID_Wavetable\
  1449.     0xDCEF31EBL, 0xD907, 0x11D0, 0x95, 0x83, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1450. DEFINE_GUIDSTRUCT("DCEF31EB-D907-11D0-9583-00C04FB925D3", KSMETHODSETID_Wavetable);
  1451. #define KSMETHODSETID_Wavetable DEFINE_GUIDNAMED(KSMETHODSETID_Wavetable)
  1452.  
  1453. typedef enum {
  1454.     KSMETHOD_WAVETABLE_WAVE_ALLOC,
  1455.     KSMETHOD_WAVETABLE_WAVE_FREE,
  1456.     KSMETHOD_WAVETABLE_WAVE_FIND,
  1457.     KSMETHOD_WAVETABLE_WAVE_WRITE
  1458. } KSMETHOD_WAVETABLE;
  1459.  
  1460. typedef struct {
  1461.     KSIDENTIFIER        Identifier;                     // wave identifier
  1462.     ULONG               Size;                           // wave size
  1463.     BOOL                Looped;                         // wave looped flag
  1464.     ULONG               LoopPoint;                      // wave loop point
  1465.     BOOL                InROM;                          // wave InROM flag
  1466.     KSDATAFORMAT        Format;                         // wave format
  1467. } KSWAVETABLE_WAVE_DESC, *PKSWAVETABLE_WAVE_DESC;
  1468.  
  1469.  
  1470. //===========================================================================
  1471. //===========================================================================
  1472.  
  1473. /*
  1474.     Property sets and items
  1475. */
  1476.  
  1477. //===========================================================================
  1478. //===========================================================================
  1479.  
  1480. #define STATIC_KSPROPSETID_Itd3d\
  1481.     0x6429f090L, 0x9fd9, 0x11d0, 0xa7, 0x5b, 0x00, 0xa0, 0xc9, 0x03, 0x65, 0xe3
  1482. DEFINE_GUIDSTRUCT("6429f090-9fd9-11d0-a75b-00a0c90365e3", KSPROPSETID_Itd3d);
  1483. #define KSPROPSETID_Itd3d DEFINE_GUIDNAMED(KSPROPSETID_Itd3d)
  1484.  
  1485. typedef enum {
  1486.     KSPROPERTY_ITD3D_PARAMS = 0
  1487. } KSPROPERTY_ITD3D;
  1488.  
  1489. //===========================================================================
  1490. //===========================================================================
  1491.  
  1492. #define STATIC_KSPROPSETID_Hrtf3d\
  1493.     0xb66decb0L, 0xa083, 0x11d0, 0x85, 0x1e, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
  1494. DEFINE_GUIDSTRUCT("b66decb0-a083-11d0-851e-00c04fd9baf3", KSPROPSETID_Hrtf3d);
  1495. #define KSPROPSETID_Hrtf3d DEFINE_GUIDNAMED(KSPROPSETID_Hrtf3d)
  1496.  
  1497. typedef enum {
  1498.     KSPROPERTY_HRTF3D_PARAMS = 0,
  1499.     KSPROPERTY_HRTF3D_INITIALIZE,
  1500.     KSPROPERTY_HRTF3D_FILTER_FORMAT
  1501. } KSPROPERTY_HRTF3D;
  1502.  
  1503.  
  1504. //===========================================================================
  1505. //===========================================================================
  1506.  
  1507. #define STATIC_KSPROPSETID_Wave_Queued\
  1508.     0x16a15b10L, 0x16f0, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
  1509. DEFINE_GUIDSTRUCT("16a15b10-16f0-11d0-a195-0020afd156e4", KSPROPSETID_Wave_Queued);
  1510. #define KSPROPSETID_Wave_Queued DEFINE_GUIDNAMED(KSPROPSETID_Wave_Queued)
  1511.  
  1512. #define KSPROPERTY_WAVE_QUEUED_POSITION                 0x00000001
  1513.  
  1514. #define STATIC_KSMETHODSETID_Wave_Queued\
  1515.     0x7432c160L, 0x8827, 0x11cf, 0xa1, 0x02, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
  1516. DEFINE_GUIDSTRUCT("7432c160-8827-11cf-a102-0020afd156e4", KSMETHODSETID_Wave_Queued);
  1517. #define KSMETHODSETID_Wave_Queued DEFINE_GUIDNAMED(KSMETHODSETID_Wave_Queued)
  1518.  
  1519. #define KSMETHOD_WAVE_QUEUED_BREAKLOOP                  0x00000001
  1520.  
  1521. #define STATIC_KSPROPSETID_Wave\
  1522.     0x924e54b0L, 0x630f, 0x11cf, 0xad, 0xa7, 0x08, 0x00, 0x3e, 0x30, 0x49, 0x4a
  1523. DEFINE_GUIDSTRUCT("924e54b0-630f-11cf-ada7-08003e30494a", KSPROPSETID_Wave);
  1524. #define KSPROPSETID_Wave DEFINE_GUIDNAMED(KSPROPSETID_Wave)
  1525.  
  1526. typedef enum {
  1527.     KSPROPERTY_WAVE_COMPATIBLE_CAPABILITIES,
  1528.     KSPROPERTY_WAVE_INPUT_CAPABILITIES,
  1529.     KSPROPERTY_WAVE_OUTPUT_CAPABILITIES,
  1530.     KSPROPERTY_WAVE_BUFFER,
  1531.     KSPROPERTY_WAVE_FREQUENCY,
  1532.     KSPROPERTY_WAVE_VOLUME,
  1533.     KSPROPERTY_WAVE_PAN
  1534. } KSPROPERTY_WAVE;
  1535.  
  1536. typedef struct {
  1537.     ULONG        ulDeviceType;
  1538. } KSWAVE_COMPATCAPS, *PKSWAVE_COMPATCAPS;
  1539.  
  1540. #define KSWAVE_COMPATCAPS_INPUT                 0x00000000
  1541. #define KSWAVE_COMPATCAPS_OUTPUT                0x00000001
  1542.  
  1543. typedef struct {
  1544.     ULONG  MaximumChannelsPerConnection;
  1545.     ULONG  MinimumBitsPerSample;
  1546.     ULONG  MaximumBitsPerSample;
  1547.     ULONG  MinimumSampleFrequency;
  1548.     ULONG  MaximumSampleFrequency;
  1549.     ULONG  TotalConnections;
  1550.     ULONG  ActiveConnections;
  1551. } KSWAVE_INPUT_CAPABILITIES, *PKSWAVE_INPUT_CAPABILITIES;
  1552.  
  1553. typedef struct {
  1554.     ULONG  MaximumChannelsPerConnection;
  1555.     ULONG  MinimumBitsPerSample;
  1556.     ULONG  MaximumBitsPerSample;
  1557.     ULONG  MinimumSampleFrequency;
  1558.     ULONG  MaximumSampleFrequency;
  1559.     ULONG  TotalConnections;
  1560.     ULONG  StaticConnections;
  1561.     ULONG  StreamingConnections;
  1562.     ULONG  ActiveConnections;
  1563.     ULONG  ActiveStaticConnections;
  1564.     ULONG  ActiveStreamingConnections;
  1565.     ULONG  Total3DConnections;
  1566.     ULONG  Static3DConnections;
  1567.     ULONG  Streaming3DConnections;
  1568.     ULONG  Active3DConnections;
  1569.     ULONG  ActiveStatic3DConnections;
  1570.     ULONG  ActiveStreaming3DConnections;
  1571.     ULONG  TotalSampleMemory;
  1572.     ULONG  FreeSampleMemory;
  1573.     ULONG  LargestFreeContiguousSampleMemory;
  1574. } KSWAVE_OUTPUT_CAPABILITIES, *PKSWAVE_OUTPUT_CAPABILITIES;
  1575.  
  1576. typedef struct {
  1577.     LONG  LeftAttenuation;
  1578.     LONG  RightAttenuation;
  1579. } KSWAVE_VOLUME, *PKSWAVE_VOLUME;
  1580.  
  1581. #define KSWAVE_BUFFER_ATTRIBUTEF_LOOPING   0x00000001
  1582. #define KSWAVE_BUFFER_ATTRIBUTEF_STATIC    0x00000002
  1583.  
  1584. typedef struct {
  1585.     ULONG   Attributes;
  1586.     ULONG   BufferSize;
  1587.     PVOID   BufferAddress;
  1588. } KSWAVE_BUFFER, *PKSWAVE_BUFFER;
  1589.  
  1590. //===========================================================================
  1591. //===========================================================================
  1592.  
  1593. #define STATIC_KSMUSIC_TECHNOLOGY_PORT\
  1594.     0x86C92E60L, 0x62E8, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1595. DEFINE_GUIDSTRUCT("86C92E60-62E8-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_PORT);
  1596. #define KSMUSIC_TECHNOLOGY_PORT DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_PORT)
  1597.  
  1598. #define STATIC_KSMUSIC_TECHNOLOGY_SQSYNTH\
  1599.     0x0ECF4380L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1600. DEFINE_GUIDSTRUCT("0ECF4380-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_SQSYNTH);
  1601. #define KSMUSIC_TECHNOLOGY_SQSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SQSYNTH)
  1602.  
  1603. #define STATIC_KSMUSIC_TECHNOLOGY_FMSYNTH\
  1604.     0x252C5C80L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1605. DEFINE_GUIDSTRUCT("252C5C80-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_FMSYNTH);
  1606. #define KSMUSIC_TECHNOLOGY_FMSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_FMSYNTH)
  1607.  
  1608. #define STATIC_KSMUSIC_TECHNOLOGY_WAVETABLE\
  1609.     0x394EC7C0L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1610. DEFINE_GUIDSTRUCT("394EC7C0-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_WAVETABLE);
  1611. #define KSMUSIC_TECHNOLOGY_WAVETABLE DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_WAVETABLE)
  1612.  
  1613. #define STATIC_KSMUSIC_TECHNOLOGY_SWSYNTH\
  1614.     0x37407736L, 0x3620, 0x11D1, 0x85, 0xD3, 0x00, 0x00, 0xF8, 0x75, 0x43, 0x80
  1615. DEFINE_GUIDSTRUCT("37407736-3620-11D1-85D3-0000F8754380", KSMUSIC_TECHNOLOGY_SWSYNTH);
  1616. #define KSMUSIC_TECHNOLOGY_SWSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SWSYNTH)
  1617.  
  1618. #define STATIC_KSPROPSETID_WaveTable\
  1619.     0x8539E660L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1620. DEFINE_GUIDSTRUCT("8539E660-62E9-11CF-A5D6-28DB04C10000", KSPROPSETID_WaveTable);
  1621. #define KSPROPSETID_WaveTable DEFINE_GUIDNAMED(KSPROPSETID_WaveTable)
  1622.  
  1623. typedef enum {
  1624.     KSPROPERTY_WAVETABLE_LOAD_SAMPLE,
  1625.     KSPROPERTY_WAVETABLE_UNLOAD_SAMPLE,
  1626.     KSPROPERTY_WAVETABLE_MEMORY,
  1627.     KSPROPERTY_WAVETABLE_VERSION
  1628. } KSPROPERTY_WAVETABLE;
  1629.  
  1630. typedef struct {
  1631.    KSDATARANGE              DataRange;
  1632.    GUID                     Technology;
  1633.    ULONG                    Channels;
  1634.    ULONG                    Notes;
  1635.    ULONG                    ChannelMask;
  1636. } KSDATARANGE_MUSIC, *PKSDATARANGE_MUSIC;
  1637.  
  1638. //===========================================================================
  1639.  
  1640. #define STATIC_KSEVENTSETID_Cyclic\
  1641.     0x142C1AC0L, 0x072A, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1642. DEFINE_GUIDSTRUCT("142C1AC0-072A-11D0-A5D6-28DB04C10000", KSEVENTSETID_Cyclic);
  1643. #define KSEVENTSETID_Cyclic DEFINE_GUIDNAMED(KSEVENTSETID_Cyclic)
  1644.  
  1645. typedef enum {
  1646.     KSEVENT_CYCLIC_TIME_INTERVAL,
  1647. } KSEVENT_CYCLIC_TIME;
  1648.  
  1649. #define STATIC_KSPROPSETID_Cyclic\
  1650.     0x3FFEAEA0L, 0x2BEE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1651. DEFINE_GUIDSTRUCT("3FFEAEA0-2BEE-11CF-A5D6-28DB04C10000", KSPROPSETID_Cyclic);
  1652. #define KSPROPSETID_Cyclic DEFINE_GUIDNAMED(KSPROPSETID_Cyclic)
  1653.  
  1654. typedef enum {
  1655.     KSPROPERTY_CYCLIC_POSITION,
  1656. } KSPROPERTY_CYCLIC;
  1657.  
  1658. //===========================================================================
  1659. #define STATIC_KSEVENTSETID_AudioControlChange\
  1660.     0xE85E9698L, 0xFA2F, 0x11D1, 0x95, 0xBD, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
  1661. DEFINE_GUIDSTRUCT("E85E9698-FA2F-11D1-95BD-00C04FB925D3", KSEVENTSETID_AudioControlChange);
  1662. #define KSEVENTSETID_AudioControlChange DEFINE_GUIDNAMED(KSEVENTSETID_AudioControlChange)
  1663.  
  1664. typedef enum {
  1665.     KSEVENT_CONTROL_CHANGE,
  1666. } KSEVENT_AUDIO_CONTROL_CHANGE;
  1667.  
  1668. //===========================================================================
  1669.  
  1670. #define STATIC_KSEVENTSETID_LoopedStreaming\
  1671.     0x4682B940L, 0xC6EF, 0x11D0, 0x96, 0xD8, 0x00, 0xAA, 0x00, 0x51, 0xE5, 0x1D
  1672. DEFINE_GUIDSTRUCT("4682B940-C6EF-11D0-96D8-00AA0051E51D", KSEVENTSETID_LoopedStreaming);
  1673. #define KSEVENTSETID_LoopedStreaming DEFINE_GUIDNAMED(KSEVENTSETID_LoopedStreaming)
  1674.  
  1675. typedef enum {
  1676.     KSEVENT_LOOPEDSTREAMING_POSITION,
  1677. } KSEVENT_LOOPEDSTREAMING;
  1678.  
  1679. typedef struct {
  1680.     KSEVENTDATA KsEventData;
  1681. #if defined(_NTDDK_)
  1682.     ULONGLONG   Position;
  1683. #else // !_NTDDK_
  1684.     DWORDLONG   Position;
  1685. #endif // !_NTDDK_
  1686. } LOOPEDSTREAMING_POSITION_EVENT_DATA, *PLOOPEDSTREAMING_POSITION_EVENT_DATA ;
  1687.  
  1688. #define STATIC_KSEVENTSETID_Sysaudio \
  1689.     0x04800320L, 0x4491, 0x11D1, 0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00
  1690. DEFINE_GUIDSTRUCT("04800320-4491-11D1-A050-405705C10000", KSEVENTSETID_Sysaudio);
  1691. #define KSEVENTSETID_Sysaudio DEFINE_GUIDNAMED(KSEVENTSETID_Sysaudio)
  1692.  
  1693. typedef enum {
  1694.     KSEVENT_SYSAUDIO_ADDREMOVE_DEVICE,
  1695. } KSEVENT_SYSAUDIO;
  1696.  
  1697. #define STATIC_KSPROPSETID_Sysaudio\
  1698.     0xCBE3FAA0L, 0xCC75, 0x11D0, 0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6
  1699. DEFINE_GUIDSTRUCT("CBE3FAA0-CC75-11D0-B465-00001A1818E6", KSPROPSETID_Sysaudio);
  1700. #define KSPROPSETID_Sysaudio DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio)
  1701.  
  1702. typedef enum {
  1703.     KSPROPERTY_SYSAUDIO_DEVICE_COUNT = 1,
  1704.     KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME,
  1705.     KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE,
  1706.     KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME,
  1707.     KSPROPERTY_SYSAUDIO_SELECT_GRAPH,
  1708.     KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE,
  1709.     KSPROPERTY_SYSAUDIO_DEVICE_DEFAULT,
  1710.     KSPROPERTY_SYSAUDIO_ALWAYS_CREATE_VIRTUAL_SOURCE,
  1711.     KSPROPERTY_SYSAUDIO_ADDREMOVE_LOCK,
  1712.     KSPROPERTY_SYSAUDIO_ADDREMOVE_UNLOCK,
  1713.     KSPROPERTY_SYSAUDIO_RENDER_PIN_INSTANCES,
  1714.     KSPROPERTY_SYSAUDIO_RENDER_CONNECTION_INDEX,
  1715.     KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE_ONLY,
  1716.     KSPROPERTY_SYSAUDIO_INSTANCE_INFO,
  1717.     KSPROPERTY_SYSAUDIO_PREFERRED_DEVICE
  1718. } KSPROPERTY_SYSAUDIO;
  1719.  
  1720. typedef struct {
  1721.     KSPROPERTY Property;
  1722.     GUID PinCategory;
  1723.     GUID PinName;
  1724. } SYSAUDIO_CREATE_VIRTUAL_SOURCE, *PSYSAUDIO_CREATE_VIRTUAL_SOURCE;
  1725.  
  1726. typedef struct {
  1727.     KSPROPERTY Property;
  1728.     ULONG PinId;
  1729.     ULONG NodeId;
  1730.     ULONG Flags;
  1731.     ULONG Reserved;
  1732. } SYSAUDIO_SELECT_GRAPH, *PSYSAUDIO_SELECT_GRAPH;
  1733.  
  1734. typedef struct {
  1735.     KSPROPERTY Property;
  1736.     ULONG Flags;
  1737.     ULONG DeviceNumber;
  1738. } SYSAUDIO_INSTANCE_INFO, *PSYSAUDIO_INSTANCE_INFO;
  1739.  
  1740. #define SYSAUDIO_FLAGS_DONT_COMBINE_PINS        0x00000001
  1741.  
  1742. typedef struct {
  1743.     KSPROPERTY Property;
  1744.     ULONG Flags;
  1745.     ULONG Index;            // KSPROPERTY_SYSAUDIO_DEFAULT_TYPE
  1746. } SYSAUDIO_PREFERRED_DEVICE, *PSYSAUDIO_PREFERRED_DEVICE;
  1747.  
  1748. #define SYSAUDIO_FLAGS_CLEAR_PREFERRED          0x00000002
  1749.  
  1750. typedef enum {              // preferred device index
  1751.     KSPROPERTY_SYSAUDIO_NORMAL_DEFAULT = 0,
  1752.     KSPROPERTY_SYSAUDIO_PLAYBACK_DEFAULT,
  1753.     KSPROPERTY_SYSAUDIO_RECORD_DEFAULT,
  1754.     KSPROPERTY_SYSAUDIO_MIDI_DEFAULT,
  1755.     KSPROPERTY_SYSAUDIO_MIXER_DEFAULT
  1756. } KSPROPERTY_SYSAUDIO_DEFAULT_TYPE;
  1757.  
  1758. #define STATIC_KSPROPSETID_Sysaudio_Pin \
  1759.     0xA3A53220L, 0xC6E4, 0x11D0, 0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6
  1760. DEFINE_GUIDSTRUCT("A3A53220-C6E4-11D0-B465-00001A1818E6", KSPROPSETID_Sysaudio_Pin);
  1761. #define KSPROPSETID_Sysaudio_Pin DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio_Pin)
  1762.  
  1763. typedef enum {
  1764.     KSPROPERTY_SYSAUDIO_TOPOLOGY_CONNECTION_INDEX,
  1765.     KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE,
  1766.     KSPROPERTY_SYSAUDIO_PIN_VOLUME_NODE
  1767. } KSPROPERTY_SYSAUDIO_PIN;
  1768.  
  1769. typedef struct {
  1770.     KSPROPERTY  Property;
  1771.     ULONG       MixerPinId;
  1772.     ULONG       Reserved;
  1773. } SYSAUDIO_ATTACH_VIRTUAL_SOURCE, *PSYSAUDIO_ATTACH_VIRTUAL_SOURCE;
  1774.  
  1775. typedef struct {
  1776.     KSPROPERTY  Property;
  1777.     ULONG       NodeId;
  1778.     ULONG       Reserved;
  1779. } KSNODEPROPERTY, *PKSNODEPROPERTY;
  1780.  
  1781. typedef struct {
  1782.     KSNODEPROPERTY NodeProperty;
  1783.     LONG           Channel;                   // value to get or set
  1784.     ULONG          Reserved;
  1785. } KSNODEPROPERTY_AUDIO_CHANNEL, *PKSNODEPROPERTY_AUDIO_CHANNEL;
  1786.  
  1787. typedef struct {
  1788.     KSNODEPROPERTY NodeProperty;
  1789.     ULONG   DevSpecificId;
  1790.     ULONG   DeviceInfo;
  1791.     ULONG   Length;
  1792. } KSNODEPROPERTY_AUDIO_DEV_SPECIFIC, *PKSNODEPROPERTY_AUDIO_DEV_SPECIFIC;
  1793.  
  1794. typedef struct {
  1795.     KSNODEPROPERTY   NodeProperty;
  1796.     PVOID            ListenerId;
  1797. #ifndef _WIN64
  1798.     ULONG            Reserved;
  1799. #endif // _WIN64
  1800. } KSNODEPROPERTY_AUDIO_3D_LISTENER, *PKSNODEPROPERTY_AUDIO_3D_LISTENER;
  1801.  
  1802. typedef struct {
  1803.     KSNODEPROPERTY   NodeProperty;
  1804.     PVOID            AppContext;
  1805.     ULONG            Length;
  1806. #ifndef _WIN64
  1807.     ULONG            Reserved;
  1808. #endif // _WIN64
  1809. } KSNODEPROPERTY_AUDIO_PROPERTY, *PKSNODEPROPERTY_AUDIO_PROPERTY;
  1810.  
  1811. //===========================================================================
  1812.  
  1813. #define STATIC_KSPROPSETID_Linear\
  1814.     0x5A2FFE80L, 0x16B9, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1815. DEFINE_GUIDSTRUCT("5A2FFE80-16B9-11D0-A5D6-28DB04C10000", KSPROPSETID_Linear);
  1816. #define KSPROPSETID_Linear DEFINE_GUIDNAMED(KSPROPSETID_Linear)
  1817.  
  1818. typedef enum {
  1819.     KSPROPERTY_LINEAR_POSITION,
  1820. } KSPROPERTY_LINEAR;
  1821.  
  1822. //===========================================================================
  1823.  
  1824. //
  1825. // Midi definitions
  1826. //
  1827.  
  1828. /*
  1829.     Formats
  1830. */
  1831.  
  1832. #define STATIC_KSDATAFORMAT_TYPE_MUSIC\
  1833.     0xE725D360L, 0x62CC, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1834. DEFINE_GUIDSTRUCT("E725D360-62CC-11CF-A5D6-28DB04C10000", KSDATAFORMAT_TYPE_MUSIC);
  1835. #define KSDATAFORMAT_TYPE_MUSIC DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MUSIC)
  1836.  
  1837. // 'mids' == MEDIATYPE_Midi
  1838. #define STATIC_KSDATAFORMAT_TYPE_MIDI\
  1839.     0x7364696DL, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
  1840. DEFINE_GUIDSTRUCT("7364696D-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_MIDI);
  1841. #define KSDATAFORMAT_TYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MIDI)
  1842.  
  1843. #define STATIC_KSDATAFORMAT_SUBTYPE_MIDI\
  1844.     0x1D262760L, 0xE957, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1845. DEFINE_GUIDSTRUCT("1D262760-E957-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SUBTYPE_MIDI);
  1846. #define KSDATAFORMAT_SUBTYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI)
  1847.  
  1848. #define STATIC_KSDATAFORMAT_SUBTYPE_MIDI_BUS\
  1849.     0x2CA15FA0L, 0x6CFE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
  1850. DEFINE_GUIDSTRUCT("2CA15FA0-6CFE-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SUBTYPE_MIDI_BUS);
  1851. #define KSDATAFORMAT_SUBTYPE_MIDI_BUS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI_BUS)
  1852.  
  1853. #define STATIC_KSDATAFORMAT_SUBTYPE_RIFFMIDI\
  1854.     0x4995DAF0L, 0x9EE6, 0x11D0, 0xA4, 0x0E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  1855. DEFINE_GUIDSTRUCT("4995DAF0-9EE6-11D0-A40E-00A0C9223196", KSDATAFORMAT_SUBTYPE_RIFFMIDI);
  1856. #define KSDATAFORMAT_SUBTYPE_RIFFMIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFMIDI)
  1857.  
  1858. /*
  1859.     KSDATAFORMAT_SUBTYPE_DIRECTMUSIC
  1860.     see DMusicKS.h
  1861. */
  1862.  
  1863. // WARNING! This structure MUST be dword aligned
  1864. // regardless of the number of data bytes.
  1865.  
  1866. typedef struct {
  1867.     ULONG   TimeDeltaMs;        // Delta Milliseconds from the previous midiformat
  1868.                                 // in the packet. The first midiformat in the packet
  1869.                                 // is a delta from the PTS in the KSSTREAM_HEADER.
  1870.     ULONG   ByteCount;          // Number of bytes of data that follow this struct.
  1871. } KSMUSICFORMAT, *PKSMUSICFORMAT;
  1872.  
  1873. //
  1874. // This entire set of MPEG Standard/Dialect Guids are obsolete. Do not use them.
  1875. //
  1876. //====================================================================================================
  1877. //====================================================================================================
  1878. // The following official MPEG Formats, Subtypes and Specifiers are listed as required or optional
  1879. // These official MPEG GUIDs are the preferred method of supporting MPEG/AC-3 media types in new code.
  1880. // Older MPEG GUIDs should also be supported for compatibilty, but these new modes are still required.
  1881. //====================================================================================================
  1882. //====================================================================================================
  1883.  
  1884. /*
  1885. This is a summary of what media types/specifiers will be required for all DVD+DSS+DVB+DTV MPEG decoders.
  1886. These media types are what the decoder driver must accept, hardware support for all of these media types
  1887. may or may not actually be provided by the decoder natively.  These media types are intended to define
  1888. the "officially" supported MPEG/AC-3 media types that all WHQL certified decoders must implement.  This
  1889. specifically includes driver and/or hardware support for all the required standards and dialects.
  1890.  
  1891. All MPEG video decoders must support all of the MPEG video modes shown as [required] below.
  1892. All MPEG audio decoders must support all of the MPEG audio modes shown as [required] below.
  1893. All AC-3 audio decoders must support all of the AC-3 audio modes shown as [required] below.
  1894. The line items shown as [optional] need not be implemented, but are possible formats that might be implemented.
  1895.  
  1896. Note that the input/output pin formats are defined by 2 or 3 GUIDs: TYPE, SUBTYPE, and maybe SPECIFIER.
  1897. The specifiers are included if the data format is a "dialect" that needs to be differentiated during decoding.
  1898. The decoder MUST be prepared to deal with ALL requests for _required_ "Standard" formats OR _required_ "Dialects".
  1899.  
  1900. STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM         [required]
  1901.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO            [required]
  1902.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO           [optional]
  1903.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO            [required]
  1904.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO           [optional]
  1905.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  1906.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  1907.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  1908.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [optional]
  1909.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  1910.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  1911. STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET                [required]
  1912.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO            [optional]
  1913.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO           [optional]
  1914.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO            [optional]
  1915.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO           [optional]
  1916.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  1917.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  1918.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  1919.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [required]
  1920.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  1921.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  1922. STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER               [required]
  1923.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO            [required]
  1924.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO           [required]
  1925.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO            [required]
  1926.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO           [optional]
  1927.     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO              [required]
  1928.         STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO             [optional]
  1929.  
  1930. Note that the SPECIFIER GUIDs normally identify particular versions of MPEG such as DSS and DVD.
  1931. This approach was taken to minimize the number of DSS/DVB/DVD/DTV etc. media SUBTYPES.
  1932. These specifiers are currently required to disambiguate MPEG syntax _parsing_ by the decoder
  1933. using alternate parsing routines or downloadable firmware or hardware decode settings.
  1934.  
  1935. In the future these specifiers will be extended to cover new KS MPEG flavors such as DVB and DTV.
  1936. Thus, the optional specifiers will be subject to clarification and/or definition as they are needed.
  1937.  
  1938. Important note: Per the ITU MPEG specs, MPEG 2 media may contain pure MPEG 1 syntax and
  1939. any "MPEG 2" PES packets may actually contain MPEG 1 payloads and MPEG 1 syntax.  Some MPEG
  1940. broadcasts can revert from MPEG2 to MPEG1 format data at their discretion, without warning.
  1941.  
  1942. CAUTION: Decoders MUST attempt to process MPEG data AS SOON AS POSSIBLE after reception.
  1943. In particular, elementary MPEG or MPEG PES packet streams should not be aggregated into DVD
  1944. "pack headers" internally before submission to the codec hardware if AT ALL POSSIBLE.  The
  1945. reason is that mpeg data may need to be processed immediately but there may be no additional
  1946. MPEG data forthcoming to fill up the PES packet OR DVD "pack" in a timely fashion.  This is
  1947. particularly true of MPEG dialects that utilize "repeat field signally" to reuse the last
  1948. decoded MPEG video field.
  1949.  
  1950. */
  1951.  
  1952. /////////////////////////////////////////////////////////////////////////
  1953. // The major data type GUIDs that define the data packet encapsulation //
  1954. /////////////////////////////////////////////////////////////////////////
  1955.  
  1956. // STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM
  1957. #define STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM \
  1958.     0x36523b11L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  1959. DEFINE_GUIDSTRUCT("36523B11-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM );
  1960. #define KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM)
  1961.  
  1962. // STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET
  1963. #define STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET \
  1964.     0x36523b12L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  1965. DEFINE_GUIDSTRUCT("36523B12-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_PES_PACKET );
  1966. #define KSDATAFORMAT_TYPE_STANDARD_PES_PACKET DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PES_PACKET)
  1967.  
  1968. // STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER
  1969. #define STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER \
  1970.     0x36523b13L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  1971. DEFINE_GUIDSTRUCT("36523B13-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER );
  1972. #define KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER)
  1973.  
  1974. ///////////////////////////////////////////////////////////////////////////////
  1975. // The minor data subtype GUIDs that define the exact class of the data type.//
  1976. ///////////////////////////////////////////////////////////////////////////////
  1977.  
  1978. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO
  1979. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO \
  1980.     0x36523b21L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  1981. DEFINE_GUIDSTRUCT("36523B21-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO );
  1982. #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO)
  1983.  
  1984. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO
  1985. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO \
  1986.     0x36523b22L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  1987. DEFINE_GUIDSTRUCT("36523B22-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO );
  1988. #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO)
  1989.  
  1990. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO
  1991. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO \
  1992.     0x36523b23L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  1993. DEFINE_GUIDSTRUCT("36523B23-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO );
  1994. #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO)
  1995.  
  1996. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO
  1997. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO \
  1998.     0x36523b24L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  1999. DEFINE_GUIDSTRUCT("36523B24-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO );
  2000. #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO)
  2001.  
  2002. // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO
  2003. #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO \
  2004.     0x36523b25L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2005. DEFINE_GUIDSTRUCT("36523B25-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO );
  2006. #define KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO)
  2007.  
  2008. ///////////////////////////////////////////////////////////////////////////////
  2009. // The low-level specifier GUIDs that define the flavor of the data subtype. //
  2010. // Some SUBTYPES, notably MPEG2_VIDEO, MPEG2_AUDIO have different dialects.  //
  2011. // These specifiers are intended to be accompanied by a specifier structure. //
  2012. ///////////////////////////////////////////////////////////////////////////////
  2013.  
  2014. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO
  2015. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO \
  2016.     0x36523b31L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2017. DEFINE_GUIDSTRUCT("36523B31-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO );
  2018. #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO)
  2019.  
  2020. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO
  2021. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO \
  2022.     0x36523b32L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2023. DEFINE_GUIDSTRUCT("36523B32-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO );
  2024. #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO)
  2025.  
  2026. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO    Associated with KS_MPEGVIDEOINFO2 defined later
  2027. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO \
  2028.     0x36523b33L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2029. DEFINE_GUIDSTRUCT("36523B33-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO );
  2030. #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO)
  2031.  
  2032. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO    Associated with KS_MPEGAUDIOINFO defined later
  2033. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO \
  2034.     0x36523b34L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2035. DEFINE_GUIDSTRUCT("36523B34-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO );
  2036. #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO)
  2037.  
  2038. // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO
  2039. #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO \
  2040.     0x36523b35L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
  2041. DEFINE_GUIDSTRUCT("36523B35-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO );
  2042. #define KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO)
  2043.  
  2044. //====================================================================================================
  2045. //====================================================================================================
  2046. //                              *** COMPATIBILITY WARNING ***
  2047. // The *following* older DSS, MPEG, DVD & AC-3 GUID definitions are retained for backward compability.
  2048. // These MPEG GUIDs should also be supported for compatibilty, but the above newer modes are still required.
  2049. //====================================================================================================
  2050. //====================================================================================================
  2051.  
  2052. //
  2053. // DSS definitions
  2054. //
  2055.  
  2056. #define STATIC_KSDATAFORMAT_SUBTYPE_DSS_VIDEO\
  2057.     0xa0af4f81L, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a
  2058. DEFINE_GUIDSTRUCT("a0af4f81-e163-11d0-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_DSS_VIDEO);
  2059. #define KSDATAFORMAT_SUBTYPE_DSS_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_VIDEO)
  2060.  
  2061. #define STATIC_KSDATAFORMAT_SUBTYPE_DSS_AUDIO\
  2062.     0xa0af4f82L, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a
  2063. DEFINE_GUIDSTRUCT("a0af4f82-e163-11d0-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_DSS_AUDIO);
  2064. #define KSDATAFORMAT_SUBTYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_AUDIO)
  2065.  
  2066. //
  2067. // End of obsolete MPEG definitions.
  2068. //
  2069.  
  2070. //
  2071. // mpeg 1 definitions
  2072. //
  2073. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Packet\
  2074.     0xe436eb80, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  2075. DEFINE_GUIDSTRUCT("e436eb80-524f-11ce-9F53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Packet);
  2076. #define KSDATAFORMAT_SUBTYPE_MPEG1Packet DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Packet)
  2077.  
  2078. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Payload\
  2079.     0xe436eb81, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  2080. DEFINE_GUIDSTRUCT("e436eb81-524f-11ce-9F53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Payload);
  2081. #define KSDATAFORMAT_SUBTYPE_MPEG1Payload DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Payload)
  2082.  
  2083. // MEDIASUBTYPE_MPEG1Video
  2084. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Video\
  2085.     0xe436eb86, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  2086. DEFINE_GUIDSTRUCT("e436eb86-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Video);
  2087. #define KSDATAFORMAT_SUBTYPE_MPEG1Video DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Video)
  2088.  
  2089. //FORMAT_MPEGVideo
  2090. #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO\
  2091.     0x05589f82L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
  2092. DEFINE_GUIDSTRUCT("05589f82-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO);
  2093. #define KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO)
  2094.  
  2095. //
  2096. // mpeg 2 definitions
  2097. //
  2098. #define STATIC_KSDATAFORMAT_TYPE_MPEG2_PES\
  2099.     0xe06d8020L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2100. DEFINE_GUIDSTRUCT("e06d8020-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_PES);
  2101. #define KSDATAFORMAT_TYPE_MPEG2_PES DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PES)
  2102.  
  2103. #define STATIC_KSDATAFORMAT_TYPE_MPEG2_PROGRAM\
  2104.     0xe06d8022L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2105. DEFINE_GUIDSTRUCT("e06d8022-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_PROGRAM);
  2106. #define KSDATAFORMAT_TYPE_MPEG2_PROGRAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PROGRAM)
  2107.  
  2108. #define STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT\
  2109.     0xe06d8023L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2110. DEFINE_GUIDSTRUCT("e06d8023-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_TRANSPORT);
  2111. #define KSDATAFORMAT_TYPE_MPEG2_TRANSPORT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_TRANSPORT)
  2112.  
  2113. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO\
  2114.     0xe06d8026L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2115. DEFINE_GUIDSTRUCT("e06d8026-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO);
  2116. #define KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO)
  2117.  
  2118. // use MPEGVIDEOINFO2 (defined below) with KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO
  2119. #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO\
  2120.     0xe06d80e3L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2121. DEFINE_GUIDSTRUCT("e06d80e3-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO);
  2122. #define KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO)
  2123.  
  2124.  
  2125. //
  2126. // Mpeg2 video properties
  2127. //
  2128.  
  2129.  
  2130. #define STATIC_KSPROPSETID_Mpeg2Vid\
  2131.     0xC8E11B60L, 0x0CC9, 0x11D0, 0xBD, 0x69, 0x00, 0x35, 0x05, 0xC1, 0x03, 0xA9
  2132. DEFINE_GUIDSTRUCT("C8E11B60-0CC9-11D0-BD69-003505C103A9", KSPROPSETID_Mpeg2Vid);
  2133. #define  KSPROPSETID_Mpeg2Vid DEFINE_GUIDNAMED( KSPROPSETID_Mpeg2Vid )
  2134.  
  2135.  
  2136. typedef enum {
  2137.     KSPROPERTY_MPEG2VID_MODES,          // available output modes of decoder
  2138.     KSPROPERTY_MPEG2VID_CUR_MODE,       // current mode of the decoder
  2139.     KSPROPERTY_MPEG2VID_4_3_RECT,       // output coordinates for 4:3 source
  2140.     KSPROPERTY_MPEG2VID_16_9_RECT,      // output coordinates for 16:9 source
  2141.     KSPROPERTY_MPEG2VID_16_9_PANSCAN,   // pan and scan vectors
  2142. } KSPROPERTY_MPEG2VID;
  2143.  
  2144. //
  2145. // bit field definitions for MPEG2 VIDEO mode
  2146. //
  2147.  
  2148. #define KSMPEGVIDMODE_PANSCAN   0x0001
  2149. #define KSMPEGVIDMODE_LTRBOX    0x0002
  2150. #define KSMPEGVIDMODE_SCALE     0x0004
  2151.  
  2152. //
  2153. // rectangle definitions for the 4/3 and 16/9 cropping properties of
  2154. // the MPEG2Video decoder
  2155. //
  2156.  
  2157. typedef struct _KSMPEGVID_RECT {
  2158.     ULONG StartX;
  2159.     ULONG StartY;
  2160.     ULONG EndX;
  2161.     ULONG EndY;
  2162. } KSMPEGVID_RECT, *PKSMPEGVID_RECT;
  2163.  
  2164. //
  2165. // Params for pan / scan
  2166. //
  2167.  
  2168.  
  2169. //
  2170. // MPEG2 Audio definition
  2171. //
  2172.  
  2173. #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO\
  2174.     0xe06d802bL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2175. DEFINE_GUIDSTRUCT("e06d802b-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO);
  2176. #define KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO)
  2177.  
  2178. #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO\
  2179.     0xe06d80e5L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2180. DEFINE_GUIDSTRUCT("e06d80e5-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO);
  2181. #define KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO)
  2182.  
  2183. //
  2184. // DVD LPCM Audio definition
  2185. //
  2186.  
  2187. #define STATIC_KSDATAFORMAT_SUBTYPE_LPCM_AUDIO\
  2188.     0xe06d8032L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2189. DEFINE_GUIDSTRUCT("e06d8032-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_LPCM_AUDIO);
  2190. #define KSDATAFORMAT_SUBTYPE_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_LPCM_AUDIO)
  2191.  
  2192. #define STATIC_KSDATAFORMAT_SPECIFIER_LPCM_AUDIO\
  2193.     0xe06d80e6L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2194. DEFINE_GUIDSTRUCT("e06d80e6-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_LPCM_AUDIO);
  2195. #define KSDATAFORMAT_SPECIFIER_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_LPCM_AUDIO)
  2196.  
  2197. //
  2198. // AC-3 definition
  2199. //
  2200.  
  2201. #define STATIC_KSDATAFORMAT_SUBTYPE_AC3_AUDIO\
  2202.     0xe06d802cL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2203. DEFINE_GUIDSTRUCT("e06d802c-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_AC3_AUDIO);
  2204. #define KSDATAFORMAT_SUBTYPE_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_AC3_AUDIO)
  2205.  
  2206. #define STATIC_KSDATAFORMAT_SPECIFIER_AC3_AUDIO\
  2207.     0xe06d80e4L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2208. DEFINE_GUIDSTRUCT("e06d80e4-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_AC3_AUDIO);
  2209. #define KSDATAFORMAT_SPECIFIER_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_AC3_AUDIO)
  2210.  
  2211. #define STATIC_KSPROPSETID_AC3\
  2212.     0xBFABE720L, 0x6E1F, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  2213. DEFINE_GUIDSTRUCT("BFABE720-6E1F-11D0-BCF2-444553540000", KSPROPSETID_AC3);
  2214. #define KSPROPSETID_AC3 DEFINE_GUIDNAMED(KSPROPSETID_AC3)
  2215.  
  2216. typedef enum {
  2217.     KSPROPERTY_AC3_ERROR_CONCEALMENT = 1,
  2218.     KSPROPERTY_AC3_ALTERNATE_AUDIO,
  2219.     KSPROPERTY_AC3_DOWNMIX,
  2220.     KSPROPERTY_AC3_BIT_STREAM_MODE,
  2221.     KSPROPERTY_AC3_DIALOGUE_LEVEL,
  2222.     KSPROPERTY_AC3_LANGUAGE_CODE,
  2223.     KSPROPERTY_AC3_ROOM_TYPE
  2224. } KSPROPERTY_AC3;
  2225.  
  2226. typedef struct  {
  2227.     BOOL        fRepeatPreviousBlock;
  2228.     BOOL        fErrorInCurrentBlock;
  2229. } KSAC3_ERROR_CONCEALMENT, *PKSAC3_ERROR_CONCEALMENT;
  2230.  
  2231. typedef struct {
  2232.     BOOL    fStereo;
  2233.     ULONG   DualMode;
  2234. } KSAC3_ALTERNATE_AUDIO, *PKSAC3_ALTERNATE_AUDIO;
  2235.  
  2236. #define KSAC3_ALTERNATE_AUDIO_1     1
  2237. #define KSAC3_ALTERNATE_AUDIO_2     2
  2238. #define KSAC3_ALTERNATE_AUDIO_BOTH  3
  2239.  
  2240. typedef struct {
  2241.     BOOL        fDownMix;
  2242.     BOOL        fDolbySurround;
  2243. } KSAC3_DOWNMIX, *PKSAC3_DOWNMIX;
  2244.  
  2245. typedef struct {
  2246.     LONG        BitStreamMode;
  2247. } KSAC3_BIT_STREAM_MODE, *PKSAC3_BIT_STREAM_MODE;
  2248.  
  2249. #define KSAC3_SERVICE_MAIN_AUDIO            0
  2250. #define KSAC3_SERVICE_NO_DIALOG             1
  2251. #define KSAC3_SERVICE_VISUALLY_IMPAIRED     2
  2252. #define KSAC3_SERVICE_HEARING_IMPAIRED      3
  2253. #define KSAC3_SERVICE_DIALOG_ONLY           4
  2254. #define KSAC3_SERVICE_COMMENTARY            5
  2255. #define KSAC3_SERVICE_EMERGENCY_FLASH       6
  2256. #define KSAC3_SERVICE_VOICE_OVER            7
  2257.  
  2258. typedef struct {
  2259.     ULONG   DialogueLevel;
  2260. } KSAC3_DIALOGUE_LEVEL, *PKSAC3_DIALOGUE_LEVEL;
  2261.  
  2262. typedef struct {
  2263.     BOOL    fLargeRoom;
  2264. } KSAC3_ROOM_TYPE, *PKSAC3_ROOM_TYPE;
  2265.  
  2266. //
  2267. // audio decoder output properties
  2268. //
  2269.  
  2270. #define STATIC_KSPROPSETID_AudioDecoderOut\
  2271.     0x6ca6e020L, 0x43bd, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9
  2272. DEFINE_GUIDSTRUCT("6ca6e020-43bd-11d0-bd6a-003505c103a9", KSPROPSETID_AudioDecoderOut);
  2273. #define KSPROPSETID_AudioDecoderOut DEFINE_GUIDNAMED(KSPROPSETID_AudioDecoderOut)
  2274.  
  2275. typedef enum {
  2276.     KSPROPERTY_AUDDECOUT_MODES,         // available output modes of decoder
  2277.     KSPROPERTY_AUDDECOUT_CUR_MODE,      // current mode of the decoder
  2278. } KSPROPERTY_AUDDECOUT;
  2279.  
  2280. #define KSAUDDECOUTMODE_STEREO_ANALOG   0x0001
  2281. #define KSAUDDECOUTMODE_PCM_51          0x0002
  2282. #define KSAUDDECOUTMODE_SPDIFF          0x0004
  2283.  
  2284.  
  2285.  
  2286. //
  2287. // subpicture definition
  2288. //
  2289.  
  2290. #define STATIC_KSDATAFORMAT_SUBTYPE_SUBPICTURE\
  2291.     0xe06d802dL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
  2292. DEFINE_GUIDSTRUCT("e06d802d-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_SUBPICTURE);
  2293. #define KSDATAFORMAT_SUBTYPE_SUBPICTURE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SUBPICTURE)
  2294.  
  2295.  
  2296. #define STATIC_KSPROPSETID_DvdSubPic\
  2297.     0xac390460L, 0x43af, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9
  2298. DEFINE_GUIDSTRUCT("ac390460-43af-11d0-bd6a-003505c103a9", KSPROPSETID_DvdSubPic);
  2299. #define KSPROPSETID_DvdSubPic DEFINE_GUIDNAMED(KSPROPSETID_DvdSubPic)
  2300.  
  2301. typedef enum {
  2302.     KSPROPERTY_DVDSUBPIC_PALETTE,
  2303.     KSPROPERTY_DVDSUBPIC_HLI,
  2304.     KSPROPERTY_DVDSUBPIC_COMPOSIT_ON,  // TRUE for subpicture is displayed
  2305. } KSPROPERTY_DVDSUBPIC;
  2306.  
  2307. typedef struct _KS_DVD_YCrCb {
  2308.     UCHAR   Reserved;
  2309.     UCHAR   Y;
  2310.     UCHAR   Cr;
  2311.     UCHAR   Cb;
  2312. } KS_DVD_YCrCb, *PKS_DVD_YCrCb;
  2313.  
  2314. /* The KS_DVD_YUV structure is now superseded by KS_DVD_YCrCb above and is
  2315.    here for backward compatibility only */
  2316.  
  2317. typedef struct _KS_DVD_YUV {
  2318.     UCHAR   Reserved;
  2319.     UCHAR   Y;
  2320.     UCHAR   V;
  2321.     UCHAR   U;
  2322. } KS_DVD_YUV, *PKS_DVD_YUV;
  2323.  
  2324. typedef struct _KSPROPERTY_SPPAL {
  2325.     KS_DVD_YUV sppal[16];
  2326. } KSPROPERTY_SPPAL, *PKSPROPERTY_SPPAL;
  2327.  
  2328. typedef struct _KS_COLCON {
  2329.     UCHAR emph1col:4;
  2330.     UCHAR emph2col:4;
  2331.     UCHAR backcol:4;
  2332.     UCHAR patcol:4;
  2333.     UCHAR emph1con:4;
  2334.     UCHAR emph2con:4;
  2335.     UCHAR backcon:4;
  2336.     UCHAR patcon:4;
  2337.  
  2338. } KS_COLCON, *PKS_COLCON;
  2339.  
  2340. typedef struct _KSPROPERTY_SPHLI {
  2341.     USHORT      HLISS;
  2342.     USHORT      Reserved;
  2343.     ULONG       StartPTM;   // start presentation time in x/90000
  2344.     ULONG       EndPTM;     // end PTM in x/90000
  2345.     USHORT      StartX;
  2346.     USHORT      StartY;
  2347.     USHORT      StopX;
  2348.     USHORT      StopY;
  2349.     KS_COLCON   ColCon;     // color contrast description (4 bytes as given in HLI)
  2350. } KSPROPERTY_SPHLI, *PKSPROPERTY_SPHLI;
  2351.  
  2352. typedef BOOL KSPROPERTY_COMPOSIT_ON, *PKSPROPERTY_COMPOSIT_ON;
  2353.  
  2354. #define STATIC_KSPROPSETID_CopyProt \
  2355.     0x0E8A0A40L, 0x6AEF, 0x11D0, 0x9E, 0xD0, 0x00, 0xA0, 0x24, 0xCA, 0x19, 0xB3
  2356. DEFINE_GUIDSTRUCT("0E8A0A40-6AEF-11D0-9ED0-00A024CA19B3", KSPROPSETID_CopyProt);
  2357. #define KSPROPSETID_CopyProt DEFINE_GUIDNAMED(KSPROPSETID_CopyProt)
  2358.  
  2359. typedef enum {
  2360.  
  2361.     KSPROPERTY_DVDCOPY_CHLG_KEY = 0x01,
  2362.     KSPROPERTY_DVDCOPY_DVD_KEY1,
  2363.     KSPROPERTY_DVDCOPY_DEC_KEY2,
  2364.     KSPROPERTY_DVDCOPY_TITLE_KEY,
  2365.     KSPROPERTY_COPY_MACROVISION,
  2366.     KSPROPERTY_DVDCOPY_REGION,
  2367.     KSPROPERTY_DVDCOPY_SET_COPY_STATE,
  2368.     KSPROPERTY_DVDCOPY_DISC_KEY = 0x80
  2369.  
  2370. } KSPROPERTY_COPYPROT;
  2371.  
  2372. typedef struct _KS_DVDCOPY_CHLGKEY {
  2373.     BYTE ChlgKey[10];
  2374.     BYTE Reserved[2];
  2375. } KS_DVDCOPY_CHLGKEY, *PKS_DVDCOPY_CHLGKEY;
  2376.  
  2377. typedef struct _KS_DVDCOPY_BUSKEY {
  2378.     BYTE BusKey[5];
  2379.     BYTE Reserved[1];
  2380. } KS_DVDCOPY_BUSKEY, *PKS_DVDCOPY_BUSKEY;
  2381.  
  2382.  
  2383. typedef struct _KS_DVDCOPY_DISCKEY {
  2384.     BYTE DiscKey[2048];
  2385. } KS_DVDCOPY_DISCKEY, *PKS_DVDCOPY_DISCKEY;
  2386.  
  2387. typedef struct _KS_DVDCOPY_REGION {
  2388.     UCHAR   Reserved;
  2389.     UCHAR   RegionData;
  2390.     UCHAR   Reserved2[2];
  2391. } KS_DVDCOPY_REGION, *PKS_DVDCOPY_REGION;
  2392.  
  2393. typedef struct _KS_DVDCOPY_TITLEKEY {
  2394.     ULONG KeyFlags;
  2395.     ULONG ReservedNT[2];
  2396.     UCHAR TitleKey[6];
  2397.     UCHAR Reserved[2];
  2398. } KS_DVDCOPY_TITLEKEY, *PKS_DVDCOPY_TITLEKEY;
  2399.  
  2400. typedef struct _KS_COPY_MACROVISION {
  2401.     ULONG MACROVISIONLevel;
  2402. } KS_COPY_MACROVISION, *PKS_COPY_MACROVISION;
  2403.  
  2404. typedef struct _KS_DVDCOPY_SET_COPY_STATE {
  2405.     ULONG DVDCopyState;
  2406. } KS_DVDCOPY_SET_COPY_STATE, *PKS_DVDCOPY_SET_COPY_STATE;
  2407.  
  2408. typedef enum {
  2409.     KS_DVDCOPYSTATE_INITIALIZE,         // indicates we are starting a full
  2410.                                         // copy protection sequence.
  2411.     KS_DVDCOPYSTATE_INITIALIZE_TITLE,   // indicates we are starting a title
  2412.                                         // key copy protection sequence
  2413.     KS_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED,
  2414.     KS_DVDCOPYSTATE_AUTHENTICATION_REQUIRED,
  2415.     KS_DVDCOPYSTATE_DONE,
  2416. } KS_DVDCOPYSTATE;
  2417.  
  2418. typedef enum {
  2419.     KS_MACROVISION_DISABLED,
  2420.     KS_MACROVISION_LEVEL1,
  2421.     KS_MACROVISION_LEVEL2,
  2422.     KS_MACROVISION_LEVEL3
  2423. } KS_COPY_MACROVISION_LEVEL, *PKS_COPY_MACROVISION_LEVEL;
  2424.  
  2425. //
  2426. // CGMS Copy Protection Flags
  2427. //
  2428.  
  2429. #define KS_DVD_CGMS_RESERVED_MASK      0x00000078
  2430.  
  2431. #define KS_DVD_CGMS_COPY_PROTECT_MASK  0x00000018
  2432. #define KS_DVD_CGMS_COPY_PERMITTED     0x00000000
  2433. #define KS_DVD_CGMS_COPY_ONCE          0x00000010
  2434. #define KS_DVD_CGMS_NO_COPY            0x00000018
  2435.  
  2436. #define KS_DVD_COPYRIGHT_MASK          0x00000040
  2437. #define KS_DVD_NOT_COPYRIGHTED         0x00000000
  2438. #define KS_DVD_COPYRIGHTED             0x00000040
  2439.  
  2440. #define KS_DVD_SECTOR_PROTECT_MASK     0x00000020
  2441. #define KS_DVD_SECTOR_NOT_PROTECTED    0x00000000
  2442. #define KS_DVD_SECTOR_PROTECTED        0x00000020
  2443.  
  2444.  
  2445. //===========================================================================
  2446. // The following MUST match the structures in WinGDI.h and AMVideo.h
  2447. //===========================================================================
  2448.  
  2449. #define STATIC_KSCATEGORY_TVTUNER \
  2450.     0xa799a800L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  2451. DEFINE_GUIDSTRUCT("a799a800-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_TVTUNER);
  2452. #define KSCATEGORY_TVTUNER DEFINE_GUIDNAMED(KSCATEGORY_TVTUNER)
  2453.  
  2454. #define STATIC_KSCATEGORY_CROSSBAR \
  2455.     0xa799a801L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  2456. DEFINE_GUIDSTRUCT("a799a801-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_CROSSBAR);
  2457. #define KSCATEGORY_CROSSBAR DEFINE_GUIDNAMED(KSCATEGORY_CROSSBAR)
  2458.  
  2459. #define STATIC_KSCATEGORY_TVAUDIO \
  2460.     0xa799a802L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  2461. DEFINE_GUIDSTRUCT("a799a802-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_TVAUDIO);
  2462. #define KSCATEGORY_TVAUDIO DEFINE_GUIDNAMED(KSCATEGORY_TVAUDIO)
  2463.  
  2464. #define STATIC_KSCATEGORY_VPMUX \
  2465.     0xa799a803L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
  2466. DEFINE_GUIDSTRUCT("a799a803-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_VPMUX);
  2467. #define KSCATEGORY_VPMUX DEFINE_GUIDNAMED(KSCATEGORY_VPMUX)
  2468.  
  2469. #define STATIC_KSCATEGORY_VBICODEC \
  2470.     0x07dad660L, 0x22f1, 0x11d1, 0xa9, 0xf4, 0x00, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
  2471. DEFINE_GUIDSTRUCT("07dad660-22f1-11d1-a9f4-00c04fbbde8f", KSCATEGORY_VBICODEC);
  2472. #define KSCATEGORY_VBICODEC DEFINE_GUIDNAMED(KSCATEGORY_VBICODEC)
  2473.  
  2474. // SUBTYPE_VPVideo
  2475. #define STATIC_KSDATAFORMAT_SUBTYPE_VPVideo\
  2476.     0x5a9b6a40L, 0x1a22, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  2477. DEFINE_GUIDSTRUCT("5a9b6a40-1a22-11d1-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_VPVideo);
  2478. #define KSDATAFORMAT_SUBTYPE_VPVideo DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVideo)
  2479.  
  2480. // SUBTYPE_VPVBI
  2481. #define STATIC_KSDATAFORMAT_SUBTYPE_VPVBI\
  2482.     0x5a9b6a41L, 0x1a22, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  2483. DEFINE_GUIDSTRUCT("5a9b6a41-1a22-11d1-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_VPVBI);
  2484. #define KSDATAFORMAT_SUBTYPE_VPVBI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVBI)
  2485.  
  2486.  
  2487. // FORMAT_VideoInfo
  2488. #define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO\
  2489.     0x05589f80L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
  2490. DEFINE_GUIDSTRUCT("05589f80-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_VIDEOINFO);
  2491. #define KSDATAFORMAT_SPECIFIER_VIDEOINFO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO)
  2492.  
  2493. // FORMAT_VideoInfo2
  2494. #define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO2\
  2495.     0xf72a76A0L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2496. DEFINE_GUIDSTRUCT("f72a76A0-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SPECIFIER_VIDEOINFO2);
  2497. #define KSDATAFORMAT_SPECIFIER_VIDEOINFO2 DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO2)
  2498.  
  2499. // MEDIATYPE_AnalogVideo
  2500. #define STATIC_KSDATAFORMAT_TYPE_ANALOGVIDEO\
  2501.     0x0482dde1L, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65
  2502. DEFINE_GUIDSTRUCT("0482dde1-7817-11cf-8a03-00aa006ecb65", KSDATAFORMAT_TYPE_ANALOGVIDEO);
  2503. #define KSDATAFORMAT_TYPE_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGVIDEO)
  2504.  
  2505. // FORMAT_AnalogVideo
  2506. #define STATIC_KSDATAFORMAT_SPECIFIER_ANALOGVIDEO\
  2507.     0x0482dde0L, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65
  2508. DEFINE_GUIDSTRUCT("0482dde0-7817-11cf-8a03-00aa006ecb65", KSDATAFORMAT_SPECIFIER_ANALOGVIDEO);
  2509. #define KSDATAFORMAT_SPECIFIER_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_ANALOGVIDEO)
  2510.  
  2511. // FORMAT_VBI
  2512. #define STATIC_KSDATAFORMAT_SPECIFIER_VBI\
  2513.     0xf72a76e0L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2514. DEFINE_GUIDSTRUCT("f72a76e0-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SPECIFIER_VBI);
  2515. #define KSDATAFORMAT_SPECIFIER_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VBI)
  2516.  
  2517. // MEDIATYPE_VBI
  2518. #define STATIC_KSDATAFORMAT_TYPE_VBI\
  2519.     0xf72a76e1L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2520. DEFINE_GUIDSTRUCT("f72a76e1-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_TYPE_VBI);
  2521. #define KSDATAFORMAT_TYPE_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VBI)
  2522.  
  2523. // SUBTYPE_RAW8
  2524. #define STATIC_KSDATAFORMAT_SUBTYPE_RAW8\
  2525.     0xca20d9a0, 0x3e3e, 0x11d1, 0x9b, 0xf9, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0xbf
  2526. DEFINE_GUIDSTRUCT("ca20d9a0-3e3e-11d1-9bf9-00c04fbbdebf", KSDATAFORMAT_SUBTYPE_RAW8);
  2527. #define KSDATAFORMAT_SUBTYPE_RAW8 DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RAW8)
  2528.  
  2529. // MEDIASUBTYPE_NABTS
  2530. #define STATIC_KSDATAFORMAT_SUBTYPE_NABTS\
  2531.     0xf72a76e2L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2532. DEFINE_GUIDSTRUCT("f72a76e2-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SUBTYPE_NABTS);
  2533. #define KSDATAFORMAT_SUBTYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS)
  2534.  
  2535. // MEDIASUBTYPE_TELETEXT
  2536. #define STATIC_KSDATAFORMAT_SUBTYPE_TELETEXT\
  2537.     0xf72a76e3L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
  2538. DEFINE_GUIDSTRUCT("f72a76e3-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SUBTYPE_TELETEXT);
  2539. #define KSDATAFORMAT_SUBTYPE_TELETEXT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_TELETEXT)
  2540.  
  2541.  
  2542.  
  2543. /* constants for the biCompression field */
  2544. #define KS_BI_RGB        0L
  2545. #define KS_BI_RLE8       1L
  2546. #define KS_BI_RLE4       2L
  2547. #define KS_BI_BITFIELDS  3L
  2548.  
  2549. typedef struct tagKS_RGBQUAD { // rgbq
  2550.     BYTE    rgbBlue;
  2551.     BYTE    rgbGreen;
  2552.     BYTE    rgbRed;
  2553.     BYTE    rgbReserved;
  2554. } KS_RGBQUAD;
  2555.  
  2556. /* constants for palettes */
  2557. #define KS_iPALETTE_COLORS 256     // Maximum colours in palette
  2558. #define KS_iEGA_COLORS 16          // Number colours in EGA palette
  2559. #define KS_iMASK_COLORS 3          // Maximum three components
  2560. #define KS_iTRUECOLOR 16           // Minimum true colour device
  2561. #define KS_iRED 0                  // Index position for RED mask
  2562. #define KS_iGREEN 1                // Index position for GREEN mask
  2563. #define KS_iBLUE 2                 // Index position for BLUE mask
  2564. #define KS_iPALETTE 8              // Maximum colour depth using a palette
  2565. #define KS_iMAXBITS 8              // Maximum bits per colour component
  2566. #define KS_SIZE_EGA_PALETTE (KS_iEGA_COLORS * sizeof(KS_RGBQUAD))
  2567. #define KS_SIZE_PALETTE (KS_iPALETTE_COLORS * sizeof(KS_RGBQUAD))
  2568.  
  2569. typedef struct tagKS_BITMAPINFOHEADER{
  2570.         DWORD      biSize;
  2571.         LONG       biWidth;
  2572.         LONG       biHeight;
  2573.         WORD       biPlanes;
  2574.         WORD       biBitCount;
  2575.         DWORD      biCompression;
  2576.         DWORD      biSizeImage;
  2577.         LONG       biXPelsPerMeter;
  2578.         LONG       biYPelsPerMeter;
  2579.         DWORD      biClrUsed;
  2580.         DWORD      biClrImportant;
  2581. } KS_BITMAPINFOHEADER, *PKS_BITMAPINFOHEADER;
  2582.  
  2583. // Used for true colour images that also have a palette
  2584.  
  2585. typedef struct tag_KS_TRUECOLORINFO {
  2586.     DWORD   dwBitMasks[KS_iMASK_COLORS];
  2587.     KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS];
  2588. } KS_TRUECOLORINFO;
  2589.  
  2590.  
  2591. #define KS_WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)
  2592. #define KS_DIBWIDTHBYTES(bi) (DWORD)KS_WIDTHBYTES((DWORD)(bi).biWidth * (DWORD)(bi).biBitCount)
  2593. #define KS__DIBSIZE(bi) (KS_DIBWIDTHBYTES(bi) * (DWORD)(bi).biHeight)
  2594. #define KS_DIBSIZE(bi) ((bi).biHeight < 0 ? (-1)*(KS__DIBSIZE(bi)) : KS__DIBSIZE(bi))
  2595.  
  2596. typedef LONGLONG REFERENCE_TIME;
  2597.  
  2598. // The BITMAPINFOHEADER contains all the details about the video stream such
  2599. // as the actual image dimensions and their pixel depth. A source filter may
  2600. // also request that the sink take only a section of the video by providing a
  2601. // clipping rectangle in rcSource. In the worst case where the sink filter
  2602. // forgets to check this on connection it will simply render the whole thing
  2603. // which isn't a disaster. Ideally a sink filter will check the rcSource and
  2604. // if it doesn't support image extraction and the rectangle is not empty then
  2605. // it will reject the connection. A filter should use SetRectEmpty to reset a
  2606. // rectangle to all zeroes (and IsRectEmpty to later check the rectangle).
  2607. // The rcTarget specifies the destination rectangle for the video, for most
  2608. // source filters they will set this to all zeroes, a downstream filter may
  2609. // request that the video be placed in a particular area of the buffers it
  2610. // supplies in which case it will call QueryAccept with a non empty target
  2611.  
  2612. typedef struct tagKS_VIDEOINFOHEADER {
  2613.  
  2614.     RECT                rcSource;          // The bit we really want to use
  2615.     RECT                rcTarget;          // Where the video should go
  2616.     DWORD               dwBitRate;         // Approximate bit data rate
  2617.     DWORD               dwBitErrorRate;    // Bit error rate for this stream
  2618.     REFERENCE_TIME      AvgTimePerFrame;   // Average time per frame (100ns units)
  2619.  
  2620.     KS_BITMAPINFOHEADER bmiHeader;
  2621.  
  2622. } KS_VIDEOINFOHEADER, *PKS_VIDEOINFOHEADER;
  2623.  
  2624. // !!! WARNING !!!
  2625. // DO NOT use the following structure unless you are sure that the BITMAPINFOHEADER
  2626. // has a normal biSize == sizeof(BITMAPINFOHEADER) !
  2627. // !!! WARNING !!!
  2628.  
  2629. typedef struct tagKS_VIDEOINFO {
  2630.  
  2631.     RECT            rcSource;          // The bit we really want to use
  2632.     RECT            rcTarget;          // Where the video should go
  2633.     DWORD           dwBitRate;         // Approximate bit data rate
  2634.     DWORD           dwBitErrorRate;    // Bit error rate for this stream
  2635.     REFERENCE_TIME  AvgTimePerFrame;   // Average time per frame (100ns units)
  2636.  
  2637.     KS_BITMAPINFOHEADER bmiHeader;
  2638.  
  2639.     union {
  2640.         KS_RGBQUAD          bmiColors[KS_iPALETTE_COLORS];     // Colour palette
  2641.         DWORD               dwBitMasks[KS_iMASK_COLORS];       // True colour masks
  2642.         KS_TRUECOLORINFO    TrueColorInfo;                     // Both of the above
  2643.     };
  2644.  
  2645. } KS_VIDEOINFO;
  2646.  
  2647.  
  2648. #define KS_SIZE_MASKS (KS_iMASK_COLORS * sizeof(DWORD))
  2649. #define KS_SIZE_PREHEADER (FIELD_OFFSET(KS_VIDEOINFOHEADER,bmiHeader))
  2650.  
  2651. // For normal size
  2652. // #define KS_SIZE_VIDEOHEADER (sizeof(KS_BITMAPINFOHEADER) + KS_SIZE_PREHEADER)
  2653. // !!! for abnormal biSizes
  2654. #define KS_SIZE_VIDEOHEADER(pbmi) ((pbmi)->bmiHeader.biSize + KS_SIZE_PREHEADER)
  2655.  
  2656. // VBI
  2657. // Used for NABTS, CC, Intercast,
  2658. typedef struct tagKS_VBIINFOHEADER {
  2659.     ULONG       StartLine;              // inclusive
  2660.     ULONG       EndLine;                // inclusive
  2661.     ULONG       SamplingFrequency;      // Hz.
  2662.     ULONG       MinLineStartTime;       // microSec * 100 from HSync LE
  2663.     ULONG       MaxLineStartTime;       // microSec * 100 from HSync LE
  2664.     ULONG       ActualLineStartTime;    // microSec * 100 from HSync LE
  2665.     ULONG       ActualLineEndTime;      // microSec * 100 from HSync LE
  2666.     ULONG       VideoStandard;          // KS_AnalogVideoStandard*
  2667.     ULONG       SamplesPerLine;
  2668.     ULONG       StrideInBytes;          // May be > SamplesPerLine
  2669.     ULONG       BufferSize;             // Bytes
  2670. } KS_VBIINFOHEADER, *PKS_VBIINFOHEADER;
  2671.  
  2672. // Analog video variant - Use this when the format is FORMAT_AnalogVideo
  2673. //
  2674. // rcSource defines the portion of the active video signal to use
  2675. // rcTarget defines the destination rectangle
  2676. //    both of the above are relative to the dwActiveWidth and dwActiveHeight fields
  2677. // dwActiveWidth is currently set to 720 for all formats (but could change for HDTV)
  2678. // dwActiveHeight is 483 for NTSC and 575 for PAL/SECAM  (but could change for HDTV)
  2679.  
  2680. typedef struct tagKS_AnalogVideoInfo {
  2681.     RECT            rcSource;           // Width max is 720, height varies w/ TransmissionStd
  2682.     RECT            rcTarget;           // Where the video should go
  2683.     DWORD           dwActiveWidth;      // Always 720 (CCIR-601 active samples per line)
  2684.     DWORD           dwActiveHeight;     // 483 for NTSC, 575 for PAL/SECAM
  2685.     REFERENCE_TIME  AvgTimePerFrame;    // Normal ActiveMovie units (100 nS)
  2686. } KS_ANALOGVIDEOINFO, *PKS_ANALOGVIDEOINFO;
  2687.  
  2688. //===========================================================================
  2689. // Data packet passed on Analog video stream channel change
  2690. //===========================================================================
  2691.  
  2692. #define KS_TVTUNER_CHANGE_BEGIN_TUNE    0x0001L  // Starting a tuning operation
  2693. #define KS_TVTUNER_CHANGE_END_TUNE      0x0002L  // Ending a tuning operation
  2694.  
  2695. typedef struct tagKS_TVTUNER_CHANGE_INFO {
  2696.    DWORD                    dwFlags;                // KS_TVTUNER_CHANGE_*
  2697.    DWORD                    dwCountryCode;
  2698.    DWORD                    dwAnalogVideoStandard;  // KS_AnalogVideoStandard
  2699.    DWORD                    dwChannel;
  2700. } KS_TVTUNER_CHANGE_INFO, *PKS_TVTUNER_CHANGE_INFO;
  2701.  
  2702. //===========================================================================
  2703. // Video format blocks
  2704. //===========================================================================
  2705.  
  2706. typedef enum {
  2707.     KS_MPEG2Level_Low,
  2708.     KS_MPEG2Level_Main,
  2709.     KS_MPEG2Level_High1440,
  2710.     KS_MPEG2Level_High
  2711. } KS_MPEG2Level;
  2712.  
  2713. typedef enum {
  2714.     KS_MPEG2Profile_Simple,
  2715.     KS_MPEG2Profile_Main,
  2716.     KS_MPEG2Profile_SNRScalable,
  2717.     KS_MPEG2Profile_SpatiallyScalable,
  2718.     KS_MPEG2Profile_High
  2719. } KS_MPEG2Profile;
  2720.  
  2721. #define KS_INTERLACE_IsInterlaced            0x00000001  // if 0, other interlace bits are irrelevent
  2722. #define KS_INTERLACE_1FieldPerSample         0x00000002  // else 2 fields per media sample
  2723. #define KS_INTERLACE_Field1First             0x00000004  // else Field 2 is first;  top field in PAL is field 1, top field in NTSC is field 2?
  2724. #define KS_INTERLACE_UNUSED                  0x00000008  //
  2725. #define KS_INTERLACE_FieldPatternMask        0x00000030  // use this mask with AMINTERLACE_FieldPat*
  2726. #define KS_INTERLACE_FieldPatField1Only      0x00000000  // Data never contains a Field2
  2727. #define KS_INTERLACE_FieldPatField2Only      0x00000010  // Data never contains a Field1
  2728. #define KS_INTERLACE_FieldPatBothRegular     0x00000020  // There will be a Field2 for every Field1 (required for Weave?)
  2729. #define KS_INTERLACE_FieldPatBothIrregular   0x00000030  // Random pattern of Field1s and Field2s
  2730. #define KS_INTERLACE_DisplayModeMask         0x000000c0
  2731. #define KS_INTERLACE_DisplayModeBobOnly      0x00000000
  2732. #define KS_INTERLACE_DisplayModeWeaveOnly    0x00000040
  2733. #define KS_INTERLACE_DisplayModeBobOrWeave   0x00000080
  2734.  
  2735.  
  2736.  
  2737. #define KS_MPEG2_DoPanScan           0x00000001  //if set, the MPEG-2 video decoder should crop output image
  2738.                                                 //  based on pan-scan vectors in picture_display_extension
  2739.                                                 //  and change the picture aspect ratio accordingly.
  2740. #define KS_MPEG2_DVDLine21Field1     0x00000002  //if set, the MPEG-2 decoder must be able to produce an output
  2741.                                                 //  pin for DVD style closed caption data found in GOP layer of field 1
  2742. #define KS_MPEG2_DVDLine21Field2     0x00000004  //if set, the MPEG-2 decoder must be able to produce an output
  2743.                                                 //  pin for DVD style closed caption data found in GOP layer of field 2
  2744. #define KS_MPEG2_SourceIsLetterboxed 0x00000008  //if set, indicates that black bars have been encoded in the top
  2745.                                                 //  and bottom of the video.
  2746. #define KS_MPEG2_FilmCameraMode      0x00000010  //if set, indicates "film mode" used for 625/50 content.  If cleared,
  2747.                                                 //  indicates that "camera mode" was used.
  2748. #define KS_MPEG2_LetterboxAnalogOut  0x00000020  //if set and this stream is sent to an analog output, it should
  2749.                         //  be letterboxed.  Streams sent to VGA should be letterboxed only by renderers.
  2750. #define KS_MPEG2_DSS_UserData        0x00000040  //if set, the MPEG-2 decoder must process DSS style user data
  2751. #define KS_MPEG2_DVB_UserData        0x00000080  //if set, the MPEG-2 decoder must process DVB style user data
  2752. #define KS_MPEG2_27MhzTimebase       0x00000100  //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
  2753.  
  2754. typedef struct tagKS_VIDEOINFOHEADER2 {
  2755.     RECT                rcSource;
  2756.     RECT                rcTarget;
  2757.     DWORD               dwBitRate;
  2758.     DWORD               dwBitErrorRate;
  2759.     REFERENCE_TIME      AvgTimePerFrame;
  2760.     DWORD               dwInterlaceFlags;   // use AMINTERLACE_* defines. Reject connection if undefined bits are not 0
  2761.     DWORD               dwCopyProtectFlags; // use AMCOPYPROTECT_* defines. Reject connection if undefined bits are not 0
  2762.     DWORD               dwPictAspectRatioX; // X dimension of picture aspect ratio, e.g. 16 for 16x9 display
  2763.     DWORD               dwPictAspectRatioY; // Y dimension of picture aspect ratio, e.g.  9 for 16x9 display
  2764.     DWORD               dwReserved1;        // must be 0; reject connection otherwise
  2765.     DWORD               dwReserved2;        // must be 0; reject connection otherwise
  2766.     KS_BITMAPINFOHEADER bmiHeader;
  2767. } KS_VIDEOINFOHEADER2;
  2768.  
  2769. typedef struct tagKS_MPEG1VIDEOINFO {
  2770.     KS_VIDEOINFOHEADER hdr; // Compatible with VIDEOINFO
  2771.     DWORD dwStartTimeCode; // 25-bit Group of pictures time code at start of data
  2772.     DWORD cbSequenceHeader; // Length in bytes of bSequenceHeader
  2773.     BYTE bSequenceHeader[1]; // Sequence header including quantization matrices if any
  2774. } KS_MPEG1VIDEOINFO;
  2775.  
  2776. #define KS_MAX_SIZE_MPEG1_SEQUENCE_INFO 140
  2777. #define KS_SIZE_MPEG1VIDEOINFO(pv) (FIELD_OFFSET(KS_MPEG1VIDEOINFO, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  2778. #define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  2779.  
  2780. typedef struct tagKS_MPEGVIDEOINFO2 {
  2781.     KS_VIDEOINFOHEADER2 hdr;
  2782.     DWORD               dwStartTimeCode;        //  ?? not used for DVD ??
  2783.     DWORD               cbSequenceHeader;       // is 0 for DVD (no sequence header)
  2784.     DWORD               dwProfile;              // use enum MPEG2Profile
  2785.     DWORD               dwLevel;                // use enum MPEG2Level
  2786.     DWORD               dwFlags;                // use AMMPEG2_* defines.  Reject connection if undefined bits are not 0
  2787.     DWORD               bSequenceHeader[1];     // DWORD instead of Byte for alignment purposes
  2788.                                                 //   For MPEG-2, if a sequence_header is included, the sequence_extension
  2789.                                                 //   should also be included
  2790. } KS_MPEGVIDEOINFO2;
  2791.  
  2792.  
  2793. #define KS_SIZE_MPEGVIDEOINFO2(pv) (FIELD_OFFSET(KS_MPEGVIDEOINFO2, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
  2794. #define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
  2795.  
  2796. //===========================================================================
  2797. // Audio format blocks
  2798. //===========================================================================
  2799.  
  2800. //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
  2801. #define KS_MPEGAUDIOINFO_27MhzTimebase      0x00000001
  2802.  
  2803. typedef struct tagKS_MPEAUDIOINFO {
  2804.     DWORD               dwFlags;            // use KS_MPEGAUDIOINFO_* defines.  Reject connection if undefined bits are not 0
  2805.     DWORD               dwReserved1;        // must be 0; reject connection otherwise
  2806.     DWORD               dwReserved2;        // must be 0; reject connection otherwise
  2807.     DWORD               dwReserved3;        // must be 0; reject connection otherwise
  2808. } KS_MPEGAUDIOINFO;
  2809.  
  2810. //===========================================================================
  2811. // Video DATAFORMATs
  2812. //===========================================================================
  2813.  
  2814. typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER {
  2815.     KSDATAFORMAT            DataFormat;
  2816.     KS_VIDEOINFOHEADER      VideoInfoHeader;
  2817. } KS_DATAFORMAT_VIDEOINFOHEADER, *PKS_DATAFORMAT_VIDEOINFOHEADER;
  2818.  
  2819. typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER2 {
  2820.     KSDATAFORMAT            DataFormat;
  2821.     KS_VIDEOINFOHEADER2     VideoInfoHeader2;
  2822. } KS_DATAFORMAT_VIDEOINFOHEADER2, *PKS_DATAFORMAT_VIDEOINFOHEADER2;
  2823.  
  2824. typedef struct tagKS_DATAFORMAT_VIDEOINFO_PALETTE {
  2825.     KSDATAFORMAT            DataFormat;
  2826.     KS_VIDEOINFO            VideoInfo;
  2827. } KS_DATAFORMAT_VIDEOINFO_PALETTE, *PKS_DATAFORMAT_VIDEOINFO_PALETTE;
  2828.  
  2829. typedef struct tagKS_DATAFORMAT_VBIINFOHEADER {
  2830.     KSDATAFORMAT            DataFormat;
  2831.     KS_VBIINFOHEADER        VBIInfoHeader;
  2832. } KS_DATAFORMAT_VBIINFOHEADER, *PKS_DATAFORMAT_VBIINFOHEADER;
  2833.  
  2834. typedef struct  _KS_VIDEO_STREAM_CONFIG_CAPS  {
  2835.     GUID guid;                  // will be MEDIATYPE_Video
  2836.     ULONG VideoStandard;        // logical OR of all AnalogVideoStandards
  2837.                                 // supported
  2838.     SIZE InputSize;             // the inherent size of the incoming signal
  2839.                                 // (every pixel unique)
  2840.     SIZE MinCroppingSize;       // smallest rcSrc cropping rect allowed
  2841.     SIZE MaxCroppingSize;       // largest rcSrc cropping rect allowed
  2842.     int CropGranularityX;       // granularity of cropping size
  2843.     int CropGranularityY;
  2844.     int CropAlignX;             // alignment of cropping rect
  2845.     int CropAlignY;
  2846.     SIZE MinOutputSize;         // smallest bitmap stream can produce
  2847.     SIZE MaxOutputSize;         // largest  bitmap stream can produce
  2848.     int OutputGranularityX;     // granularity of output bitmap size
  2849.     int OutputGranularityY;
  2850.     int StretchTapsX;           // 0, no stretch, 1 pix dup, 2 interp, ...
  2851.     int StretchTapsY;           //    Describes quality of hardware scaler
  2852.     int ShrinkTapsX;            //
  2853.     int ShrinkTapsY;            //
  2854.     LONGLONG MinFrameInterval;  // 100 nS units
  2855.     LONGLONG MaxFrameInterval;
  2856.     LONG MinBitsPerSecond;
  2857.     LONG MaxBitsPerSecond;
  2858. } KS_VIDEO_STREAM_CONFIG_CAPS;
  2859.  
  2860. //===========================================================================
  2861. // Video DATARANGEs
  2862. //===========================================================================
  2863.  
  2864. typedef struct tagKS_DATARANGE_VIDEO {
  2865.    KSDATARANGE                  DataRange;
  2866.    BOOL                         bFixedSizeSamples;      // all samples same size?
  2867.    BOOL                         bTemporalCompression;   // all I frames?
  2868.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  2869.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  2870.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  2871.    KS_VIDEOINFOHEADER           VideoInfoHeader;        // default format
  2872. } KS_DATARANGE_VIDEO, *PKS_DATARANGE_VIDEO;
  2873.  
  2874. typedef struct tagKS_DATARANGE_VIDEO2 {
  2875.    KSDATARANGE                  DataRange;
  2876.    BOOL                         bFixedSizeSamples;      // all samples same size?
  2877.    BOOL                         bTemporalCompression;   // all I frames?
  2878.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  2879.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  2880.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  2881.    KS_VIDEOINFOHEADER2          VideoInfoHeader;        // default format
  2882. } KS_DATARANGE_VIDEO2, *PKS_DATARANGE_VIDEO2;
  2883.  
  2884. typedef struct tagKS_DATARANGE_MPEG1_VIDEO {
  2885.     KSDATARANGE DataRange;
  2886.     BOOL bFixedSizeSamples; // all samples same size?
  2887.     BOOL bTemporalCompression; // all I frames?
  2888.     DWORD StreamDescriptionFlags; // KS_VIDEO_DESC_*
  2889.     DWORD MemoryAllocationFlags; // KS_VIDEO_ALLOC_*
  2890.     KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
  2891.     KS_MPEG1VIDEOINFO VideoInfoHeader; // default format
  2892. } KS_DATARANGE_MPEG1_VIDEO, *PKS_DATARANGE_MPEG1_VIDEO;
  2893.  
  2894. typedef struct tagKS_DATARANGE_MPEG2_VIDEO {
  2895.    KSDATARANGE                  DataRange;
  2896.    BOOL                         bFixedSizeSamples;      // all samples same size?
  2897.    BOOL                         bTemporalCompression;   // all I frames?
  2898.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  2899.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  2900.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  2901.    KS_MPEGVIDEOINFO2            VideoInfoHeader;        // default format
  2902. } KS_DATARANGE_MPEG2_VIDEO, *PKS_DATARANGE_MPEG2_VIDEO;
  2903.  
  2904. typedef struct tagKS_DATARANGE_VIDEO_PALETTE {
  2905.    KSDATARANGE                  DataRange;
  2906.    BOOL                         bFixedSizeSamples;      // all samples same size?
  2907.    BOOL                         bTemporalCompression;   // all I frames?
  2908.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  2909.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  2910.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  2911.    KS_VIDEOINFO                 VideoInfo;              // default format
  2912. } KS_DATARANGE_VIDEO_PALETTE, *PKS_DATARANGE_VIDEO_PALETTE;
  2913.  
  2914. typedef struct tagKS_DATARANGE_VIDEO_VBI {
  2915.    KSDATARANGE                  DataRange;
  2916.    BOOL                         bFixedSizeSamples;      // all samples same size?
  2917.    BOOL                         bTemporalCompression;   // all I frames?
  2918.    DWORD                        StreamDescriptionFlags; // KS_VIDEO_DESC_*
  2919.    DWORD                        MemoryAllocationFlags;  // KS_VIDEO_ALLOC_*
  2920.    KS_VIDEO_STREAM_CONFIG_CAPS  ConfigCaps;
  2921.    KS_VBIINFOHEADER             VBIInfoHeader;          // default format
  2922. } KS_DATARANGE_VIDEO_VBI, *PKS_DATARANGE_VIDEO_VBI;
  2923.  
  2924. typedef struct tagKS_DATARANGE_ANALOGVIDEO {
  2925.    KSDATARANGE                  DataRange;
  2926.    KS_ANALOGVIDEOINFO           AnalogVideoInfo;
  2927. } KS_DATARANGE_ANALOGVIDEO, *PKS_DATARANGE_ANALOGVIDEO;
  2928.  
  2929. //===========================================================================
  2930. // StreamDescriptionFlags
  2931. //
  2932. // These define the "purpose" of each video stream
  2933. //===========================================================================
  2934.  
  2935. #define KS_VIDEOSTREAM_PREVIEW          0x0001  // Preview stream
  2936. #define KS_VIDEOSTREAM_CAPTURE          0x0002  // Capture stream
  2937. #define KS_VIDEOSTREAM_VBI              0x0010  // Field1 VBI
  2938. #define KS_VIDEOSTREAM_NABTS            0x0020  // Field1 NABTS
  2939. #define KS_VIDEOSTREAM_CC               0x0100  // Closed Captioning
  2940. #define KS_VIDEOSTREAM_EDS              0x0200  // Extended Data Services
  2941. #define KS_VIDEOSTREAM_TELETEXT         0x0400  // Field1 Teletext only
  2942. #define KS_VIDEOSTREAM_STILL            0x1000  // Still image input
  2943. #define KS_VIDEOSTREAM_IS_VPE           0x8000  // Is a VPE based stream?
  2944.  
  2945. // MemoryAllocationFlags
  2946. #define KS_VIDEO_ALLOC_VPE_SYSTEM       0x0001  // VPE surface in system memory
  2947. #define KS_VIDEO_ALLOC_VPE_DISPLAY      0x0002  // VPE surface in display memory
  2948. #define KS_VIDEO_ALLOC_VPE_AGP          0x0004  // VPE surface in AGP memory
  2949.  
  2950. /***************************************************************************/
  2951. /* VBI Related GUIDs, structs and properties for codecs(generic, cc, nabts)*/
  2952. /***************************************************************************/
  2953.  
  2954. ///////////////////////////////////////////////////////////////////////////////////////
  2955. // IP/NABTS Protocol Reserved Group IDs - Overall Range 0x800-0x8FF [Decimal 2048-2079]
  2956. // Intervening values(0-F) are used if there are multiple providers at a particular tier
  2957. ///////////////////////////////////////////////////////////////////////////////////////
  2958.  
  2959. // Used by individual content creators in show footage/data
  2960. #define KS_NABTS_GROUPID_ORIGINAL_CONTENT_BASE                 0x800
  2961. #define KS_NABTS_GROUPID_ORIGINAL_CONTENT_ADVERTISER_BASE      0x810
  2962.  
  2963. // Used by production company in finished show data
  2964. #define KS_NABTS_GROUPID_PRODUCTION_COMPANY_CONTENT_BASE       0x820
  2965. #define KS_NABTS_GROUPID_PRODUCTION_COMPANY_ADVERTISER_BASE    0x830
  2966.  
  2967. // Used by broadcast syndicates in syndicated show data
  2968. #define KS_NABTS_GROUPID_SYNDICATED_SHOW_CONTENT_BASE          0x840
  2969. #define KS_NABTS_GROUPID_SYNDICATED_SHOW_ADVERTISER_BASE       0x850
  2970.  
  2971. // Used by tv networks in network television data
  2972. #define KS_NABTS_GROUPID_NETWORK_WIDE_CONTENT_BASE             0x860
  2973. #define KS_NABTS_GROUPID_NETWORK_WIDE_ADVERTISER_BASE          0x870
  2974.  
  2975. // Used by telvision stations in local programming data
  2976. #define KS_NABTS_GROUPID_TELEVISION_STATION_CONTENT_BASE       0x880
  2977. #define KS_NABTS_GROUPID_TELEVISION_STATION_ADVERTISER_BASE    0x890
  2978.  
  2979. // Used by cable system in cable head-end originated data
  2980. #define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_CONTENT_BASE       0x8A0
  2981. #define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_ADVERTISER_BASE    0x8B0
  2982.  
  2983. // The values between 0x8C0 - 0x8EF are reserved for future expansion
  2984.  
  2985. // Used by Microsoft for Testing purposes (0x8F0 - 0x8FF)
  2986. #define KS_NABTS_GROUPID_MICROSOFT_RESERVED_TEST_DATA_BASE     0x8F0
  2987.  
  2988. //////////////////////////////////////////////////////////////
  2989. // Stream Format FEC-corrected NABTS bundles
  2990. //////////////////////////////////////////////////////////////
  2991.  
  2992. #define STATIC_KSDATAFORMAT_TYPE_NABTS \
  2993.  0xe757bca0, 0x39ac, 0x11d1, 0xa9, 0xf5, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
  2994. DEFINE_GUIDSTRUCT("E757BCA0-39AC-11d1-A9F5-00C04FBBDE8F", KSDATAFORMAT_TYPE_NABTS);
  2995. #define KSDATAFORMAT_TYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_NABTS)
  2996.  
  2997. #define STATIC_KSDATAFORMAT_SUBTYPE_NABTS_FEC \
  2998.  0xe757bca1, 0x39ac, 0x11d1, 0xa9, 0xf5, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
  2999. DEFINE_GUIDSTRUCT("E757BCA1-39AC-11d1-A9F5-00C04FBBDE8F", KSDATAFORMAT_SUBTYPE_NABTS_FEC);
  3000. #define KSDATAFORMAT_SUBTYPE_NABTS_FEC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS_FEC)
  3001.  
  3002.  
  3003. //////////////////////////////////////////////////////////////
  3004. // NABTS Bundle data structure definition
  3005. //////////////////////////////////////////////////////////////
  3006.  
  3007. #define MAX_NABTS_VBI_LINES_PER_FIELD   11
  3008. #define NABTS_LINES_PER_BUNDLE          16
  3009. #define NABTS_PAYLOAD_PER_LINE          28
  3010. #define NABTS_BYTES_PER_LINE            36
  3011.  
  3012. typedef struct _NABTSFEC_BUFFER {
  3013.     ULONG       dataSize;
  3014.     USHORT      groupID;
  3015.     USHORT      Reserved;
  3016.     UCHAR       data[NABTS_LINES_PER_BUNDLE * NABTS_PAYLOAD_PER_LINE];
  3017. } NABTSFEC_BUFFER, *PNABTSFEC_BUFFER;
  3018.  
  3019. //
  3020. // vbi codec filtering pin properties
  3021. //
  3022.  
  3023. #define STATIC_KSPROPSETID_VBICodecFiltering \
  3024.     0xcafeb0caL, 0x8715, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0xc0, 0xed, 0xba, 0xbe
  3025. DEFINE_GUIDSTRUCT("cafeb0ca-8715-11d0-bd6a-0035c0edbabe", KSPROPSETID_VBICodecFiltering);
  3026. #define KSPROPSETID_VBICodecFiltering DEFINE_GUIDNAMED(KSPROPSETID_VBICodecFiltering)
  3027.  
  3028. typedef enum {
  3029.     KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY = 0x01,
  3030.     KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
  3031.     KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  3032.     KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  3033.     KSPROPERTY_VBICODECFILTERING_STATISTICS,
  3034. } KSPROPERTY_VBICODECFILTERING;
  3035.  
  3036. typedef struct _VBICODECFILTERING_SCANLINES {
  3037.     DWORD   DwordBitArray[32];      // An array of scanline bits 0..1024(32*32)
  3038. } VBICODECFILTERING_SCANLINES, *PVBICODECFILTERING_SCANLINES;
  3039.  
  3040. typedef struct _VBICODECFILTERING_NABTS_SUBSTREAMS {
  3041.     DWORD   SubstreamMask[128];   // An array of 4096 bits (one for each NABTS GroupID)
  3042. } VBICODECFILTERING_NABTS_SUBSTREAMS, *PVBICODECFILTERING_NABTS_SUBSTREAMS;
  3043.  
  3044. typedef struct _VBICODECFILTERING_CC_SUBSTREAMS {
  3045.     DWORD   SubstreamMask;        // An array of 32 bits (Only 2 are defined, see KS_CC_SUBSTREAM *)
  3046. } VBICODECFILTERING_CC_SUBSTREAMS, *PVBICODECFILTERING_CC_SUBSTREAMS;
  3047.  
  3048. #define KS_CC_SUBSTREAM_ODD             0x0001L
  3049. #define KS_CC_SUBSTREAM_EVEN            0x0002L
  3050.  
  3051. ///////////////////////////////////////////////////////////////////
  3052. // Raw NABTS stream format (TYPE_NABTS, SUBTYPE_NABTS)
  3053. ///////////////////////////////////////////////////////////////////
  3054.  
  3055. // These low-level structures are byte packed( -Zp1 )
  3056. #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  3057. #include <pshpack1.h>
  3058. #endif
  3059. typedef struct _NABTS_BUFFER_LINE {
  3060.     BYTE                            Confidence;
  3061.     BYTE                            Bytes[NABTS_BYTES_PER_LINE];
  3062. } NABTS_BUFFER_LINE, *PNABTS_BUFFER_LINE;
  3063.  
  3064. typedef struct _NABTS_BUFFER {
  3065.     VBICODECFILTERING_SCANLINES     ScanlinesRequested;
  3066.     NABTS_BUFFER_LINE               NabtsLines[MAX_NABTS_VBI_LINES_PER_FIELD];
  3067. } NABTS_BUFFER, *PNABTS_BUFFER;
  3068. #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
  3069. #include <poppack.h>
  3070. #endif
  3071.  
  3072. //
  3073. // Common codec statistics
  3074. //
  3075.  
  3076. typedef struct _VBICODECFILTERING_STATISTICS_COMMON {
  3077.     DWORD   InputSRBsProcessed;         // upstream SRBs received
  3078.     DWORD   OutputSRBsProcessed;        // downstream SRBs sent
  3079.     DWORD   SRBsIgnored;                // SRBs ignored due to no requests
  3080.     DWORD   InputSRBsMissing;           // SRBs dropped upstream
  3081.     DWORD   OutputSRBsMissing;          // Output dropped because no SRB pending
  3082.     DWORD   OutputFailures;             // dropped because of other failure
  3083.     DWORD   InternalErrors;             // could not process due to int. failure
  3084.     DWORD   ExternalErrors;             // could not process due to ext. failure
  3085.     DWORD   InputDiscontinuities;       // discontinuities received
  3086.     DWORD   DSPFailures;                // DSP confidence failure
  3087.     DWORD   TvTunerChanges;             // number of received KS_TVTUNER_CHANGE_BEGIN_TUNE and KS_TVTUNER_CHANGE_END_TUNE pairs.
  3088.     DWORD   VBIHeaderChanges;           // number of received KS_VBI_FLAG_VBIINFOHEADER_CHANGE
  3089.     DWORD   LineConfidenceAvg;          // Average of all DSP confidence results
  3090.     DWORD   BytesOutput;                // Bytes sent downstream
  3091. } VBICODECFILTERING_STATISTICS_COMMON, *PVBICODECFILTERING_STATISTICS_COMMON;
  3092.  
  3093. typedef struct _VBICODECFILTERING_STATISTICS_COMMON_PIN {
  3094.     DWORD   SRBsProcessed;              // SRBs sent/received
  3095.     DWORD   SRBsIgnored;                // SRBs ignored due to filtering
  3096.     DWORD   SRBsMissing;                // SRBs not sent/received
  3097.     DWORD   InternalErrors;             // could not send/receive due to int. failure
  3098.     DWORD   ExternalErrors;             // could not send/receive due to ext. failure
  3099.     DWORD   Discontinuities;            // discontinuities received/sent
  3100.     DWORD   LineConfidenceAvg;          // Average of all DSP confidence results for this pin
  3101.     DWORD   BytesOutput;                // Bytes sent downstream
  3102. } VBICODECFILTERING_STATISTICS_COMMON_PIN, *PVBICODECFILTERING_STATISTICS_COMMON_PIN;
  3103.  
  3104. //
  3105. // Codec-specific statistics - NABTS
  3106. //
  3107.  
  3108. typedef struct _VBICODECFILTERING_STATISTICS_NABTS {
  3109.     VBICODECFILTERING_STATISTICS_COMMON Common; // Generic VBI statistics
  3110.     DWORD   FECBundleBadLines;          // Un-FEC-correctable lines
  3111.     DWORD   FECQueueOverflows;          // Number of times FEC queue overflowed
  3112.     DWORD   FECCorrectedLines;          // Lines CSUM corrected by FEC
  3113.     DWORD   FECUncorrectableLines;      // FEC input lines not CSUM correctable
  3114.     DWORD   BundlesProcessed;           // Bundles received from FEC
  3115.     DWORD   BundlesSent2IP;             // Bundles sent to IP driver
  3116.     DWORD   FilteredLines;              // Lines processed and then dropped
  3117.                                         // because no one was interested
  3118. } VBICODECFILTERING_STATISTICS_NABTS, *PVBICODECFILTERING_STATISTICS_NABTS;
  3119.  
  3120. typedef struct _VBICODECFILTERING_STATISTICS_NABTS_PIN {
  3121.     VBICODECFILTERING_STATISTICS_COMMON_PIN Common;// Generic VBI pin statistics
  3122. } VBICODECFILTERING_STATISTICS_NABTS_PIN, *PVBICODECFILTERING_STATISTICS_NABTS_PIN;
  3123.  
  3124. //
  3125. // Codec-specific statistics - Closed Caption
  3126. //
  3127.  
  3128. typedef struct _VBICODECFILTERING_STATISTICS_CC {
  3129.     VBICODECFILTERING_STATISTICS_COMMON Common; // Generic VBI statistics
  3130. } VBICODECFILTERING_STATISTICS_CC, *PVBICODECFILTERING_STATISTICS_CC;
  3131.  
  3132.  
  3133. typedef struct _VBICODECFILTERING_STATISTICS_CC_PIN {
  3134.     VBICODECFILTERING_STATISTICS_COMMON_PIN Common;// Generic VBI pin statistics
  3135. } VBICODECFILTERING_STATISTICS_CC_PIN, *PVBICODECFILTERING_STATISTICS_CC_PIN;
  3136.  
  3137. ////////////////////////////////////////////////////////////////////////////
  3138. // VBI codec property structures(based on KSPROPERTY_VBICODECFILTERING enum)
  3139. ////////////////////////////////////////////////////////////////////////////
  3140.  
  3141. // *** Most codecs support this property
  3142. //    KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY
  3143. //    KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
  3144. typedef struct {
  3145.     KSPROPERTY                          Property;
  3146.     VBICODECFILTERING_SCANLINES         Scanlines;
  3147. } KSPROPERTY_VBICODECFILTERING_SCANLINES_S, *PKSPROPERTY_VBICODECFILTERING_SCANLINES_S;
  3148.  
  3149. // *** NABTS codecs support this property
  3150. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  3151. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  3152. typedef struct {
  3153.     KSPROPERTY                          Property;
  3154.     VBICODECFILTERING_NABTS_SUBSTREAMS  Substreams;
  3155. } KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S, *PKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S;
  3156.  
  3157. // *** Closed captioning codecs support this property
  3158. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
  3159. //    KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
  3160. typedef struct {
  3161.     KSPROPERTY                              Property;
  3162.     VBICODECFILTERING_CC_SUBSTREAMS         Substreams;
  3163. } KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S, *PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S;
  3164.  
  3165. // *** Most codecs support these versions of the global and pin properties
  3166. //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  3167. typedef struct {
  3168.     KSPROPERTY                              Property;
  3169.     VBICODECFILTERING_STATISTICS_COMMON     Statistics;
  3170. } KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S;
  3171.  
  3172. typedef struct {
  3173.     KSPROPERTY                              Property;
  3174.     VBICODECFILTERING_STATISTICS_COMMON_PIN Statistics;
  3175. } KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S;
  3176.  
  3177. // *** NABTS codecs support this version of the global and pin properties
  3178. //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  3179. typedef struct {
  3180.     KSPROPERTY                              Property;
  3181.     VBICODECFILTERING_STATISTICS_NABTS      Statistics;
  3182. } KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S;
  3183.  
  3184. typedef struct {
  3185.     KSPROPERTY                              Property;
  3186.     VBICODECFILTERING_STATISTICS_NABTS_PIN  Statistics;
  3187. } KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S;
  3188.  
  3189. // *** Closed captioning codecs support this version of the global and pin properties
  3190. //    KSPROPERTY_VBICODECFILTERING_STATISTICS
  3191.  
  3192. typedef struct {
  3193.     KSPROPERTY                              Property;
  3194.     VBICODECFILTERING_STATISTICS_CC         Statistics;
  3195. } KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S;
  3196.  
  3197. typedef struct {
  3198.     KSPROPERTY                              Property;
  3199.     VBICODECFILTERING_STATISTICS_CC_PIN     Statistics;
  3200. } KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S;
  3201.  
  3202. // Standard Pin Names for the video capture filter
  3203. //===========================================================================
  3204.  
  3205. #define STATIC_PINNAME_VIDEO_CAPTURE \
  3206.     0xfb6c4281, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3207. #define STATIC_PINNAME_CAPTURE STATIC_PINNAME_VIDEO_CAPTURE
  3208. DEFINE_GUIDSTRUCT("FB6C4281-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_CAPTURE);
  3209. #define PINNAME_VIDEO_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CAPTURE)
  3210. #define PINNAME_CAPTURE PINNAME_VIDEO_CAPTURE
  3211.  
  3212. #define STATIC_PINNAME_VIDEO_PREVIEW \
  3213.     0xfb6c4282, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3214. #define STATIC_PINNAME_PREVIEW STATIC_PINNAME_VIDEO_PREVIEW
  3215. DEFINE_GUIDSTRUCT("FB6C4282-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_PREVIEW);
  3216. #define PINNAME_VIDEO_PREVIEW DEFINE_GUIDNAMED(PINNAME_VIDEO_PREVIEW)
  3217. #define PINNAME_PREVIEW PINNAME_VIDEO_PREVIEW
  3218.  
  3219. #define STATIC_PINNAME_VIDEO_ANALOGVIDEOIN \
  3220.     0xfb6c4283, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3221. DEFINE_GUIDSTRUCT("FB6C4283-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_ANALOGVIDEOIN);
  3222. #define PINNAME_VIDEO_ANALOGVIDEOIN DEFINE_GUIDNAMED(PINNAME_VIDEO_ANALOGVIDEOIN)
  3223.  
  3224. #define STATIC_PINNAME_VIDEO_VBI \
  3225.     0xfb6c4284, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3226. DEFINE_GUIDSTRUCT("FB6C4284-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VBI);
  3227. #define PINNAME_VIDEO_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VBI)
  3228.  
  3229. #define STATIC_PINNAME_VIDEO_VIDEOPORT \
  3230.     0xfb6c4285, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3231. DEFINE_GUIDSTRUCT("FB6C4285-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VIDEOPORT);
  3232. #define PINNAME_VIDEO_VIDEOPORT DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT)
  3233.  
  3234. #define STATIC_PINNAME_VIDEO_NABTS \
  3235.     0xfb6c4286, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3236. DEFINE_GUIDSTRUCT("FB6C4286-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_NABTS);
  3237. #define PINNAME_VIDEO_NABTS DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS)
  3238.  
  3239. #define STATIC_PINNAME_VIDEO_EDS \
  3240.     0xfb6c4287, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3241. DEFINE_GUIDSTRUCT("FB6C4287-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_EDS);
  3242. #define PINNAME_VIDEO_EDS DEFINE_GUIDNAMED(PINNAME_VIDEO_EDS)
  3243.  
  3244. #define STATIC_PINNAME_VIDEO_TELETEXT \
  3245.     0xfb6c4288, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3246. DEFINE_GUIDSTRUCT("FB6C4288-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_TELETEXT);
  3247. #define PINNAME_VIDEO_TELETEXT DEFINE_GUIDNAMED(PINNAME_VIDEO_TELETEXT)
  3248.  
  3249. #define STATIC_PINNAME_VIDEO_CC \
  3250.     0xfb6c4289, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3251. DEFINE_GUIDSTRUCT("FB6C4289-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_CC);
  3252. #define PINNAME_VIDEO_CC DEFINE_GUIDNAMED(PINNAME_VIDEO_CC)
  3253.  
  3254. #define STATIC_PINNAME_VIDEO_STILL \
  3255.     0xfb6c428A, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3256. DEFINE_GUIDSTRUCT("FB6C428A-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_STILL);
  3257. #define PINNAME_VIDEO_STILL DEFINE_GUIDNAMED(PINNAME_VIDEO_STILL)
  3258.  
  3259. #define STATIC_PINNAME_VIDEO_TIMECODE \
  3260.     0xfb6c428B, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3261. DEFINE_GUIDSTRUCT("FB6C428B-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_TIMECODE);
  3262. #define PINNAME_VIDEO_TIMECODE DEFINE_GUIDNAMED(PINNAME_VIDEO_TIMECODE)
  3263.  
  3264. #define STATIC_PINNAME_VIDEO_VIDEOPORT_VBI \
  3265.     0xfb6c428C, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3266. DEFINE_GUIDSTRUCT("FB6C428C-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VIDEOPORT_VBI);
  3267. #define PINNAME_VIDEO_VIDEOPORT_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT_VBI)
  3268.  
  3269. //===========================================================================
  3270. // KSSTREAM_HEADER extensions for digital video
  3271. //===========================================================================
  3272.  
  3273. #define KS_VIDEO_FLAG_FRAME      0x0000L        // Frame or Field (default is frame)
  3274. #define KS_VIDEO_FLAG_FIELD1     0x0001L
  3275. #define KS_VIDEO_FLAG_FIELD2     0x0002L
  3276.  
  3277. #define KS_VIDEO_FLAG_I_FRAME    0x0000L        // I, B, or P (default is I)
  3278. #define KS_VIDEO_FLAG_P_FRAME    0x0010L
  3279. #define KS_VIDEO_FLAG_B_FRAME    0x0020L
  3280.  
  3281. typedef struct tagKS_FRAME_INFO {
  3282.     ULONG                   ExtendedHeaderSize; // Size of this extended header
  3283.     DWORD                   dwFrameFlags;       // Field1, Field2, or Frame
  3284.     LONGLONG                PictureNumber;
  3285.     LONGLONG                DropCount;
  3286.  
  3287.     // The following are only set when using OverlayMixer
  3288.     HANDLE                  hDirectDraw;        // user mode DDraw handle
  3289.     HANDLE                  hSurfaceHandle;     // user mode surface handle
  3290.     RECT                    DirectDrawRect;     // portion of surface locked
  3291.     // Reserved fields, never reference these
  3292.     DWORD                   Reserved1;
  3293.     DWORD                   Reserved2;
  3294.     DWORD                   Reserved3;
  3295.     DWORD                   Reserved4;
  3296. } KS_FRAME_INFO, *PKS_FRAME_INFO;
  3297.  
  3298. //===========================================================================
  3299. // KSSTREAM_HEADER extensions for VBI
  3300. //===========================================================================
  3301.  
  3302. #define KS_VBI_FLAG_FRAME                0x0000L // Frame or Field (default is frame)
  3303. #define KS_VBI_FLAG_FIELD1               0x0001L
  3304. #define KS_VBI_FLAG_FIELD2               0x0002L
  3305.  
  3306. #define KS_VBI_FLAG_TVTUNER_CHANGE       0x0010L // TvTunerChangeInfo is valid
  3307. #define KS_VBI_FLAG_VBIINFOHEADER_CHANGE 0x0020L // VBIInfoHeader is valid
  3308.  
  3309. typedef struct tagKS_VBI_FRAME_INFO {
  3310.     ULONG                   ExtendedHeaderSize; // Size of this extended header
  3311.     DWORD                   dwFrameFlags;  // Field1, Field2, or Frame
  3312.     LONGLONG                PictureNumber; // Test only?
  3313.     LONGLONG                DropCount;     // Test only?
  3314.     DWORD                   dwSamplingFrequency;
  3315.     KS_TVTUNER_CHANGE_INFO  TvTunerChangeInfo;
  3316.     KS_VBIINFOHEADER        VBIInfoHeader;
  3317. } KS_VBI_FRAME_INFO, *PKS_VBI_FRAME_INFO;
  3318.  
  3319.  
  3320. //===========================================================================
  3321. // Analog video formats, used with:
  3322. //      Analog Video Decoders
  3323. //      TVTuners
  3324. //      Analog Video Encoders
  3325. //
  3326. // XXX_STANDARDS_SUPPORTED returns a bitmask
  3327. //===========================================================================
  3328.  
  3329. typedef enum
  3330. {
  3331.     KS_AnalogVideo_None     = 0x00000000,  // This is a digital sensor
  3332.     KS_AnalogVideo_NTSC_M   = 0x00000001,  //        75 IRE Setup
  3333.     KS_AnalogVideo_NTSC_M_J = 0x00000002,  // Japan,  0 IRE Setup
  3334.     KS_AnalogVideo_NTSC_433 = 0x00000004,
  3335.  
  3336.     KS_AnalogVideo_PAL_B    = 0x00000010,
  3337.     KS_AnalogVideo_PAL_D    = 0x00000020,
  3338.     KS_AnalogVideo_PAL_G    = 0x00000040,
  3339.     KS_AnalogVideo_PAL_H    = 0x00000080,
  3340.     KS_AnalogVideo_PAL_I    = 0x00000100,
  3341.     KS_AnalogVideo_PAL_M    = 0x00000200,
  3342.     KS_AnalogVideo_PAL_N    = 0x00000400,
  3343.  
  3344.     KS_AnalogVideo_PAL_60   = 0x00000800,
  3345.  
  3346.     KS_AnalogVideo_SECAM_B  = 0x00001000,
  3347.     KS_AnalogVideo_SECAM_D  = 0x00002000,
  3348.     KS_AnalogVideo_SECAM_G  = 0x00004000,
  3349.     KS_AnalogVideo_SECAM_H  = 0x00008000,
  3350.     KS_AnalogVideo_SECAM_K  = 0x00010000,
  3351.     KS_AnalogVideo_SECAM_K1 = 0x00020000,
  3352.     KS_AnalogVideo_SECAM_L  = 0x00040000,
  3353.     KS_AnalogVideo_SECAM_L1 = 0x00080000
  3354. } KS_AnalogVideoStandard;
  3355.  
  3356. #define KS_AnalogVideo_NTSC_Mask  0x00000007
  3357. #define KS_AnalogVideo_PAL_Mask   0x00000FF0
  3358. #define KS_AnalogVideo_SECAM_Mask 0x000FF000
  3359.  
  3360. //===========================================================================
  3361. // Property set definitions
  3362. // The comments show whether a given property is:
  3363. //      R  : READ only
  3364. //      w  : WRITE only
  3365. //      RW : READ / WRITE
  3366. //      O  : Optional (return E_UNSUPPORTED if you don't handle this)
  3367. //===========================================================================
  3368.  
  3369. #define STATIC_PROPSETID_ALLOCATOR_CONTROL\
  3370.     0x53171960, 0x148e, 0x11d2, 0x99, 0x79, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
  3371. DEFINE_GUIDSTRUCT("53171960-148E-11d2-9979-0000C0CC16BA", PROPSETID_ALLOCATOR_CONTROL);
  3372. #define PROPSETID_ALLOCATOR_CONTROL DEFINE_GUIDNAMED(PROPSETID_ALLOCATOR_CONTROL)
  3373. typedef enum {
  3374.     KSPROPERTY_ALLOCATOR_CONTROL_HONOR_COUNT,      // R O (will allocate exactly this number of buffers)
  3375.     KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE,     // R O (return 2 DWORDs specifying surface size)
  3376. } KSPROPERTY_ALLOCATOR_CONTROL;
  3377.  
  3378.  
  3379. //===========================================================================
  3380.  
  3381. #define STATIC_PROPSETID_VIDCAP_VIDEOPROCAMP\
  3382.     0xC6E13360L, 0x30AC, 0x11d0, 0xa1, 0x8c, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  3383. DEFINE_GUIDSTRUCT("C6E13360-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEOPROCAMP);
  3384. #define PROPSETID_VIDCAP_VIDEOPROCAMP DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOPROCAMP)
  3385.  
  3386. typedef enum {
  3387.     KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS,            // RW O
  3388.     KSPROPERTY_VIDEOPROCAMP_CONTRAST,              // RW O
  3389.     KSPROPERTY_VIDEOPROCAMP_HUE,                   // RW O
  3390.     KSPROPERTY_VIDEOPROCAMP_SATURATION,            // RW O
  3391.     KSPROPERTY_VIDEOPROCAMP_SHARPNESS,             // RW O
  3392.     KSPROPERTY_VIDEOPROCAMP_GAMMA,                 // RW O
  3393.     KSPROPERTY_VIDEOPROCAMP_COLORENABLE,           // RW O
  3394.     KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE,          // RW O
  3395.     KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION,// RW O
  3396. } KSPROPERTY_VIDCAP_VIDEOPROCAMP;
  3397.  
  3398. typedef struct {
  3399.     KSPROPERTY Property;
  3400.     LONG   Value;                       // Value to set or get
  3401.     ULONG  Flags;                       // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
  3402.     ULONG  Capabilities;                // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
  3403. } KSPROPERTY_VIDEOPROCAMP_S, *PKSPROPERTY_VIDEOPROCAMP_S;
  3404.  
  3405. #define KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO        0X0001L
  3406. #define KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL      0X0002L
  3407.  
  3408. //===========================================================================
  3409.  
  3410. #define STATIC_PROPSETID_TUNER\
  3411.     0x6a2e0605L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3412. DEFINE_GUIDSTRUCT("6a2e0605-28e4-11d0-a18c-00a0c9118956", PROPSETID_TUNER);
  3413. #define PROPSETID_TUNER DEFINE_GUIDNAMED(PROPSETID_TUNER)
  3414.  
  3415. typedef enum {
  3416.     KSPROPERTY_TUNER_CAPS,              // R  -overall device capabilities
  3417.     KSPROPERTY_TUNER_MODE_CAPS,         // R  -capabilities in this mode
  3418.     KSPROPERTY_TUNER_MODE,              // RW -set a mode (TV, FM, AM, DSS)
  3419.     KSPROPERTY_TUNER_STANDARD,          // R  -get TV standard (only if TV mode)
  3420.     KSPROPERTY_TUNER_FREQUENCY,         // RW -set/get frequency
  3421.     KSPROPERTY_TUNER_INPUT,             // RW -select an input
  3422.     KSPROPERTY_TUNER_STATUS,            // R  -tuning status
  3423.     KSPROPERTY_TUNER_IF_MEDIUM          // R O-Medium for IF or Transport Pin
  3424. } KSPROPERTY_TUNER;
  3425.  
  3426. typedef enum {
  3427.     KSPROPERTY_TUNER_MODE_TV            = 0X0001,
  3428.     KSPROPERTY_TUNER_MODE_FM_RADIO      = 0X0002,
  3429.     KSPROPERTY_TUNER_MODE_AM_RADIO      = 0X0004,
  3430.     KSPROPERTY_TUNER_MODE_DSS           = 0X0008,
  3431.     KSPROPERTY_TUNER_MODE_ATSC          = 0X0010,  // also used for DVB-T, DVB-C
  3432. } KSPROPERTY_TUNER_MODES;
  3433.  
  3434. // Describes how the device tunes.  Only one of these flags may be set
  3435. // in KSPROPERTY_TUNER_MODE_CAPS_S.Strategy
  3436.  
  3437. // Describe how the driver should attempt to tune:
  3438. // EXACT:   just go to the frequency specified (no fine tuning)
  3439. // FINE:    (slow) do an exhaustive search for the best signal
  3440. // COARSE:  (fast) use larger frequency jumps to just determine if any signal
  3441.  
  3442. typedef enum {
  3443.     KS_TUNER_TUNING_EXACT = 1,        // No fine tuning
  3444.     KS_TUNER_TUNING_FINE,             // Fine grained search
  3445.     KS_TUNER_TUNING_COARSE,           // Coarse search
  3446. }KS_TUNER_TUNING_FLAGS;
  3447.  
  3448. typedef enum {
  3449.     KS_TUNER_STRATEGY_PLL             = 0X01, // Tune by PLL offset
  3450.     KS_TUNER_STRATEGY_SIGNAL_STRENGTH = 0X02, // Tune by signal strength
  3451.     KS_TUNER_STRATEGY_DRIVER_TUNES    = 0X04, // Driver does fine tuning
  3452. }KS_TUNER_STRATEGY;
  3453.  
  3454. typedef struct {
  3455.     KSPROPERTY Property;
  3456.     ULONG  ModesSupported;              // KS_PROPERTY_TUNER_MODES_*
  3457.     KSPIN_MEDIUM VideoMedium;           // GUID_NULL (no pin), or GUID
  3458.     KSPIN_MEDIUM TVAudioMedium;         // GUID_NULL (no pin), or GUID
  3459.     KSPIN_MEDIUM RadioAudioMedium;      // GUID_NULL (no pin), or GUID
  3460. } KSPROPERTY_TUNER_CAPS_S, *PKSPROPERTY_TUNER_CAPS_S;
  3461.  
  3462. typedef struct {
  3463.     KSPROPERTY Property;
  3464.     KSPIN_MEDIUM IFMedium;              // GUID_NULL (no pin), or GUID
  3465. } KSPROPERTY_TUNER_IF_MEDIUM_S, *PKSPROPERTY_TUNER_IF_MEDIUM_S;
  3466.  
  3467. typedef struct {
  3468.     KSPROPERTY Property;
  3469.     ULONG  Mode;                        // IN: KSPROPERTY_TUNER_MODE
  3470.     ULONG  StandardsSupported;          // KS_AnalogVideo_* (if TV or DSS)
  3471.     ULONG  MinFrequency;                // Hz
  3472.     ULONG  MaxFrequency;                // Hz
  3473.     ULONG  TuningGranularity;           // Hz
  3474.     ULONG  NumberOfInputs;              // count of inputs
  3475.     ULONG  SettlingTime;                // milliSeconds
  3476.     ULONG  Strategy;                    // KS_TUNER_STRATEGY
  3477. } KSPROPERTY_TUNER_MODE_CAPS_S, *PKSPROPERTY_TUNER_MODE_CAPS_S;
  3478.  
  3479. typedef struct {
  3480.     KSPROPERTY Property;
  3481.     ULONG  Mode;                        // IN: KSPROPERTY_TUNER_MODE
  3482. } KSPROPERTY_TUNER_MODE_S, *PKSPROPERTY_TUNER_MODE_S;
  3483.  
  3484. typedef struct {
  3485.     KSPROPERTY Property;
  3486.     ULONG  Frequency;                   // Hz
  3487.     ULONG  LastFrequency;               // Hz (last known good)
  3488.     ULONG  TuningFlags;                 // KS_TUNER_TUNING_FLAGS
  3489.     ULONG  VideoSubChannel;             // DSS
  3490.     ULONG  AudioSubChannel;             // DSS
  3491.     ULONG  Channel;                     // VBI decoders
  3492.     ULONG  Country;                     // VBI decoders
  3493. } KSPROPERTY_TUNER_FREQUENCY_S, *PKSPROPERTY_TUNER_FREQUENCY_S;
  3494.  
  3495. typedef struct {
  3496.     KSPROPERTY Property;
  3497.     ULONG  Standard;                    // KS_AnalogVideo_*
  3498. } KSPROPERTY_TUNER_STANDARD_S, *PKSPROPERTY_TUNER_STANDARD_S;
  3499.  
  3500. typedef struct {
  3501.     KSPROPERTY Property;
  3502.     ULONG  InputIndex;                  // 0 to (n-1) inputs
  3503. } KSPROPERTY_TUNER_INPUT_S, *PKSPROPERTY_TUNER_INPUT_S;
  3504.  
  3505. typedef struct {
  3506.     KSPROPERTY Property;
  3507.     ULONG  CurrentFrequency;            // Hz
  3508.     ULONG  PLLOffset;                   // if Strategy.KS_TUNER_STRATEGY_PLL
  3509.     ULONG  SignalStrength;              // if Stretegy.KS_TUNER_STRATEGY_SIGNAL_STRENGTH
  3510.     ULONG  Busy;                        // TRUE if in the process of tuning
  3511. } KSPROPERTY_TUNER_STATUS_S, *PKSPROPERTY_TUNER_STATUS_S;
  3512.  
  3513. #define STATIC_EVENTSETID_TUNER\
  3514.     0x6a2e0606L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3515. DEFINE_GUIDSTRUCT("6a2e0606-28e4-11d0-a18c-00a0c9118956", EVENTSETID_TUNER);
  3516. #define EVENTSETID_TUNER DEFINE_GUIDNAMED(EVENTSETID_TUNER)
  3517.  
  3518. typedef enum {
  3519.     KSEVENT_TUNER_CHANGED
  3520. } KSEVENT_TUNER;
  3521.  
  3522.  
  3523. //===========================================================================
  3524.  
  3525. #define STATIC_PROPSETID_VIDCAP_VIDEOENCODER\
  3526.     0x6a2e0610L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3527. DEFINE_GUIDSTRUCT("6a2e0610-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_VIDEOENCODER);
  3528. #define PROPSETID_VIDCAP_VIDEOENCODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOENCODER)
  3529.  
  3530. typedef enum {
  3531.     KSPROPERTY_VIDEOENCODER_CAPS,                       // R
  3532.     KSPROPERTY_VIDEOENCODER_STANDARD,                   // RW
  3533.     KSPROPERTY_VIDEOENCODER_COPYPROTECTION,             // RW O
  3534.     KSPROPERTY_VIDEOENCODER_CC_ENABLE,                  // RW O
  3535. } KSPROPERTY_VIDCAP_VIDEOENCODER;
  3536.  
  3537. typedef struct {
  3538.     KSPROPERTY Property;
  3539.     LONG       Value;                   // value to get or set
  3540.     ULONG      Flags;                   //
  3541.     ULONG      Capabilities;            //
  3542. } KSPROPERTY_VIDEOENCODER_S, *PKSPROPERTY_VIDEOENCODER_S;
  3543.  
  3544. //===========================================================================
  3545.  
  3546. #define STATIC_PROPSETID_VIDCAP_VIDEODECODER\
  3547.     0xC6E13350L, 0x30AC, 0x11d0, 0xA1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  3548. DEFINE_GUIDSTRUCT("C6E13350-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEODECODER);
  3549. #define PROPSETID_VIDCAP_VIDEODECODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEODECODER)
  3550.  
  3551. typedef enum {
  3552.     KSPROPERTY_VIDEODECODER_CAPS,                       // R
  3553.     KSPROPERTY_VIDEODECODER_STANDARD,                   // RW
  3554.     KSPROPERTY_VIDEODECODER_STATUS,                     // R
  3555.     KSPROPERTY_VIDEODECODER_OUTPUT_ENABLE,              // Rw O
  3556.     KSPROPERTY_VIDEODECODER_VCR_TIMING,                 // RW O
  3557. } KSPROPERTY_VIDCAP_VIDEODECODER;
  3558.  
  3559. typedef enum {
  3560.     KS_VIDEODECODER_FLAGS_CAN_DISABLE_OUTPUT  = 0X0001, // VP Output can tri-stae
  3561.     KS_VIDEODECODER_FLAGS_CAN_USE_VCR_LOCKING = 0X0002, // VCR PLL timings
  3562.     KS_VIDEODECODER_FLAGS_CAN_INDICATE_LOCKED = 0X0004, // Can indicate valid signal
  3563. }KS_VIDEODECODER_FLAGS;
  3564.  
  3565. typedef struct {
  3566.     KSPROPERTY Property;
  3567.     ULONG      StandardsSupported;      // KS_AnalogVideo_*
  3568.     ULONG      Capabilities;            // KS_VIDEODECODER_FLAGS_*
  3569.     ULONG      SettlingTime;            // milliseconds
  3570.     ULONG      HSyncPerVSync;           // Number of HSync Pulses per VSync
  3571. } KSPROPERTY_VIDEODECODER_CAPS_S, *PKSPROPERTY_VIDEODECODER_CAPS_S;
  3572.  
  3573. typedef struct {
  3574.     KSPROPERTY Property;
  3575.     ULONG      NumberOfLines;           // 525 or 625 lines detected
  3576.     ULONG      SignalLocked;            // TRUE if signal is locked
  3577. } KSPROPERTY_VIDEODECODER_STATUS_S, *PKSPROPERTY_VIDEODECODER_STATUS_S;
  3578.  
  3579. typedef struct {
  3580.     KSPROPERTY Property;
  3581.     ULONG      Value;                   // Get or set a value
  3582. } KSPROPERTY_VIDEODECODER_S, *PKSPROPERTY_VIDEODECODER_S;
  3583.  
  3584. #define STATIC_EVENTSETID_VIDEODECODER\
  3585.     0x6a2e0621L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3586. DEFINE_GUIDSTRUCT("6a2e0621-28e4-11d0-a18c-00a0c9118956", EVENTSETID_VIDEODECODER);
  3587. #define EVENTSETID_VIDEODECODER DEFINE_GUIDNAMED(EVENTSETID_VIDEODECODER)
  3588.  
  3589. typedef enum {
  3590.     KSEVENT_VIDEODECODER_CHANGED
  3591. } KSEVENT_VIDEODECODER;
  3592.  
  3593. //===========================================================================
  3594.  
  3595. #define STATIC_PROPSETID_VIDCAP_CAMERACONTROL\
  3596.     0xC6E13370L, 0x30AC, 0x11d0, 0xa1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  3597. DEFINE_GUIDSTRUCT("C6E13370-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_CAMERACONTROL);
  3598. #define PROPSETID_VIDCAP_CAMERACONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CAMERACONTROL)
  3599.  
  3600. typedef enum {
  3601.     KSPROPERTY_CAMERACONTROL_PAN,                       // RW O
  3602.     KSPROPERTY_CAMERACONTROL_TILT,                      // RW O
  3603.     KSPROPERTY_CAMERACONTROL_ROLL,                      // RW O
  3604.     KSPROPERTY_CAMERACONTROL_ZOOM,                      // RW O
  3605.     KSPROPERTY_CAMERACONTROL_EXPOSURE,                  // RW O
  3606.     KSPROPERTY_CAMERACONTROL_IRIS,                      // RW O
  3607.     KSPROPERTY_CAMERACONTROL_FOCUS,                     // RW O
  3608. } KSPROPERTY_VIDCAP_CAMERACONTROL;
  3609.  
  3610. typedef struct {
  3611.     KSPROPERTY Property;
  3612.     LONG       Value;                   // value to get or set
  3613.     ULONG      Flags;                   // KSPROPERTY_CAMERACONTROL_FLAGS_*
  3614.     ULONG      Capabilities;            // KSPROPERTY_CAMERACONTROL_FLAGS_*
  3615. } KSPROPERTY_CAMERACONTROL_S, *PKSPROPERTY_CAMERACONTROL_S;
  3616.  
  3617. #define KSPROPERTY_CAMERACONTROL_FLAGS_AUTO        0X0001L
  3618. #define KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL      0X0002L
  3619.  
  3620. #define KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE    0X0000L
  3621. #define KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE    0X0010L
  3622.  
  3623.  
  3624. //===========================================================================
  3625.  
  3626. #define STATIC_PROPSETID_VIDCAP_CROSSBAR\
  3627.     0x6a2e0640L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3628. DEFINE_GUIDSTRUCT("6a2e0640-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_CROSSBAR);
  3629. #define PROPSETID_VIDCAP_CROSSBAR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CROSSBAR)
  3630.  
  3631. typedef enum {
  3632.     KSPROPERTY_CROSSBAR_CAPS,                     // R
  3633.     KSPROPERTY_CROSSBAR_PININFO,                  // R
  3634.     KSPROPERTY_CROSSBAR_CAN_ROUTE,                // R
  3635.     KSPROPERTY_CROSSBAR_ROUTE,                    // RW
  3636. } KSPROPERTY_VIDCAP_CROSSBAR;
  3637.  
  3638. typedef struct {
  3639.     KSPROPERTY Property;
  3640.     ULONG  NumberOfInputs;      // the number of audio and video input pins
  3641.     ULONG  NumberOfOutputs;     // the number of audio and video output pins
  3642. } KSPROPERTY_CROSSBAR_CAPS_S, *PKSPROPERTY_CROSSBAR_CAPS_S;
  3643.  
  3644. typedef struct {
  3645.     KSPROPERTY Property;
  3646.     KSPIN_DATAFLOW Direction;     // KSPIN_DATAFLOW_IN or KSPIN_DATAFLOW_OUT?
  3647.     ULONG  Index;                 // Which pin to return data for?
  3648.     ULONG  PinType;               // KS_PhysConn_Video_* or KS_PhysConn_Audio_*
  3649.     ULONG  RelatedPinIndex;       // For video pins, this is the related audio pin
  3650.     KSPIN_MEDIUM  Medium;         // Identifies the hardware connection
  3651. } KSPROPERTY_CROSSBAR_PININFO_S, *PKSPROPERTY_CROSSBAR_PININFO_S;
  3652.  
  3653. typedef struct {
  3654.     KSPROPERTY Property;
  3655.     ULONG  IndexInputPin;        // Zero based index of the input pin
  3656.     ULONG  IndexOutputPin;       // Zero based index of the output pin
  3657.     ULONG  CanRoute;             // returns non-zero on CAN_ROUTE if routing is possible
  3658. } KSPROPERTY_CROSSBAR_ROUTE_S, *PKSPROPERTY_CROSSBAR_ROUTE_S;
  3659.  
  3660. #define STATIC_EVENTSETID_CROSSBAR\
  3661.     0x6a2e0641L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3662. DEFINE_GUIDSTRUCT("6a2e0641-28e4-11d0-a18c-00a0c9118956", EVENTSETID_CROSSBAR);
  3663. #define EVENTSETID_CROSSBAR DEFINE_GUIDNAMED(EVENTSETID_CROSSBAR)
  3664.  
  3665. typedef enum {
  3666.     KSEVENT_CROSSBAR_CHANGED
  3667. } KSEVENT_CROSSBAR;
  3668.  
  3669. // The following IDs should match the AM equivalents
  3670. typedef enum {
  3671.     KS_PhysConn_Video_Tuner = 1,
  3672.     KS_PhysConn_Video_Composite,
  3673.     KS_PhysConn_Video_SVideo,
  3674.     KS_PhysConn_Video_RGB,
  3675.     KS_PhysConn_Video_YRYBY,
  3676.     KS_PhysConn_Video_SerialDigital,
  3677.     KS_PhysConn_Video_ParallelDigital,
  3678.     KS_PhysConn_Video_SCSI,
  3679.     KS_PhysConn_Video_AUX,
  3680.     KS_PhysConn_Video_1394,
  3681.     KS_PhysConn_Video_USB,
  3682.     KS_PhysConn_Video_VideoDecoder,
  3683.     KS_PhysConn_Video_VideoEncoder,
  3684.     KS_PhysConn_Video_SCART,
  3685.  
  3686.     KS_PhysConn_Audio_Tuner = 4096,
  3687.     KS_PhysConn_Audio_Line,
  3688.     KS_PhysConn_Audio_Mic,
  3689.     KS_PhysConn_Audio_AESDigital,
  3690.     KS_PhysConn_Audio_SPDIFDigital,
  3691.     KS_PhysConn_Audio_SCSI,
  3692.     KS_PhysConn_Audio_AUX,
  3693.     KS_PhysConn_Audio_1394,
  3694.     KS_PhysConn_Audio_USB,
  3695.     KS_PhysConn_Audio_AudioDecoder,
  3696. } KS_PhysicalConnectorType;
  3697.  
  3698.  
  3699. //===========================================================================
  3700.  
  3701. #define STATIC_PROPSETID_VIDCAP_TVAUDIO\
  3702.     0x6a2e0650L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3703. DEFINE_GUIDSTRUCT("6a2e0650-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_TVAUDIO);
  3704. #define PROPSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(PROPSETID_VIDCAP_TVAUDIO)
  3705.  
  3706. typedef enum {
  3707.     KSPROPERTY_TVAUDIO_CAPS,                            // R
  3708.     KSPROPERTY_TVAUDIO_MODE,                            // RW
  3709.     KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES        // R
  3710. } KSPROPERTY_VIDCAP_TVAUDIO;
  3711.  
  3712. #define KS_TVAUDIO_MODE_MONO           0x0001          // Mono
  3713. #define KS_TVAUDIO_MODE_STEREO         0x0002          // Stereo
  3714. #define KS_TVAUDIO_MODE_LANG_A         0x0010          // Primary language
  3715. #define KS_TVAUDIO_MODE_LANG_B         0x0020          // 2nd avail language
  3716. #define KS_TVAUDIO_MODE_LANG_C         0x0040          // 3rd avail language
  3717.  
  3718. typedef struct {
  3719.     KSPROPERTY Property;
  3720.     ULONG      Capabilities;             // Bitmask of KS_TVAUDIO_MODE_*
  3721.     KSPIN_MEDIUM InputMedium;
  3722.     KSPIN_MEDIUM OutputMedium;
  3723. } KSPROPERTY_TVAUDIO_CAPS_S, *PKSPROPERTY_TVAUDIO_CAPS_S;
  3724.  
  3725. typedef struct {
  3726.     KSPROPERTY Property;
  3727.     ULONG      Mode;                     // KS_TVAUDIO_MODE_*
  3728. } KSPROPERTY_TVAUDIO_S, *PKSPROPERTY_TVAUDIO_S;
  3729.  
  3730.  
  3731. #define STATIC_KSEVENTSETID_VIDCAP_TVAUDIO\
  3732.     0x6a2e0651L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3733. DEFINE_GUIDSTRUCT("6a2e0651-28e4-11d0-a18c-00a0c9118956", KSEVENTSETID_VIDCAP_TVAUDIO);
  3734. #define KSEVENTSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAP_TVAUDIO)
  3735.  
  3736. typedef enum {
  3737.     KSEVENT_TVAUDIO_CHANGED,
  3738. } KSEVENT_TVAUDIO;
  3739.  
  3740. //===========================================================================
  3741. #define STATIC_PROPSETID_VIDCAP_VIDEOCOMPRESSION\
  3742.     0xC6E13343L, 0x30AC, 0x11d0, 0xA1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
  3743. DEFINE_GUIDSTRUCT("C6E13343-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEOCOMPRESSION);
  3744. #define PROPSETID_VIDCAP_VIDEOCOMPRESSION DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCOMPRESSION)
  3745.  
  3746. typedef enum {
  3747.     KSPROPERTY_VIDEOCOMPRESSION_GETINFO,              // R
  3748.     KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE,        // RW
  3749.     KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME, // RW
  3750.     KSPROPERTY_VIDEOCOMPRESSION_QUALITY,              // RW
  3751.     KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_KEYFRAME,    // W
  3752.     KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_FRAME_SIZE,  // W
  3753.     KSPROPERTY_VIDEOCOMPRESSION_WINDOWSIZE,           // RW
  3754. } KSPROPERTY_VIDCAP_VIDEOCOMPRESSION;
  3755.  
  3756. typedef enum {
  3757.     KS_CompressionCaps_CanQuality = 1,
  3758.     KS_CompressionCaps_CanCrunch = 2,
  3759.     KS_CompressionCaps_CanKeyFrame = 4,
  3760.     KS_CompressionCaps_CanBFrame = 8,
  3761.     KS_CompressionCaps_CanWindow = 0x10,
  3762. } KS_CompressionCaps;
  3763.  
  3764. typedef struct {
  3765.     KSPROPERTY Property;
  3766.     // Note, no VersionString!
  3767.     // Note, no DescriptionString!
  3768.     ULONG      StreamIndex;             // zero based index of stream
  3769.     LONG       DefaultKeyFrameRate;     // Key frame rate
  3770.     LONG       DefaultPFrameRate;       // Predeicted frames per Key frame
  3771.     LONG       DefaultQuality;          // 0 to 10000
  3772.     LONG       NumberOfQualitySettings; // How many discreet quality settings?
  3773.     LONG       Capabilities;            // KS_CompressionCaps_*
  3774. } KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S, *PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S;
  3775.  
  3776. typedef struct {
  3777.     KSPROPERTY Property;
  3778.     ULONG      StreamIndex;             // zero based index of stream
  3779.     LONG       Value;                   // value to get or set
  3780. } KSPROPERTY_VIDEOCOMPRESSION_S, *PKSPROPERTY_VIDEOCOMPRESSION_S;
  3781.  
  3782. //===========================================================================
  3783. // MEDIASUBTYPE_Overlay
  3784. #define STATIC_KSDATAFORMAT_SUBTYPE_OVERLAY\
  3785.     0xe436eb7fL, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
  3786. DEFINE_GUIDSTRUCT("e436eb7f-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_OVERLAY);
  3787. #define KSDATAFORMAT_SUBTYPE_OVERLAY DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_OVERLAY)
  3788.  
  3789. #define STATIC_KSPROPSETID_OverlayUpdate\
  3790.     0x490EA5CFL, 0x7681, 0x11D1, 0xA2, 0x1C, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
  3791. DEFINE_GUIDSTRUCT("490EA5CF-7681-11D1-A21C-00A0C9223196", KSPROPSETID_OverlayUpdate);
  3792. #define KSPROPSETID_OverlayUpdate DEFINE_GUIDNAMED(KSPROPSETID_OverlayUpdate)
  3793.  
  3794. typedef enum {
  3795.     KSPROPERTY_OVERLAYUPDATE_INTERESTS,
  3796.     KSPROPERTY_OVERLAYUPDATE_CLIPLIST = 0x1,
  3797.     KSPROPERTY_OVERLAYUPDATE_PALETTE = 0x2,
  3798.     KSPROPERTY_OVERLAYUPDATE_COLORKEY = 0x4,
  3799.     KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION = 0x8,
  3800.     KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE = 0x10,
  3801.     KSPROPERTY_OVERLAYUPDATE_COLORREF = 0x10000000
  3802. } KSPROPERTY_OVERLAYUPDATE;
  3803.  
  3804. typedef struct {
  3805.     ULONG   PelsWidth;
  3806.     ULONG   PelsHeight;
  3807.     ULONG   BitsPerPel;
  3808.     WCHAR   DeviceID[1];
  3809. } KSDISPLAYCHANGE, *PKSDISPLAYCHANGE;
  3810.  
  3811. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_INTERESTS(Handler)\
  3812.     DEFINE_KSPROPERTY_ITEM(\
  3813.         KSPROPERTY_OVERLAYUPDATE_INTERESTS,\
  3814.         (Handler),\
  3815.         sizeof(KSPROPERTY),\
  3816.         sizeof(ULONG),\
  3817.         NULL, NULL, 0, NULL, NULL, 0)
  3818.  
  3819. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_PALETTE(Handler)\
  3820.     DEFINE_KSPROPERTY_ITEM(\
  3821.         KSPROPERTY_OVERLAYUPDATE_PALETTE,\
  3822.         NULL,\
  3823.         sizeof(KSPROPERTY),\
  3824.         0,\
  3825.         (Handler),\
  3826.         NULL, 0, NULL, NULL, 0)
  3827.  
  3828. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORKEY(Handler)\
  3829.     DEFINE_KSPROPERTY_ITEM(\
  3830.         KSPROPERTY_OVERLAYUPDATE_COLORKEY,\
  3831.         NULL,\
  3832.         sizeof(KSPROPERTY),\
  3833.         sizeof(COLORKEY),\
  3834.         (Handler),\
  3835.         NULL, 0, NULL, NULL, 0)
  3836.  
  3837. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_CLIPLIST(Handler)\
  3838.     DEFINE_KSPROPERTY_ITEM(\
  3839.         KSPROPERTY_OVERLAYUPDATE_CLIPLIST,\
  3840.         NULL,\
  3841.         sizeof(KSPROPERTY),\
  3842.         2 * sizeof(RECT) + sizeof(RGNDATAHEADER),\
  3843.         (Handler),\
  3844.         NULL, 0, NULL, NULL, 0)
  3845.  
  3846. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_VIDEOPOSITION(Handler)\
  3847.     DEFINE_KSPROPERTY_ITEM(\
  3848.         KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION,\
  3849.         NULL,\
  3850.         sizeof(KSPROPERTY),\
  3851.         2 * sizeof(RECT),\
  3852.         (Handler),\
  3853.         NULL, 0, NULL, NULL, 0)
  3854.  
  3855. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_DISPLAYCHANGE(Handler)\
  3856.     DEFINE_KSPROPERTY_ITEM(\
  3857.         KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE,\
  3858.         NULL,\
  3859.         sizeof(KSPROPERTY),\
  3860.         sizeof(KSDISPLAYCHANGE),\
  3861.         (Handler),\
  3862.         NULL, 0, NULL, NULL, 0)
  3863.  
  3864. #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORREF(Handler)\
  3865.     DEFINE_KSPROPERTY_ITEM(\
  3866.         KSPROPERTY_OVERLAYUPDATE_COLORREF,\
  3867.         (Handler),\
  3868.         sizeof(KSPROPERTY),\
  3869.         sizeof(COLORREF),\
  3870.         NULL,\
  3871.         NULL, 0, NULL, NULL, 0)
  3872.  
  3873. //===========================================================================
  3874. #define STATIC_PROPSETID_VIDCAP_VIDEOCONTROL\
  3875.     0x6a2e0670L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3876. DEFINE_GUIDSTRUCT("6a2e0670-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_VIDEOCONTROL);
  3877. #define PROPSETID_VIDCAP_VIDEOCONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCONTROL)
  3878.  
  3879. typedef enum {
  3880.     KSPROPERTY_VIDEOCONTROL_CAPS,               // R
  3881.     KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE,  // R O
  3882.     KSPROPERTY_VIDEOCONTROL_FRAME_RATES,        // R O
  3883.     KSPROPERTY_VIDEOCONTROL_MODE,               // RWO
  3884. } KSPROPERTY_VIDCAP_VIDEOCONTROL;
  3885.  
  3886. typedef enum {
  3887.     KS_VideoControlFlag_FlipHorizontal        = 0x0001,
  3888.     KS_VideoControlFlag_FlipVertical          = 0x0002,
  3889.     KS_Obsolete_VideoControlFlag_ExternalTriggerEnable = 0x0010,    // ***WARNING *** Flag msimatch with DSHOW.
  3890.     KS_Obsolete_VideoControlFlag_Trigger               = 0x0020,  // ***WARNING *** Flag msimatch with DSHOW.
  3891.     KS_VideoControlFlag_ExternalTriggerEnable = 0x0004,
  3892.     KS_VideoControlFlag_Trigger                      = 0x0008,
  3893. } KS_VideoControlFlags;
  3894.  
  3895. typedef struct {
  3896.     KSPROPERTY Property;
  3897.     ULONG      StreamIndex;
  3898.     ULONG      VideoControlCaps;                // KS_VideoControlFlags_*
  3899. } KSPROPERTY_VIDEOCONTROL_CAPS_S, *PKSPROPERTY_VIDEOCONTROL_CAPS_S;
  3900.  
  3901. typedef struct {
  3902.     KSPROPERTY Property;
  3903.     ULONG      StreamIndex;
  3904.     LONG       Mode;                            // KS_VideoControlFlags_*
  3905. } KSPROPERTY_VIDEOCONTROL_MODE_S, *PKSPROPERTY_VIDEOCONTROL_MODE_S;
  3906.  
  3907. typedef struct {
  3908.     KSPROPERTY Property;
  3909.     ULONG      StreamIndex;                     // Index of stream
  3910.     ULONG      RangeIndex;                      // Index of range
  3911.     SIZE       Dimensions;                      // Size of image
  3912.     LONGLONG   CurrentActualFrameRate;          // Only correct if pin is open
  3913.     LONGLONG   CurrentMaxAvailableFrameRate;    // Max Rate temporarily limited on USB or 1394?
  3914. } KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S, *PKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S;
  3915.  
  3916. // KSPROPERTY_VIDEOCONTROL_FRAME_RATES returns a list of available frame rates in 100 nS units
  3917. typedef struct {
  3918.     KSPROPERTY Property;
  3919.     ULONG      StreamIndex;                     // Index of stream
  3920.     ULONG      RangeIndex;                      // Index of range
  3921.     SIZE       Dimensions;                      // Size of image
  3922. } KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S, *PKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S;
  3923.  
  3924. //===========================================================================
  3925. #define STATIC_PROPSETID_VIDCAP_DROPPEDFRAMES\
  3926.     0xC6E13344L, 0x30AC, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
  3927. DEFINE_GUIDSTRUCT("C6E13344-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_DROPPEDFRAMES);
  3928. #define PROPSETID_VIDCAP_DROPPEDFRAMES DEFINE_GUIDNAMED(PROPSETID_VIDCAP_DROPPEDFRAMES)
  3929.  
  3930. typedef enum {
  3931.     KSPROPERTY_DROPPEDFRAMES_CURRENT            // R
  3932. } KSPROPERTY_VIDCAP_DROPPEDFRAMES;
  3933.  
  3934. typedef struct {
  3935.     KSPROPERTY Property;
  3936.     LONGLONG   PictureNumber;                   // Current Picture Number
  3937.     LONGLONG   DropCount;                       // Count of frames dropped
  3938.     ULONG      AverageFrameSize;                // Average size of frames captured
  3939. } KSPROPERTY_DROPPEDFRAMES_CURRENT_S, *PKSPROPERTY_DROPPEDFRAMES_CURRENT_S;
  3940.  
  3941. //===========================================================================
  3942. // VPE
  3943.  
  3944. #define STATIC_KSPROPSETID_VPConfig\
  3945.     0xbc29a660L, 0x30e3, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b
  3946. DEFINE_GUIDSTRUCT("bc29a660-30e3-11d0-9e69-00c04fd7c15b", KSPROPSETID_VPConfig);
  3947. #define KSPROPSETID_VPConfig DEFINE_GUIDNAMED(KSPROPSETID_VPConfig)
  3948.  
  3949. #define STATIC_KSPROPSETID_VPVBIConfig\
  3950.     0xec529b00L, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  3951. DEFINE_GUIDSTRUCT("ec529b00-1a1f-11d1-bad9-00609744111a", KSPROPSETID_VPVBIConfig);
  3952. #define KSPROPSETID_VPVBIConfig DEFINE_GUIDNAMED(KSPROPSETID_VPVBIConfig)
  3953.  
  3954. // Both of the above property sets use the same list of properties below
  3955.  
  3956. typedef enum {
  3957.     KSPROPERTY_VPCONFIG_NUMCONNECTINFO,
  3958.     KSPROPERTY_VPCONFIG_GETCONNECTINFO,
  3959.     KSPROPERTY_VPCONFIG_SETCONNECTINFO,
  3960.     KSPROPERTY_VPCONFIG_VPDATAINFO,
  3961.     KSPROPERTY_VPCONFIG_MAXPIXELRATE,
  3962.     KSPROPERTY_VPCONFIG_INFORMVPINPUT,
  3963.     KSPROPERTY_VPCONFIG_NUMVIDEOFORMAT,
  3964.     KSPROPERTY_VPCONFIG_GETVIDEOFORMAT,
  3965.     KSPROPERTY_VPCONFIG_SETVIDEOFORMAT,
  3966.     KSPROPERTY_VPCONFIG_INVERTPOLARITY,
  3967.     KSPROPERTY_VPCONFIG_DECIMATIONCAPABILITY,   // E_NOTIMPL for VBI
  3968.     KSPROPERTY_VPCONFIG_SCALEFACTOR,            // E_NOTIMPL for VBI
  3969.     KSPROPERTY_VPCONFIG_DDRAWHANDLE,
  3970.     KSPROPERTY_VPCONFIG_VIDEOPORTID,
  3971.     KSPROPERTY_VPCONFIG_DDRAWSURFACEHANDLE,
  3972.     KSPROPERTY_VPCONFIG_SURFACEPARAMS
  3973. } KSPROPERTY_VPCONFIG;
  3974.  
  3975.  
  3976. #if defined(__IVPType__)
  3977.  
  3978. typedef struct {
  3979.     AMVPSIZE    Size;
  3980.     DWORD       MaxPixelsPerSecond;
  3981.     DWORD       Reserved;
  3982. } KSVPMAXPIXELRATE, *PKSVPMAXPIXELRATE;
  3983.  
  3984. typedef struct {
  3985.     KSPROPERTY      Property;
  3986.     AMVPSIZE        Size;
  3987. } KSVPSIZE_PROP, *PKSVPSIZE_PROP;
  3988.  
  3989. typedef struct {
  3990.     DWORD   dwPitch;
  3991.     DWORD   dwXOrigin;
  3992.     DWORD   dwYOrigin;
  3993. } KSVPSURFACEPARAMS, *PKSVPSURFACEPARAMS;
  3994.  
  3995. #else  // !defined(__IVPType__)
  3996.  
  3997. #if !defined(__DDRAW_INCLUDED__)
  3998.  
  3999. //==========================================================================
  4000. // The following definitions must be in sync with DDraw.h in DirectX SDK
  4001. //==========================================================================
  4002.  
  4003. /*
  4004.  * The FourCC code is valid.
  4005.  */
  4006. #define DDPF_FOURCC                             0x00000004l
  4007.  
  4008.  
  4009. typedef struct _DDPIXELFORMAT
  4010. {
  4011.     DWORD       dwSize;                 // size of structure
  4012.     DWORD       dwFlags;                // pixel format flags
  4013.     DWORD       dwFourCC;               // (FOURCC code)
  4014.     union
  4015.     {
  4016.     DWORD   dwRGBBitCount;          // how many bits per pixel (BD_1,2,4,8,16,24,32)
  4017.     DWORD   dwYUVBitCount;          // how many bits per pixel (BD_4,8,16,24,32)
  4018.     DWORD   dwZBufferBitDepth;      // how many bits for z buffers (BD_8,16,24,32)
  4019.     DWORD   dwAlphaBitDepth;        // how many bits for alpha channels (BD_1,2,4,8)
  4020.     };
  4021.     union
  4022.     {
  4023.     DWORD   dwRBitMask;             // mask for red bit
  4024.     DWORD   dwYBitMask;             // mask for Y bits
  4025.     };
  4026.     union
  4027.     {
  4028.     DWORD   dwGBitMask;             // mask for green bits
  4029.     DWORD   dwUBitMask;             // mask for U bits
  4030.     };
  4031.     union
  4032.     {
  4033.     DWORD   dwBBitMask;             // mask for blue bits
  4034.     DWORD   dwVBitMask;             // mask for V bits
  4035.     };
  4036.     union
  4037.     {
  4038.     DWORD   dwRGBAlphaBitMask;      // mask for alpha channel
  4039.     DWORD   dwYUVAlphaBitMask;      // mask for alpha channel
  4040.     DWORD   dwRGBZBitMask;          // mask for Z channel
  4041.     DWORD   dwYUVZBitMask;          // mask for Z channel
  4042.     };
  4043. } DDPIXELFORMAT, * LPDDPIXELFORMAT;
  4044.  
  4045. #endif // !defined(__DDRAW_INCLUDED__)
  4046.  
  4047. //==========================================================================
  4048. // End of DDraw.h header info
  4049. //==========================================================================
  4050.  
  4051. //==========================================================================
  4052. // The following definitions must be in sync with DVP.h in DirectX SDK
  4053. //==========================================================================
  4054.  
  4055. #if !defined(__DVP_INCLUDED__)
  4056.  
  4057. typedef struct _DDVIDEOPORTCONNECT {
  4058.     DWORD dwSize;           // size of the DDVIDEOPORTCONNECT structure
  4059.     DWORD dwPortWidth;      // Width of the video port
  4060.     GUID  guidTypeID;       // Description of video port connection
  4061.     DWORD dwFlags;          // Connection flags
  4062.     DWORD dwReserved1;      // Reserved, set to zero.
  4063. } DDVIDEOPORTCONNECT, * LPDDVIDEOPORTCONNECT;
  4064.  
  4065. #define DDVPTYPE_E_HREFH_VREFH  \
  4066.     0x54F39980L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
  4067.  
  4068. #define DDVPTYPE_E_HREFL_VREFL  \
  4069.     0xE09C77E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
  4070.  
  4071. #endif // !defined(__DVP_INCLUDED__)
  4072.  
  4073. //==========================================================================
  4074. // End of DVP.h header info
  4075. //==========================================================================
  4076.  
  4077.  
  4078. //==========================================================================
  4079. // The following definitions must be in sync with VPType.h in AM 2.0 SDK
  4080. //==========================================================================
  4081.  
  4082. // pixel aspect ratios corresponding to a 720x480 NTSC image or a 720x576 image
  4083. typedef enum // AMPixAspectRatio
  4084. {
  4085.     KS_PixAspectRatio_NTSC4x3,
  4086.     KS_PixAspectRatio_NTSC16x9,
  4087.     KS_PixAspectRatio_PAL4x3,
  4088.     KS_PixAspectRatio_PAL16x9,
  4089. } KS_AMPixAspectRatio ;
  4090.  
  4091. typedef enum // AMVP_SELECTFORMATBY
  4092. {
  4093.     KS_AMVP_DO_NOT_CARE,
  4094.     KS_AMVP_BEST_BANDWIDTH,
  4095.     KS_AMVP_INPUT_SAME_AS_OUTPUT
  4096. } KS_AMVP_SELECTFORMATBY;
  4097.  
  4098. typedef enum // AMVP_MODE
  4099. {
  4100.     KS_AMVP_MODE_WEAVE,
  4101.     KS_AMVP_MODE_BOBINTERLEAVED,
  4102.     KS_AMVP_MODE_BOBNONINTERLEAVED,
  4103.     KS_AMVP_MODE_SKIPEVEN,
  4104.     KS_AMVP_MODE_SKIPODD
  4105. } KS_AMVP_MODE ;
  4106.  
  4107. typedef struct tagKS_AMVPDIMINFO      // AMVPDIMINFO
  4108. {
  4109.     DWORD dwFieldWidth ;            // [out] field width
  4110.     DWORD dwFieldHeight ;           // [out] field height
  4111.     DWORD dwVBIWidth ;              // [out] VBI data width
  4112.     DWORD dwVBIHeight ;             // [out] VBI data height
  4113.     RECT  rcValidRegion ;           // [out] valid rect for data cropping
  4114. } KS_AMVPDIMINFO, *PKS_AMVPDIMINFO ;
  4115.  
  4116. typedef struct tagKS_AMVPDATAINFO   // AMVPDATAINFO
  4117. {
  4118.     DWORD           dwSize;                 // Size of the struct
  4119.     DWORD           dwMicrosecondsPerField; // Time taken by each field
  4120.     KS_AMVPDIMINFO  amvpDimInfo;            // Dimensional Information
  4121.     DWORD           dwPictAspectRatioX;     // Pict aspect ratio in X dimn
  4122.     DWORD           dwPictAspectRatioY;     // Pict aspect ratio in Y dimn
  4123.     BOOL            bEnableDoubleClock;     // Videoport should enable double clocking
  4124.     BOOL            bEnableVACT;            // Videoport should use an external VACT signal
  4125.     BOOL            bDataIsInterlaced;      // Indicates that the signal is interlaced
  4126.     LONG            lHalfLinesOdd;          // number of halflines in the odd field
  4127.     BOOL            bFieldPolarityInverted; // Device inverts the polarity by default
  4128.     DWORD           dwNumLinesInVREF;       // Number of lines of data in VREF
  4129.     LONG            lHalfLinesEven;         // number of halflines in the even field
  4130.     DWORD           dwReserved1;            // Reserved for future use
  4131. } KS_AMVPDATAINFO, *PKS_AMVPDATAINFO;
  4132.  
  4133. typedef struct tagKS_AMVPSIZE   // AMVPSIZE
  4134. {
  4135.     DWORD dwWidth ;                  // [in] width in pixels
  4136.     DWORD dwHeight ;                 // [in] height in pixels
  4137. } KS_AMVPSIZE, *PKS_AMVPSIZE ;
  4138.  
  4139. //==========================================================================
  4140. // End of VPType.h header info
  4141. //==========================================================================
  4142.  
  4143. typedef struct {
  4144.     KS_AMVPSIZE     Size;
  4145.     DWORD           MaxPixelsPerSecond;
  4146.     DWORD           Reserved;
  4147. } KSVPMAXPIXELRATE, *PKSVPMAXPIXELRATE;
  4148.  
  4149. typedef struct {
  4150.     KSPROPERTY      Property;
  4151.     KS_AMVPSIZE     Size;
  4152. } KSVPSIZE_PROP, *PKSVPSIZE_PROP;
  4153.  
  4154. typedef struct {
  4155.     DWORD   dwPitch;
  4156.     DWORD   dwXOrigin;
  4157.     DWORD   dwYOrigin;
  4158. } KSVPSURFACEPARAMS, *PKSVPSURFACEPARAMS;
  4159.  
  4160. #endif // !defined(__IVPType__)
  4161.  
  4162. //
  4163. //  IVPNotify event notification
  4164. //
  4165. #define STATIC_KSEVENTSETID_VPNotify\
  4166.     0x20c5598eL, 0xd3c8, 0x11d0, 0x8d, 0xfc, 0x00, 0xc0, 0x4f, 0xd7, 0xc0, 0x8b
  4167. DEFINE_GUIDSTRUCT("20c5598e-d3c8-11d0-8dfc-00c04fd7c08b", KSEVENTSETID_VPNotify);
  4168. #define KSEVENTSETID_VPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VPNotify)
  4169.  
  4170. typedef enum {
  4171.     KSEVENT_VPNOTIFY_FORMATCHANGE,
  4172. } KSEVENT_VPNOTIFY;
  4173.  
  4174. //
  4175. //  VIDCAPTOSTI event notification
  4176. //
  4177. #define STATIC_KSEVENTSETID_VIDCAPTOSTI\
  4178.     0xdb47de20, 0xf628, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5
  4179. DEFINE_GUIDSTRUCT("DB47DE20-F628-11d1-BA41-00A0C90D2B05", KSEVENTSETID_VIDCAPTOSTI);
  4180. #define KSEVENTSETID_VIDCAPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAPTOSTI)
  4181.  
  4182. typedef enum {
  4183.     KSEVENT_VIDCAPTOSTI_EXT_TRIGGER,
  4184. } KSEVENT_VIDCAPTOSTI;
  4185.  
  4186.  
  4187. //
  4188. //  IVPVBINotify event notification
  4189. //
  4190. #define STATIC_KSEVENTSETID_VPVBINotify\
  4191.     0xec529b01L, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
  4192. DEFINE_GUIDSTRUCT("ec529b01-1a1f-11d1-bad9-00609744111a", KSEVENTSETID_VPVBINotify);
  4193. #define KSEVENTSETID_VPVBINotify DEFINE_GUIDNAMED(KSEVENTSETID_VPVBINotify)
  4194.  
  4195. typedef enum {
  4196.     KSEVENT_VPVBINOTIFY_FORMATCHANGE,
  4197. } KSEVENT_VPVBINOTIFY;
  4198.  
  4199.  
  4200. //
  4201. // closed caption information
  4202. //
  4203.  
  4204. #define STATIC_KSDATAFORMAT_TYPE_AUXLine21Data \
  4205. 0x670aea80L, 0x3a82, 0x11d0, 0xb7, 0x9b, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
  4206. DEFINE_GUIDSTRUCT("670aea80-3a82-11d0-b79b-00aa003767a7", KSDATAFORMAT_TYPE_AUXLine21Data);
  4207. #define KSDATAFORMAT_TYPE_AUXLine21Data DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUXLine21Data)
  4208.  
  4209. #define STATIC_KSDATAFORMAT_SUBTYPE_Line21_BytePair \
  4210. 0x6e8d4a22L, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
  4211. DEFINE_GUIDSTRUCT("6e8d4a22-310c-11d0-b79a-00aa003767a7", KSDATAFORMAT_SUBTYPE_Line21_BytePair);
  4212. #define KSDATAFORMAT_SUBTYPE_Line21_BytePair DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_BytePair)
  4213.  
  4214. #define STATIC_KSDATAFORMAT_SUBTYPE_Line21_GOPPacket \
  4215. 0x6e8d4a23L, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
  4216. DEFINE_GUIDSTRUCT("6e8d4a23-310c-11d0-b79a-00aa003767a7", KSDATAFORMAT_SUBTYPE_Line21_GOPPacket);
  4217. #define KSDATAFORMAT_SUBTYPE_Line21_GOPPacket DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_GOPPacket)
  4218.  
  4219. typedef struct _KSGOP_USERDATA {
  4220.     ULONG sc;
  4221.     ULONG reserved1;
  4222.     BYTE cFields;
  4223.     CHAR l21Data[3];
  4224. } KSGOP_USERDATA, *PKSGOP_USERDATA;
  4225.  
  4226. //
  4227. // DVD encrypted PACK format type definition
  4228. //
  4229.  
  4230. #define STATIC_KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK\
  4231.     0xed0b916a, 0x044d, 0x11d1, 0xaa, 0x78, 0x00, 0xc0, 0x4f, 0xc3, 0x1d, 0x60
  4232. DEFINE_GUIDSTRUCT("ed0b916a-044d-11d1-aa78-00c04fc31d60", KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK);
  4233. #define KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK)
  4234.  
  4235. #define KS_AM_UseNewCSSKey    0x1
  4236.  
  4237.  
  4238. // -----------------------------------------------------------------------
  4239. // KS_AM_KSPROPSETID_TSRateChange property set definitions for time stamp
  4240. // rate changes.
  4241. // -----------------------------------------------------------------------
  4242.  
  4243.  
  4244. #define STATIC_KSPROPSETID_TSRateChange\
  4245.     0xa503c5c0, 0x1d1d, 0x11d1, 0xad, 0x80, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0
  4246.  
  4247. DEFINE_GUIDSTRUCT("A503C5C0-1D1D-11D1-AD80-444553540000", KSPROPSETID_TSRateChange);
  4248. #define KSPROPSETID_TSRateChange DEFINE_GUIDNAMED(KSPROPSETID_TSRateChange)
  4249. typedef enum {
  4250.     KS_AM_RATE_SimpleRateChange=1,   // rw, use KS_AM_SimpleRateChange
  4251.     KS_AM_RATE_ExactRateChange=2,   // rw, use KS_AM_ExactRateChange
  4252.     KS_AM_RATE_MaxFullDataRate=3,   // r, use KS_AM_MaxFullDataRate
  4253.     KS_AM_RATE_Step=4           // w, use KS_AM_Step
  4254. } KS_AM_PROPERTY_TS_RATE_CHANGE;
  4255.  
  4256. typedef struct {
  4257.     // this is the simplest mechanism to set a time stamp rate change on
  4258.     // a filter (simplest for the person setting the rate change, harder
  4259.     // for the filter doing the rate change).
  4260.     REFERENCE_TIME  StartTime;  //stream time at which to start this rate
  4261.     LONG        Rate;       //new rate * 10000 (decimal)
  4262. } KS_AM_SimpleRateChange;
  4263.  
  4264. typedef struct {
  4265.     REFERENCE_TIME  OutputZeroTime; //input TS that maps to zero output TS
  4266.     LONG        Rate;       //new rate * 10000 (decimal)
  4267. } KS_AM_ExactRateChange;
  4268.  
  4269. typedef LONG KS_AM_MaxFullDataRate; //rate * 10000 (decimal)
  4270.  
  4271. typedef DWORD KS_AM_Step; // number of frame to step
  4272.  
  4273.  
  4274. #endif // !defined(_KSMEDIA_)
  4275. #pragma option pop /*P_O_Pop*/
  4276.