#include <string.h>
#include <stdlib.h>
-/* Mozilla stuff */
-#ifdef HAVE_MOZILLA_CONFIG_H
-# include <mozilla-config.h>
-#endif
-
#include "vlcplugin.h"
#include "npolibvlc.h"
** Local helper macros and function
*/
#define COUNTNAMES(a,b,c) const int a::b = sizeof(a::c)/sizeof(NPUTF8 *)
-#define RETURN_ON_EXCEPTION(this,ex) \
- do { if( libvlc_exception_raised(&ex) ) \
- { \
- NPN_SetException(this, libvlc_errmsg()); \
- libvlc_exception_clear(&ex); \
- return INVOKERESULT_GENERIC_ERROR; \
- } } while(false)
+#define RETURN_ON_ERROR \
+ do { \
+ NPN_SetException(this, libvlc_errmsg()); \
+ return INVOKERESULT_GENERIC_ERROR; \
+ }while(0)
+
+#define ERROR_EVENT_NOT_FOUND "ERROR: One or more events could not be found."
+#define ERROR_API_VERSION "ERROR: NPAPI version not high enough. (Gecko >= 1.9 needed)"
+
+// Make a copy of an NPVariant.
+NPVariant copyNPVariant(const NPVariant& original)
+{
+ NPVariant res;
+
+ if (NPVARIANT_IS_STRING(original))
+ STRINGZ_TO_NPVARIANT(strdup(NPVARIANT_TO_STRING(original).UTF8Characters), res);
+ else if (NPVARIANT_IS_INT32(original))
+ INT32_TO_NPVARIANT(NPVARIANT_TO_INT32(original), res);
+ else if (NPVARIANT_IS_DOUBLE(original))
+ DOUBLE_TO_NPVARIANT(NPVARIANT_TO_DOUBLE(original), res);
+ else if (NPVARIANT_IS_OBJECT(original))
+ {
+ NPObject *obj = NPVARIANT_TO_OBJECT(original);
+ NPN_RetainObject(obj);
+ OBJECT_TO_NPVARIANT(obj, res);
+ }
+ else if (NPVARIANT_IS_BOOLEAN(original))
+ BOOLEAN_TO_NPVARIANT(NPVARIANT_TO_BOOLEAN(original), res);
+
+ return res;
+}
/*
** implementation of libvlc root object
if( audioObj ) NPN_ReleaseObject(audioObj);
if( inputObj ) NPN_ReleaseObject(inputObj);
if( playlistObj ) NPN_ReleaseObject(playlistObj);
+ if( subtitleObj ) NPN_ReleaseObject(subtitleObj);
if( videoObj ) NPN_ReleaseObject(videoObj);
}
}
const NPUTF8 * const LibvlcRootNPObject::methodNames[] =
{
"versionInfo",
+ "addEventListener",
+ "removeEventListener",
};
COUNTNAMES(LibvlcRootNPObject,methodCount,methodNames);
enum LibvlcRootNPObjectMethodIds
{
ID_root_versionInfo,
+ ID_root_addeventlistener,
+ ID_root_removeeventlistener,
};
RuntimeNPObject::InvokeResult LibvlcRootNPObject::invoke(int index,
const NPVariant *args, uint32_t argCount, NPVariant &result)
{
/* is plugin still running */
- if( isPluginRunning() )
- {
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
+ if( !isPluginRunning() )
+ return INVOKERESULT_GENERIC_ERROR;
- switch( index )
+ switch( index )
+ {
+ case ID_root_versionInfo:
+ if( 0 != argCount )
+ return INVOKERESULT_NO_SUCH_METHOD;
+ return invokeResultString(libvlc_get_version(),result);
+
+ case ID_root_addeventlistener:
+ case ID_root_removeeventlistener:
+ if( (3 != argCount) ||
+ !NPVARIANT_IS_STRING(args[0]) ||
+ !NPVARIANT_IS_OBJECT(args[1]) ||
+ !NPVARIANT_IS_BOOLEAN(args[2]) )
+ break;
+
+ if( !VlcPlugin::canUseEventListener() )
{
- case ID_root_versionInfo:
- if( 0 != argCount )
- return INVOKERESULT_NO_SUCH_METHOD;
- return invokeResultString(libvlc_get_version(),result);
- default:
- ;
+ NPN_SetException(this, ERROR_API_VERSION);
+ return INVOKERESULT_GENERIC_ERROR;
}
+
+ NPObject *listener = NPVARIANT_TO_OBJECT(args[1]);
+ VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
+
+ bool b;
+ if(ID_root_removeeventlistener!=index)
+ b = p_plugin->events.insert(NPVARIANT_TO_STRING(args[0]),
+ listener, NPVARIANT_TO_BOOLEAN(args[2]));
+ else
+ b = p_plugin->events.remove(NPVARIANT_TO_STRING(args[0]),
+ listener, NPVARIANT_TO_BOOLEAN(args[2]));
+
+ VOID_TO_NPVARIANT(result);
+
+ return b ? INVOKERESULT_NO_ERROR : INVOKERESULT_GENERIC_ERROR;
}
- return INVOKERESULT_GENERIC_ERROR;
+ return INVOKERESULT_NO_SUCH_METHOD;
}
/*
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
+
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
case ID_audio_mute:
{
- bool muted = libvlc_audio_get_mute(p_plugin->getVLC());
+ bool muted = libvlc_audio_get_mute(p_md);
BOOLEAN_TO_NPVARIANT(muted, result);
return INVOKERESULT_NO_ERROR;
}
case ID_audio_volume:
{
- int volume = libvlc_audio_get_volume(p_plugin->getVLC());
+ int volume = libvlc_audio_get_volume(p_md);
INT32_TO_NPVARIANT(volume, result);
return INVOKERESULT_NO_ERROR;
}
case ID_audio_track:
{
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
- int track = libvlc_audio_get_track(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int track = libvlc_audio_get_track(p_md);
INT32_TO_NPVARIANT(track, result);
return INVOKERESULT_NO_ERROR;
}
case ID_audio_count:
{
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
// get the number of audio track available
- int i_track = libvlc_audio_get_track_count(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int i_track = libvlc_audio_get_track_count(p_md);
// return it
INT32_TO_NPVARIANT(i_track, result);
return INVOKERESULT_NO_ERROR;
}
case ID_audio_channel:
{
- int channel = libvlc_audio_get_channel(p_plugin->getVLC(), &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int channel = libvlc_audio_get_channel(p_md);
INT32_TO_NPVARIANT(channel, result);
return INVOKERESULT_NO_ERROR;
}
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
+
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
case ID_audio_mute:
if( NPVARIANT_IS_BOOLEAN(value) )
{
- libvlc_audio_set_mute(p_plugin->getVLC(),
+ libvlc_audio_set_mute(p_md,
NPVARIANT_TO_BOOLEAN(value));
return INVOKERESULT_NO_ERROR;
}
case ID_audio_volume:
if( isNumberValue(value) )
{
- libvlc_audio_set_volume(p_plugin->getVLC(),
- numberValue(value), &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_audio_set_volume(p_md, numberValue(value));
return INVOKERESULT_NO_ERROR;
}
return INVOKERESULT_INVALID_VALUE;
case ID_audio_track:
if( isNumberValue(value) )
{
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
- libvlc_audio_set_track(p_md, numberValue(value), &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_audio_set_track(p_md, numberValue(value));
return INVOKERESULT_NO_ERROR;
}
return INVOKERESULT_INVALID_VALUE;
case ID_audio_channel:
if( isNumberValue(value) )
{
- libvlc_audio_set_channel(p_plugin->getVLC(),
- numberValue(value), &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_audio_set_channel(p_md, numberValue(value));
return INVOKERESULT_NO_ERROR;
}
return INVOKERESULT_INVALID_VALUE;
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
case ID_audio_togglemute:
if( argCount == 0 )
{
- libvlc_audio_toggle_mute(p_plugin->getVLC());
+ libvlc_audio_toggle_mute(p_md);
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
int i_trackID, i_limit, i;
libvlc_track_description_t *p_trackDesc;
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
-
/* get tracks description */
- p_trackDesc = libvlc_audio_get_track_description(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_trackDesc = libvlc_audio_get_track_description(p_md);
if( !p_trackDesc )
return INVOKERESULT_GENERIC_ERROR;
/* get the number of track available */
- i_limit = libvlc_audio_get_track_count(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ i_limit = libvlc_audio_get_track_count(p_md);
/* check if a number is given by the user
* and get the track number */
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- if( libvlc_exception_raised(&ex) )
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
{
if( index != ID_input_state )
- {
- NPN_SetException(this, libvlc_errmsg());
- libvlc_exception_clear(&ex);
- return INVOKERESULT_GENERIC_ERROR;
- }
+ RETURN_ON_ERROR;
else
{
/* for input state, return CLOSED rather than an exception */
INT32_TO_NPVARIANT(0, result);
- libvlc_exception_clear(&ex);
return INVOKERESULT_NO_ERROR;
}
}
{
case ID_input_length:
{
- double val = (double)libvlc_media_player_get_length(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ double val = (double)libvlc_media_player_get_length(p_md);
DOUBLE_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
case ID_input_position:
{
- double val = libvlc_media_player_get_position(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ double val = libvlc_media_player_get_position(p_md);
DOUBLE_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
case ID_input_time:
{
- double val = (double)libvlc_media_player_get_time(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ double val = (double)libvlc_media_player_get_time(p_md);
DOUBLE_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
case ID_input_state:
{
int val = libvlc_media_player_get_state(p_md);
- RETURN_ON_EXCEPTION(this,ex);
INT32_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
case ID_input_rate:
{
- float val = libvlc_media_player_get_rate(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ float val = libvlc_media_player_get_rate(p_md);
DOUBLE_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
case ID_input_fps:
{
- double val = libvlc_media_player_get_fps(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ double val = libvlc_media_player_get_fps(p_md);
DOUBLE_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
case ID_input_hasvout:
{
- bool val = p_plugin->player_has_vout(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ bool val = p_plugin->player_has_vout();
BOOLEAN_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
}
float val = (float)NPVARIANT_TO_DOUBLE(value);
- libvlc_media_player_set_position(p_md, val, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_set_position(p_md, val);
return INVOKERESULT_NO_ERROR;
}
case ID_input_time:
return INVOKERESULT_INVALID_VALUE;
}
- libvlc_media_player_set_time(p_md, val, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_set_time(p_md, val);
return INVOKERESULT_NO_ERROR;
}
case ID_input_rate:
return INVOKERESULT_INVALID_VALUE;
}
- libvlc_media_player_set_rate(p_md, val, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_set_rate(p_md, val);
return INVOKERESULT_NO_ERROR;
}
default:
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
switch( index )
{
case ID_playlistitems_clear:
if( argCount == 0 )
{
- p_plugin->playlist_clear(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_plugin->playlist_clear();
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
case ID_playlistitems_remove:
if( (argCount == 1) && isNumberValue(args[0]) )
{
- p_plugin->playlist_delete_item(numberValue(args[0]),&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ if( !p_plugin->playlist_delete_item(numberValue(args[0])) )
+ return INVOKERESULT_GENERIC_ERROR;
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
switch( index )
{
}
int item = p_plugin->playlist_add_extended_untrusted(url, name,
- i_options, const_cast<const char **>(ppsz_options), &ex);
+ i_options, const_cast<const char **>(ppsz_options));
free(url);
free(name);
+ if( item == -1 )
+ RETURN_ON_ERROR;
+
for( int i=0; i< i_options; ++i )
{
free(ppsz_options[i]);
}
free(ppsz_options);
- RETURN_ON_EXCEPTION(this,ex);
INT32_TO_NPVARIANT(item, result);
return INVOKERESULT_NO_ERROR;
}
case ID_playlist_play:
if( argCount == 0 )
{
- p_plugin->playlist_play(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_plugin->playlist_play();
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
case ID_playlist_playItem:
if( (argCount == 1) && isNumberValue(args[0]) )
{
- p_plugin->playlist_play_item(numberValue(args[0]),&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_plugin->playlist_play_item(numberValue(args[0]));
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
case ID_playlist_togglepause:
if( argCount == 0 )
{
- p_plugin->playlist_pause(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_plugin->playlist_pause();
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
case ID_playlist_next:
if( argCount == 0 )
{
- p_plugin->playlist_next(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_plugin->playlist_next();
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
case ID_playlist_prev:
if( argCount == 0 )
{
- p_plugin->playlist_prev(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_plugin->playlist_prev();
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
case ID_playlist_clear: /* deprecated */
if( argCount == 0 )
{
- p_plugin->playlist_clear(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_plugin->playlist_clear();
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
case ID_playlist_removeitem: /* deprecated */
if( (argCount == 1) && isNumberValue(args[0]) )
{
- p_plugin->playlist_delete_item(numberValue(args[0]), &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ if( !p_plugin->playlist_delete_item(numberValue(args[0])) )
+ return INVOKERESULT_GENERIC_ERROR;
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
void LibvlcPlaylistNPObject::parseOptions(const NPString &nps,
int *i_options, char*** ppsz_options)
{
- if( nps.utf8length )
+ if( nps.UTF8Length )
{
char *s = stringValue(nps);
char *val = s;
{
int nOptions = 0;
- char *end = val + nps.utf8length;
+ char *end = val + nps.UTF8Length;
while( val < end )
{
// skip leading blanks
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
case ID_subtitle_track:
{
/* get the current subtitle ID */
- int i_spu = libvlc_video_get_spu(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int i_spu = libvlc_video_get_spu(p_md);
/* return it */
INT32_TO_NPVARIANT(i_spu, result);
return INVOKERESULT_NO_ERROR;
case ID_subtitle_count:
{
/* get the number of subtitles available */
- int i_spu = libvlc_video_get_spu_count(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int i_spu = libvlc_video_get_spu_count(p_md);
/* return it */
INT32_TO_NPVARIANT(i_spu, result);
return INVOKERESULT_NO_ERROR;
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
if( isNumberValue(value) )
{
/* set the new subtitle track to show */
- libvlc_video_set_spu(p_md, numberValue(value), &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_video_set_spu(p_md, numberValue(value));
return INVOKERESULT_NO_ERROR;
}
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
libvlc_track_description_t *p_spuDesc;
/* get subtitles description */
- p_spuDesc = libvlc_video_get_spu_description(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_spuDesc = libvlc_video_get_spu_description(p_md);
if( !p_spuDesc )
return INVOKERESULT_GENERIC_ERROR;
/* get the number of subtitle available */
- i_limit = libvlc_video_get_spu_count(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ i_limit = libvlc_video_get_spu_count(p_md);
/* check if a number is given by the user
* and get the subtitle number */
** implementation of libvlc video object
*/
+LibvlcVideoNPObject::~LibvlcVideoNPObject()
+{
+ if( isValid() )
+ {
+ if( marqueeObj ) NPN_ReleaseObject(marqueeObj);
+ if( logoObj ) NPN_ReleaseObject(logoObj);
+ if( deintObj ) NPN_ReleaseObject(deintObj);
+ }
+}
+
const NPUTF8 * const LibvlcVideoNPObject::propertyNames[] =
{
"fullscreen",
"crop",
"teletext",
"marquee",
- "logo"
+ "logo",
+ "deinterlace",
};
enum LibvlcVideoNPObjectPropertyIds
ID_video_crop,
ID_video_teletext,
ID_video_marquee,
- ID_video_logo
+ ID_video_logo,
+ ID_video_deinterlace,
};
COUNTNAMES(LibvlcVideoNPObject,propertyCount,propertyNames);
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
case ID_video_fullscreen:
{
- int val = p_plugin->get_fullscreen(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int val = p_plugin->get_fullscreen();
BOOLEAN_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
case ID_video_height:
{
- int val = libvlc_video_get_height(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int val = libvlc_video_get_height(p_md);
INT32_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
case ID_video_width:
{
- int val = libvlc_video_get_width(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int val = libvlc_video_get_width(p_md);
INT32_TO_NPVARIANT(val, result);
return INVOKERESULT_NO_ERROR;
}
case ID_video_aspectratio:
{
- NPUTF8 *psz_aspect = libvlc_video_get_aspect_ratio(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ NPUTF8 *psz_aspect = libvlc_video_get_aspect_ratio(p_md);
if( !psz_aspect )
return INVOKERESULT_GENERIC_ERROR;
}
case ID_video_subtitle:
{
- int i_spu = libvlc_video_get_spu(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int i_spu = libvlc_video_get_spu(p_md);
INT32_TO_NPVARIANT(i_spu, result);
return INVOKERESULT_NO_ERROR;
}
case ID_video_crop:
{
- NPUTF8 *psz_geometry = libvlc_video_get_crop_geometry(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ NPUTF8 *psz_geometry = libvlc_video_get_crop_geometry(p_md);
if( !psz_geometry )
return INVOKERESULT_GENERIC_ERROR;
}
case ID_video_teletext:
{
-/* int i_page = libvlc_video_get_teletext(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ int i_page = libvlc_video_get_teletext(p_md);
+ if( i_page < 0 )
+ return INVOKERESULT_GENERIC_ERROR;
INT32_TO_NPVARIANT(i_page, result);
return INVOKERESULT_NO_ERROR;
-*/
- return INVOKERESULT_NO_SUCH_METHOD;
}
case ID_video_marquee:
{
OBJECT_TO_NPVARIANT(NPN_RetainObject(logoObj), result);
return INVOKERESULT_NO_ERROR;
}
+ case ID_video_deinterlace:
+ {
+ InstantObj<LibvlcDeinterlaceNPObject>( deintObj );
+ OBJECT_TO_NPVARIANT(NPN_RetainObject(deintObj), result);
+ return INVOKERESULT_NO_ERROR;
+ }
}
}
return INVOKERESULT_GENERIC_ERROR;
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
}
int val = NPVARIANT_TO_BOOLEAN(value);
- p_plugin->set_fullscreen(val, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_plugin->set_fullscreen(val);
return INVOKERESULT_NO_ERROR;
}
case ID_video_aspectratio:
return INVOKERESULT_GENERIC_ERROR;
}
- libvlc_video_set_aspect_ratio(p_md, psz_aspect, &ex);
+ libvlc_video_set_aspect_ratio(p_md, psz_aspect);
free(psz_aspect);
- RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
{
if( isNumberValue(value) )
{
- libvlc_video_set_spu(p_md, numberValue(value), &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_video_set_spu(p_md, numberValue(value));
return INVOKERESULT_NO_ERROR;
}
return INVOKERESULT_GENERIC_ERROR;
}
- libvlc_video_set_crop_geometry(p_md, psz_geometry, &ex);
+ libvlc_video_set_crop_geometry(p_md, psz_geometry);
free(psz_geometry);
- RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
{
if( isNumberValue(value) )
{
-/*
- libvlc_video_set_teletext(p_md, numberValue(value), &ex);
- RETURN_ON_EXCEPTION(this,ex);
-
+ libvlc_video_set_teletext(p_md, numberValue(value));
return INVOKERESULT_NO_ERROR;
-*/
- return INVOKERESULT_NO_SUCH_METHOD;
}
return INVOKERESULT_INVALID_VALUE;
}
{
"toggleFullscreen",
"toggleTeletext",
- "deinterlaceEnable",
- "deinterlaceDisable"
};
COUNTNAMES(LibvlcVideoNPObject,methodCount,methodNames);
{
ID_video_togglefullscreen,
ID_video_toggleteletext,
- ID_video_deinterlaceenable,
- ID_video_deinterlacedisable
};
RuntimeNPObject::InvokeResult
if( isPluginRunning() )
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
{
if( argCount == 0 )
{
- p_plugin->toggle_fullscreen(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ p_plugin->toggle_fullscreen();
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
{
if( argCount == 0 )
{
- libvlc_toggle_teletext(p_md, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_toggle_teletext(p_md);
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
- case ID_video_deinterlacedisable:
- {
- libvlc_video_set_deinterlace(p_md, 0, "", &ex);
- RETURN_ON_EXCEPTION(this,ex);
- return INVOKERESULT_NO_ERROR;
- }
- case ID_video_deinterlaceenable:
- {
- if(argCount == 1)
- {
- if( NPVARIANT_IS_STRING( args[0] ) )
- {
- /* get deinterlace mode from the user */
- char *psz_mode = stringValue( NPVARIANT_TO_STRING( args[0] ) );
- /* enable deinterlace filter if possible */
- libvlc_video_set_deinterlace(p_md, 1, psz_mode, &ex);
- free(psz_mode);
- RETURN_ON_EXCEPTION(this,ex);
- return INVOKERESULT_NO_ERROR;
- }
- else
- {
- return INVOKERESULT_INVALID_VALUE;
- }
- }
- }
default:
return INVOKERESULT_NO_SUCH_METHOD;
}
return INVOKERESULT_GENERIC_ERROR;
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
case ID_marquee_x:
case ID_marquee_y:
INT32_TO_NPVARIANT(
- libvlc_video_get_marquee_int(p_md, marquee_idx[index], &ex),
+ libvlc_video_get_marquee_int(p_md, marquee_idx[index]),
result );
- RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
case ID_marquee_position:
STRINGZ_TO_NPVARIANT( position_bynumber(
- libvlc_video_get_marquee_int(p_md, libvlc_marquee_Position, &ex) ),
+ libvlc_video_get_marquee_int(p_md, libvlc_marquee_Position) ),
result );
- RETURN_ON_EXCEPTION(this,ex);
break;
case ID_marquee_text:
- psz = libvlc_video_get_marquee_string(p_md, libvlc_marquee_Text, &ex);
+ psz = libvlc_video_get_marquee_string(p_md, libvlc_marquee_Text);
if( psz )
{
STRINGZ_TO_NPVARIANT(psz, result);
return INVOKERESULT_GENERIC_ERROR;
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
if( NPVARIANT_IS_INT32( value ) )
{
libvlc_video_set_marquee_int(p_md, marquee_idx[index],
- NPVARIANT_TO_INT32( value ), &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ NPVARIANT_TO_INT32( value ));
return INVOKERESULT_NO_ERROR;
}
break;
case ID_marquee_position:
if( !NPVARIANT_IS_STRING(value) ||
- !position_byname( NPVARIANT_TO_STRING(value).utf8characters, i ) )
+ !position_byname( NPVARIANT_TO_STRING(value).UTF8Characters, i ) )
return INVOKERESULT_INVALID_VALUE;
- libvlc_video_set_marquee_int(p_md, libvlc_marquee_Position, i, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_video_set_marquee_int(p_md, libvlc_marquee_Position, i);
return INVOKERESULT_NO_ERROR;
case ID_marquee_text:
{
char *psz_text = stringValue( NPVARIANT_TO_STRING( value ) );
libvlc_video_set_marquee_string(p_md, libvlc_marquee_Text,
- psz_text, &ex);
+ psz_text);
free(psz_text);
- RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
break;
return INVOKERESULT_GENERIC_ERROR;
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
case ID_marquee_enable:
case ID_marquee_disable:
libvlc_video_set_marquee_int(p_md, libvlc_marquee_Enable,
- index!=ID_marquee_disable, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ index!=ID_marquee_disable);
VOID_TO_NPVARIANT(result);
return INVOKERESULT_NO_ERROR;
}
return INVOKERESULT_GENERIC_ERROR;
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
case ID_logo_y:
INT32_TO_NPVARIANT(
- libvlc_video_get_logo_int(p_md, logo_idx[index], &ex), result);
-
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_video_get_logo_int(p_md, logo_idx[index]), result);
break;
case ID_logo_position:
STRINGZ_TO_NPVARIANT( position_bynumber(
- libvlc_video_get_logo_int(p_md, libvlc_logo_position, &ex) ),
+ libvlc_video_get_logo_int(p_md, libvlc_logo_position) ),
result );
-
- RETURN_ON_EXCEPTION(this,ex);
break;
default:
return INVOKERESULT_GENERIC_ERROR;
return INVOKERESULT_GENERIC_ERROR;
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = p_plugin->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
return INVOKERESULT_INVALID_VALUE;
libvlc_video_set_logo_int(p_md, logo_idx[index],
- NPVARIANT_TO_INT32( value ), &ex);
-
- RETURN_ON_EXCEPTION(this,ex);
+ NPVARIANT_TO_INT32( value ));
break;
case ID_logo_position:
if( !NPVARIANT_IS_STRING(value) ||
- !position_byname( NPVARIANT_TO_STRING(value).utf8characters, i ) )
+ !position_byname( NPVARIANT_TO_STRING(value).UTF8Characters, i ) )
return INVOKERESULT_INVALID_VALUE;
- libvlc_video_set_logo_int(p_md, libvlc_logo_position, i, &ex);
-
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_video_set_logo_int(p_md, libvlc_logo_position, i);
break;
default:
return INVOKERESULT_GENERIC_ERROR;
if( !isPluginRunning() )
return INVOKERESULT_GENERIC_ERROR;
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
- libvlc_media_player_t *p_md = getPrivate<VlcPlugin>()->getMD(&ex);
- RETURN_ON_EXCEPTION(this,ex);
+ libvlc_media_player_t *p_md = getPrivate<VlcPlugin>()->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
switch( index )
{
return INVOKERESULT_GENERIC_ERROR;
libvlc_video_set_logo_int(p_md, libvlc_logo_enable,
- index != ID_logo_disable, &ex);
- RETURN_ON_EXCEPTION(this,ex);
+ index != ID_logo_disable);
VOID_TO_NPVARIANT(result);
break;
{
if( !NPVARIANT_IS_STRING(args[i]) )
return INVOKERESULT_INVALID_VALUE;
- len+=NPVARIANT_TO_STRING(args[i]).utf8length+1;
+ len+=NPVARIANT_TO_STRING(args[i]).UTF8Length+1;
}
buf = (char *)malloc( len+1 );
for( h=buf,i=0;i<argCount;++i )
{
if(i) *h++=';';
- len=NPVARIANT_TO_STRING(args[i]).utf8length;
- memcpy(h,NPVARIANT_TO_STRING(args[i]).utf8characters,len);
+ len=NPVARIANT_TO_STRING(args[i]).UTF8Length;
+ memcpy(h,NPVARIANT_TO_STRING(args[i]).UTF8Characters,len);
h+=len;
}
*h='\0';
- libvlc_video_set_logo_string(p_md, libvlc_logo_file, buf, &ex);
+ libvlc_video_set_logo_string(p_md, libvlc_logo_file, buf);
free( buf );
- RETURN_ON_EXCEPTION(this,ex);
VOID_TO_NPVARIANT(result);
break;
+ default:
+ return INVOKERESULT_NO_SUCH_METHOD;
+ }
+ return INVOKERESULT_NO_ERROR;
+}
+
+
+const NPUTF8 * const LibvlcDeinterlaceNPObject::propertyNames[] = {
+};
+enum LibvlcDeinterlaceNPObjectPropertyIds {
+};
+COUNTNAMES(LibvlcDeinterlaceNPObject,propertyCount,propertyNames);
+
+RuntimeNPObject::InvokeResult
+LibvlcDeinterlaceNPObject::getProperty(int index, NPVariant &result)
+{
+ return INVOKERESULT_GENERIC_ERROR;
+}
+
+RuntimeNPObject::InvokeResult
+LibvlcDeinterlaceNPObject::setProperty(int index, const NPVariant &value)
+{
+ return INVOKERESULT_GENERIC_ERROR;
+}
+
+
+const NPUTF8 * const LibvlcDeinterlaceNPObject::methodNames[] = {
+ "enable",
+ "disable",
+};
+enum LibvlcDeinterlaceNPObjectMethodIds {
+ ID_deint_enable,
+ ID_deint_disable,
+};
+COUNTNAMES(LibvlcDeinterlaceNPObject,methodCount,methodNames);
+
+RuntimeNPObject::InvokeResult
+LibvlcDeinterlaceNPObject::invoke(int index, const NPVariant *args,
+ uint32_t argCount, NPVariant &result)
+{
+ char *psz;
+
+ if( !isPluginRunning() )
+ return INVOKERESULT_GENERIC_ERROR;
+
+ libvlc_media_player_t *p_md = getPrivate<VlcPlugin>()->getMD();
+ if( !p_md )
+ RETURN_ON_ERROR;
+
+ switch( index )
+ {
+ case ID_deint_disable:
+ libvlc_video_set_deinterlace(p_md, NULL);
+ break;
+
+ case ID_deint_enable:
+ if( argCount != 1 || !NPVARIANT_IS_STRING( args[0] ) )
+ return INVOKERESULT_INVALID_VALUE;
+
+ psz = stringValue( NPVARIANT_TO_STRING( args[0] ) );
+ libvlc_video_set_deinterlace(p_md, psz);
+ free(psz);
+ break;
+
+ default:
+ return INVOKERESULT_NO_SUCH_METHOD;
}
return INVOKERESULT_NO_ERROR;
}