Commit ce00864d authored by JP Dinger's avatar JP Dinger

activex plugin: move deinterlace to own video subobject.

parent f64e68a7
......@@ -41,6 +41,7 @@ library AXVLC
interface IVLCAudio;
interface IVLCInput;
interface IVLCLogo;
interface IVLCDeinterlace;
interface IVLCMarquee;
interface IVLCPlaylist;
interface IVLCSubtitle;
......@@ -442,6 +443,21 @@ library AXVLC
[propput, helpstring("Picture y offset.")]
HRESULT y([in] long val);
};
[
odl,
uuid(bc97469f-cb11-4037-8dce-5fc9f5f85307),
helpstring("VLC Deinterlace Filter"),
dual,
oleautomation
]
interface IVLCDeinterlace : IDispatch
{
[helpstring("Enable deinterlace filter and set method.")]
HRESULT enable([in] BSTR mode);
[helpstring("Disable deinterlace filter.")]
HRESULT disable();
};
[
......@@ -485,11 +501,6 @@ library AXVLC
[propput, helpstring("Sets teletext page to use.")]
HRESULT teletext([in] long page);
[helpstring("Enable deinterlace filter.")]
HRESULT deinterlaceEnable([in] BSTR mode);
[helpstring("Disable deinterlace filter.")]
HRESULT deinterlaceDisable();
[helpstring("toggle fullscreen/windowed state.")]
HRESULT toggleFullscreen();
......@@ -504,6 +515,9 @@ library AXVLC
[propget, helpstring("Returns the logo object.")]
HRESULT logo([out, retval] IVLCLogo** obj);
[propget, helpstring("Returns the logo object.")]
HRESULT deinterlace([out, retval] IVLCDeinterlace** obj);
};
[
......
/*** Autogenerated by WIDL 1.1.32 from axvlc.idl - Do not edit ***/
/*** Autogenerated by WIDL 1.1.23 from axvlc.idl - Do not edit ***/
#include <rpc.h>
#include <rpcndr.h>
......@@ -19,6 +19,7 @@ DEFINE_GUID(IID_IVLCPlaylist, 0x54613049, 0x40bf, 0x4035, 0x9e,0x70, 0x0a,0x93,0
DEFINE_GUID(IID_IVLCSubtitle, 0x465e787a, 0x0556, 0x452f, 0x94,0x77, 0x95,0x4e,0x4a,0x94,0x00,0x03);
DEFINE_GUID(IID_IVLCMarquee, 0x8d076ad6, 0x9b6f, 0x4150, 0xa0,0xfd, 0x5d,0x7e,0x8c,0x8c,0xb0,0x2c);
DEFINE_GUID(IID_IVLCLogo, 0x8a4a20c2, 0x93f3, 0x44e8, 0x86,0x44, 0xbe,0xb2,0xe3,0x48,0x7e,0x84);
DEFINE_GUID(IID_IVLCDeinterlace, 0xbc97469f, 0xcb11, 0x4037, 0x8d,0xce, 0x5f,0xc9,0xf5,0xf8,0x53,0x07);
DEFINE_GUID(IID_IVLCVideo, 0x0aaedf0b, 0xd333, 0x4b27, 0xa0,0xc6, 0xbb,0xf3,0x14,0x13,0xa4,0x2e);
DEFINE_GUID(IID_IVLCControl2, 0x2d719729, 0x5333, 0x406c, 0xbf,0x12, 0x8d,0xe7,0x87,0xfd,0x65,0xe3);
DEFINE_GUID(CLSID_VLCPlugin, 0xe23fe9c6, 0x778e, 0x49d4, 0xb5,0x37, 0x38,0xfc,0xde,0x48,0x87,0xd8);
......
/*** Autogenerated by WIDL 1.1.32 from axvlc.idl - Do not edit ***/
/*** Autogenerated by WIDL 1.1.23 from axvlc.idl - Do not edit ***/
#include <rpc.h>
#include <rpcndr.h>
......@@ -61,6 +61,11 @@ typedef interface IVLCMarquee IVLCMarquee;
typedef interface IVLCLogo IVLCLogo;
#endif
#ifndef __IVLCDeinterlace_FWD_DEFINED__
#define __IVLCDeinterlace_FWD_DEFINED__
typedef interface IVLCDeinterlace IVLCDeinterlace;
#endif
#ifndef __IVLCVideo_FWD_DEFINED__
#define __IVLCVideo_FWD_DEFINED__
typedef interface IVLCVideo IVLCVideo;
......@@ -105,6 +110,11 @@ typedef interface IVLCInput IVLCInput;
typedef interface IVLCLogo IVLCLogo;
#endif
#ifndef __IVLCDeinterlace_FWD_DEFINED__
#define __IVLCDeinterlace_FWD_DEFINED__
typedef interface IVLCDeinterlace IVLCDeinterlace;
#endif
#ifndef __IVLCMarquee_FWD_DEFINED__
#define __IVLCMarquee_FWD_DEFINED__
typedef interface IVLCMarquee IVLCMarquee;
......@@ -2627,6 +2637,118 @@ void __RPC_STUB IVLCLogo_put_y_Stub(
#endif /* __IVLCLogo_INTERFACE_DEFINED__ */
/*****************************************************************************
* IVLCDeinterlace interface
*/
#ifndef __IVLCDeinterlace_INTERFACE_DEFINED__
#define __IVLCDeinterlace_INTERFACE_DEFINED__
DEFINE_GUID(IID_IVLCDeinterlace, 0xbc97469f, 0xcb11, 0x4037, 0x8d,0xce, 0x5f,0xc9,0xf5,0xf8,0x53,0x07);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IVLCDeinterlace : public IDispatch
{
virtual HRESULT STDMETHODCALLTYPE enable(
BSTR mode) = 0;
virtual HRESULT STDMETHODCALLTYPE disable(
) = 0;
};
#else
typedef struct IVLCDeinterlaceVtbl {
BEGIN_INTERFACE
/*** IUnknown methods ***/
HRESULT (STDMETHODCALLTYPE *QueryInterface)(
IVLCDeinterlace* This,
REFIID riid,
void **ppvObject);
ULONG (STDMETHODCALLTYPE *AddRef)(
IVLCDeinterlace* This);
ULONG (STDMETHODCALLTYPE *Release)(
IVLCDeinterlace* This);
/*** IDispatch methods ***/
HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
IVLCDeinterlace* This,
UINT *pctinfo);
HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
IVLCDeinterlace* This,
UINT iTInfo,
LCID lcid,
ITypeInfo **ppTInfo);
HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
IVLCDeinterlace* This,
REFIID riid,
LPOLESTR *rgszNames,
UINT cNames,
LCID lcid,
DISPID *rgDispId);
HRESULT (STDMETHODCALLTYPE *Invoke)(
IVLCDeinterlace* This,
DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS *pDispParams,
VARIANT *pVarResult,
EXCEPINFO *pExcepInfo,
UINT *puArgErr);
/*** IVLCDeinterlace methods ***/
HRESULT (STDMETHODCALLTYPE *enable)(
IVLCDeinterlace* This,
BSTR mode);
HRESULT (STDMETHODCALLTYPE *disable)(
IVLCDeinterlace* This);
END_INTERFACE
} IVLCDeinterlaceVtbl;
interface IVLCDeinterlace {
CONST_VTBL IVLCDeinterlaceVtbl* lpVtbl;
};
#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IVLCDeinterlace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVLCDeinterlace_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVLCDeinterlace_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define IVLCDeinterlace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVLCDeinterlace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVLCDeinterlace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVLCDeinterlace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** IVLCDeinterlace methods ***/
#define IVLCDeinterlace_enable(This,mode) (This)->lpVtbl->enable(This,mode)
#define IVLCDeinterlace_disable(This) (This)->lpVtbl->disable(This)
#endif
#endif
HRESULT STDMETHODCALLTYPE IVLCDeinterlace_enable_Proxy(
IVLCDeinterlace* This,
BSTR mode);
void __RPC_STUB IVLCDeinterlace_enable_Stub(
IRpcStubBuffer* This,
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IVLCDeinterlace_disable_Proxy(
IVLCDeinterlace* This);
void __RPC_STUB IVLCDeinterlace_disable_Stub(
IRpcStubBuffer* This,
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
#endif /* __IVLCDeinterlace_INTERFACE_DEFINED__ */
/*****************************************************************************
* IVLCVideo interface
*/
......@@ -2673,12 +2795,6 @@ interface IVLCVideo : public IDispatch
virtual HRESULT STDMETHODCALLTYPE put_teletext(
LONG page) = 0;
virtual HRESULT STDMETHODCALLTYPE deinterlaceEnable(
BSTR mode) = 0;
virtual HRESULT STDMETHODCALLTYPE deinterlaceDisable(
) = 0;
virtual HRESULT STDMETHODCALLTYPE toggleFullscreen(
) = 0;
......@@ -2694,6 +2810,9 @@ interface IVLCVideo : public IDispatch
virtual HRESULT STDMETHODCALLTYPE get_logo(
IVLCLogo **obj) = 0;
virtual HRESULT STDMETHODCALLTYPE get_deinterlace(
IVLCDeinterlace **obj) = 0;
};
#else
typedef struct IVLCVideoVtbl {
......@@ -2790,13 +2909,6 @@ typedef struct IVLCVideoVtbl {
IVLCVideo* This,
LONG page);
HRESULT (STDMETHODCALLTYPE *deinterlaceEnable)(
IVLCVideo* This,
BSTR mode);
HRESULT (STDMETHODCALLTYPE *deinterlaceDisable)(
IVLCVideo* This);
HRESULT (STDMETHODCALLTYPE *toggleFullscreen)(
IVLCVideo* This);
......@@ -2815,6 +2927,10 @@ typedef struct IVLCVideoVtbl {
IVLCVideo* This,
IVLCLogo **obj);
HRESULT (STDMETHODCALLTYPE *get_deinterlace)(
IVLCVideo* This,
IVLCDeinterlace **obj);
END_INTERFACE
} IVLCVideoVtbl;
interface IVLCVideo {
......@@ -2844,13 +2960,12 @@ interface IVLCVideo {
#define IVLCVideo_put_crop(This,geometry) (This)->lpVtbl->put_crop(This,geometry)
#define IVLCVideo_get_teletext(This,page) (This)->lpVtbl->get_teletext(This,page)
#define IVLCVideo_put_teletext(This,page) (This)->lpVtbl->put_teletext(This,page)
#define IVLCVideo_deinterlaceEnable(This,mode) (This)->lpVtbl->deinterlaceEnable(This,mode)
#define IVLCVideo_deinterlaceDisable(This) (This)->lpVtbl->deinterlaceDisable(This)
#define IVLCVideo_toggleFullscreen(This) (This)->lpVtbl->toggleFullscreen(This)
#define IVLCVideo_takeSnapshot(This,picture) (This)->lpVtbl->takeSnapshot(This,picture)
#define IVLCVideo_toggleTeletext(This) (This)->lpVtbl->toggleTeletext(This)
#define IVLCVideo_get_marquee(This,obj) (This)->lpVtbl->get_marquee(This,obj)
#define IVLCVideo_get_logo(This,obj) (This)->lpVtbl->get_logo(This,obj)
#define IVLCVideo_get_deinterlace(This,obj) (This)->lpVtbl->get_deinterlace(This,obj)
#endif
#endif
......@@ -2951,21 +3066,6 @@ void __RPC_STUB IVLCVideo_put_teletext_Stub(
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IVLCVideo_deinterlaceEnable_Proxy(
IVLCVideo* This,
BSTR mode);
void __RPC_STUB IVLCVideo_deinterlaceEnable_Stub(
IRpcStubBuffer* This,
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IVLCVideo_deinterlaceDisable_Proxy(
IVLCVideo* This);
void __RPC_STUB IVLCVideo_deinterlaceDisable_Stub(
IRpcStubBuffer* This,
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IVLCVideo_toggleFullscreen_Proxy(
IVLCVideo* This);
void __RPC_STUB IVLCVideo_toggleFullscreen_Stub(
......@@ -3004,6 +3104,14 @@ void __RPC_STUB IVLCVideo_get_logo_Stub(
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IVLCVideo_get_deinterlace_Proxy(
IVLCVideo* This,
IVLCDeinterlace **obj);
void __RPC_STUB IVLCVideo_get_deinterlace_Stub(
IRpcStubBuffer* This,
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
#endif /* __IVLCVideo_INTERFACE_DEFINED__ */
......
......@@ -205,9 +205,9 @@ Insert Slider widget
</TR>
<TR>
<TD>Deinterlacing:
<INPUT type=button value="BLEND" onClick='getVLC("vlc").video.deinterlaceEnable("blend");'>
<INPUT type=button value=" X " onClick='getVLC("vlc").video.deinterlaceEnable("x");'>
<INPUT type=button value="Disable" onClick='getVLC("vlc").video.deinterlaceDisable();'>
<INPUT type=button value="BLEND" onClick='getVLC("vlc").video.deinterlace.enable("blend");'>
<INPUT type=button value=" X " onClick='getVLC("vlc").video.deinterlace.enable("x");'>
<INPUT type=button value="Disable" onClick='getVLC("vlc").video.deinterlace.disable();'>
</TD>
</TR>
<TR>
......
......@@ -65,6 +65,7 @@ BIND_INTERFACE( VLCAudio )
BIND_INTERFACE( VLCInput )
BIND_INTERFACE( VLCMarquee )
BIND_INTERFACE( VLCLogo )
BIND_INTERFACE( VLCDeinterlace )
BIND_INTERFACE( VLCPlaylistItems )
BIND_INTERFACE( VLCPlaylist )
BIND_INTERFACE( VLCVideo )
......@@ -288,6 +289,39 @@ STDMETHODIMP VLCAudio::toggleMute()
/****************************************************************************/
STDMETHODIMP VLCDeinterlace::disable()
{
libvlc_media_player_t *p_md;
HRESULT hr = getMD(&p_md);
if( SUCCEEDED(hr) )
{
libvlc_exception_t ex;
libvlc_exception_init(&ex);
libvlc_video_set_deinterlace(p_md, 0, "", &ex);
hr = exception_bridge(&ex);
}
return hr;
}
STDMETHODIMP VLCDeinterlace::enable(BSTR mode)
{
libvlc_media_player_t *p_md;
HRESULT hr = getMD(&p_md);
if( SUCCEEDED(hr) )
{
libvlc_exception_t ex;
libvlc_exception_init(&ex);
char *psz_mode = CStrFromBSTR(CP_UTF8, mode);
libvlc_video_set_deinterlace(p_md, 1, psz_mode, &ex);
CoTaskMemFree(psz_mode);
hr = exception_bridge(&ex);
}
return hr;
}
/****************************************************************************/
STDMETHODIMP VLCInput::get_length(double* length)
{
if( NULL == length )
......@@ -1177,39 +1211,6 @@ STDMETHODIMP VLCVideo::put_teletext(long page)
return hr;
};
STDMETHODIMP VLCVideo::deinterlaceDisable()
{
libvlc_media_player_t *p_md;
HRESULT hr = getMD(&p_md);
if( SUCCEEDED(hr) )
{
libvlc_exception_t ex;
libvlc_exception_init(&ex);
libvlc_video_set_deinterlace(p_md, 0, "", &ex);
hr = exception_bridge(&ex);
}
return hr;
};
STDMETHODIMP VLCVideo::deinterlaceEnable(BSTR mode)
{
libvlc_media_player_t *p_md;
HRESULT hr = getMD(&p_md);
if( SUCCEEDED(hr) )
{
libvlc_exception_t ex;
libvlc_exception_init(&ex);
/* get deinterlace mode from the user */
char *psz_mode = CStrFromBSTR(CP_UTF8, mode);
/* enable deinterlace filter if possible */
libvlc_video_set_deinterlace(p_md, 1, psz_mode, &ex);
hr = exception_bridge(&ex);
CoTaskMemFree(psz_mode);
}
return hr;
};
STDMETHODIMP VLCVideo::takeSnapshot(LPPICTUREDISP* picture)
{
if( NULL == picture )
......@@ -1351,6 +1352,11 @@ STDMETHODIMP VLCVideo::get_logo(IVLCLogo** obj)
return object_get(obj,_p_vlclogo);
}
STDMETHODIMP VLCVideo::get_deinterlace(IVLCDeinterlace** obj)
{
return object_get(obj,_p_vlcdeint);
}
/****************************************************************************/
......
......@@ -239,6 +239,18 @@ private:
HRESULT do_get_int(unsigned idx, LONG *val);
};
class VLCDeinterlace: public VLCInterface<VLCDeinterlace,IVLCDeinterlace>
{
public:
VLCDeinterlace(VLCPlugin *p):
VLCInterface<VLCDeinterlace,IVLCDeinterlace>(p) { }
STDMETHODIMP enable(BSTR val);
STDMETHODIMP disable();
};
class VLCPlaylistItems: public VLCInterface<VLCPlaylistItems,IVLCPlaylistItems>
{
public:
......@@ -293,8 +305,13 @@ class VLCVideo: public VLCInterface<VLCVideo,IVLCVideo>
{
public:
VLCVideo(VLCPlugin *p): VLCInterface<VLCVideo,IVLCVideo>(p),
_p_vlcmarquee(new VLCMarquee(p)), _p_vlclogo(new VLCLogo(p)) { }
virtual ~VLCVideo() { delete _p_vlcmarquee; delete _p_vlclogo; }
_p_vlcmarquee(new VLCMarquee(p)), _p_vlclogo(new VLCLogo(p)),
_p_vlcdeint(new VLCDeinterlace(p)) { }
virtual ~VLCVideo() {
delete _p_vlcmarquee;
delete _p_vlclogo;
delete _p_vlcdeint;
}
// IVLCVideo methods
STDMETHODIMP get_fullscreen(VARIANT_BOOL*);
......@@ -311,15 +328,15 @@ public:
STDMETHODIMP put_teletext(long);
STDMETHODIMP get_marquee(IVLCMarquee**);
STDMETHODIMP get_logo(IVLCLogo**);
STDMETHODIMP deinterlaceDisable();
STDMETHODIMP deinterlaceEnable(BSTR);
STDMETHODIMP get_deinterlace(IVLCDeinterlace**);
STDMETHODIMP takeSnapshot(LPPICTUREDISP*);
STDMETHODIMP toggleFullscreen();
STDMETHODIMP toggleTeletext();
private:
IVLCMarquee *_p_vlcmarquee;
IVLCLogo *_p_vlclogo;
IVLCMarquee *_p_vlcmarquee;
IVLCLogo *_p_vlclogo;
IVLCDeinterlace *_p_vlcdeint;
};
class VLCControl2 : public IVLCControl2
......
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