xref: /reactos/sdk/include/psdk/wmsdkidl.idl (revision 139a3d66)
1/*
2 * Copyright 2012 André Hentschel
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19import "oaidl.idl";
20import "wmsbuffer.idl";
21import "drmexternals.idl";
22
23typedef struct _WMMediaType
24{
25    GUID majortype;
26    GUID subtype;
27    BOOL bFixedSizeSamples;
28    BOOL bTemporalCompression;
29    ULONG lSampleSize;
30    GUID formattype;
31    IUnknown *pUnk;
32    ULONG cbFormat;
33    [size_is(cbFormat)] BYTE *pbFormat;
34} WM_MEDIA_TYPE;
35
36typedef struct _WMWriterStatistics
37{
38    QWORD qwSampleCount;
39    QWORD qwByteCount;
40    QWORD qwDroppedSampleCount;
41    QWORD qwDroppedByteCount;
42    DWORD dwCurrentBitrate;
43    DWORD dwAverageBitrate;
44    DWORD dwExpectedBitrate;
45    DWORD dwCurrentSampleRate;
46    DWORD dwAverageSampleRate;
47    DWORD dwExpectedSampleRate;
48} WM_WRITER_STATISTICS;
49
50typedef struct _WMWriterStatisticsEx
51{
52    DWORD dwBitratePlusOverhead;
53    DWORD dwCurrentSampleDropRateInQueue;
54    DWORD dwCurrentSampleDropRateInCodec;
55    DWORD dwCurrentSampleDropRateInMultiplexer;
56    DWORD dwTotalSampleDropsInQueue;
57    DWORD dwTotalSampleDropsInCodec;
58    DWORD dwTotalSampleDropsInMultiplexer;
59} WM_WRITER_STATISTICS_EX;
60
61typedef struct _WMReaderStatistics
62{
63    DWORD cbSize;
64    DWORD dwBandwidth;
65    DWORD cPacketsReceived;
66    DWORD cPacketsRecovered;
67    DWORD cPacketsLost;
68    WORD wQuality;
69} WM_READER_STATISTICS;
70
71typedef struct _WMReaderClientInfo
72{
73    DWORD cbSize;
74    WCHAR *wszLang;
75    WCHAR *wszBrowserUserAgent;
76    WCHAR *wszBrowserWebPage;
77    QWORD qwReserved;
78    LPARAM *pReserved;
79    WCHAR *wszHostExe;
80    QWORD qwHostVersion;
81    WCHAR *wszPlayerUserAgent;
82} WM_READER_CLIENTINFO;
83
84typedef enum WMT_ATTR_DATATYPE
85{
86    WMT_TYPE_DWORD      = 0,
87    WMT_TYPE_STRING     = 1,
88    WMT_TYPE_BINARY     = 2,
89    WMT_TYPE_BOOL       = 3,
90    WMT_TYPE_QWORD      = 4,
91    WMT_TYPE_WORD       = 5,
92    WMT_TYPE_GUID       = 6,
93} WMT_ATTR_DATATYPE;
94
95typedef enum WMT_STATUS
96{
97    WMT_ERROR                       =  0,
98    WMT_OPENED                      =  1,
99    WMT_BUFFERING_START             =  2,
100    WMT_BUFFERING_STOP              =  3,
101    WMT_EOF                         =  4,
102    WMT_END_OF_FILE                 =  4,
103    WMT_END_OF_SEGMENT              =  5,
104    WMT_END_OF_STREAMING            =  6,
105    WMT_LOCATING                    =  7,
106    WMT_CONNECTING                  =  8,
107    WMT_NO_RIGHTS                   =  9,
108    WMT_MISSING_CODEC               = 10,
109    WMT_STARTED                     = 11,
110    WMT_STOPPED                     = 12,
111    WMT_CLOSED                      = 13,
112    WMT_STRIDING                    = 14,
113    WMT_TIMER                       = 15,
114    WMT_INDEX_PROGRESS              = 16,
115    WMT_SAVEAS_START                = 17,
116    WMT_SAVEAS_STOP                 = 18,
117    WMT_NEW_SOURCEFLAGS             = 19,
118    WMT_NEW_METADATA                = 20,
119    WMT_BACKUPRESTORE_BEGIN         = 21,
120    WMT_SOURCE_SWITCH               = 22,
121    WMT_ACQUIRE_LICENSE             = 23,
122    WMT_INDIVIDUALIZE               = 24,
123    WMT_NEEDS_INDIVIDUALIZATION     = 25,
124    WMT_NO_RIGHTS_EX                = 26,
125    WMT_BACKUPRESTORE_END           = 27,
126    WMT_BACKUPRESTORE_CONNECTING    = 28,
127    WMT_BACKUPRESTORE_DISCONNECTING = 29,
128    WMT_ERROR_WITHURL               = 30,
129    WMT_RESTRICTED_LICENSE          = 31,
130    WMT_CLIENT_CONNECT              = 32,
131    WMT_CLIENT_DISCONNECT           = 33,
132    WMT_NATIVE_OUTPUT_PROPS_CHANGED = 34,
133    WMT_RECONNECT_START             = 35,
134    WMT_RECONNECT_END               = 36,
135    WMT_CLIENT_CONNECT_EX           = 37,
136    WMT_CLIENT_DISCONNECT_EX        = 38,
137    WMT_SET_FEC_SPAN                = 39,
138    WMT_PREROLL_READY               = 40,
139    WMT_PREROLL_COMPLETE            = 41,
140    WMT_CLIENT_PROPERTIES           = 42,
141    WMT_LICENSEURL_SIGNATURE_STATE  = 43,
142    WMT_INIT_PLAYLIST_BURN          = 44,
143    WMT_TRANSCRYPTOR_INIT           = 45,
144    WMT_TRANSCRYPTOR_SEEKED         = 46,
145    WMT_TRANSCRYPTOR_READ           = 47,
146    WMT_TRANSCRYPTOR_CLOSED         = 48,
147    WMT_PROXIMITY_RESULT            = 49,
148    WMT_PROXIMITY_COMPLETED         = 50,
149    WMT_CONTENT_ENABLER             = 51
150} WMT_STATUS;
151
152typedef enum WMT_STREAM_SELECTION
153{
154    WMT_OFF               = 0,
155    WMT_CLEANPOINT_ONLY   = 1,
156    WMT_ON                = 2,
157} WMT_STREAM_SELECTION;
158
159typedef enum WMT_VERSION
160{
161    WMT_VER_4_0 = 0x00040000,
162    WMT_VER_7_0 = 0x00070000,
163    WMT_VER_8_0 = 0x00080000,
164    WMT_VER_9_0 = 0x00090000
165} WMT_VERSION;
166
167typedef enum WMT_PLAY_MODE
168{
169    WMT_PLAY_MODE_AUTOSELECT,
170    WMT_PLAY_MODE_LOCAL,
171    WMT_PLAY_MODE_DOWNLOAD,
172    WMT_PLAY_MODE_STREAMING
173} WMT_PLAY_MODE;
174
175typedef enum tagWMT_OFFSET_FORMAT
176{
177    WMT_OFFSET_FORMAT_100NS,
178    WMT_OFFSET_FORMAT_FRAME_NUMBERS,
179    WMT_OFFSET_FORMAT_PLAYLIST_OFFSET,
180    WMT_OFFSET_FORMAT_TIMECODE,
181    WMT_OFFSET_FORMAT_100NS_APPROXIMATE
182} WMT_OFFSET_FORMAT;
183
184typedef enum WMT_CODEC_INFO_TYPE
185{
186    WMT_CODECINFO_AUDIO   = 0,
187    WMT_CODECINFO_VIDEO   = 1,
188    WMT_CODECINFO_UNKNOWN = 0xFFFFFFFF,
189} WMT_CODEC_INFO_TYPE;
190
191typedef enum WMT_PROXY_SETTINGS
192{
193    WMT_PROXY_SETTING_NONE     = 0,
194    WMT_PROXY_SETTING_MANUAL   = 1,
195    WMT_PROXY_SETTING_AUTO     = 2,
196    WMT_PROXY_SETTING_BROWSER  = 3,
197    WMT_PROXY_SETTING_MAX
198} WMT_PROXY_SETTINGS;
199
200typedef enum tagWMT_STORAGE_FORMAT
201{
202    WMT_Storage_Format_MP3  = 0,
203    WMT_Storage_Format_V1   = 1
204} WMT_STORAGE_FORMAT;
205
206#include <pshpack2.h>
207typedef struct _WMStreamPrioritizationRecord
208{
209    WORD wStreamNumber;
210    BOOL fMandatory;
211} WM_STREAM_PRIORITY_RECORD;
212
213typedef struct _WMT_TIMECODE_EXTENSION_DATA
214{
215    WORD  wRange;
216    DWORD dwTimecode;
217    DWORD dwUserbits;
218    DWORD dwAmFlags;
219} WMT_TIMECODE_EXTENSION_DATA;
220#include <poppack.h>
221
222typedef struct _WM_PORT_NUMBER_RANGE
223{
224    WORD wPortBegin;
225    WORD wPortEnd;
226} WM_PORT_NUMBER_RANGE;
227
228typedef LPCWSTR LPCWSTR_WMSDK_TYPE_SAFE;
229
230[
231    object,
232    uuid(6d7cdc70-9888-11d3-8edc-00c04f6109cf),
233    pointer_default(unique),
234    local
235]
236interface IWMStatusCallback : IUnknown
237{
238    HRESULT OnStatus(
239        [in] WMT_STATUS Status,
240        [in] HRESULT hr,
241        [in] WMT_ATTR_DATATYPE dwType,
242        [in] BYTE *pValue,
243        [in] void *pvContext);
244}
245
246[
247    object,
248    uuid(96406bd8-2b2b-11d3-b36b-00c04f6108ff),
249    pointer_default(unique),
250    local
251]
252interface IWMReaderCallback : IWMStatusCallback
253{
254    HRESULT OnSample(
255        [in] DWORD dwOutputNum,
256        [in] QWORD cnsSampleTime,
257        [in] QWORD cnsSampleDuration,
258        [in] DWORD dwFlags,
259        [in] INSSBuffer *pSample,
260        [in] void *pvContext);
261}
262
263[
264    object,
265    uuid(96406Bdd-2b2b-11d3-b36b-00c04f6108ff),
266    pointer_default(unique),
267    local
268]
269interface IWMStreamList : IUnknown
270{
271    HRESULT GetStreams(
272        [out, size_is(*pcStreams)] WORD *pwStreamNumArray,
273        [in, out] WORD *pcStreams);
274
275    HRESULT AddStream([in] WORD wStreamNum);
276    HRESULT RemoveStream([in] WORD wStreamNum);
277}
278
279[
280    object,
281    uuid(96406Bde-2b2b-11d3-b36b-00c04f6108ff),
282    pointer_default(unique),
283    local
284]
285interface IWMMutualExclusion : IWMStreamList
286{
287    HRESULT GetType([out] GUID *pguidType);
288    HRESULT SetType([in] REFGUID guidType);
289}
290
291[
292    object,
293    uuid(ad694af1-f8d9-42f8-bc47-70311b0c4f9e),
294    pointer_default(unique),
295    local
296]
297interface IWMBandwidthSharing : IWMStreamList
298{
299    HRESULT GetType([out] GUID *guid);
300    HRESULT SetType([in] REFGUID guid);
301
302    HRESULT GetBandwidth(
303        [out] DWORD *bitrate,
304        [out] DWORD *buffer);
305
306    HRESULT SetBandwidth(
307        [in] DWORD bitrate,
308        [in] DWORD buffer);
309}
310
311[
312    object,
313    uuid(8c1c6090-f9a8-4748-8ec3-dd1108ba1e77),
314    pointer_default(unique),
315    local
316]
317interface IWMStreamPrioritization : IUnknown
318{
319    HRESULT GetPriorityRecords(
320        [out] WM_STREAM_PRIORITY_RECORD *array,
321        [in, out] WORD *records);
322
323    HRESULT SetPriorityRecords(
324        [in] WM_STREAM_PRIORITY_RECORD *array,
325        [in] WORD records);
326}
327
328[
329    object,
330    uuid(96406Bdc-2b2b-11d3-b36b-00c04f6108ff),
331    pointer_default(unique),
332    local
333]
334interface IWMStreamConfig : IUnknown
335{
336    HRESULT GetStreamType([out] GUID *pguidStreamType);
337    HRESULT GetStreamNumber([out] WORD *pwStreamNum);
338    HRESULT SetStreamNumber([in] WORD wStreamNum);
339
340    HRESULT GetStreamName(
341        [out, size_is(*pcchStreamName)] WCHAR *pwszStreamName,
342        [in, out] WORD *pcchStreamName);
343
344    HRESULT SetStreamName([in] LPCWSTR_WMSDK_TYPE_SAFE pwszStreamName);
345
346    HRESULT GetConnectionName(
347        [out, size_is(*pcchInputName)] WCHAR *pwszInputName,
348        [in, out] WORD *pcchInputName);
349
350    HRESULT SetConnectionName([in] LPCWSTR_WMSDK_TYPE_SAFE pwszInputName);
351    HRESULT GetBitrate([out] DWORD *pdwBitrate);
352    HRESULT SetBitrate([in] DWORD pdwBitrate);
353    HRESULT GetBufferWindow([out] DWORD *pmsBufferWindow);
354    HRESULT SetBufferWindow([in] DWORD msBufferWindow);
355}
356
357[
358    object,
359    uuid(96406bdb-2b2b-11d3-b36b-00c04f6108ff),
360    pointer_default(unique),
361    local
362]
363interface IWMProfile : IUnknown
364{
365    HRESULT GetVersion(
366        [out] WMT_VERSION *pdwVersion);
367
368    HRESULT GetName(
369        [out, size_is(*pcchName)] WCHAR *pwszName,
370        [in, out] DWORD *pcchName);
371
372    HRESULT SetName(
373        [in] const WCHAR *pwszName);
374
375    HRESULT GetDescription(
376        [out, size_is(*pcchDescription)] WCHAR *pwszDescription,
377        [in, out] DWORD *pcchDescription);
378
379    HRESULT SetDescription(
380        [in] const WCHAR *pwszDescription);
381
382    HRESULT GetStreamCount(
383        [out] DWORD *pcStreams);
384
385    HRESULT GetStream(
386        [in] DWORD dwStreamIndex,
387        [out] IWMStreamConfig **ppConfig);
388
389    HRESULT GetStreamByNumber(
390        [in] WORD wStreamNum,
391        [out] IWMStreamConfig **ppConfig);
392
393    HRESULT RemoveStream(
394        [in] IWMStreamConfig *pConfig);
395
396    HRESULT RemoveStreamByNumber(
397        [in] WORD wStreamNum);
398
399    HRESULT AddStream(
400        [in] IWMStreamConfig *pConfig);
401
402    HRESULT ReconfigStream(
403        [in] IWMStreamConfig *pConfig);
404
405    HRESULT CreateNewStream(
406        [in] REFGUID guidStreamType,
407        [out] IWMStreamConfig **ppConfig);
408
409    HRESULT GetMutualExclusionCount(
410        [out] DWORD *pcME);
411
412    HRESULT GetMutualExclusion(
413        [in] DWORD dwMEIndex,
414        [out] IWMMutualExclusion **ppME);
415
416    HRESULT RemoveMutualExclusion(
417        [in] IWMMutualExclusion *pME);
418
419    HRESULT AddMutualExclusion(
420        [in] IWMMutualExclusion *pME);
421
422    HRESULT CreateNewMutualExclusion(
423        [out] IWMMutualExclusion **ppME);
424}
425
426[
427    object,
428    uuid(07e72d33-d94e-4be7-8843-60ae5ff7e5f5),
429    pointer_default(unique),
430    local
431]
432interface IWMProfile2 : IWMProfile
433{
434    HRESULT GetProfileID([out] GUID *guid);
435}
436
437[
438    object,
439    uuid(00ef96cc-a461-4546-8bcd-c9a28f0e06f5),
440    pointer_default(unique),
441    local
442]
443interface IWMProfile3 : IWMProfile2
444{
445    HRESULT GetStorageFormat([out] WMT_STORAGE_FORMAT *storage);
446    HRESULT SetStorageFormat([in] WMT_STORAGE_FORMAT storage);
447
448    HRESULT GetBandwidthSharingCount([out] DWORD *count);
449
450    HRESULT GetBandwidthSharing(
451        [in] DWORD index,
452        [out] IWMBandwidthSharing **bandwidth);
453
454    HRESULT RemoveBandwidthSharing([in] IWMBandwidthSharing *bandwidth);
455
456    HRESULT AddBandwidthSharing([in] IWMBandwidthSharing *bandwidth);
457
458    HRESULT CreateNewBandwidthSharing([out] IWMBandwidthSharing **bandwidth);
459
460    HRESULT GetStreamPrioritization([out] IWMStreamPrioritization **stream);
461
462    HRESULT SetStreamPrioritization([in] IWMStreamPrioritization *stream);
463
464    HRESULT RemoveStreamPrioritization();
465
466    HRESULT CreateNewStreamPrioritization([out] IWMStreamPrioritization **stream);
467
468    HRESULT GetExpectedPacketCount(
469        [in] QWORD duration,
470        [out] QWORD *packets);
471}
472
473[
474    object,
475    uuid(d16679f2-6ca0-472d-8d31-2f5d55aee155),
476    pointer_default(unique),
477    local
478]
479interface IWMProfileManager : IUnknown
480{
481    HRESULT CreateEmptyProfile(
482        [in] WMT_VERSION dwVersion,
483        [out] IWMProfile **ppProfile);
484
485    HRESULT LoadProfileByID(
486        [in] REFGUID guidProfile,
487        [out] IWMProfile **ppProfile);
488
489    HRESULT LoadProfileByData(
490        [in] const WCHAR *pwszProfile,
491        [out] IWMProfile **ppProfile);
492
493    HRESULT SaveProfile(
494        [in] IWMProfile *pIWMProfile,
495        [in] WCHAR *pwszProfile,
496        [in, out] DWORD *pdwLength);
497
498    HRESULT GetSystemProfileCount(
499        [out] DWORD *pcProfiles);
500
501    HRESULT LoadSystemProfile(
502        [in] DWORD dwProfileIndex,
503        [out] IWMProfile **ppProfile);
504}
505
506[
507    object,
508    uuid(7a924e51-73c1-494d-8019-23d37ed9b89a),
509    pointer_default(unique),
510    local
511]
512interface IWMProfileManager2 : IWMProfileManager
513{
514    HRESULT GetSystemProfileVersion(WMT_VERSION *version);
515    HRESULT SetSystemProfileVersion(WMT_VERSION version);
516};
517
518cpp_quote("HRESULT WINAPI WMCreateProfileManager(IWMProfileManager**);")
519
520[
521    object,
522    uuid(a970f41e-34de-4a98-b3ba-e4b3ca7528f0),
523    pointer_default(unique),
524    local
525]
526interface IWMCodecInfo : IUnknown
527{
528    HRESULT GetCodecInfoCount(
529        [in] REFGUID guid,
530        [out] DWORD *count);
531
532    HRESULT GetCodecFormatCount(
533        [in] REFGUID guid,
534        [in] DWORD codecindex,
535        [out] DWORD *formatcount);
536
537    HRESULT GetCodecFormat(
538        [in] REFGUID guid,
539        [in] DWORD codecindex,
540        [in] DWORD formatindex,
541        [out] IWMStreamConfig **streamconfig);
542}
543
544[
545    object,
546    uuid(aa65e273-b686-4056-91ec-dd768d4df710),
547    pointer_default(unique),
548    local
549]
550interface IWMCodecInfo2 : IWMCodecInfo
551{
552    HRESULT GetCodecName(
553        [in] REFGUID guid,
554        [in] DWORD codecindex,
555        [out, size_is(*namesize)] WCHAR *name,
556        [in, out] DWORD *namesize);
557
558    HRESULT GetCodecFormatDesc(
559        [in] REFGUID guid,
560        [in] DWORD codecindex,
561        [in] DWORD formatindex,
562        [out] IWMStreamConfig **streamconfig,
563        [out, size_is(*descrsize)] WCHAR *description,
564        [in, out] DWORD *descrsize);
565}
566
567[
568    object,
569    uuid(7e51f487-4d93-4f98-8ab4-27d0565adc51),
570    pointer_default(unique),
571    local
572]
573interface IWMCodecInfo3 : IWMCodecInfo2
574{
575    HRESULT GetCodecFormatProp(
576        [in] REFGUID guid,
577        [in] DWORD codecindex,
578        [in] DWORD formatindex,
579        [in] const WCHAR *name,
580        [out] WMT_ATTR_DATATYPE *type,
581        [out, size_is(*size)] BYTE *value,
582        [in, out] DWORD *size);
583
584    HRESULT GetCodecProp(
585        [in] REFGUID guid,
586        [in] DWORD codecindex,
587        [in] const WCHAR *name,
588        [out] WMT_ATTR_DATATYPE *type,
589        [out, size_is(*size)] BYTE *value,
590        [in, out] DWORD *size);
591
592    HRESULT SetCodecEnumerationSetting(
593        [in] REFGUID guid,
594        [in] DWORD codecindex,
595        [in] const WCHAR *name,
596        [in] WMT_ATTR_DATATYPE type,
597        [in, size_is(size)] const BYTE *value,
598        [in] DWORD size);
599
600    HRESULT GetCodecEnumerationSetting(
601        [in] REFGUID guid,
602        [in] DWORD codecindex,
603        [in] const WCHAR *name,
604        [out] WMT_ATTR_DATATYPE *type,
605        [out, size_is(*size)] BYTE *value,
606        [in, out] DWORD *size);
607}
608
609cpp_quote("static const WCHAR g_wszNumPasses[] = {'_','P','A','S','S','E','S','U','S','E','D',0};")
610cpp_quote("static const WCHAR g_wszVBREnabled[] = {'_','V','B','R','E','N','A','B','L','E','D',0};")
611
612[
613    object,
614    uuid(96406bce-2b2b-11d3-b36b-00c04f6108ff),
615    pointer_default(unique),
616    local
617]
618interface IWMMediaProps : IUnknown
619{
620    HRESULT GetType(
621        [out] GUID *pguidType);
622
623    HRESULT GetMediaType(
624        [out] WM_MEDIA_TYPE *pType,
625        [in, out] DWORD *pcbType);
626
627    HRESULT SetMediaType(
628        [in] WM_MEDIA_TYPE *pType);
629}
630
631[
632    object,
633    uuid(96406bd7-2b2b-11d3-b36b-00c04f6108ff),
634    pointer_default(unique),
635    local
636]
637interface IWMOutputMediaProps : IWMMediaProps
638{
639    HRESULT GetStreamGroupName(
640        [out, size_is(*pcchName)] WCHAR *pwszName,
641        [in, out] WORD *pcchName);
642
643    HRESULT GetConnectionName(
644        [out, size_is(*pcchName)] WCHAR *pwszName,
645        [in, out] WORD *pcchName);
646}
647
648[
649    object,
650    uuid(96406bd9-2b2b-11d3-b36b-00c04f6108ff),
651    pointer_default(unique),
652    local
653]
654interface IWMMetadataEditor : IUnknown
655{
656    HRESULT Open(
657        [in] const WCHAR *pwszFilename);
658
659    HRESULT Close();
660
661    HRESULT Flush();
662}
663
664[
665    object,
666    uuid(96406bd6-2b2b-11d3-b36b-00c04f6108ff),
667    pointer_default(unique),
668    local
669]
670interface IWMReader : IUnknown
671{
672    HRESULT Open(
673        [in] const WCHAR *pwszURL,
674        [in] IWMReaderCallback *pCallback,
675        [in] void *pvContext);
676
677    HRESULT Close();
678
679    HRESULT GetOutputCount(
680        [out] DWORD *pcOutputs);
681
682    HRESULT GetOutputProps(
683        [in] DWORD dwOutputNum,
684        [out] IWMOutputMediaProps **ppOutput);
685
686    HRESULT SetOutputProps(
687        [in] DWORD dwOutputNum,
688        [in] IWMOutputMediaProps *pOutput);
689
690    HRESULT GetOutputFormatCount(
691        [in] DWORD dwOutputNumber,
692        [out] DWORD *pcFormats);
693
694    HRESULT GetOutputFormat(
695        [in] DWORD dwOutputNumber,
696        [in] DWORD dwFormatNumber,
697        [out] IWMOutputMediaProps** ppProps);
698
699    HRESULT Start(
700        [in] QWORD cnsStart,
701        [in] QWORD cnsDuration,
702        [in] float fRate,
703        [in] void *pvContext);
704
705    HRESULT Stop();
706
707    HRESULT Pause();
708
709    HRESULT Resume();
710}
711
712[
713    object,
714    uuid(e5b7ca9a-0f1c-4f66-9002-74ec50d8b304),
715    pointer_default(unique),
716    local
717]
718interface IWMPlayerHook : IUnknown
719{
720    HRESULT PreDecode();
721}
722
723[
724    object,
725    uuid(96406bea-2b2b-11d3-b36b-00c04f6108ff),
726    pointer_default(unique),
727    local
728]
729interface IWMReaderAdvanced : IUnknown
730{
731    HRESULT SetUserProvidedClock(
732        [in] BOOL fUserClock);
733
734    HRESULT GetUserProvidedClock(
735        [out] BOOL *pfUserClock);
736
737    HRESULT DeliverTime(
738        [in] QWORD cnsTime);
739
740    HRESULT SetManualStreamSelection(
741        [in] BOOL fSelection);
742
743    HRESULT GetManualStreamSelection(
744        [out] BOOL *pfSelection);
745
746    HRESULT SetStreamsSelected(
747        [in] WORD cStreamCount,
748        [in] WORD *pwStreamNumbers,
749        [in] WMT_STREAM_SELECTION *pSelections);
750
751    HRESULT GetStreamSelected(
752        [in] WORD wStreamNum,
753        [out] WMT_STREAM_SELECTION *pSelection);
754
755    HRESULT SetReceiveSelectionCallbacks(
756        [in] BOOL fGetCallbacks);
757
758    HRESULT GetReceiveSelectionCallbacks(
759        [out] BOOL *pfGetCallbacks);
760
761    HRESULT SetReceiveStreamSamples(
762        [in] WORD wStreamNum,
763        [in] BOOL fReceiveStreamSamples);
764
765    HRESULT GetReceiveStreamSamples(
766        [in] WORD wStreamNum,
767        [out] BOOL *pfReceiveStreamSamples);
768
769    HRESULT SetAllocateForOutput(
770        [in] DWORD dwOutputNum,
771        [in] BOOL fAllocate);
772
773    HRESULT GetAllocateForOutput(
774        [in] DWORD dwOutputNum,
775        [out] BOOL *pfAllocate);
776
777    HRESULT SetAllocateForStream(
778        [in] WORD wStreamNum,
779        [in] BOOL fAllocate);
780
781    HRESULT GetAllocateForStream(
782        [in] WORD dwStreamNum,
783        [out] BOOL *pfAllocate);
784
785    HRESULT GetStatistics(
786        [in, out] WM_READER_STATISTICS *pStatistics);
787
788    HRESULT SetClientInfo(
789        [in] WM_READER_CLIENTINFO *pClientInfo);
790
791    HRESULT GetMaxOutputSampleSize(
792        [in] DWORD dwOutput,
793        [out] DWORD *pcbMax);
794
795    HRESULT GetMaxStreamSampleSize(
796        [in] WORD wStream,
797        [out] DWORD *pcbMax);
798
799    HRESULT NotifyLateDelivery(
800        QWORD cnsLateness);
801}
802
803[
804    object,
805    uuid(ae14a945-b90c-4d0d-9127-80d665f7d73e),
806    pointer_default(unique),
807    local
808]
809interface IWMReaderAdvanced2 : IWMReaderAdvanced
810{
811    HRESULT SetPlayMode(
812        [in] WMT_PLAY_MODE Mode);
813
814    HRESULT GetPlayMode(
815        [out] WMT_PLAY_MODE *pMode);
816
817    HRESULT GetBufferProgress(
818        [out] DWORD *pdwPercent,
819        [out] QWORD *pcnsBuffering);
820
821    HRESULT GetDownloadProgress(
822        [out] DWORD *pdwPercent,
823        [out] QWORD *pqwBytesDownloaded,
824        [out] QWORD *pcnsDownload);
825
826    HRESULT GetSaveAsProgress(
827        [out] DWORD *pdwPercent);
828
829    HRESULT SaveFileAs(
830        [in] const WCHAR *pwszFilename);
831
832    HRESULT GetProtocolName(
833        [out, size_is(*pcchProtocol)] WCHAR *pwszProtocol,
834        [in, out] DWORD *pcchProtocol);
835
836    HRESULT StartAtMarker(
837        [in] WORD wMarkerIndex,
838        [in] QWORD cnsDuration,
839        [in] float fRate,
840        [in] void *pvContext);
841
842    HRESULT GetOutputSetting(
843        [in] DWORD dwOutputNum,
844        [in] LPCWSTR pszName,
845        [out] WMT_ATTR_DATATYPE *pType,
846        [out, size_is(*pcbLength)] BYTE *pValue,
847        [in, out] WORD *pcbLength);
848
849    HRESULT SetOutputSetting(
850        [in] DWORD dwOutputNum,
851        [in] LPCWSTR pszName,
852        [in] WMT_ATTR_DATATYPE Type,
853        [in, size_is(cbLength)] const BYTE *pValue,
854        [in] WORD cbLength);
855
856    HRESULT Preroll(
857        [in] QWORD cnsStart,
858        [in] QWORD cnsDuration,
859        [in] float fRate);
860
861    HRESULT SetLogClientID(
862        [in] BOOL fLogClientID);
863
864    HRESULT GetLogClientID(
865        [out] BOOL *pfLogClientID);
866
867    HRESULT StopBuffering();
868
869    HRESULT OpenStream(
870        [in] IStream *pStream,
871        [in] IWMReaderCallback *pCallback,
872        [in] void *pvContext);
873}
874
875[
876    object,
877    uuid(5dc0674b-f04B-4a4e-9f2a-b1afde2c8100),
878    pointer_default(unique),
879    local
880]
881interface IWMReaderAdvanced3 : IWMReaderAdvanced2
882{
883    HRESULT StopNetStreaming();
884
885    HRESULT StartAtPosition(
886        [in] WORD wStreamNum,
887        [in] void *pvOffsetStart,
888        [in] void *pvDuration,
889        [in] WMT_OFFSET_FORMAT dwOffsetFormat,
890        [in] float fRate,
891        [in] void *pvContext);
892}
893
894[
895    object,
896    uuid(945a76a2-12ae-4d48-bd3c-cd1d90399b85),
897    pointer_default(unique),
898    local
899]
900interface IWMReaderAdvanced4 : IWMReaderAdvanced3
901{
902    HRESULT GetLanguageCount(
903        [in] DWORD dwOutputNum,
904        [out] WORD *pwLanguageCount);
905
906    HRESULT GetLanguage(
907        [in] DWORD dwOutputNum,
908        [in] WORD wLanguage,
909        [out, size_is(*pcchLanguageStringLength)] WCHAR *pwszLanguageString,
910        [in, out] WORD *pcchLanguageStringLength);
911
912    HRESULT GetMaxSpeedFactor(
913        [out] double *pdblFactor);
914
915    HRESULT IsUsingFastCache(
916        [out] BOOL *pfUsingFastCache);
917
918    HRESULT AddLogParam(
919        [in] LPCWSTR wszNameSpace,
920        [in] LPCWSTR wszName,
921        [in] LPCWSTR wszValue);
922
923    HRESULT SendLogParams();
924
925    HRESULT CanSaveFileAs(
926        [out] BOOL *pfCanSave);
927
928    HRESULT CancelSaveFileAs();
929
930    HRESULT GetURL(
931        [out, size_is(*pcchURL)] WCHAR *pwszURL,
932        [in, out] DWORD *pcchURL);
933}
934
935[
936    object,
937    uuid(24c44db0-55d1-49ae-a5cc-f13815e36363),
938    pointer_default(unique),
939    local
940]
941interface IWMReaderAdvanced5 : IWMReaderAdvanced4
942{
943    HRESULT SetPlayerHook(
944        [in] DWORD dwOutputNum,
945        [in] IWMPlayerHook *pHook);
946}
947
948[
949    object,
950    uuid(18a2e7f8-428f-4acd-8a00-e64639bc93de),
951    pointer_default(unique),
952    local
953]
954interface IWMReaderAdvanced6 : IWMReaderAdvanced5
955{
956    HRESULT SetProtectStreamSamples(
957        [in, size_is(cbCertificate)] BYTE *pbCertificate,
958        [in] DWORD cbCertificate,
959        [in] DWORD dwCertificateType,
960        [in] DWORD dwFlags,
961        [out, size_is(*pcbInitializationVector)] BYTE *pbInitializationVector,
962        [in, out] DWORD *pcbInitializationVector);
963}
964
965[
966    object,
967    uuid(9397f121-7705-4dc9-b049-98b698188414),
968    pointer_default( unique ),
969    local
970]
971interface IWMSyncReader : IUnknown
972{
973    HRESULT Open(
974        [in] const WCHAR *pwszFilename);
975
976    HRESULT Close();
977
978    HRESULT SetRange(
979        [in] QWORD cnsStartTime,
980        [in] LONGLONG cnsDuration);
981
982    HRESULT SetRangeByFrame(
983        [in] WORD wStreamNum,
984        [in] QWORD qwFrameNumber,
985        [in] LONGLONG cFramesToRead);
986
987    HRESULT GetNextSample(
988        [in] WORD wStreamNum,
989        [out] INSSBuffer **ppSample,
990        [out] QWORD *pcnsSampleTime,
991        [out] QWORD *pcnsDuration,
992        [out] DWORD *pdwFlags,
993        [out] DWORD *pdwOutputNum,
994        [out] WORD *pwStreamNum);
995
996    HRESULT SetStreamsSelected(
997        [in] WORD cStreamCount,
998        [in] WORD *pwStreamNumbers,
999        [in] WMT_STREAM_SELECTION *pSelections);
1000
1001    HRESULT GetStreamSelected(
1002        [in] WORD wStreamNum,
1003        [out] WMT_STREAM_SELECTION *pSelection);
1004
1005    HRESULT SetReadStreamSamples(
1006        [in] WORD wStreamNum,
1007        [in] BOOL fCompressed);
1008
1009    HRESULT GetReadStreamSamples(
1010        [in] WORD wStreamNum,
1011        [out] BOOL *pfCompressed);
1012
1013    HRESULT GetOutputSetting(
1014        [in] DWORD dwOutputNum,
1015        [in] LPCWSTR pszName,
1016        [out] WMT_ATTR_DATATYPE *pType,
1017        [out, size_is(*pcbLength)] BYTE *pValue,
1018        [in, out] WORD *pcbLength);
1019
1020    HRESULT SetOutputSetting(
1021        [in] DWORD dwOutputNum,
1022        [in] LPCWSTR pszName,
1023        [in] WMT_ATTR_DATATYPE Type,
1024        [in, size_is(cbLength)] const BYTE *pValue,
1025        [in] WORD cbLength);
1026
1027    HRESULT GetOutputCount(
1028        [out] DWORD *pcOutputs);
1029
1030    HRESULT GetOutputProps(
1031        [in] DWORD dwOutputNum,
1032        [out] IWMOutputMediaProps **ppOutput);
1033
1034    HRESULT SetOutputProps(
1035        [in] DWORD dwOutputNum,
1036        [in] IWMOutputMediaProps *pOutput);
1037
1038    HRESULT GetOutputFormatCount(
1039        [in] DWORD dwOutputNum,
1040        [out] DWORD *pcFormats);
1041
1042    HRESULT GetOutputFormat(
1043        [in] DWORD dwOutputNum,
1044        [in] DWORD dwFormatNum,
1045        [out] IWMOutputMediaProps **ppProps);
1046
1047    HRESULT GetOutputNumberForStream(
1048        [in] WORD wStreamNum,
1049        [out] DWORD *pdwOutputNum);
1050
1051    HRESULT GetStreamNumberForOutput(
1052        [in] DWORD dwOutputNum,
1053        [out] WORD *pwStreamNum);
1054
1055    HRESULT GetMaxOutputSampleSize(
1056        [in] DWORD dwOutput,
1057        [out] DWORD *pcbMax);
1058
1059    HRESULT GetMaxStreamSampleSize(
1060        [in] WORD wStream,
1061        [out] DWORD *pcbMax);
1062
1063    HRESULT OpenStream(
1064        [in] IStream *pStream);
1065}
1066
1067[
1068    object,
1069    uuid(9f762fa7-a22e-428d-93c9-ac82f3aafe5a),
1070    pointer_default( unique ),
1071    local
1072]
1073interface IWMReaderAllocatorEx : IUnknown
1074{
1075    HRESULT AllocateForStreamEx(
1076        [in] WORD wStreamNum,
1077        [in] DWORD cbBuffer,
1078        [out] INSSBuffer **ppBuffer,
1079        [in] DWORD dwFlags,
1080        [in] QWORD cnsSampleTime,
1081        [in] QWORD cnsSampleDuration,
1082        [in] void *pvContext);
1083
1084    HRESULT AllocateForOutputEx(
1085        [in] WORD wOutputNum,
1086        [in] DWORD cbBuffer,
1087        [out] INSSBuffer **ppBuffer,
1088        [in] DWORD dwFlags,
1089        [in] QWORD cnsSampleTime,
1090        [in] QWORD cnsSampleDuration,
1091        [in] void *pvContext);
1092}
1093
1094[
1095    object,
1096    uuid(faed3d21-1b6b-4af7-8bc6-3e189bbc187b),
1097    pointer_default( unique ),
1098    local
1099]
1100interface IWMSyncReader2 : IWMSyncReader
1101{
1102    HRESULT SetRangeByTimecode(
1103        [in] WORD wStreamNum,
1104        [in] WMT_TIMECODE_EXTENSION_DATA *pStart,
1105        [in] WMT_TIMECODE_EXTENSION_DATA *pEnd);
1106
1107    HRESULT SetRangeByFrameEx(
1108        [in] WORD wStreamNum,
1109        [in] QWORD qwFrameNumber,
1110        [in] LONGLONG cFramesToRead,
1111        [out] QWORD *pcnsStartTime);
1112
1113    HRESULT SetAllocateForOutput(
1114        [in] DWORD dwOutputNum,
1115        [in] IWMReaderAllocatorEx *pAllocator);
1116
1117    HRESULT GetAllocateForOutput(
1118        [in] DWORD dwOutputNum,
1119        [out] IWMReaderAllocatorEx **ppAllocator);
1120
1121    HRESULT SetAllocateForStream(
1122        [in] DWORD dwStreamNum,
1123        [in] IWMReaderAllocatorEx *pAllocator);
1124
1125    HRESULT GetAllocateForStream(
1126        [in] DWORD dwStreamNum,
1127        [out] IWMReaderAllocatorEx **ppAllocator);
1128}
1129
1130[
1131    object,
1132    uuid(96406bd5-2b2b-11d3-b36b-00c04f6108ff),
1133    pointer_default(unique),
1134    local
1135]
1136interface IWMInputMediaProps : IWMMediaProps
1137{
1138    HRESULT GetConnectionName(
1139        [out, size_is(*pcchName)] WCHAR *pwszName,
1140        [in, out] WORD *pcchName);
1141
1142    HRESULT GetGroupName(
1143        [out, size_is(*pcchName)] WCHAR *pwszName,
1144        [in, out] WORD *pcchName);
1145}
1146
1147[
1148    object,
1149    uuid(96406be4-2b2b-11d3-b36b-00c04f6108ff),
1150    pointer_default(unique),
1151    local
1152]
1153interface IWMWriterSink : IUnknown
1154{
1155    HRESULT OnHeader(
1156        [in] INSSBuffer *pHeader);
1157
1158    HRESULT IsRealTime(
1159        [out] BOOL *pfRealTime);
1160
1161    HRESULT AllocateDataUnit(
1162        [in] DWORD cbDataUnit,
1163        [out] INSSBuffer **ppDataUnit);
1164
1165    HRESULT OnDataUnit(
1166        [in] INSSBuffer *pDataUnit);
1167
1168    HRESULT OnEndWriting();
1169}
1170
1171[
1172    object,
1173    uuid(96406bd4-2b2b-11d3-b36b-00c04f6108ff),
1174    pointer_default(unique),
1175    local
1176]
1177interface IWMWriter : IUnknown
1178{
1179    HRESULT SetProfileByID(
1180        [in] REFGUID guidProfile);
1181
1182    HRESULT SetProfile(
1183        [in] IWMProfile *pProfile);
1184
1185    HRESULT SetOutputFilename(
1186        [in] const WCHAR *pwszFilename);
1187
1188    HRESULT GetInputCount(
1189        [out] DWORD *pcInputs);
1190
1191    HRESULT GetInputProps(
1192        [in] DWORD dwInputNum,
1193        [out] IWMInputMediaProps **ppInput);
1194
1195    HRESULT SetInputProps(
1196        [in] DWORD dwInputNum,
1197        [in] IWMInputMediaProps *pInput);
1198
1199    HRESULT GetInputFormatCount(
1200        [in] DWORD dwInputNumber,
1201        [out] DWORD *pcFormats);
1202
1203    HRESULT GetInputFormat(
1204        [in] DWORD dwInputNumber,
1205        [in] DWORD dwFormatNumber,
1206        [out] IWMInputMediaProps **pProps);
1207
1208    HRESULT BeginWriting();
1209
1210    HRESULT EndWriting();
1211
1212    HRESULT AllocateSample(
1213        [in] DWORD dwSampleSize,
1214        [out] INSSBuffer **ppSample);
1215
1216    HRESULT WriteSample(
1217        [in] DWORD dwInputNum,
1218        [in] QWORD cnsSampleTime,
1219        [in] DWORD dwFlags,
1220        [in] INSSBuffer *pSample);
1221
1222    HRESULT Flush();
1223}
1224
1225[
1226    object,
1227    uuid(96406be3-2b2b-11d3-b36b-00C04f6108ff),
1228    pointer_default(unique),
1229    local
1230]
1231interface IWMWriterAdvanced : IUnknown
1232{
1233    HRESULT GetSinkCount(
1234        [out] DWORD *pcSinks);
1235
1236    HRESULT GetSink(
1237        [in] DWORD dwSinkNum,
1238        [out] IWMWriterSink **ppSink);
1239
1240    HRESULT AddSink(
1241        [in] IWMWriterSink *pSink);
1242
1243    HRESULT RemoveSink(
1244        [in] IWMWriterSink *pSink);
1245
1246    HRESULT WriteStreamSample(
1247        [in] WORD wStreamNum,
1248        [in] QWORD cnsSampleTime,
1249        [in] DWORD msSampleSendTime,
1250        [in] QWORD cnsSampleDuration,
1251        [in] DWORD dwFlags,
1252        [in] INSSBuffer *pSample);
1253
1254    HRESULT SetLiveSource(
1255        BOOL fIsLiveSource);
1256
1257    HRESULT IsRealTime(
1258        [out] BOOL *pfRealTime);
1259
1260    HRESULT GetWriterTime(
1261        [out] QWORD *pCurrentTime);
1262
1263    HRESULT GetStatistics(
1264        [in] WORD wStreamNum,
1265        [out] WM_WRITER_STATISTICS *pStats);
1266
1267    HRESULT SetSyncTolerance(
1268        [in] DWORD msWindow);
1269
1270    HRESULT GetSyncTolerance(
1271        [out] DWORD *pmsWindow);
1272}
1273
1274[
1275    object,
1276    uuid(962dc1ec-c046-4db8-9cc7-26ceae500817),
1277    pointer_default(unique),
1278    local
1279]
1280interface IWMWriterAdvanced2 : IWMWriterAdvanced
1281{
1282    HRESULT GetInputSetting(
1283        [in] DWORD dwInputNum,
1284        [in] LPCWSTR pszName,
1285        [out] WMT_ATTR_DATATYPE *pType,
1286        [out, size_is(*pcbLength)] BYTE *pValue,
1287        [in, out] WORD *pcbLength);
1288
1289    HRESULT SetInputSetting(
1290        [in] DWORD dwInputNum,
1291        [in] LPCWSTR pszName,
1292        [in] WMT_ATTR_DATATYPE Type,
1293        [in, size_is(cbLength)] const BYTE *pValue,
1294        [in] WORD cbLength);
1295}
1296
1297[
1298    object,
1299    uuid(2cd6492d-7c37-4e76-9d3b-59261183a22e),
1300    pointer_default(unique),
1301    local
1302]
1303interface IWMWriterAdvanced3 : IWMWriterAdvanced2
1304{
1305    HRESULT GetStatisticsEx(
1306        [in] WORD wStreamNum,
1307        [out] WM_WRITER_STATISTICS_EX *pStats);
1308
1309    HRESULT SetNonBlocking();
1310}
1311
1312[
1313    object,
1314    uuid(96406bda-2b2b-11d3-b36b-00c04f6108ff),
1315    pointer_default(unique),
1316    local
1317]
1318interface IWMHeaderInfo : IUnknown
1319{
1320    HRESULT GetAttributeCount(
1321        [in] WORD stream_num,
1322        [out] WORD *attributes );
1323
1324    HRESULT GetAttributeByIndex(
1325        [in] WORD index,
1326        [in, out] WORD *stream_num,
1327        [out, size_is( *name_len )] WCHAR *name,
1328        [in, out] WORD *name_len,
1329        [out] WMT_ATTR_DATATYPE *type,
1330        [out, size_is( *length )] BYTE *value,
1331        [in, out] WORD *length );
1332
1333    HRESULT GetAttributeByName(
1334        [in, out] WORD *stream_num,
1335        [in] LPCWSTR name,
1336        [out] WMT_ATTR_DATATYPE *type,
1337        [out, size_is( *length )] BYTE *value,
1338        [in, out] WORD *length );
1339
1340    HRESULT SetAttribute(
1341        [in] WORD stream_num,
1342        [in] LPCWSTR name,
1343        [in] WMT_ATTR_DATATYPE type,
1344        [in, size_is( length )] const BYTE *value,
1345        [in] WORD length );
1346
1347    HRESULT GetMarkerCount(
1348        [out] WORD *markers );
1349
1350    HRESULT GetMarker(
1351        [in] WORD index,
1352        [out, size_is( *marker_len )] WCHAR *marker_name,
1353        [in, out] WORD *marker_len,
1354        [out] QWORD *marker_time );
1355
1356    HRESULT AddMarker(
1357        [in] LPCWSTR_WMSDK_TYPE_SAFE marker_name,
1358        [in] QWORD marker_time );
1359
1360    HRESULT RemoveMarker(
1361        [in] WORD index );
1362
1363    HRESULT GetScriptCount(
1364        [out] WORD *scripts );
1365
1366    HRESULT GetScript(
1367        [in] WORD index,
1368        [out, size_is( *type_len )] WCHAR *type,
1369        [in, out] WORD *type_len,
1370        [out, size_is( *command_len )] WCHAR *command,
1371        [in, out] WORD *command_len,
1372        [out] QWORD *script_time );
1373
1374    HRESULT AddScript(
1375        [in] LPCWSTR_WMSDK_TYPE_SAFE type,
1376        [in] LPCWSTR_WMSDK_TYPE_SAFE command,
1377        [in] QWORD script_time );
1378
1379    HRESULT RemoveScript(
1380        [in] WORD index );
1381}
1382
1383[
1384    object,
1385    uuid(15cf9781-454e-482e-b393-85fae487a810),
1386    pointer_default(unique),
1387    local
1388]
1389interface IWMHeaderInfo2 : IWMHeaderInfo
1390{
1391    HRESULT GetCodecInfoCount(
1392        [out] DWORD *codec_infos );
1393
1394    HRESULT GetCodecInfo(
1395        [in] DWORD   index,
1396        [in, out] WORD *name_len,
1397        [out, size_is( *name_len )] WCHAR *name,
1398        [in, out] WORD *description_len,
1399        [out, size_is( *description_len )] WCHAR *description,
1400        [out] WMT_CODEC_INFO_TYPE *codec_type,
1401        [in, out] WORD *codec_info_cnt,
1402        [out, size_is( *codec_info_cnt )] BYTE *codec_info );
1403}
1404
1405[
1406    object,
1407    uuid(15cc68e3-27cc-4ecd-b222-3f5d02d80bd5),
1408    pointer_default(unique),
1409    local
1410]
1411interface IWMHeaderInfo3 : IWMHeaderInfo2
1412{
1413    HRESULT GetAttributeCountEx(
1414        [in] WORD stream_num,
1415        [out] WORD *attributes );
1416
1417    HRESULT GetAttributeIndices(
1418        [in] WORD stream_num,
1419        [in] LPCWSTR name,
1420        [in] WORD *lang_index,
1421        [out, size_is( *count )] WORD *indices,
1422        [in, out] WORD *count );
1423
1424   HRESULT GetAttributeByIndexEx(
1425        [in] WORD stream_num,
1426        [in] WORD index,
1427        [out, size_is( *name_len )] LPWSTR name,
1428        [in, out] WORD *name_len,
1429        [out] WMT_ATTR_DATATYPE *type,
1430        [out] WORD *lang_index,
1431        [out, size_is( *data_len )] BYTE *value,
1432        [in, out] DWORD *data_len );
1433
1434    HRESULT ModifyAttribute(
1435        [in] WORD stream_num,
1436        [in] WORD index,
1437        [in] WMT_ATTR_DATATYPE type,
1438        [in] WORD lang_index,
1439        [in, size_is( length )] const BYTE *value,
1440        [in] DWORD length );
1441
1442    HRESULT AddAttribute(
1443        [in] WORD stream_num,
1444        [in] LPCWSTR name,
1445        [out] WORD *index,
1446        [in] WMT_ATTR_DATATYPE type,
1447        [in] WORD lang_index,
1448        [in, size_is( length )] const BYTE *value,
1449        [in] DWORD length );
1450
1451    HRESULT DeleteAttribute(
1452        [in] WORD stream_num,
1453        [in] WORD index );
1454
1455    HRESULT AddCodecInfo(
1456        [in] LPCWSTR_WMSDK_TYPE_SAFE name,
1457        [in] LPCWSTR_WMSDK_TYPE_SAFE description,
1458        [in] WMT_CODEC_INFO_TYPE codec_type,
1459        [in] WORD codec_info_cnt,
1460        [in, size_is( codec_info_cnt )] BYTE *codec_info );
1461}
1462
1463[
1464    object,
1465    uuid(96406bec-2b2b-11d3-b36b-00c04f6108ff),
1466    pointer_default(unique),
1467    local
1468]
1469interface IWMReaderNetworkConfig : IUnknown
1470{
1471    HRESULT GetBufferingTime([out] QWORD *buffering_time);
1472    HRESULT SetBufferingTime([in] QWORD buffering_time);
1473
1474    HRESULT GetUDPPortRanges(
1475        [out, size_is( *ranges )] WM_PORT_NUMBER_RANGE *array,
1476        [in, out] DWORD *ranges);
1477
1478    HRESULT SetUDPPortRanges(
1479        [in, size_is( ranges )] WM_PORT_NUMBER_RANGE *array,
1480        [in] DWORD ranges);
1481
1482    HRESULT GetProxySettings(
1483        [in] const WCHAR *protocol,
1484        [out] WMT_PROXY_SETTINGS *proxy);
1485
1486    HRESULT SetProxySettings(
1487        [in] LPCWSTR protocol,
1488        [in] WMT_PROXY_SETTINGS proxy);
1489
1490    HRESULT GetProxyHostName(
1491        [in] const WCHAR *protocol,
1492        [out, size_is( *size )] WCHAR *hostname,
1493        [in, out] DWORD *size);
1494
1495    HRESULT SetProxyHostName(
1496        [in] const WCHAR *protocol,
1497        [in] const WCHAR *hostname);
1498
1499    HRESULT GetProxyPort(
1500        [in] const WCHAR *protocol,
1501        [out] DWORD *port);
1502
1503    HRESULT SetProxyPort(
1504        [in] const WCHAR *protocol,
1505        [in] DWORD port);
1506
1507    HRESULT GetProxyExceptionList(
1508        [in] const WCHAR *protocol,
1509        [out, size_is( *count )] WCHAR *exceptions,
1510        [in, out] DWORD *count);
1511
1512    HRESULT SetProxyExceptionList(
1513        [in] const WCHAR *protocol,
1514        [in] const WCHAR *exceptions);
1515
1516    HRESULT GetProxyBypassForLocal(
1517        [in] const WCHAR *protocol,
1518        [out] BOOL *bypass);
1519
1520    HRESULT SetProxyBypassForLocal(
1521        [in] const WCHAR *protocol,
1522        [in] BOOL bypass);
1523
1524    HRESULT GetForceRerunAutoProxyDetection([out] BOOL *detection);
1525    HRESULT SetForceRerunAutoProxyDetection([in] BOOL detection);
1526
1527    HRESULT GetEnableMulticast([out] BOOL *multicast);
1528    HRESULT SetEnableMulticast([in] BOOL multicast);
1529
1530    HRESULT GetEnableHTTP([out] BOOL *enable);
1531    HRESULT SetEnableHTTP([in] BOOL enable);
1532
1533    HRESULT GetEnableUDP([out] BOOL *enable);
1534    HRESULT SetEnableUDP([in] BOOL enable);
1535
1536    HRESULT GetEnableTCP([out] BOOL *enable);
1537    HRESULT SetEnableTCP([in] BOOL enable);
1538
1539    HRESULT ResetProtocolRollover();
1540
1541    HRESULT GetConnectionBandwidth([out] DWORD *bandwidth);
1542    HRESULT SetConnectionBandwidth([in] DWORD bandwidth);
1543
1544    HRESULT GetNumProtocolsSupported([out] DWORD *protocols);
1545
1546    HRESULT GetSupportedProtocolName(
1547        [in]  DWORD protocol_num,
1548        [out, size_is( *size )] WCHAR *protocol,
1549        [in, out] DWORD *size);
1550
1551    HRESULT AddLoggingUrl([in] const WCHAR *url);
1552
1553    HRESULT GetLoggingUrl(
1554        [in] DWORD index,
1555        [out, size_is( *size )] WCHAR *url,
1556        [in, out] DWORD *size);
1557
1558    HRESULT GetLoggingUrlCount([out] DWORD *count);
1559
1560    HRESULT ResetLoggingUrlList();
1561}
1562
1563[
1564    object,
1565    uuid(d979a853-042b-4050-8387-c939db22013f),
1566    pointer_default(unique),
1567    local
1568]
1569interface IWMReaderNetworkConfig2 : IWMReaderNetworkConfig
1570{
1571    HRESULT GetEnableContentCaching([out] BOOL *enable);
1572    HRESULT SetEnableContentCaching([in] BOOL enable);
1573
1574    HRESULT GetEnableFastCache([out] BOOL *enable);
1575    HRESULT SetEnableFastCache([in] BOOL enable);
1576
1577    HRESULT GetAcceleratedStreamingDuration([out] QWORD *duration);
1578    HRESULT SetAcceleratedStreamingDuration([in] QWORD duration);
1579
1580    HRESULT GetAutoReconnectLimit([out] DWORD *limit);
1581    HRESULT SetAutoReconnectLimit([in] DWORD limit);
1582
1583    HRESULT GetEnableResends([out] BOOL *enable);
1584    HRESULT SetEnableResends([in] BOOL enable);
1585
1586    HRESULT GetEnableThinning([out] BOOL *enable);
1587    HRESULT SetEnableThinning([in] BOOL enable);
1588
1589    HRESULT GetMaxNetPacketSize([out] DWORD *packet_size);
1590}
1591
1592[
1593    object,
1594    uuid(96406bed-2b2b-11d3-b36b-00c04f6108ff),
1595    pointer_default(unique),
1596    local
1597]
1598
1599interface IWMReaderStreamClock : IUnknown
1600{
1601    HRESULT GetTime([in] QWORD *now);
1602
1603    HRESULT SetTimer([in] QWORD when,
1604                     [in] void *param,
1605                     [out] DWORD *id);
1606
1607    HRESULT KillTimer([in] DWORD id);
1608}
1609
1610[
1611    object,
1612    uuid(cdfb97ab-188f-40b3-b643-5b7903975c59),
1613    pointer_default(unique),
1614    local
1615]
1616interface IWMPacketSize : IUnknown
1617{
1618    HRESULT GetMaxPacketSize([out] DWORD *size);
1619    HRESULT SetMaxPacketSize([in] DWORD size);
1620}
1621
1622[
1623    object,
1624    uuid(8bfc2b9e-b646-4233-a877-1c6a079669dc),
1625    pointer_default(unique),
1626    local
1627]
1628interface IWMPacketSize2 : IWMPacketSize
1629{
1630    HRESULT GetMinPacketSize([out] DWORD *size);
1631    HRESULT SetMinPacketSize([in] DWORD size);
1632}
1633
1634[
1635    object,
1636    uuid(d2827540-3ee7-432c-b14c-dc17f085d3b3),
1637    pointer_default(unique),
1638    local
1639]
1640interface IWMDRMReader : IUnknown
1641{
1642    HRESULT AcquireLicense([in] DWORD flags);
1643    HRESULT CancelLicenseAcquisition();
1644
1645    HRESULT Individualize([in] DWORD flags);
1646    HRESULT CancelIndividualization();
1647
1648    HRESULT MonitorLicenseAcquisition();
1649    HRESULT CancelMonitorLicenseAcquisition();
1650
1651    HRESULT SetDRMProperty(
1652        [in] const WCHAR *name,
1653        [in] WMT_ATTR_DATATYPE type,
1654        [in, size_is( length )] const BYTE *value,
1655        [in] WORD length);
1656
1657    HRESULT GetDRMProperty(
1658        [in] const WCHAR *name,
1659        [out] WMT_ATTR_DATATYPE *type,
1660        [out, size_is( *length )] BYTE *value,
1661        [in, out] WORD *length);
1662}
1663
1664[
1665    object,
1666    uuid(befe7a75-9f1d-4075-b9d9-a3c37bda49a0),
1667    pointer_default(unique),
1668    local
1669]
1670interface IWMDRMReader2 : IWMDRMReader
1671{
1672    HRESULT SetEvaluateOutputLevelLicenses([in] BOOL evaluate);
1673    HRESULT GetPlayOutputLevels(
1674        [out, size_is( *length )] DRM_PLAY_OPL *play,
1675        [in, out] DWORD *length,
1676        [out] DWORD *level);
1677
1678    HRESULT GetCopyOutputLevels(
1679        [out, size_is( *length )] DRM_COPY_OPL *copy,
1680        [in, out] DWORD *length,
1681        [out] DWORD *level);
1682
1683    HRESULT TryNextLicense();
1684}
1685
1686[
1687    object,
1688    uuid(e08672de-f1e7-4ff4-a0a3-fc4b08e4caf8),
1689    pointer_default(unique),
1690    local
1691]
1692interface IWMDRMReader3 : IWMDRMReader2
1693{
1694    HRESULT GetInclusionList(
1695        [out] GUID **guids,
1696        [out] DWORD *count);
1697}
1698
1699[
1700    object,
1701    uuid(bddc4d08-944d-4d52-a612-46c3fda07dd4),
1702    pointer_default( unique ),
1703    local
1704]
1705interface IWMReaderAccelerator : IUnknown
1706{
1707    HRESULT GetCodecInterface(
1708        [in] DWORD output,
1709        [in] REFIID riid,
1710        [out] void **codec);
1711
1712    HRESULT Notify(
1713        [in] DWORD output,
1714        [in] WM_MEDIA_TYPE *subtype);
1715}
1716
1717[
1718    object,
1719    uuid(f369e2f0-e081-4fe6-8450-b810b2f410d1),
1720    pointer_default(unique),
1721    local
1722]
1723interface IWMReaderTimecode : IUnknown
1724{
1725    HRESULT GetTimecodeRangeCount(
1726        [in] WORD num,
1727        [out] WORD *count);
1728
1729    HRESULT GetTimecodeRangeBounds(
1730        [in] WORD stream,
1731        [in] WORD range,
1732        [out] DWORD *start_timecode,
1733        [out] DWORD *end_timecode);
1734}
1735
1736[
1737    object,
1738    uuid(fdbe5592-81a1-41ea-93bd-735cad1adc05),
1739    pointer_default(unique),
1740    local
1741]
1742interface IWMReaderTypeNegotiation : IUnknown
1743{
1744    HRESULT TryOutputProps(
1745        [in] DWORD output,
1746        [in] IWMOutputMediaProps *props);
1747}
1748
1749[
1750    object,
1751    uuid(df683f00-2d49-4d8e-92b7-fb19f6a0dc57),
1752    pointer_default(unique),
1753    local
1754]
1755interface IWMLanguageList : IUnknown
1756{
1757    HRESULT GetLanguageCount(
1758        [out] WORD *count);
1759
1760    HRESULT GetLanguageDetails(
1761        [in] WORD index,
1762        [out, size_is( *length )] WCHAR *language,
1763        [in, out] WORD *length);
1764
1765    HRESULT AddLanguageByRFC1766String(
1766        [in] LPCWSTR_WMSDK_TYPE_SAFE language,
1767        [out] WORD *index);
1768}
1769
1770[
1771    object,
1772    uuid(f28c0300-9baa-4477-a846-1744d9cbf533),
1773    pointer_default(unique),
1774    local
1775]
1776interface IWMReaderPlaylistBurn : IUnknown
1777{
1778    HRESULT InitPlaylistBurn(
1779        [in] DWORD count,
1780        [in] LPCWSTR_WMSDK_TYPE_SAFE *filenames,
1781        [in] IWMStatusCallback *callback,
1782        [in] void *context);
1783
1784    HRESULT GetInitResults(
1785        [in] DWORD count,
1786        [out] HRESULT *stat);
1787
1788    HRESULT Cancel();
1789
1790    HRESULT EndPlaylistBurn([in] HRESULT result);
1791}
1792
1793[
1794    object,
1795    uuid(72995a79-5090-42a4-9c8c-d9d0b6d34be5),
1796    pointer_default(unique),
1797    local
1798]
1799interface IWMPropertyVault : IUnknown
1800{
1801    HRESULT GetPropertyCount([in] DWORD *count);
1802
1803    HRESULT GetPropertyByName(
1804        [in] const WCHAR *name,
1805        [out] WMT_ATTR_DATATYPE *type,
1806        [out, size_is( *size )] BYTE *value,
1807        [in, out] DWORD *size);
1808
1809    HRESULT SetProperty(
1810        [in] const WCHAR *name,
1811        [in] WMT_ATTR_DATATYPE type,
1812        [in] BYTE *value,
1813        [in] DWORD size);
1814
1815    HRESULT GetPropertyByIndex(
1816        [in] DWORD index,
1817        [out, size_is( *pdwNameLen )] WCHAR *name,
1818        [in, out]  DWORD *length,
1819        [out] WMT_ATTR_DATATYPE *type,
1820        [out, size_is( *size )] BYTE *value,
1821        [in, out] DWORD *size);
1822
1823    HRESULT CopyPropertiesFrom([in] IWMPropertyVault *vault);
1824
1825    HRESULT Clear();
1826};
1827
1828[
1829    object,
1830    uuid(fc54a285-38c4-45b5-aa23-85b9f7cb424b),
1831    pointer_default(unique),
1832    local
1833]
1834interface IWMWriterPreprocess : IUnknown
1835{
1836    HRESULT GetMaxPreprocessingPasses(
1837        [in] DWORD input,
1838        [in] DWORD flags,
1839        [out] DWORD *passes);
1840
1841    HRESULT SetNumPreprocessingPasses(
1842        [in] DWORD input,
1843        [in] DWORD flags,
1844        [in] DWORD passes);
1845
1846    HRESULT BeginPreprocessingPass(
1847        [in] DWORD input,
1848        [in] DWORD flags);
1849
1850    HRESULT PreprocessSample(
1851        [in] DWORD input,
1852        [in] QWORD sample_time,
1853        [in] DWORD flags,
1854        [in] INSSBuffer *sample);
1855
1856    HRESULT EndPreprocessingPass(
1857        [in] DWORD input,
1858        [in] DWORD flags);
1859};
1860
1861[
1862    object,
1863    uuid(05e5ac9f-3fb6-4508-bb43-a4067ba1ebe8),
1864    pointer_default(unique),
1865    local
1866]
1867interface IWMLicenseBackup : IUnknown
1868{
1869    HRESULT BackupLicenses(
1870        [in] DWORD dwFlags,
1871        [in] IWMStatusCallback *pCallback);
1872
1873    HRESULT CancelLicenseBackup();
1874}
1875
1876[
1877    object,
1878    uuid(c70b6334-a22e-4efb-a245-15e65a004a13),
1879    pointer_default(unique),
1880    local
1881]
1882interface IWMLicenseRestore : IUnknown
1883{
1884    HRESULT RestoreLicenses(
1885        [in] DWORD dwFlags,
1886        [in] IWMStatusCallback *pCallback);
1887
1888    HRESULT CancelLicenseRestore();
1889}
1890
1891cpp_quote("HRESULT WINAPI WMCheckURLExtension(LPCWSTR);")
1892cpp_quote("HRESULT WINAPI WMCheckURLScheme(LPCWSTR);")
1893cpp_quote("HRESULT WINAPI WMCreateWriter(IUnknown*,IWMWriter**);")
1894cpp_quote("HRESULT WINAPI WMCreateReader(IUnknown*,DWORD,IWMReader**);")
1895cpp_quote("HRESULT WINAPI WMCreateSyncReader(IUnknown*,DWORD,IWMSyncReader**);")
1896cpp_quote("HRESULT WINAPI WMCreateEditor(IWMMetadataEditor**);")
1897cpp_quote("HRESULT WINAPI WMCreateBackupRestorer(IUnknown*,IWMLicenseBackup**);")
1898cpp_quote("HRESULT WINAPI WMCreateProfileManager(IWMProfileManager**);")
1899
1900
1901cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_Base,   0x00000000,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1902cpp_quote("EXTERN_GUID(WMMEDIATYPE_Video,     0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1903cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB1,   0xe436eb78,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
1904cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB4,   0xe436eb79,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
1905cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB8,   0xe436eb7a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
1906cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB565, 0xe436eb7b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
1907cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB555, 0xe436eb7c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
1908cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB24,  0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
1909cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB32,  0xe436eb7e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
1910cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_I420,   0x30323449,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1911cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_IYUV,   0x56555949,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1912cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YV12,   0x32315659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1913cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YUY2,   0x32595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1914cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_P422,   0x32323450,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1915cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_UYVY,   0x59565955,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1916cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YVYU,   0x55595659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1917cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YVU9,   0x39555659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1918cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_VIDEOIMAGE, 0x1d4a45f2,0xe5f6,0x4b44,0x83,0x88,0xf0,0xae,0x5c,0x0e,0x0c,0x37);")
1919cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MP43,   0x3334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1920cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MP4S,   0x5334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1921cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_M4S2,   0x3253344d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1922cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV1,   0x31564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1923cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV2,   0x32564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1924cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MSS1,   0x3153534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1925cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MPEG2_VIDEO, 0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea);")
1926cpp_quote("EXTERN_GUID(WMMEDIATYPE_Audio,     0x73647561,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1927cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_PCM,    0x00000001,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1928cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_DRM,    0x00000009,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1929cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMAudioV9,        0x00000162,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1930cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMAudio_Lossless, 0x00000163,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1931cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MSS2,   0x3253534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1932cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMSP1,  0x0000000a,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1933cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMSP2,  0x0000000b,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1934cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV3,   0x33564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1935cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMVP,   0x50564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1936cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WVP2,   0x32505657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1937cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMVA,   0x41564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1938cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WVC1,   0x31435657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
1939