1
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:
Jean-Paul Saman 2007-12-18 09:04:24 +00:00
parent f333d57a3e
commit 72bef4462e
6 changed files with 92 additions and 0 deletions

View File

@ -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();
};
[

View File

@ -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) :

View File

@ -530,6 +530,7 @@ public:
STDMETHODIMP put_teletext(long);
STDMETHODIMP takeSnapshot(LPPICTUREDISP*);
STDMETHODIMP toggleFullscreen();
STDMETHODIMP toggleTeletext();
protected:
HRESULT loadTypeInfo();

View File

@ -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

View File

@ -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;
}

View File

@ -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 )
{