Commit 727b4c33 authored by Damien Fouilleul's avatar Damien Fouilleul

- activex: cleanup, improved VB compatibility and new test.html file for new script APIs

parent f5bc599e
...@@ -34,8 +34,11 @@ library AXVLC ...@@ -34,8 +34,11 @@ library AXVLC
{ {
// Forward declare all types defined in this typelib // Forward declare all types defined in this typelib
interface IVLCControl; interface IVLCControl;
interface IVLCAudio;
interface IVLCInput;
interface IVLCPlaylist; interface IVLCPlaylist;
interface ILibVLCControl; interface IVLCVideo;
interface IVLCControl2;
dispinterface DVLCEvents; dispinterface DVLCEvents;
importlib("stdole2.tlb"); importlib("stdole2.tlb");
...@@ -246,7 +249,7 @@ library AXVLC ...@@ -246,7 +249,7 @@ library AXVLC
HRESULT isPlaying([out, retval] VARIANT_BOOL* playing); HRESULT isPlaying([out, retval] VARIANT_BOOL* playing);
[helpstring("Add a playlist item.")] [helpstring("Add a playlist item.")]
HRESULT add([in] BSTR uri, [in] BSTR name, [in, optional] VARIANT options, [out, retval] int* item); HRESULT add([in] BSTR uri, [in, optional] VARIANT name, [in, optional] VARIANT options, [out, retval] int* item);
[helpstring("Play/Resume the playlist.")] [helpstring("Play/Resume the playlist.")]
HRESULT play(); HRESULT play();
......
No preview for this file type
...@@ -16,14 +16,29 @@ DEFINE_GUID(LIBID_AXVLC, 0xdf2bbe39, 0x40a8, 0x433b, 0xa2,0x79, 0x07,0x3f,0x48,0 ...@@ -16,14 +16,29 @@ DEFINE_GUID(LIBID_AXVLC, 0xdf2bbe39, 0x40a8, 0x433b, 0xa2,0x79, 0x07,0x3f,0x48,0
typedef interface IVLCControl IVLCControl; typedef interface IVLCControl IVLCControl;
#endif #endif
#ifndef __IVLCAudio_FWD_DEFINED__
#define __IVLCAudio_FWD_DEFINED__
typedef interface IVLCAudio IVLCAudio;
#endif
#ifndef __IVLCInput_FWD_DEFINED__
#define __IVLCInput_FWD_DEFINED__
typedef interface IVLCInput IVLCInput;
#endif
#ifndef __IVLCPlaylist_FWD_DEFINED__ #ifndef __IVLCPlaylist_FWD_DEFINED__
#define __IVLCPlaylist_FWD_DEFINED__ #define __IVLCPlaylist_FWD_DEFINED__
typedef interface IVLCPlaylist IVLCPlaylist; typedef interface IVLCPlaylist IVLCPlaylist;
#endif #endif
#ifndef __ILibVLCControl_FWD_DEFINED__ #ifndef __IVLCVideo_FWD_DEFINED__
#define __ILibVLCControl_FWD_DEFINED__ #define __IVLCVideo_FWD_DEFINED__
typedef interface ILibVLCControl ILibVLCControl; typedef interface IVLCVideo IVLCVideo;
#endif
#ifndef __IVLCControl2_FWD_DEFINED__
#define __IVLCControl2_FWD_DEFINED__
typedef interface IVLCControl2 IVLCControl2;
#endif #endif
#ifndef __DVLCEvents_FWD_DEFINED__ #ifndef __DVLCEvents_FWD_DEFINED__
...@@ -751,11 +766,6 @@ interface DVLCEvents { ...@@ -751,11 +766,6 @@ interface DVLCEvents {
#endif /* __DVLCEvents_DISPINTERFACE_DEFINED__ */ #endif /* __DVLCEvents_DISPINTERFACE_DEFINED__ */
#ifndef __IVLCAudio_FWD_DEFINED__
#define __IVLCAudio_FWD_DEFINED__
typedef interface IVLCAudio IVLCAudio;
#endif
/***************************************************************************** /*****************************************************************************
* IVLCAudio interface * IVLCAudio interface
*/ */
...@@ -916,11 +926,6 @@ void __RPC_STUB IVLCAudio_toggleMute_Stub( ...@@ -916,11 +926,6 @@ void __RPC_STUB IVLCAudio_toggleMute_Stub(
#endif /* __IVLCAudio_INTERFACE_DEFINED__ */ #endif /* __IVLCAudio_INTERFACE_DEFINED__ */
#ifndef __IVLCInput_FWD_DEFINED__
#define __IVLCInput_FWD_DEFINED__
typedef interface IVLCInput IVLCInput;
#endif
/***************************************************************************** /*****************************************************************************
* IVLCInput interface * IVLCInput interface
*/ */
...@@ -1181,7 +1186,7 @@ interface IVLCPlaylist : public IDispatch ...@@ -1181,7 +1186,7 @@ interface IVLCPlaylist : public IDispatch
virtual HRESULT STDMETHODCALLTYPE add( virtual HRESULT STDMETHODCALLTYPE add(
BSTR uri, BSTR uri,
BSTR name, VARIANT name,
VARIANT options, VARIANT options,
int* item) = 0; int* item) = 0;
...@@ -1268,7 +1273,7 @@ typedef struct IVLCPlaylistVtbl { ...@@ -1268,7 +1273,7 @@ typedef struct IVLCPlaylistVtbl {
HRESULT (STDMETHODCALLTYPE *add)( HRESULT (STDMETHODCALLTYPE *add)(
IVLCPlaylist* This, IVLCPlaylist* This,
BSTR uri, BSTR uri,
BSTR name, VARIANT name,
VARIANT options, VARIANT options,
int* item); int* item);
...@@ -1349,7 +1354,7 @@ void __RPC_STUB IVLCPlaylist_get_isPlaying_Stub( ...@@ -1349,7 +1354,7 @@ void __RPC_STUB IVLCPlaylist_get_isPlaying_Stub(
HRESULT CALLBACK IVLCPlaylist_add_Proxy( HRESULT CALLBACK IVLCPlaylist_add_Proxy(
IVLCPlaylist* This, IVLCPlaylist* This,
BSTR uri, BSTR uri,
BSTR name, VARIANT name,
VARIANT options, VARIANT options,
int* item); int* item);
void __RPC_STUB IVLCPlaylist_add_Stub( void __RPC_STUB IVLCPlaylist_add_Stub(
...@@ -1418,11 +1423,6 @@ void __RPC_STUB IVLCPlaylist_removeItem_Stub( ...@@ -1418,11 +1423,6 @@ void __RPC_STUB IVLCPlaylist_removeItem_Stub(
#endif /* __IVLCPlaylist_INTERFACE_DEFINED__ */ #endif /* __IVLCPlaylist_INTERFACE_DEFINED__ */
#ifndef __IVLCVideo_FWD_DEFINED__
#define __IVLCVideo_FWD_DEFINED__
typedef interface IVLCVideo IVLCVideo;
#endif
/***************************************************************************** /*****************************************************************************
* IVLCVideo interface * IVLCVideo interface
*/ */
...@@ -1569,11 +1569,6 @@ void __RPC_STUB IVLCVideo_get_height_Stub( ...@@ -1569,11 +1569,6 @@ void __RPC_STUB IVLCVideo_get_height_Stub(
#endif /* __IVLCVideo_INTERFACE_DEFINED__ */ #endif /* __IVLCVideo_INTERFACE_DEFINED__ */
#ifndef __IVLCControl2_FWD_DEFINED__
#define __IVLCControl2_FWD_DEFINED__
typedef interface IVLCControl2 IVLCControl2;
#endif
/***************************************************************************** /*****************************************************************************
* IVLCControl2 interface * IVLCControl2 interface
*/ */
......
...@@ -36,7 +36,7 @@ public: ...@@ -36,7 +36,7 @@ public:
e(VLCEnum<CONNECTDATA>(IID_IEnumConnections, v)) e(VLCEnum<CONNECTDATA>(IID_IEnumConnections, v))
{ e.setRetainOperation((VLCEnum<CONNECTDATA>::retainer)&retain); }; { e.setRetainOperation((VLCEnum<CONNECTDATA>::retainer)&retain); };
VLCEnumConnections(const VLCEnumConnections &vlcEnum) : e(vlcEnum.e) {}; VLCEnumConnections(const VLCEnumConnections &vlcEnum) : IEnumConnections(), e(vlcEnum.e) {};
virtual ~VLCEnumConnections() {}; virtual ~VLCEnumConnections() {};
...@@ -184,7 +184,7 @@ public: ...@@ -184,7 +184,7 @@ public:
e(VLCEnum<LPCONNECTIONPOINT>(IID_IEnumConnectionPoints, v)) e(VLCEnum<LPCONNECTIONPOINT>(IID_IEnumConnectionPoints, v))
{ e.setRetainOperation((VLCEnum<LPCONNECTIONPOINT>::retainer)&retain); }; { e.setRetainOperation((VLCEnum<LPCONNECTIONPOINT>::retainer)&retain); };
VLCEnumConnectionPoints(const VLCEnumConnectionPoints &vlcEnum) : e(vlcEnum.e) {}; VLCEnumConnectionPoints(const VLCEnumConnectionPoints &vlcEnum) : IEnumConnectionPoints(), e(vlcEnum.e) {};
virtual ~VLCEnumConnectionPoints() {}; virtual ~VLCEnumConnectionPoints() {};
......
...@@ -36,7 +36,7 @@ public: ...@@ -36,7 +36,7 @@ public:
VLCEnumFORMATETC(vector<FORMATETC> &v) : VLCEnumFORMATETC(vector<FORMATETC> &v) :
e(VLCEnum<FORMATETC>(IID_IEnumFORMATETC, v)) {}; e(VLCEnum<FORMATETC>(IID_IEnumFORMATETC, v)) {};
VLCEnumFORMATETC(const VLCEnumFORMATETC &vlcEnum) : e(vlcEnum.e) {}; VLCEnumFORMATETC(const VLCEnumFORMATETC &vlcEnum) : IEnumFORMATETC(), e(vlcEnum.e) {};
virtual ~VLCEnumFORMATETC() {}; virtual ~VLCEnumFORMATETC() {};
// IUnknown methods // IUnknown methods
......
...@@ -57,8 +57,7 @@ STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) ...@@ -57,8 +57,7 @@ STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
*ppv = NULL; *ppv = NULL;
if( (CLSID_VLCPlugin == rclsid) if( CLSID_VLCPlugin2 == rclsid )
|| (CLSID_VLCPlugin2 == rclsid) )
{ {
VLCPluginClass *plugin = new VLCPluginClass(&i_class_ref, h_instance, rclsid); VLCPluginClass *plugin = new VLCPluginClass(&i_class_ref, h_instance, rclsid);
hr = plugin->QueryInterface(riid, ppv); hr = plugin->QueryInterface(riid, ppv);
...@@ -158,14 +157,20 @@ STDAPI DllUnregisterServer(VOID) ...@@ -158,14 +157,20 @@ STDAPI DllUnregisterServer(VOID)
SHDeleteKey(HKEY_CLASSES_ROOT, TEXT(PROGID_STR)); SHDeleteKey(HKEY_CLASSES_ROOT, TEXT(PROGID_STR));
UnregisterProgID(CLSID_VLCPlugin, 1); UnregisterProgID(CLSID_VLCPlugin, 2);
UnregisterProgID(CLSID_VLCPlugin2, 1); UnregisterProgID(CLSID_VLCPlugin2, 1);
return S_OK; return S_OK;
}; };
static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int version, const char *path, size_t pathLen) static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int version, BOOL isDefault, const char *path, size_t pathLen)
{ {
char progId[sizeof(PROGID_STR)+16];
sprintf(progId, "%s.%u", PROGID_STR, version);
char description[sizeof(DESCRIPTION)+16];
sprintf(description, "%s v%u", DESCRIPTION, version);
HKEY hClassKey; HKEY hClassKey;
{ {
LPCSTR psz_CLSID = CStrFromGUID(rclsid); LPCSTR psz_CLSID = CStrFromGUID(rclsid);
...@@ -173,13 +178,43 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi ...@@ -173,13 +178,43 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi
if( NULL == psz_CLSID ) if( NULL == psz_CLSID )
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
HKEY hProgKey = keyCreate(HKEY_CLASSES_ROOT, progId);
if( NULL != hProgKey )
{
// default key value
keySetDef(hProgKey, description);
keyClose(keySetDef(keyCreate(hProgKey, "CLSID"),
psz_CLSID,
GUID_STRLEN));
//hSubKey = keyClose(keyCreate(hBaseKey, "Insertable"));
RegCloseKey(hProgKey);
}
if( isDefault )
{
hProgKey = keyCreate(HKEY_CLASSES_ROOT, PROGID_STR);
if( NULL != hProgKey )
{
// default key value
keySetDef(hProgKey, description);
keyClose(keySetDef(keyCreate(hProgKey, "CLSID"),
psz_CLSID,
GUID_STRLEN));
keyClose(keySetDef(keyCreate(hProgKey, "CurVer"),
progId));
}
}
hClassKey = keyCreate(hParent, psz_CLSID); hClassKey = keyCreate(hParent, psz_CLSID);
CoTaskMemFree((void *)psz_CLSID); CoTaskMemFree((void *)psz_CLSID);
} }
if( NULL != hClassKey ) if( NULL != hClassKey )
{ {
// default key value // default key value
keySetDef(hClassKey, DESCRIPTION, sizeof(DESCRIPTION)); keySetDef(hClassKey, description);
// Control key value // Control key value
keyClose(keyCreate(hClassKey, "Control")); keyClose(keyCreate(hClassKey, "Control"));
...@@ -223,13 +258,9 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi ...@@ -223,13 +258,9 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi
keyClose(keyCreate(hClassKey, "Programmable")); keyClose(keyCreate(hClassKey, "Programmable"));
// ProgID key value // ProgID key value
{ keyClose(keySetDef(keyCreate(hClassKey,
char progId[sizeof(PROGID_STR)+16]; TEXT("ProgID")),
sprintf(progId, "%s.%u", PROGID_STR, version); progId));
keyClose(keySetDef(keyCreate(hClassKey,
TEXT("ProgID")),
progId));
}
// VersionIndependentProgID key value // VersionIndependentProgID key value
keyClose(keySetDef(keyCreate(hClassKey, keyClose(keySetDef(keyCreate(hClassKey,
...@@ -237,13 +268,9 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi ...@@ -237,13 +268,9 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi
PROGID_STR, sizeof(PROGID_STR))); PROGID_STR, sizeof(PROGID_STR)));
// Version key value // Version key value
{ keyClose(keySetDef(keyCreate(hClassKey,
char ver[32]; "Version"),
sprintf(ver, "%u.0", version); "1.0"));
keyClose(keySetDef(keyCreate(hClassKey,
"Version"),
ver));
}
// TypeLib key value // TypeLib key value
LPCSTR psz_LIBID = CStrFromGUID(LIBID_AXVLC); LPCSTR psz_LIBID = CStrFromGUID(LIBID_AXVLC);
...@@ -259,61 +286,6 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi ...@@ -259,61 +286,6 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi
return S_OK; return S_OK;
} }
static HRESULT RegisterProgID(REFCLSID rclsid, unsigned int version)
{
LPCSTR psz_CLSID = CStrFromGUID(rclsid);
if( NULL == psz_CLSID )
return E_OUTOFMEMORY;
char progId[sizeof(PROGID_STR)+16];
sprintf(progId, "%s.%u", PROGID_STR, version);
HKEY hBaseKey = keyCreate(HKEY_CLASSES_ROOT, progId);
if( NULL != hBaseKey )
{
// default key value
keySetDef(hBaseKey, DESCRIPTION, sizeof(DESCRIPTION));
keyClose(keySetDef(keyCreate(hBaseKey, "CLSID"),
psz_CLSID,
GUID_STRLEN));
//hSubKey = keyClose(keyCreate(hBaseKey, "Insertable"));
RegCloseKey(hBaseKey);
}
CoTaskMemFree((void *)psz_CLSID);
return S_OK;
}
static HRESULT RegisterDefaultProgID(REFCLSID rclsid, unsigned int version)
{
LPCSTR psz_CLSID = CStrFromGUID(rclsid);
if( NULL == psz_CLSID )
return E_OUTOFMEMORY;
HKEY hBaseKey = keyCreate(HKEY_CLASSES_ROOT, PROGID_STR);
if( NULL != hBaseKey )
{
// default key value
keySetDef(hBaseKey, DESCRIPTION, sizeof(DESCRIPTION));
keyClose(keySetDef(keyCreate(hBaseKey, "CLSID"),
psz_CLSID,
GUID_STRLEN));
char progId[sizeof(PROGID_STR)+16];
sprintf(progId, "%s.%u", PROGID_STR, version);
keyClose(keySetDef(keyCreate(hBaseKey, "CurVer"),
progId));
}
CoTaskMemFree((void *)psz_CLSID);
}
STDAPI DllRegisterServer(VOID) STDAPI DllRegisterServer(VOID)
{ {
DllUnregisterServer(); DllUnregisterServer();
...@@ -328,17 +300,11 @@ STDAPI DllRegisterServer(VOID) ...@@ -328,17 +300,11 @@ STDAPI DllRegisterServer(VOID)
if( ERROR_SUCCESS != RegOpenKeyExA(HKEY_CLASSES_ROOT, "CLSID", 0, KEY_CREATE_SUB_KEY, &hBaseKey) ) if( ERROR_SUCCESS != RegOpenKeyExA(HKEY_CLASSES_ROOT, "CLSID", 0, KEY_CREATE_SUB_KEY, &hBaseKey) )
return SELFREG_E_CLASS; return SELFREG_E_CLASS;
RegisterClassID(hBaseKey, CLSID_VLCPlugin, 1, DllPath, DllPathLen); RegisterClassID(hBaseKey, CLSID_VLCPlugin, 1, FALSE, DllPath, DllPathLen);
RegisterClassID(hBaseKey, CLSID_VLCPlugin2, 2, DllPath, DllPathLen); RegisterClassID(hBaseKey, CLSID_VLCPlugin2, 2, TRUE, DllPath, DllPathLen);
RegCloseKey(hBaseKey); RegCloseKey(hBaseKey);
RegisterProgID(CLSID_VLCPlugin, 1);
RegisterProgID(CLSID_VLCPlugin2, 2);
/* default control */
RegisterDefaultProgID(CLSID_VLCPlugin2, 2);
// indicate which component categories we support // indicate which component categories we support
ICatRegister *pcr; ICatRegister *pcr;
if( SUCCEEDED(CoCreateInstance(CLSID_StdComponentCategoriesMgr, if( SUCCEEDED(CoCreateInstance(CLSID_StdComponentCategoriesMgr,
......
...@@ -51,10 +51,6 @@ using namespace std; ...@@ -51,10 +51,6 @@ using namespace std;
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//class factory //class factory
// {E23FE9C6-778E-49d4-B537-38FCDE4887D8}
//const GUID CLSID_VLCPlugin =
// { 0xe23fe9c6, 0x778e, 0x49d4, { 0xb5, 0x37, 0x38, 0xfc, 0xde, 0x48, 0x87, 0xd8 } };
static LRESULT CALLBACK VLCInPlaceClassWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static LRESULT CALLBACK VLCInPlaceClassWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch( uMsg ) switch( uMsg )
{ {
...@@ -340,7 +336,9 @@ STDMETHODIMP VLCPlugin::QueryInterface(REFIID riid, void **ppv) ...@@ -340,7 +336,9 @@ STDMETHODIMP VLCPlugin::QueryInterface(REFIID riid, void **ppv)
else if( IID_IObjectSafety == riid ) else if( IID_IObjectSafety == riid )
*ppv = reinterpret_cast<LPVOID>(vlcObjectSafety); *ppv = reinterpret_cast<LPVOID>(vlcObjectSafety);
else if( IID_IDispatch == riid ) else if( IID_IDispatch == riid )
*ppv = reinterpret_cast<LPVOID>(vlcControl); *ppv = (CLSID_VLCPlugin2 == getClassID()) ?
reinterpret_cast<LPVOID>(vlcControl2) :
reinterpret_cast<LPVOID>(vlcControl);
else if( IID_IVLCControl == riid ) else if( IID_IVLCControl == riid )
*ppv = reinterpret_cast<LPVOID>(vlcControl); *ppv = reinterpret_cast<LPVOID>(vlcControl);
else if( IID_IVLCControl2 == riid ) else if( IID_IVLCControl2 == riid )
...@@ -590,7 +588,7 @@ HRESULT VLCPlugin::getVLC(libvlc_instance_t** pp_libvlc) ...@@ -590,7 +588,7 @@ HRESULT VLCPlugin::getVLC(libvlc_instance_t** pp_libvlc)
} }
#if 0 #if 0
ppsz_argv[0] = "C:\\cygwin\\home\\Damien_Fouilleul\\dev\\videolan\\vlc-trunk\\vlc"; ppsz_argv[0] = "C:\\cygwin\\home\\damienf\\vlc-trunk\\vlc";
#endif #endif
// make sure plugin isn't affected with VLC single instance mode // make sure plugin isn't affected with VLC single instance mode
...@@ -624,11 +622,11 @@ HRESULT VLCPlugin::getVLC(libvlc_instance_t** pp_libvlc) ...@@ -624,11 +622,11 @@ HRESULT VLCPlugin::getVLC(libvlc_instance_t** pp_libvlc)
{ {
/* /*
** VLC default threading mechanism is designed to be as compatible ** VLC default threading mechanism is designed to be as compatible
** with POSIX as possible, however when debugged on win32, threads ** with POSIX as possible. However when debugged on win32, threads
** lose signals and eventually VLC get stuck during initialization. ** lose signals and eventually VLC get stuck during initialization.
** threading support can be configured to be more debugging friendly ** threading support can be configured to be more debugging friendly
** but it will be less compatible with POSIX. ** but it will be less compatible with POSIX.
** This is done by initializing with the following options ** This is done by initializing with the following options:
*/ */
ppsz_argv[ppsz_argc++] = "--fast-mutex"; ppsz_argv[ppsz_argc++] = "--fast-mutex";
ppsz_argv[ppsz_argc++] = "--win9x-cv-method=1"; ppsz_argv[ppsz_argc++] = "--win9x-cv-method=1";
......
<HTML> <HTML>
<TITLE>VLC ActiveX plugin test page</TITLE> <TITLE>VLC ActiveX plugin test page</TITLE>
<BODY> <BODY>
<TABLE> <TABLE>
<TR><TD colspan="2"> <TR><TD colspan="2">
MRL: MRL:
<INPUT size="90" name="targetTextField" value=""> <INPUT size="90" id="targetTextField" value="">
<INPUT type=submit value="Go" onClick="doGo(targetTextField.value);"> <INPUT type=submit value="Go" onClick="doGo(document.getElementById('targetTextField').value);">
</TD></TR> </TD></TR>
<TR><TD colspan="2"> <TR><TD colspan="2">
<!-- <!--
Insert VideoLAN.VLCPlugin.1 activex control Insert VideoLAN.VLCPlugin.2 activex control
--> -->
<OBJECT classid="clsid:E23FE9C6-778E-49D4-B537-38FCDE4887D8" <OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab#Version=0,8,4,0" codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab#Version=0,8,6,0"
width="640" width="640"
height="480" height="480"
id="vlc" id="vlc"
events="True"> events="True">
<param name="MRL" value="" /> <param name="MRL" value="" />
<param name="ShowDisplay" value="True" /> <param name="ShowDisplay" value="True" />
<param name="AutoLoop" value="False" /> <param name="AutoLoop" value="False" />
<param name="AutoPlay" value="False" /> <param name="AutoPlay" value="False" />
<param name="Volume" value="50" /> <param name="Volume" value="50" />
<param name="StartTime" value="0" /> <param name="StartTime" value="0" />
</OBJECT> </OBJECT>
</TD></TR> </TD></TR>
<TR><TD> <TR><TD>
<!-- <!--
Insert MSComctlLib.Slider.2 activex control Insert MSComctlLib.Slider.2 activex control
--> -->
<OBJECT classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" <OBJECT classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628"
width="540" width="540"
height="20" height="20"
id="slider" id="slider"
events="True"> events="True">
<param name="TickStyle" value="3" /> <param name="TickStyle" value="3" />
<param name="Min" value="0" /> <param name="Min" value="0" />
<param name="Max" value="0" /> <param name="Max" value="0" />
<param name="Value" value="0" /> <param name="Value" value="0" />
<param name="Enabled" value="False" /> <param name="Enabled" value="False" />
</OBJECT> </OBJECT>
</TD><TD width="15%"> </TD><TD width="15%">
<DIV id="info" style="text-align:center">-:--:--/-:--:--</DIV> <DIV id="info" style="text-align:center">-:--:--/-:--:--</DIV>
</TD></TR> </TD></TR>
<TR><TD colspan="2"> <TR><TD colspan="2">
<INPUT type=button id="PlayOrPause" value=" Play " onClick='doPlayOrPause()'> <INPUT type=button id="PlayOrPause" value=" Play " onClick='doPlayOrPause()'>
<INPUT type=button value="Stop" onClick='document.vlc.stop();'> <INPUT type=button value="Stop" onClick='document.getElementById("vlc").playlist.stop();'>
&nbsp; &nbsp;
<INPUT type=button value=" << " onClick='document.vlc.playSlower();'> <INPUT type=button value=" << " onClick='doPlaySlower();'>
<INPUT type=button value=" >> " onClick='document.vlc.playFaster();'> <INPUT type=button value=" >> " onClick='doPlayFaster();'>
&nbsp; &nbsp;
<INPUT type=button value="Show" onClick='document.vlc.Visible = true;'> <INPUT type=button value="Show" onClick='document.getElementById("vlc").Visible = true;'>
<INPUT type=button value="Hide" onClick='document.vlc.Visible = false;'> <INPUT type=button value="Hide" onClick='document.getElementById("vlc").Visible = false;'>
&nbsp; &nbsp;
<INPUT type=button value="Version" onClick='alert(document.vlc.VersionInfo);'> <INPUT type=button value="Version" onClick='alert(document.getElementById("vlc").VersionInfo);'>
<SPAN style="text-align:center">Volume:</SPAN> <SPAN style="text-align:center">Volume:</SPAN>
<INPUT type=button value=" - " onClick='updateVolume(-10)'> <INPUT type=button value=" - " onClick='updateVolume(-10)'>
<SPAN id="volumeTextField" style="text-align: center">--</SPAN> <SPAN id="volumeTextField" style="text-align: center">--</SPAN>
<INPUT type=button value=" + " onClick='updateVolume(+10)'> <INPUT type=button value=" + " onClick='updateVolume(+10)'>
<INPUT type=button value="Mute" onClick='document.vlc.toggleMute();'> <INPUT type=button value="Mute" onClick='document.getElementById("vlc").audio.toggleMute();'>
</TD> </TD>
</TR> </TR>
</TABLE> </TABLE>
<SCRIPT LANGUAGE="JScript"> <SCRIPT LANGUAGE="JScript">
<!-- <!--
var sliderTimerId = 0; var sliderTimerId = 0;
var sliderScrolling = false; var sliderScrolling = false;
document.onreadystatechange=onVLCStateChange; document.onreadystatechange=onVLCStateChange;
function onVLCStateChange() function onVLCStateChange()
{ {
if( document.readyState == 'complete' ) if( document.readyState == 'complete' )
{ {
updateVolume(0); updateVolume(0);
} }
}; };
function updateVolume(deltaVol) function updateVolume(deltaVol)
{ {
vlc.Volume += deltaVol; var vlc = document.getElementById("vlc");
volumeTextField.innerText = vlc.Volume+"%"; vlc.audio.volume += deltaVol;
}; document.getElementById("volumeTextField").innerHTML = vlc.audio.volume+"%";
function formatTime(timeVal)
{ };
var timeHour = timeVal; function formatTime(timeVal)
var timeSec = timeHour % 60; {
if( timeSec < 10 ) var timeHour = timeVal;
timeSec = '0'+timeSec; var timeSec = timeHour % 60;
timeHour = (timeHour - timeSec)/60; if( timeSec < 10 )
var timeMin = timeHour % 60; timeSec = '0'+timeSec;
if( timeMin < 10 ) timeHour = (timeHour - timeSec)/60;
timeMin = '0'+timeMin; var timeMin = timeHour % 60;
timeHour = (timeHour - timeMin)/60; if( timeMin < 10 )
if( timeHour > 0 ) timeMin = '0'+timeMin;
return timeHour+":"+timeMin+":"+timeSec; timeHour = (timeHour - timeMin)/60;
else if( timeHour > 0 )
return timeMin+":"+timeSec; return timeHour+":"+timeMin+":"+timeSec;
}; else
function onPlay() return timeMin+":"+timeSec;
{ };
document.getElementById("PlayOrPause").value = "Pause"; function onPlay()
}; {
function onPause() document.getElementById("PlayOrPause").value = "Pause";
{ };
document.getElementById("PlayOrPause").value = " Play "; function onPause()
}; {
function onStop() document.getElementById("PlayOrPause").value = " Play ";
{ };
if( slider.Enabled ) function onStop()
{ {
slider.Value = slider.Min; if( slider.Enabled )
slider.Enabled = false; {
} slider.Value = slider.Min;
info.innerText = "-:--:--/-:--:--"; slider.Enabled = false;
document.getElementById("PlayOrPause").value = " Play "; }
}; info.innerText = "-:--:--/-:--:--";
var liveFeedText = new Array("Live", "((Live))", "(( Live ))", "(( Live ))"); document.getElementById("PlayOrPause").value = " Play ";
var liveFeedRoll = 0; };
function doUpdate() var liveFeedText = new Array("Live", "((Live))", "(( Live ))", "(( Live ))");
{ var liveFeedRoll = 0;
if( vlc.Playing )
{ function doUpdate()
if( ! sliderScrolling ) {
{ var vlc = document.getElementById("vlc");
if( vlc.Length > 0 ) if( vlc.playlist.isPlaying )
{ {
// seekable stream if( ! sliderScrolling )
slider.Enabled = true; {
slider.Max = vlc.Length; if( vlc.input.length > 0 )
slider.Value = vlc.Time; {
info.innerText = formatTime(vlc.Time)+"/"+formatTime(vlc.Length); // seekable stream
document.getElementById("PlayOrPause").Enabled = true; slider.Enabled = true;
} slider.Max = vlc.input.length;
else { slider.Value = vlc.input.time;
// non-seekable "live" stream info.innerText = formatTime(vlc.input.time)+"/"+formatTime(vlc.input.length);
if( slider.Enabled ) document.getElementById("PlayOrPause").Enabled = true;
{ }
slider.Value = slider.Min; else {
slider.Enabled = false; // non-seekable "live" stream
} if( slider.Enabled )
liveFeedRoll = liveFeedRoll & 3; {
info.innerText = liveFeedText[liveFeedRoll++]; slider.Value = slider.Min;
} slider.Enabled = false;
} }
sliderTimerId = setTimeout("doUpdate()", 1000); liveFeedRoll = liveFeedRoll & 3;
} info.innerText = liveFeedText[liveFeedRoll++];
else }
{ }
onStop(); sliderTimerId = setTimeout("doUpdate()", 1000);
sliderTimerId = 0; }
} else
}; {
function doGo(targetURL) onStop();
{ sliderTimerId = 0;
var options = new Array(":vout-filter=deinterlace", ":deinterlace-mode=linear"); }
document.vlc.addTarget(targetURL, options, 4+8, -666); };
}; function doGo(targetURL)
function doPlayOrPause() {
{ var options = new Array(":vout-filter=deinterlace", ":deinterlace-mode=linear");
if( document.vlc.playing ) document.getElementById("vlc").playlist.add(targetURL, null, options);
{ };
document.vlc.pause(); function doPlayOrPause()
} {
else var vlc = document.getElementById("vlc");
{ vlc.playlist.togglePause();
document.vlc.play(); };
} function doPlaySlower()
}; {
function vlc::Play() var vlc = document.getElementById("vlc");
{ vlc.input.rate = vlc.input.rate / 2;
if( ! sliderTimerId ) };
{ function doPlayFaster()
sliderTimerId = setTimeout("doUpdate()", 1000); {
} var vlc = document.getElementById("vlc");
onPlay(); vlc.input.rate = vlc.input.rate * 2;
}; };
function vlc::Pause() function vlc::Play()
{ {
if( sliderTimerId ) if( ! sliderTimerId )
{ {
clearTimeout(sliderTimerId) sliderTimerId = setTimeout("doUpdate()", 1000);
sliderTimerId = 0; }
} onPlay();
onPause(); };
}; function vlc::Pause()
function vlc::Stop() {
{ if( sliderTimerId )
if( sliderTimerId ) {
{ clearTimeout(sliderTimerId)
clearTimeout(sliderTimerId) sliderTimerId = 0;
sliderTimerId = 0; }
} onPause();
onStop(); };
}; function vlc::Stop()
function slider::Scroll() {
{ if( sliderTimerId )
slider.Text = formatTime(slider.Value); {
info.innerText = slider.Text+"/"+formatTime(vlc.Length); clearTimeout(sliderTimerId)
if( vlc.Time != slider.Value ) sliderTimerId = 0;
{ }
vlc.Time = slider.Value; onStop();
} };
}; function slider::Scroll()
function slider::Change() {
{ var vlc = document.getElementById("vlc");
if( sliderScrolling ) slider.Text = formatTime(slider.Value);
{ info.innerText = slider.Text+"/"+formatTime(vlc.input.length);
sliderScrolling = false; if( vlc.Time != slider.Value )
} {
else if( vlc.Time != slider.Value ) vlc.Time = slider.Value;
{ }
vlc.Time = slider.Value; };
} function slider::Change()
}; {
//--> if( sliderScrolling )
</SCRIPT> {
</BODY> sliderScrolling = false;
</HTML> }
else if( vlc.Time != slider.Value )
{
vlc.Time = slider.Value;
}
};
//-->
</SCRIPT>
</BODY>
</HTML>
...@@ -41,6 +41,7 @@ extern HDC CreateDevDC(DVTARGETDEVICE *ptd); ...@@ -41,6 +41,7 @@ extern HDC CreateDevDC(DVTARGETDEVICE *ptd);
extern void DPFromHimetric(HDC hdc, LPPOINT pt, int count); extern void DPFromHimetric(HDC hdc, LPPOINT pt, int count);
extern void HimetricFromDP(HDC hdc, LPPOINT pt, int count); extern void HimetricFromDP(HDC hdc, LPPOINT pt, int count);
/**************************************************************************************************/
// enumeration // enumeration
template<class T> class VLCEnum : IUnknown template<class T> class VLCEnum : IUnknown
...@@ -91,6 +92,7 @@ VLCEnum<T>::VLCEnum(REFIID riid, std::vector<T> &v) : ...@@ -91,6 +92,7 @@ VLCEnum<T>::VLCEnum(REFIID riid, std::vector<T> &v) :
template<class T> template<class T>
VLCEnum<T>::VLCEnum(const VLCEnum<T> &e) : VLCEnum<T>::VLCEnum(const VLCEnum<T> &e) :
IUnknown(),
_refcount(1), _refcount(1),
_v(e._v), _v(e._v),
_riid(e._riid) _riid(e._riid)
......
...@@ -34,7 +34,7 @@ VLCAudio::~VLCAudio() ...@@ -34,7 +34,7 @@ VLCAudio::~VLCAudio()
_p_typeinfo->Release(); _p_typeinfo->Release();
}; };
HRESULT VLCAudio::getTypeInfo(void) HRESULT VLCAudio::loadTypeInfo(void)
{ {
HRESULT hr = NOERROR; HRESULT hr = NOERROR;
if( NULL == _p_typeinfo ) if( NULL == _p_typeinfo )
...@@ -60,7 +60,7 @@ STDMETHODIMP VLCAudio::GetTypeInfoCount(UINT* pctInfo) ...@@ -60,7 +60,7 @@ STDMETHODIMP VLCAudio::GetTypeInfoCount(UINT* pctInfo)
if( NULL == pctInfo ) if( NULL == pctInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
*pctInfo = 1; *pctInfo = 1;
else else
*pctInfo = 0; *pctInfo = 0;
...@@ -73,7 +73,7 @@ STDMETHODIMP VLCAudio::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo) ...@@ -73,7 +73,7 @@ STDMETHODIMP VLCAudio::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo)
if( NULL == ppTInfo ) if( NULL == ppTInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
_p_typeinfo->AddRef(); _p_typeinfo->AddRef();
*ppTInfo = _p_typeinfo; *ppTInfo = _p_typeinfo;
...@@ -86,7 +86,7 @@ STDMETHODIMP VLCAudio::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo) ...@@ -86,7 +86,7 @@ STDMETHODIMP VLCAudio::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo)
STDMETHODIMP VLCAudio::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, STDMETHODIMP VLCAudio::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,
UINT cNames, LCID lcid, DISPID* rgDispID) UINT cNames, LCID lcid, DISPID* rgDispID)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID); return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);
} }
...@@ -97,7 +97,7 @@ STDMETHODIMP VLCAudio::Invoke(DISPID dispIdMember, REFIID riid, ...@@ -97,7 +97,7 @@ STDMETHODIMP VLCAudio::Invoke(DISPID dispIdMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams, return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,
pVarResult, pExcepInfo, puArgErr); pVarResult, pExcepInfo, puArgErr);
...@@ -219,7 +219,7 @@ VLCInput::~VLCInput() ...@@ -219,7 +219,7 @@ VLCInput::~VLCInput()
_p_typeinfo->Release(); _p_typeinfo->Release();
}; };
HRESULT VLCInput::getTypeInfo(void) HRESULT VLCInput::loadTypeInfo(void)
{ {
HRESULT hr = NOERROR; HRESULT hr = NOERROR;
if( NULL == _p_typeinfo ) if( NULL == _p_typeinfo )
...@@ -245,7 +245,7 @@ STDMETHODIMP VLCInput::GetTypeInfoCount(UINT* pctInfo) ...@@ -245,7 +245,7 @@ STDMETHODIMP VLCInput::GetTypeInfoCount(UINT* pctInfo)
if( NULL == pctInfo ) if( NULL == pctInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
*pctInfo = 1; *pctInfo = 1;
else else
*pctInfo = 0; *pctInfo = 0;
...@@ -258,7 +258,7 @@ STDMETHODIMP VLCInput::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo) ...@@ -258,7 +258,7 @@ STDMETHODIMP VLCInput::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo)
if( NULL == ppTInfo ) if( NULL == ppTInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
_p_typeinfo->AddRef(); _p_typeinfo->AddRef();
*ppTInfo = _p_typeinfo; *ppTInfo = _p_typeinfo;
...@@ -271,7 +271,7 @@ STDMETHODIMP VLCInput::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo) ...@@ -271,7 +271,7 @@ STDMETHODIMP VLCInput::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo)
STDMETHODIMP VLCInput::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, STDMETHODIMP VLCInput::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,
UINT cNames, LCID lcid, DISPID* rgDispID) UINT cNames, LCID lcid, DISPID* rgDispID)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID); return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);
} }
...@@ -282,7 +282,7 @@ STDMETHODIMP VLCInput::Invoke(DISPID dispIdMember, REFIID riid, ...@@ -282,7 +282,7 @@ STDMETHODIMP VLCInput::Invoke(DISPID dispIdMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams, return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,
pVarResult, pExcepInfo, puArgErr); pVarResult, pExcepInfo, puArgErr);
...@@ -571,7 +571,7 @@ VLCPlaylist::~VLCPlaylist() ...@@ -571,7 +571,7 @@ VLCPlaylist::~VLCPlaylist()
_p_typeinfo->Release(); _p_typeinfo->Release();
}; };
HRESULT VLCPlaylist::getTypeInfo(void) HRESULT VLCPlaylist::loadTypeInfo(void)
{ {
HRESULT hr = NOERROR; HRESULT hr = NOERROR;
if( NULL == _p_typeinfo ) if( NULL == _p_typeinfo )
...@@ -597,7 +597,7 @@ STDMETHODIMP VLCPlaylist::GetTypeInfoCount(UINT* pctInfo) ...@@ -597,7 +597,7 @@ STDMETHODIMP VLCPlaylist::GetTypeInfoCount(UINT* pctInfo)
if( NULL == pctInfo ) if( NULL == pctInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
*pctInfo = 1; *pctInfo = 1;
else else
*pctInfo = 0; *pctInfo = 0;
...@@ -610,7 +610,7 @@ STDMETHODIMP VLCPlaylist::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInf ...@@ -610,7 +610,7 @@ STDMETHODIMP VLCPlaylist::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInf
if( NULL == ppTInfo ) if( NULL == ppTInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
_p_typeinfo->AddRef(); _p_typeinfo->AddRef();
*ppTInfo = _p_typeinfo; *ppTInfo = _p_typeinfo;
...@@ -623,7 +623,7 @@ STDMETHODIMP VLCPlaylist::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInf ...@@ -623,7 +623,7 @@ STDMETHODIMP VLCPlaylist::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInf
STDMETHODIMP VLCPlaylist::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, STDMETHODIMP VLCPlaylist::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,
UINT cNames, LCID lcid, DISPID* rgDispID) UINT cNames, LCID lcid, DISPID* rgDispID)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID); return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);
} }
...@@ -634,7 +634,7 @@ STDMETHODIMP VLCPlaylist::Invoke(DISPID dispIdMember, REFIID riid, ...@@ -634,7 +634,7 @@ STDMETHODIMP VLCPlaylist::Invoke(DISPID dispIdMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams, return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,
pVarResult, pExcepInfo, puArgErr); pVarResult, pExcepInfo, puArgErr);
...@@ -688,7 +688,7 @@ STDMETHODIMP VLCPlaylist::get_isPlaying(VARIANT_BOOL* isPlaying) ...@@ -688,7 +688,7 @@ STDMETHODIMP VLCPlaylist::get_isPlaying(VARIANT_BOOL* isPlaying)
return hr; return hr;
}; };
STDMETHODIMP VLCPlaylist::add(BSTR uri, BSTR name, VARIANT options, int* item) STDMETHODIMP VLCPlaylist::add(BSTR uri, VARIANT name, VARIANT options, int* item)
{ {
if( NULL == item ) if( NULL == item )
return E_POINTER; return E_POINTER;
...@@ -718,9 +718,14 @@ STDMETHODIMP VLCPlaylist::add(BSTR uri, BSTR name, VARIANT options, int* item) ...@@ -718,9 +718,14 @@ STDMETHODIMP VLCPlaylist::add(BSTR uri, BSTR name, VARIANT options, int* item)
} }
char *psz_name = NULL; char *psz_name = NULL;
if( SysStringLen(name) > 0 ) VARIANT v_name;
VariantInit(&v_name);
if( SUCCEEDED(VariantChangeType(&v_name, &name, 0, VT_BSTR)) )
{ {
psz_name = CStrFromBSTR(CP_UTF8, name); if( SysStringLen(V_BSTR(&v_name)) > 0 )
psz_name = CStrFromBSTR(CP_UTF8, V_BSTR(&v_name));
VariantClear(&v_name);
} }
*item = libvlc_playlist_add_extended(p_libvlc, *item = libvlc_playlist_add_extended(p_libvlc,
...@@ -912,7 +917,7 @@ VLCVideo::~VLCVideo() ...@@ -912,7 +917,7 @@ VLCVideo::~VLCVideo()
_p_typeinfo->Release(); _p_typeinfo->Release();
}; };
HRESULT VLCVideo::getTypeInfo(void) HRESULT VLCVideo::loadTypeInfo(void)
{ {
HRESULT hr = NOERROR; HRESULT hr = NOERROR;
if( NULL == _p_typeinfo ) if( NULL == _p_typeinfo )
...@@ -938,7 +943,7 @@ STDMETHODIMP VLCVideo::GetTypeInfoCount(UINT* pctInfo) ...@@ -938,7 +943,7 @@ STDMETHODIMP VLCVideo::GetTypeInfoCount(UINT* pctInfo)
if( NULL == pctInfo ) if( NULL == pctInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
*pctInfo = 1; *pctInfo = 1;
else else
*pctInfo = 0; *pctInfo = 0;
...@@ -951,7 +956,7 @@ STDMETHODIMP VLCVideo::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo) ...@@ -951,7 +956,7 @@ STDMETHODIMP VLCVideo::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo)
if( NULL == ppTInfo ) if( NULL == ppTInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
_p_typeinfo->AddRef(); _p_typeinfo->AddRef();
*ppTInfo = _p_typeinfo; *ppTInfo = _p_typeinfo;
...@@ -964,7 +969,7 @@ STDMETHODIMP VLCVideo::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo) ...@@ -964,7 +969,7 @@ STDMETHODIMP VLCVideo::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo)
STDMETHODIMP VLCVideo::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, STDMETHODIMP VLCVideo::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,
UINT cNames, LCID lcid, DISPID* rgDispID) UINT cNames, LCID lcid, DISPID* rgDispID)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID); return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);
} }
...@@ -975,7 +980,7 @@ STDMETHODIMP VLCVideo::Invoke(DISPID dispIdMember, REFIID riid, ...@@ -975,7 +980,7 @@ STDMETHODIMP VLCVideo::Invoke(DISPID dispIdMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams, return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,
pVarResult, pExcepInfo, puArgErr); pVarResult, pExcepInfo, puArgErr);
...@@ -1118,7 +1123,7 @@ VLCControl2::~VLCControl2() ...@@ -1118,7 +1123,7 @@ VLCControl2::~VLCControl2()
_p_typeinfo->Release(); _p_typeinfo->Release();
}; };
HRESULT VLCControl2::getTypeInfo(void) HRESULT VLCControl2::loadTypeInfo(void)
{ {
HRESULT hr = NOERROR; HRESULT hr = NOERROR;
if( NULL == _p_typeinfo ) if( NULL == _p_typeinfo )
...@@ -1144,7 +1149,7 @@ STDMETHODIMP VLCControl2::GetTypeInfoCount(UINT* pctInfo) ...@@ -1144,7 +1149,7 @@ STDMETHODIMP VLCControl2::GetTypeInfoCount(UINT* pctInfo)
if( NULL == pctInfo ) if( NULL == pctInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
*pctInfo = 1; *pctInfo = 1;
else else
*pctInfo = 0; *pctInfo = 0;
...@@ -1157,7 +1162,7 @@ STDMETHODIMP VLCControl2::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInf ...@@ -1157,7 +1162,7 @@ STDMETHODIMP VLCControl2::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInf
if( NULL == ppTInfo ) if( NULL == ppTInfo )
return E_INVALIDARG; return E_INVALIDARG;
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
_p_typeinfo->AddRef(); _p_typeinfo->AddRef();
*ppTInfo = _p_typeinfo; *ppTInfo = _p_typeinfo;
...@@ -1170,7 +1175,7 @@ STDMETHODIMP VLCControl2::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInf ...@@ -1170,7 +1175,7 @@ STDMETHODIMP VLCControl2::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInf
STDMETHODIMP VLCControl2::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, STDMETHODIMP VLCControl2::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,
UINT cNames, LCID lcid, DISPID* rgDispID) UINT cNames, LCID lcid, DISPID* rgDispID)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID); return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);
} }
...@@ -1181,7 +1186,7 @@ STDMETHODIMP VLCControl2::Invoke(DISPID dispIdMember, REFIID riid, ...@@ -1181,7 +1186,7 @@ STDMETHODIMP VLCControl2::Invoke(DISPID dispIdMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{ {
if( SUCCEEDED(getTypeInfo()) ) if( SUCCEEDED(loadTypeInfo()) )
{ {
return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams, return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,
pVarResult, pExcepInfo, puArgErr); pVarResult, pExcepInfo, puArgErr);
......
/***************************************************************************** /*****************************************************************************
* vlccontrol.h: ActiveX control for VLC * vlccontrol.h: ActiveX control for VLC
***************************************************************************** *****************************************************************************
* Copyright (C) 2005 the VideoLAN team * Copyright (C) 2006 the VideoLAN team
* *
* Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net> * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
* *
...@@ -27,10 +27,9 @@ ...@@ -27,10 +27,9 @@
class VLCAudio : public IVLCAudio class VLCAudio : public IVLCAudio
{ {
public: public:
VLCAudio(VLCPlugin *p_instance) :
VLCAudio(VLCPlugin *p_instance) : _p_instance(p_instance), _p_typeinfo(NULL) {}; _p_instance(p_instance), _p_typeinfo(NULL) {};
virtual ~VLCAudio(); virtual ~VLCAudio();
// IUnknown methods // IUnknown methods
...@@ -65,23 +64,21 @@ public: ...@@ -65,23 +64,21 @@ public:
STDMETHODIMP get_volume(int*); STDMETHODIMP get_volume(int*);
STDMETHODIMP put_volume(int); STDMETHODIMP put_volume(int);
STDMETHODIMP toggleMute(); STDMETHODIMP toggleMute();
private: private:
HRESULT loadTypeInfo();
HRESULT getTypeInfo(); VLCPlugin* _p_instance;
ITypeInfo* _p_typeinfo;
VLCPlugin *_p_instance;
ITypeInfo *_p_typeinfo;
}; };
class VLCInput : public IVLCInput class VLCInput : public IVLCInput
{ {
public: public:
VLCInput(VLCPlugin *p_instance) : _p_instance(p_instance), _p_typeinfo(NULL) {}; VLCInput(VLCPlugin *p_instance) :
_p_instance(p_instance), _p_typeinfo(NULL) {};
virtual ~VLCInput(); virtual ~VLCInput();
// IUnknown methods // IUnknown methods
...@@ -123,20 +120,18 @@ public: ...@@ -123,20 +120,18 @@ public:
STDMETHODIMP get_hasVout(VARIANT_BOOL*); STDMETHODIMP get_hasVout(VARIANT_BOOL*);
private: private:
HRESULT loadTypeInfo();
HRESULT getTypeInfo(); VLCPlugin* _p_instance;
ITypeInfo* _p_typeinfo;
VLCPlugin *_p_instance;
ITypeInfo *_p_typeinfo;
}; };
class VLCPlaylist : public IVLCPlaylist class VLCPlaylist : public IVLCPlaylist
{ {
public: public:
VLCPlaylist(VLCPlugin *p_instance) :
VLCPlaylist(VLCPlugin *p_instance) : _p_instance(p_instance), _p_typeinfo(NULL) {}; _p_instance(p_instance), _p_typeinfo(NULL) {};
virtual ~VLCPlaylist(); virtual ~VLCPlaylist();
// IUnknown methods // IUnknown methods
...@@ -168,7 +163,7 @@ public: ...@@ -168,7 +163,7 @@ public:
// IVLCPlaylist methods // IVLCPlaylist methods
STDMETHODIMP get_itemCount(int*); STDMETHODIMP get_itemCount(int*);
STDMETHODIMP get_isPlaying(VARIANT_BOOL*); STDMETHODIMP get_isPlaying(VARIANT_BOOL*);
STDMETHODIMP add(BSTR, BSTR, VARIANT, int*); STDMETHODIMP add(BSTR, VARIANT, VARIANT, int*);
STDMETHODIMP play(); STDMETHODIMP play();
STDMETHODIMP playItem(int); STDMETHODIMP playItem(int);
STDMETHODIMP togglePause(); STDMETHODIMP togglePause();
...@@ -180,19 +175,18 @@ public: ...@@ -180,19 +175,18 @@ public:
private: private:
HRESULT getTypeInfo(); HRESULT loadTypeInfo();
VLCPlugin *_p_instance; VLCPlugin* _p_instance;
ITypeInfo *_p_typeinfo; ITypeInfo* _p_typeinfo;
}; };
class VLCVideo : public IVLCVideo class VLCVideo : public IVLCVideo
{ {
public: public:
VLCVideo(VLCPlugin *p_instance) :
VLCVideo(VLCPlugin *p_instance) : _p_instance(p_instance), _p_typeinfo(NULL) {}; _p_instance(p_instance), _p_typeinfo(NULL) {};
virtual ~VLCVideo(); virtual ~VLCVideo();
// IUnknown methods // IUnknown methods
...@@ -229,10 +223,10 @@ public: ...@@ -229,10 +223,10 @@ public:
private: private:
HRESULT getTypeInfo(); HRESULT loadTypeInfo();
VLCPlugin *_p_instance; VLCPlugin* _p_instance;
ITypeInfo *_p_typeinfo; ITypeInfo* _p_typeinfo;
}; };
...@@ -277,7 +271,7 @@ public: ...@@ -277,7 +271,7 @@ public:
private: private:
HRESULT getTypeInfo(); HRESULT loadTypeInfo();
VLCPlugin* _p_instance; VLCPlugin* _p_instance;
ITypeInfo* _p_typeinfo; ITypeInfo* _p_typeinfo;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment