\r
[helpstring("take video snapshot and save it into picture object.")]\r
HRESULT takeSnapshot([out, retval] IPictureDisp** picture);\r
+\r
+ [helpstring("toggle teletext transparent state.")]\r
+ HRESULT toggleTeletext();\r
};\r
\r
[\r
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) :
STDMETHODIMP put_teletext(long);
STDMETHODIMP takeSnapshot(LPPICTUREDISP*);
STDMETHODIMP toggleFullscreen();
+ STDMETHODIMP toggleTeletext();
protected:
HRESULT loadTypeInfo();
*/
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
const NPUTF8 * const LibvlcVideoNPObject::methodNames[] =\r
{\r
"toggleFullscreen",\r
+ "toggleTeletext"\r
};\r
\r
enum LibvlcVideoNPObjectMethodIds\r
{\r
ID_video_togglefullscreen,\r
+ ID_video_toggleteletext\r
};\r
\r
const int LibvlcVideoNPObject::methodCount = sizeof(LibvlcVideoNPObject::methodNames)/sizeof(NPUTF8 *);\r
return INVOKERESULT_GENERIC_ERROR;\r
}\r
return INVOKERESULT_NO_SUCH_METHOD;\r
+ case ID_video_toggleteletext:\r
+ if( argCount == 0 )\r
+ {\r
+ libvlc_toggle_teletext(p_md, &ex);\r
+ libvlc_media_instance_release(p_md);\r
+ if( libvlc_exception_raised(&ex) )\r
+ {\r
+ NPN_SetException(this, libvlc_exception_get_message(&ex));\r
+ libvlc_exception_clear(&ex);\r
+ return INVOKERESULT_GENERIC_ERROR;\r
+ }\r
+ else\r
+ {\r
+ VOID_TO_NPVARIANT(result);\r
+ return INVOKERESULT_NO_ERROR;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ /* cannot get md, probably not playing */\r
+ if( libvlc_exception_raised(&ex) )\r
+ {\r
+ NPN_SetException(this, libvlc_exception_get_message(&ex));\r
+ libvlc_exception_clear(&ex);\r
+ }\r
+ return INVOKERESULT_GENERIC_ERROR;\r
+ }\r
+ return INVOKERESULT_NO_SUCH_METHOD;\r
default:\r
return INVOKERESULT_NO_SUCH_METHOD;\r
}\r
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 )
{