Audio track and channel support for JavaScript API. The ActiveX vlc.audio.channel...
[vlc.git] / activex / axvlc.idl
1 /*****************************************************************************\r
2  * axvlc.idl: ActiveX control for VLC\r
3  *****************************************************************************\r
4  * Copyright (C) 2006 the VideoLAN team\r
5  *\r
6  * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>\r
7  *          Jean-Paul Saman <jpsaman _at_ m2x _dot_ nl>\r
8  *\r
9  * This program is free software; you can redistribute it and/or modify\r
10  * it under the terms of the GNU General Public License as published by\r
11  * the Free Software Foundation; either version 2 of the License, or\r
12  * (at your option) any later version.\r
13  *\r
14  * This program is distributed in the hope that it will be useful,\r
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
17  * GNU General Public License for more details.\r
18  *\r
19  * You should have received a copy of the GNU General Public License\r
20  * along with this program; if not, write to the Free Software\r
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.\r
22  *****************************************************************************/\r
23 \r
24 //comments terminated by [t] are by tonsofpcs, regarding the string review.  April 02, 2006. [t]\r
25 //Possibly change all instances of "the current playlist" to "the playlist" and "current playlist" to "the playlist" [t]\r
26 \r
27 import "oaidl.idl";\r
28 \r
29 [\r
30   uuid(DF2BBE39-40A8-433b-A279-073F48DA94B6),\r
31   version(1.0),\r
32   helpstring("VideoLAN VLC ActiveX Plugin")\r
33 ]\r
34 library AXVLC\r
35 {\r
36     // Forward declare all types defined in this typelib\r
37     interface IVLCControl;\r
38     interface IVLCAudio;\r
39     interface IVLCInput;\r
40     interface IVLCLog;\r
41     interface IVLCMessage;\r
42     interface IVLCMessageIterator;\r
43     interface IVLCMessages;\r
44     interface IVLCPlaylist;\r
45     interface IVLCVideo;\r
46     interface IVLCControl2;\r
47     dispinterface DVLCEvents;\r
48 \r
49     importlib("stdole2.tlb");\r
50 \r
51     typedef [public] enum VLCPlaylistMode\r
52     {\r
53         VLCPlayListInsert       =  1,\r
54         VLCPlayListInsertAndGo  =  9,\r
55         VLCPlayListReplace      =  2,\r
56         VLCPlayListReplaceAndGo = 10,\r
57         VLCPlayListAppend       =  4,\r
58         VLCPlayListAppendAndGo  = 12,\r
59         VLCPlayListCheckInsert  = 16\r
60     } eVLCPlaylistMode;\r
61 \r
62     // playlist target position\r
63     const int VLCPlayListEnd    = -666;\r
64 \r
65     // DISPID definitions\r
66     const int DISPID_Visible    = 100;\r
67     const int DISPID_Playing    = 101;\r
68     const int DISPID_Position   = 102;\r
69     const int DISPID_Time       = 103;\r
70     const int DISPID_Length     = 104;\r
71     const int DISPID_Volume     = 105;\r
72     const int DISPID_MRL        = 106;\r
73     const int DISPID_AutoPlay   = 107;\r
74     const int DISPID_AutoLoop   = 108;\r
75     const int DISPID_StartTime  = 109;\r
76     const int DISPID_BaseURL    = 110;\r
77 \r
78     [\r
79       odl,\r
80       uuid(C2FA41D0-B113-476e-AC8C-9BD14999C1C1),\r
81       helpstring("VLC Control (deprecated)"),\r
82       dual,\r
83       oleautomation\r
84     ]\r
85     interface IVLCControl : IDispatch\r
86     {\r
87         [id(DISPID_Visible), propget, bindable, helpstring("Returns/sets a value that determines whether viewing area is visible or hidden.")]\r
88         HRESULT Visible([out, retval] VARIANT_BOOL* visible);\r
89         [id(DISPID_Visible), propput, bindable, helpstring("Returns/sets a value that determines whether viewing area is visible or hidden.")]\r
90         HRESULT Visible([in] VARIANT_BOOL visible);\r
91         [helpstring("Play current target in playlist.")]\r
92         HRESULT play();\r
93         [helpstring("Pause playback.")]\r
94         HRESULT pause();\r
95         [helpstring("Stop playback.")]\r
96         HRESULT stop();\r
97         [id(DISPID_Playing), hidden, propget, helpstring("Returns a value that determines whether VLC is currently playing.")]\r
98         HRESULT Playing([out, retval] VARIANT_BOOL* isPlaying);\r
99         [id(DISPID_Position), propget, helpstring("Returns/sets playback position within the current item. Position is a relative value ranging from 0.0 to 1.0.")]\r
100         HRESULT Position([out, retval] float* position);\r
101         [id(DISPID_Position), propput, helpstring("Returns/sets playback position within the current item. Position is a relative value ranging from 0.0 to 1.0.")]\r
102         HRESULT Position([in] float position);\r
103         [id(DISPID_Time), propget, helpstring("Returns/sets playback time relative to the start of the current item.")]\r
104         HRESULT Time([out, retval] int* seconds);\r
105         [id(DISPID_Time), propput, helpstring("Returns/sets playback time relative to the start of the current item.")]\r
106         HRESULT Time([in] int seconds);\r
107         [helpstring("Advance or backtrack playback time, relative to current time.")]  //possibly find a better word to replace 'backtrack' [t]\r
108         HRESULT shuttle([in] int seconds);\r
109         [helpstring("Switch video between normal and fullscreen view modes.")]\r
110         HRESULT fullscreen();\r
111         [id(DISPID_Length), propget, hidden, helpstring("Returns the total length, in seconds, of the current item, may be unknown.")]\r
112         HRESULT Length([out, retval] int* seconds);\r
113         [helpstring("Increases playback speed. Possible speeds are: 1x, 2x, 4x, 8x.")]\r
114         HRESULT playFaster();\r
115         [helpstring("Decreases playback speed. Possible speeds are: 1x, 2x, 4x, 8x.")]\r
116         HRESULT playSlower();\r
117         [id(DISPID_Volume), propget, helpstring("Returns/sets playback volume, ranges from 0 to 200%.")]  //possibly remove % from 'ranges', change to 'values', and specify that 200 is equivilant to 200% (remember, 200% == 2.0, but this gets an int not a float) [t]\r
118         HRESULT Volume([out, retval] int* volume);\r
119         [id(DISPID_Volume), propput, helpstring("Returns/sets playback volume, ranges from 0 to 200%.")]\r
120         HRESULT Volume([in] int volume);\r
121         [helpstring("Mute/unmute playback audio.")]\r
122         HRESULT toggleMute();\r
123         [helpstring("Sets the value of a VLC variable.")]\r
124         HRESULT setVariable([in] BSTR name, [in] VARIANT value);\r
125         [helpstring("Returns the value of a VLC variable.")]\r
126         HRESULT getVariable([in] BSTR name, [out, retval] VARIANT *value);\r
127         [helpstring("Add an item to the playlist.")]\r
128 \r
129 /*\r
130 ** use VARIANT rather than a SAFEARRAY as argument type\r
131 ** for compatibility with some scripting language (JScript)\r
132 */\r
133 \r
134         HRESULT addTarget([in] BSTR uri, [in] VARIANT options, [in] enum VLCPlaylistMode mode, [in] int position);\r
135         [propget, helpstring("Returns index of current item in playlist.")]\r
136         HRESULT PlaylistIndex([out, retval] int* index);\r
137         [propget, helpstring("Returns number of items in playlist.")]\r
138         HRESULT PlaylistCount([out, retval] int* index);\r
139         [helpstring("Advance to next item in playlist.")]\r
140         HRESULT playlistNext();\r
141         [helpstring("Advance to previous item in playlist.")]\r
142         HRESULT playlistPrev();\r
143         [helpstring("Remove all items from playlist.")]\r
144         HRESULT playlistClear();\r
145         [propget, hidden, helpstring("Returns VLC Version.")]\r
146         HRESULT VersionInfo([out, retval] BSTR* version);\r
147         [id(DISPID_MRL), propget, helpstring("Returns/sets the first MRL in playlist, used for AutoPlay")]\r
148         HRESULT MRL([out, retval] BSTR* mrl);\r
149         [id(DISPID_MRL), propput, helpstring("Returns/sets the first MRL in playlist, used for AutoPlay")]\r
150         HRESULT MRL([in] BSTR mrl);\r
151         [id(DISPID_AutoPlay), propget, helpstring("Returns/sets a value that determines whether the playlist is played on startup")]\r
152         HRESULT AutoPlay([out, retval] VARIANT_BOOL* autoplay);\r
153         [id(DISPID_AutoPlay), propput, helpstring("Returns/Sets a value that determines whether the playlist is played on startup")]\r
154         HRESULT AutoPlay([in] VARIANT_BOOL autoplay);\r
155         [id(DISPID_AutoLoop), propget, helpstring("Returns/sets a value that determines whether the playlist is looped")]\r
156         HRESULT AutoLoop([out, retval] VARIANT_BOOL* autoloop);\r
157         [id(DISPID_AutoLoop), propput, helpstring("Returns/sets a value that determines whether the playlist is looped")]\r
158         HRESULT AutoLoop([in] VARIANT_BOOL autoloop);\r
159     };\r
160 \r
161     const int DISPID_PlayEvent  = 100;\r
162     const int DISPID_PauseEvent = 101;\r
163     const int DISPID_StopEvent  = 102;\r
164 \r
165     [\r
166       uuid(DF48072F-5EF8-434e-9B40-E2F3AE759B5F),\r
167       helpstring("Event interface for VLC control"),\r
168     ]\r
169     dispinterface DVLCEvents\r
170     {\r
171         properties:\r
172         methods:\r
173             [id(DISPID_PlayEvent), helpstring("Playing")]\r
174             void play();\r
175             [id(DISPID_PauseEvent), helpstring("Paused")]\r
176             void pause();\r
177             [id(DISPID_StopEvent), helpstring("Stopped")]\r
178             void stop();\r
179     };\r
180 \r
181     [\r
182       odl,\r
183       uuid(9E0BD17B-2D3C-4656-B94D-03084F3FD9D4),\r
184       helpstring("VLC Audio APIs"),\r
185       dual,\r
186       oleautomation\r
187     ]\r
188     interface IVLCAudio : IDispatch\r
189     {\r
190         [propget, helpstring("Returns/sets the audio mute state.")]\r
191         HRESULT mute([out, retval] VARIANT_BOOL* muted);\r
192         [propput, helpstring("Returns/sets the audio mute state.")]\r
193         HRESULT mute([in] VARIANT_BOOL muted);\r
194 \r
195         [propget, helpstring("Returns/sets audio volume as a percent value.")]\r
196         HRESULT volume([out, retval] long* volume);\r
197         [propput, helpstring("Returns/sets audio volume as a percent value.")]\r
198         HRESULT volume([in] long volume);\r
199 \r
200         [helpstring("Mute/unmute audio playback.")]\r
201         HRESULT toggleMute();\r
202 \r
203         [propget, helpstring("Returns/sets audio track used/to use.")]\r
204         HRESULT track([out, retval] long* track);\r
205         [propput, helpstring("Returns/sets audio track used/to use.")]\r
206         HRESULT track([in] long track);\r
207 \r
208         [propget, helpstring("Returns audio channel: reverse stereo, stereo, left, right, dolby.")]\r
209         HRESULT channel([out, retval] BSTR* channel);\r
210         [propput, helpstring("Sets audio channel to: reverse stereo, stereo, left, right, dolby.")]\r
211         HRESULT channel([in] BSTR channel);\r
212     };\r
213 \r
214     [\r
215       odl,\r
216       uuid(49E0DBD1-9440-466C-9C97-95C67190C603),\r
217       helpstring("VLC Input APIs"),\r
218       dual,\r
219       oleautomation\r
220     ]\r
221     interface IVLCInput : IDispatch\r
222     {\r
223         [propget, helpstring("Returns the clip length, in milliseconds.")]\r
224         HRESULT length([out, retval] double* length);\r
225 \r
226         [propget, helpstring("Returns/sets playback position in current clip.  Position is ranging from 0.0 to 1.0.")]\r
227         HRESULT position([out, retval] double* position);\r
228         [propput, helpstring("Returns/sets playback position in the current clip.  Position ranging from 0.0 to 1.0.")]\r
229         HRESULT position([in] double position);\r
230 \r
231         [propget, helpstring("Returns/sets playback time in current clip, in milliseconds.")]\r
232         HRESULT time([out, retval] double* time);\r
233         [propput, helpstring("Returns/sets playback time in the current clip, in milliseconds.")]\r
234         HRESULT time([in] double time);\r
235 \r
236         [propget, helpstring("Returns current playback state.")]\r
237         HRESULT state([out, retval] long* state);\r
238 \r
239         [propget, helpstring("Returns/sets current playback rate, normal rate is 1.0 ")]\r
240         HRESULT rate([out, retval] double* rate);\r
241         [propput, helpstring("Returns/sets current playback rate, normal rate is 1.0.")]\r
242         HRESULT rate([in] double rate);\r
243 \r
244         [propget, helpstring("Returns current playback frames per seconds if available.")]\r
245         HRESULT fps([out, retval] double* fps);\r
246 \r
247         [propget, helpstring("Returns whether current playback displays video.")]\r
248         HRESULT hasVout([out, retval] VARIANT_BOOL* hasVout);\r
249     };\r
250 \r
251     [\r
252       odl,\r
253       uuid(9ED00AFA-7BCD-4FFF-8D48-7DD4DB2C800D),\r
254       helpstring("VLC Log Message"),\r
255       dual,\r
256       oleautomation\r
257     ]\r
258     interface IVLCMessage: IDispatch\r
259     {\r
260         [id(DISPID_VALUE), propget]\r
261         HRESULT _Value([out, retval] VARIANT* message);\r
262 \r
263         [propget, helpstring("Returns message severity.")]\r
264         HRESULT severity([out, retval] long* level);\r
265 \r
266         [propget, helpstring("Returns message issuer type.")]\r
267         HRESULT type([out, retval] BSTR* type);\r
268 \r
269         [propget, helpstring("Returns message issuer name.")]\r
270         HRESULT name([out, retval] BSTR* name);\r
271 \r
272         [propget, helpstring("Returns message header.")]\r
273         HRESULT header([out, retval] BSTR* header);\r
274 \r
275         [propget, helpstring("Returns message content.")]\r
276         HRESULT message([out, retval] BSTR* message);\r
277     };\r
278 \r
279     [\r
280       odl,\r
281       uuid(15179CD8-CC12-4242-A58E-E412217FF343),\r
282       helpstring("VLC Log iterator"),\r
283       dual,\r
284       oleautomation\r
285     ]\r
286     interface IVLCMessageIterator : IDispatch\r
287     {\r
288         [propget, helpstring("Returns whether a message is available.")]\r
289         HRESULT hasNext([out, retval] VARIANT_BOOL* hasNext);\r
290 \r
291         [helpstring("Returns next message.")]\r
292         HRESULT next([out, retval] IVLCMessage** msg);\r
293     };\r
294 \r
295     [\r
296       odl,\r
297       uuid(6C5CE55D-2D6C-4AAD-8299-C62D2371F106),\r
298       helpstring("VLC Log Messages Collection."),\r
299       dual,\r
300       oleautomation\r
301     ]\r
302     interface IVLCMessages : IDispatch\r
303     {\r
304         [id(DISPID_NEWENUM), propget]\r
305         HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);\r
306 \r
307         [helpstring("Clear all messages from log.")]\r
308         HRESULT clear();\r
309 \r
310         [propget, helpstring("Returns the number of messages.")]\r
311         HRESULT count([out, retval] long* count);\r
312 \r
313         [helpstring("Returns an iterator for messages in log")]\r
314         HRESULT iterator([out, retval] IVLCMessageIterator** iter);\r
315     };\r
316 \r
317     [\r
318       odl,\r
319       uuid(8E3BC3D9-62E9-48FB-8A6D-993F9ABC4A0A),\r
320       helpstring("VLC Log APIs"),\r
321       dual,\r
322       oleautomation\r
323     ]\r
324     interface IVLCLog : IDispatch\r
325     {\r
326         [propget, helpstring("Returns messages in log")]\r
327         HRESULT messages([out, retval] IVLCMessages** iter);\r
328 \r
329         [propget, helpstring("Returns/Sets the log versbosity level.")]\r
330         HRESULT verbosity([out, retval] long* level);\r
331         [propput, helpstring("Returns/Sets the log versbosity level.")]\r
332         HRESULT verbosity([in] long level);\r
333     };\r
334 \r
335     [\r
336       odl,\r
337       uuid(FD37FE32-82BC-4A25-B056-315F4DBB194D),\r
338       helpstring("VLC Playlist Items collection"),\r
339       dual,\r
340       oleautomation\r
341     ]\r
342     interface IVLCPlaylistItems : IDispatch\r
343     {\r
344         [propget, helpstring("Returns number of items in playlist.")]\r
345         HRESULT count([out, retval] long* count);\r
346 \r
347         [helpstring("Remove all items from playlist.")]\r
348         HRESULT clear();\r
349 \r
350         [helpstring("remove item from playlist.")]\r
351         HRESULT remove([in] long itemId);\r
352     };\r
353 \r
354     [\r
355       odl,\r
356       uuid(54613049-40BF-4035-9E70-0A9312C0188D),\r
357       helpstring("VLC Playlist APIs"),\r
358       dual,\r
359       oleautomation\r
360     ]\r
361     interface IVLCPlaylist : IDispatch\r
362     {\r
363         [hidden, propget, helpstring("Returns number of items in playlist. (deprecated)")]\r
364         HRESULT itemCount([out, retval] long* count);\r
365 \r
366         [propget, helpstring("Returns whether playback displays video.")]\r
367         HRESULT isPlaying([out, retval] VARIANT_BOOL* playing);\r
368 \r
369         [helpstring("Add a playlist item.")]\r
370         HRESULT add([in] BSTR uri, [in, optional] VARIANT name, [in, optional] VARIANT options, [out, retval] long* itemId);\r
371 \r
372         [helpstring("Play/Resume the playlist.")]\r
373         HRESULT play();\r
374 \r
375         [helpstring("Play item in playlist.")]\r
376         HRESULT playItem([in] long itemId);\r
377 \r
378         [helpstring("Play/Pause current clip.")]\r
379         HRESULT togglePause();\r
380 \r
381         [helpstring("Stop current clip.")]\r
382         HRESULT stop();\r
383 \r
384         [helpstring("Advance to next item in playlist.")]\r
385         HRESULT next();\r
386 \r
387         [helpstring("Advance to previous item in playlist.")]\r
388         HRESULT prev();\r
389 \r
390         [hidden, helpstring("Remove all items from playlist. (deprecated)")]\r
391         HRESULT clear();\r
392 \r
393         [hidden, helpstring("Remove item from playlist. (deprecated)")]\r
394         HRESULT removeItem([in] long item);\r
395 \r
396         [propget, helpstring("Returns the playlist items collection object.")]\r
397         HRESULT items([out, retval] IVLCPlaylistItems** obj);\r
398     };\r
399 \r
400     [\r
401       odl,\r
402       uuid(0AAEDF0B-D333-4B27-A0C6-BBF31413A42E),\r
403       helpstring("VLC Video APIs"),\r
404       dual,\r
405       oleautomation\r
406     ]\r
407     interface IVLCVideo : IDispatch\r
408     {\r
409         [propget, helpstring("Returns/sets the fullscreen state.")]\r
410         HRESULT fullscreen([out, retval] VARIANT_BOOL* fullscreen);\r
411         [propput, helpstring("Returns/sets the fullscreen state.")]\r
412         HRESULT fullscreen([in] VARIANT_BOOL fullscreen);\r
413 \r
414         [propget, helpstring("Returns video original width.")]\r
415         HRESULT width([out, retval] long* width);\r
416 \r
417         [propget, helpstring("Returns video original height.")]\r
418         HRESULT height([out, retval] long* height);\r
419 \r
420         [propget, helpstring("Returns video aspect ratio.")]\r
421         HRESULT aspectRatio([out, retval] BSTR* aspect);\r
422         [propput, helpstring("Sets video aspect ratio.")]\r
423         HRESULT aspectRatio([in] BSTR aspect);\r
424 \r
425         [helpstring("toggle fullscreen/windowed state.")]\r
426         HRESULT toggleFullscreen();\r
427     };\r
428 \r
429     [\r
430       odl,\r
431       uuid(2D719729-5333-406C-BF12-8DE787FD65E3),\r
432       helpstring("VLC Control"),\r
433       dual,\r
434       oleautomation\r
435     ]\r
436     interface IVLCControl2 : IDispatch\r
437     {\r
438         [id(DISPID_AutoLoop), propget, helpstring("Returns/sets a value that determines whether the playlist is looped")]\r
439         HRESULT AutoLoop([out, retval] VARIANT_BOOL* autoloop);\r
440         [id(DISPID_AutoLoop), propput, helpstring("Returns/sets a value that determines whether the playlist is looped")]\r
441         HRESULT AutoLoop([in] VARIANT_BOOL autoloop);\r
442 \r
443         [id(DISPID_AutoPlay), propget, helpstring("Returns/sets a value that determines whether the playlist is played on startup")]\r
444         HRESULT AutoPlay([out, retval] VARIANT_BOOL* autoplay);\r
445         [id(DISPID_AutoPlay), propput, helpstring("Returns/Sets a value that determines whether the playlist is played on startup")]\r
446         HRESULT AutoPlay([in] VARIANT_BOOL autoplay);\r
447 \r
448         [id(DISPID_BaseURL), propget, helpstring("Returns/sets the base URL for relative paths")]\r
449         HRESULT BaseURL([out, retval] BSTR* url);\r
450         [id(DISPID_BaseURL), propput, helpstring("Returns/sets the base URL for relative paths")]\r
451         HRESULT BaseURL([in] BSTR url);\r
452 \r
453         [id(DISPID_StartTime), propget, helpstring("Returns/sets playback start time of URL.")]\r
454         HRESULT StartTime([out, retval] long* seconds);\r
455         [id(DISPID_StartTime), propput, helpstring("Returns/sets playback start time of URL.")]\r
456         HRESULT StartTime([in] long seconds);\r
457 \r
458         [id(DISPID_MRL), propget, helpstring("Returns/sets the default MRL in playlist")]\r
459         HRESULT MRL([out, retval] BSTR* mrl);\r
460         [id(DISPID_MRL), propput, helpstring("Returns/sets the default MRL in playlist")]\r
461         HRESULT MRL([in] BSTR mrl);\r
462 \r
463         [propget, helpstring("Returns VLC Version.")]\r
464         HRESULT VersionInfo([out, retval] BSTR* version);\r
465 \r
466         [id(DISPID_Visible), propget, helpstring("Returns/sets a value that determines whether viewing area is visible or hidden.")]\r
467         HRESULT Visible([out, retval] VARIANT_BOOL* visible);\r
468         [id(DISPID_Visible), propput, helpstring("Returns/sets a value that determines whether viewing area is visible or hidden.")]\r
469         HRESULT Visible([in] VARIANT_BOOL visible);\r
470 \r
471         [id(DISPID_Volume), propget, helpstring("Returns/sets default audio volume.")]\r
472         HRESULT Volume([out, retval] long* volume);\r
473         [id(DISPID_Volume), propput, helpstring("Returns/sets default audio volume.")]\r
474         HRESULT Volume([in] long volume);\r
475 \r
476         [propget, helpstring("Returns the audio object.")]\r
477         HRESULT audio([out, retval] IVLCAudio** obj);\r
478 \r
479         [propget, helpstring("Returns the audio object.")]\r
480         HRESULT input([out, retval] IVLCInput** obj);\r
481 \r
482         [propget, helpstring("Returns the log object.")]\r
483         HRESULT log([out, retval] IVLCLog** obj);\r
484 \r
485         [propget, helpstring("Returns the playlist object.")]\r
486         HRESULT playlist([out, retval] IVLCPlaylist** obj);\r
487 \r
488         [propget, helpstring("Returns the audio object.")]\r
489         HRESULT video([out, retval] IVLCVideo** obj);\r
490     };\r
491 \r
492     [\r
493       uuid(E23FE9C6-778E-49D4-B537-38FCDE4887D8),\r
494       helpstring("VLC control (deprecated)"),\r
495       control\r
496     ]\r
497     coclass VLCPlugin\r
498     {\r
499         [default] interface IVLCControl;\r
500         interface IVLCControl2;\r
501         [default, source] dispinterface DVLCEvents;\r
502     };\r
503 \r
504     [\r
505       uuid(9BE31822-FDAD-461B-AD51-BE1D1C159921),\r
506       helpstring("VLC control"),\r
507       control\r
508     ]\r
509     coclass VLCPlugin2\r
510     {\r
511         [default] interface IVLCControl2;\r
512         interface IVLCControl;\r
513     };\r
514 };\r