Commit fff18e65 authored by Jean-Paul Saman's avatar Jean-Paul Saman

(Forward port of [17380]) Aspect ratio property for ActiveX plugin

parent f5103921
......@@ -402,6 +402,11 @@ library AXVLC
[propget, helpstring("Returns video original height.")]
HRESULT height([out, retval] long* height);
[propget, helpstring("Returns video aspect ratio.")]
HRESULT aspectRatio([out, retval] BSTR *aspect);
[propput, helpstring("Sets video aspect ratio.")]
HRESULT aspectRatio([in] BSTR aspect);
[helpstring("toggle fullscreen/windowed state.")]
HRESULT toggleFullscreen();
};
......
......@@ -2034,6 +2034,12 @@ interface IVLCVideo : public IDispatch
virtual HRESULT STDMETHODCALLTYPE get_height(
long* height) = 0;
virtual HRESULT STDMETHODCALLTYPE get_aspectRatio(
BSTR* aspect) = 0;
virtual HRESULT STDMETHODCALLTYPE put_aspectRatio(
BSTR aspect) = 0;
virtual HRESULT STDMETHODCALLTYPE toggleFullscreen(
) = 0;
......@@ -2101,6 +2107,14 @@ typedef struct IVLCVideoVtbl {
IVLCVideo* This,
long* height);
HRESULT (STDMETHODCALLTYPE *get_aspectRatio)(
IVLCVideo* This,
BSTR* aspect);
HRESULT (STDMETHODCALLTYPE *put_aspectRatio)(
IVLCVideo* This,
BSTR aspect);
HRESULT (STDMETHODCALLTYPE *toggleFullscreen)(
IVLCVideo* This);
......@@ -2125,6 +2139,8 @@ interface IVLCVideo {
#define IVLCVideo_put_fullscreen(p,a) (p)->lpVtbl->put_fullscreen(p,a)
#define IVLCVideo_get_width(p,a) (p)->lpVtbl->get_width(p,a)
#define IVLCVideo_get_height(p,a) (p)->lpVtbl->get_height(p,a)
#define IVLCVideo_get_aspectRatio(p,a) (p)->lpVtbl->get_aspectRatio(p,a)
#define IVLCVideo_put_aspectRatio(p,a) (p)->lpVtbl->put_aspectRatio(p,a)
#define IVLCVideo_toggleFullscreen(p) (p)->lpVtbl->toggleFullscreen(p)
#endif
......@@ -2162,6 +2178,22 @@ void __RPC_STUB IVLCVideo_get_height_Stub(
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
HRESULT CALLBACK IVLCVideo_get_aspectRatio_Proxy(
IVLCVideo* This,
BSTR* aspect);
void __RPC_STUB IVLCVideo_get_aspectRatio_Stub(
IRpcStubBuffer* This,
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
HRESULT CALLBACK IVLCVideo_put_aspectRatio_Proxy(
IVLCVideo* This,
BSTR aspect);
void __RPC_STUB IVLCVideo_put_aspectRatio_Stub(
IRpcStubBuffer* This,
IRpcChannelBuffer* pRpcChannelBuffer,
PRPC_MESSAGE pRpcMessage,
DWORD* pdwStubPhase);
HRESULT CALLBACK IVLCVideo_toggleFullscreen_Proxy(
IVLCVideo* This);
void __RPC_STUB IVLCVideo_toggleFullscreen_Stub(
......
......@@ -1758,6 +1758,88 @@ STDMETHODIMP VLCVideo::get_height(long* height)
return hr;
};
STDMETHODIMP VLCVideo::get_aspectRatio(BSTR *aspect)
{
if( NULL == *aspect )
return E_POINTER;
libvlc_instance_t* p_libvlc;
HRESULT hr = _p_instance->getVLC(&p_libvlc);
if( SUCCEEDED(hr) )
{
libvlc_exception_t ex;
libvlc_exception_init(&ex);
libvlc_input_t *p_input = libvlc_playlist_get_input(p_libvlc, &ex);
if( ! libvlc_exception_raised(&ex) )
{
char *psz_aspect = libvlc_video_get_aspect_ratio(p_input, &ex);
if( !psz_aspect )
return E_OUTOFMEMORY;
if( ! libvlc_exception_raised(&ex) )
{
*aspect = SysAllocStringByteLen(psz_aspect, strlen(psz_aspect));
free( psz_aspect );
psz_aspect = NULL;
libvlc_input_free(p_input);
if( ! libvlc_exception_raised(&ex) )
{
return NOERROR;
}
}
if( psz_aspect ) free( psz_aspect );
}
_p_instance->setErrorInfo(IID_IVLCVideo, libvlc_exception_get_message(&ex));
libvlc_exception_clear(&ex);
return E_FAIL;
}
return hr;
};
STDMETHODIMP VLCVideo::put_aspectRatio(BSTR aspect)
{
if( NULL == aspect )
return E_POINTER;
if( 0 == SysStringLen(aspect) )
return E_INVALIDARG;
libvlc_instance_t* p_libvlc;
HRESULT hr = _p_instance->getVLC(&p_libvlc);
if( SUCCEEDED(hr) )
{
char *psz_aspect = NULL;
libvlc_exception_t ex;
libvlc_exception_init(&ex);
libvlc_input_t *p_input = libvlc_playlist_get_input(p_libvlc, &ex);
if( ! libvlc_exception_raised(&ex) )
{
psz_aspect = CStrFromBSTR(CP_UTF8, aspect);
if( NULL == psz_aspect )
{
return E_OUTOFMEMORY;
}
libvlc_video_set_aspect_ratio(p_input, psz_aspect, &ex);
CoTaskMemFree(psz_aspect);
libvlc_input_free(p_input);
if( libvlc_exception_raised(&ex) )
{
_p_instance->setErrorInfo(IID_IVLCPlaylist,
libvlc_exception_get_message(&ex));
libvlc_exception_clear(&ex);
return E_FAIL;
}
}
return NOERROR;
}
return hr;
};
STDMETHODIMP VLCVideo::toggleFullscreen()
{
libvlc_instance_t* p_libvlc;
......
......@@ -121,7 +121,7 @@ public:
STDMETHODIMP put_rate(double);
STDMETHODIMP get_fps(double*);
STDMETHODIMP get_hasVout(VARIANT_BOOL*);
protected:
HRESULT loadTypeInfo();
......@@ -460,6 +460,8 @@ public:
STDMETHODIMP put_fullscreen(VARIANT_BOOL);
STDMETHODIMP get_width(long*);
STDMETHODIMP get_height(long*);
STDMETHODIMP get_aspectRatio(BSTR*);
STDMETHODIMP put_aspectRatio(BSTR);
STDMETHODIMP toggleFullscreen();
protected:
......
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