mirror of
https://code.videolan.org/videolan/vlc
synced 2024-08-14 21:25:09 +02:00
Implement vlc.video.toggleTeletext() JS API method
This commit is contained in:
parent
f333d57a3e
commit
72bef4462e
@ -444,6 +444,9 @@ library AXVLC
|
||||
|
||||
[helpstring("take video snapshot and save it into picture object.")]
|
||||
HRESULT takeSnapshot([out, retval] IPictureDisp** picture);
|
||||
|
||||
[helpstring("toggle teletext transparent state.")]
|
||||
HRESULT toggleTeletext();
|
||||
};
|
||||
|
||||
[
|
||||
|
@ -2539,6 +2539,32 @@ STDMETHODIMP VLCVideo::toggleFullscreen()
|
||||
return hr;
|
||||
};
|
||||
|
||||
STDMETHODIMP VLCVideo::toggleTeletext()
|
||||
{
|
||||
libvlc_instance_t* p_libvlc;
|
||||
HRESULT hr = _p_instance->getVLC(&p_libvlc);
|
||||
if( SUCCEEDED(hr) )
|
||||
{
|
||||
libvlc_exception_t ex;
|
||||
libvlc_exception_init(&ex);
|
||||
|
||||
libvlc_media_instance_t *p_md = libvlc_playlist_get_media_instance(p_libvlc, &ex);
|
||||
if( ! libvlc_exception_raised(&ex) )
|
||||
{
|
||||
libvlc_toggle_teletext(p_md, &ex);
|
||||
libvlc_media_instance_release(p_md);
|
||||
if( ! libvlc_exception_raised(&ex) )
|
||||
{
|
||||
return NOERROR;
|
||||
}
|
||||
}
|
||||
_p_instance->setErrorInfo(IID_IVLCVideo, libvlc_exception_get_message(&ex));
|
||||
libvlc_exception_clear(&ex);
|
||||
return E_FAIL;
|
||||
}
|
||||
return hr;
|
||||
};
|
||||
|
||||
/*******************************************************************************/
|
||||
|
||||
VLCControl2::VLCControl2(VLCPlugin *p_instance) :
|
||||
|
@ -530,6 +530,7 @@ public:
|
||||
STDMETHODIMP put_teletext(long);
|
||||
STDMETHODIMP takeSnapshot(LPPICTUREDISP*);
|
||||
STDMETHODIMP toggleFullscreen();
|
||||
STDMETHODIMP toggleTeletext();
|
||||
|
||||
protected:
|
||||
HRESULT loadTypeInfo();
|
||||
|
@ -819,6 +819,13 @@ VLC_PUBLIC_API char *libvlc_video_get_crop_geometry( libvlc_media_instance_t *,
|
||||
*/
|
||||
VLC_PUBLIC_API void libvlc_video_set_crop_geometry( libvlc_media_instance_t *, char *, libvlc_exception_t * );
|
||||
|
||||
/**
|
||||
* Toggle teletext transparent status on video output
|
||||
* \param p_input the input
|
||||
* \param p_exception an initialized exception
|
||||
*/
|
||||
VLC_PUBLIC_API void libvlc_toggle_teletext( libvlc_media_instance_t *, libvlc_exception_t * );
|
||||
|
||||
/**
|
||||
* Get current teletext page requested.
|
||||
* \param p_input the input
|
||||
|
@ -2070,11 +2070,13 @@ RuntimeNPObject::InvokeResult LibvlcVideoNPObject::setProperty(int index, const
|
||||
const NPUTF8 * const LibvlcVideoNPObject::methodNames[] =
|
||||
{
|
||||
"toggleFullscreen",
|
||||
"toggleTeletext"
|
||||
};
|
||||
|
||||
enum LibvlcVideoNPObjectMethodIds
|
||||
{
|
||||
ID_video_togglefullscreen,
|
||||
ID_video_toggleteletext
|
||||
};
|
||||
|
||||
const int LibvlcVideoNPObject::methodCount = sizeof(LibvlcVideoNPObject::methodNames)/sizeof(NPUTF8 *);
|
||||
@ -2126,6 +2128,34 @@ RuntimeNPObject::InvokeResult LibvlcVideoNPObject::invoke(int index, const NPVar
|
||||
return INVOKERESULT_GENERIC_ERROR;
|
||||
}
|
||||
return INVOKERESULT_NO_SUCH_METHOD;
|
||||
case ID_video_toggleteletext:
|
||||
if( argCount == 0 )
|
||||
{
|
||||
libvlc_toggle_teletext(p_md, &ex);
|
||||
libvlc_media_instance_release(p_md);
|
||||
if( libvlc_exception_raised(&ex) )
|
||||
{
|
||||
NPN_SetException(this, libvlc_exception_get_message(&ex));
|
||||
libvlc_exception_clear(&ex);
|
||||
return INVOKERESULT_GENERIC_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
VOID_TO_NPVARIANT(result);
|
||||
return INVOKERESULT_NO_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* cannot get md, probably not playing */
|
||||
if( libvlc_exception_raised(&ex) )
|
||||
{
|
||||
NPN_SetException(this, libvlc_exception_get_message(&ex));
|
||||
libvlc_exception_clear(&ex);
|
||||
}
|
||||
return INVOKERESULT_GENERIC_ERROR;
|
||||
}
|
||||
return INVOKERESULT_NO_SUCH_METHOD;
|
||||
default:
|
||||
return INVOKERESULT_NO_SUCH_METHOD;
|
||||
}
|
||||
|
@ -527,6 +527,31 @@ void libvlc_video_set_teletext( libvlc_media_instance_t *p_mi, int i_page,
|
||||
vlc_object_release( p_vout );
|
||||
}
|
||||
|
||||
void libvlc_toggle_teletext( libvlc_media_instance_t *p_mi,
|
||||
libvlc_exception_t *p_e )
|
||||
{
|
||||
/* We only work on the first vout */
|
||||
vout_thread_t *p_vout = GetVout( p_mi, p_e );
|
||||
vlc_value_t val; int i_ret;
|
||||
|
||||
/* GetVout will raise the exception for us */
|
||||
if( !p_vout )
|
||||
return;
|
||||
|
||||
i_ret = var_Get( p_vout, "vbi-opaque", &val );
|
||||
if( i_ret )
|
||||
libvlc_exception_raise( p_e,
|
||||
"Unexpected error while looking up teletext value" );
|
||||
|
||||
val.b_bool = !val.b_bool;
|
||||
i_ret = var_Set( p_vout, "vbi-opaque", val );
|
||||
if( i_ret )
|
||||
libvlc_exception_raise( p_e,
|
||||
"Unexpected error while setting teletext value" );
|
||||
|
||||
vlc_object_release( p_vout );
|
||||
}
|
||||
|
||||
int libvlc_video_destroy( libvlc_media_instance_t *p_mi,
|
||||
libvlc_exception_t *p_e )
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user