From 8e6efd054ea95e82dae8e69ec3f6adc024523b67 Mon Sep 17 00:00:00 2001 From: JP Dinger Date: Tue, 19 Jan 2010 14:39:17 +0100 Subject: [PATCH] Update mozilla plugin and test page for new logo interface. --- projects/mozilla/control/npolibvlc.cpp | 237 ++++++++++++++++++++++++- projects/mozilla/control/npolibvlc.h | 26 ++- projects/mozilla/test.html | 26 ++- 3 files changed, 265 insertions(+), 24 deletions(-) diff --git a/projects/mozilla/control/npolibvlc.cpp b/projects/mozilla/control/npolibvlc.cpp index fd3970056c..8b840835fb 100644 --- a/projects/mozilla/control/npolibvlc.cpp +++ b/projects/mozilla/control/npolibvlc.cpp @@ -2,9 +2,10 @@ * npolibvlc.cpp: official Javascript APIs ***************************************************************************** * Copyright (C) 2002-2009 the VideoLAN team + * Copyright (C) 2010 M2X BV * * Authors: Damien Fouilleul - * JP Dinger + * JP Dinger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,9 +17,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #include "config.h" @@ -1266,7 +1267,8 @@ const NPUTF8 * const LibvlcVideoNPObject::propertyNames[] = "subtitle", "crop", "teletext", - "marquee" + "marquee", + "logo" }; enum LibvlcVideoNPObjectPropertyIds @@ -1278,7 +1280,8 @@ enum LibvlcVideoNPObjectPropertyIds ID_video_subtitle, ID_video_crop, ID_video_teletext, - ID_video_marquee + ID_video_marquee, + ID_video_logo }; COUNTNAMES(LibvlcVideoNPObject,propertyCount,propertyNames); @@ -1358,6 +1361,12 @@ LibvlcVideoNPObject::getProperty(int index, NPVariant &result) OBJECT_TO_NPVARIANT(NPN_RetainObject(marqueeObj), result); return INVOKERESULT_NO_ERROR; } + case ID_video_logo: + { + InstantObj( logoObj ); + OBJECT_TO_NPVARIANT(NPN_RetainObject(logoObj), result); + return INVOKERESULT_NO_ERROR; + } } } return INVOKERESULT_GENERIC_ERROR; @@ -1810,3 +1819,219 @@ LibvlcMarqueeNPObject::invoke(int index, const NPVariant *args, } return INVOKERESULT_GENERIC_ERROR; } + +const NPUTF8 * const LibvlcLogoNPObject::propertyNames[] = { + "delay", + "repeat", + "opacity", + "position", + "x", + "y", +}; +enum LibvlcLogoNPObjectPropertyIds { + ID_logo_delay, + ID_logo_repeat, + ID_logo_opacity, + ID_logo_position, + ID_logo_x, + ID_logo_y, +}; +COUNTNAMES(LibvlcLogoNPObject,propertyCount,propertyNames); +static const unsigned char logo_idx[] = { + libvlc_logo_delay, + libvlc_logo_repeat, + libvlc_logo_opacity, + 0, + libvlc_logo_x, + libvlc_logo_y, +}; + +struct posidx_s { const char *n; size_t i; }; +static const posidx_s posidx[] = { + { "center", 0 }, + { "left", 1 }, + { "right", 2 }, + { "top", 4 }, + { "bottom", 8 }, + { "top-left", 5 }, + { "top-right", 6 }, + { "bottom-left", 9 }, + { "bottom-right", 10 }, +}; +enum { num_posidx = sizeof(posidx)/sizeof(*posidx) }; + +static inline const char *logo_numtopos( size_t i ) +{ + for( const posidx_s *h=posidx; hi == i ) + return h->n; + return "undefined"; +} + +static inline bool logo_postonum( const char *n, size_t &i ) +{ + for( const posidx_s *h=posidx; hn ) ) + { i=h->i; return true; } + return false; +} + +RuntimeNPObject::InvokeResult +LibvlcLogoNPObject::getProperty(int index, NPVariant &result) +{ + if( !isPluginRunning() ) + return INVOKERESULT_GENERIC_ERROR; + + VlcPlugin* p_plugin = getPrivate(); + libvlc_exception_t ex; + libvlc_exception_init(&ex); + libvlc_media_player_t *p_md = p_plugin->getMD(&ex); + RETURN_ON_EXCEPTION(this,ex); + + switch( index ) + { + case ID_logo_delay: + case ID_logo_repeat: + case ID_logo_opacity: + case ID_logo_x: + case ID_logo_y: + + INT32_TO_NPVARIANT( + libvlc_video_get_logo_int(p_md, logo_idx[index], &ex), result); + + RETURN_ON_EXCEPTION(this,ex); + break; + + case ID_logo_position: + STRINGZ_TO_NPVARIANT( logo_numtopos( + libvlc_video_get_logo_int(p_md, libvlc_logo_position, &ex) ), + result ); + + RETURN_ON_EXCEPTION(this,ex); + break; + default: + return INVOKERESULT_GENERIC_ERROR; + } + return INVOKERESULT_NO_ERROR; +} + +RuntimeNPObject::InvokeResult +LibvlcLogoNPObject::setProperty(int index, const NPVariant &value) +{ + size_t i; + + if( !isPluginRunning() ) + return INVOKERESULT_GENERIC_ERROR; + + VlcPlugin* p_plugin = getPrivate(); + libvlc_exception_t ex; + libvlc_exception_init(&ex); + + libvlc_media_player_t *p_md = p_plugin->getMD(&ex); + RETURN_ON_EXCEPTION(this,ex); + + switch( index ) + { + case ID_logo_delay: + case ID_logo_repeat: + case ID_logo_opacity: + case ID_logo_x: + case ID_logo_y: + if( !NPVARIANT_IS_INT32(value) ) + return INVOKERESULT_INVALID_VALUE; + + libvlc_video_set_logo_int(p_md, logo_idx[index], + NPVARIANT_TO_INT32( value ), &ex); + + RETURN_ON_EXCEPTION(this,ex); + break; + + case ID_logo_position: + if( !NPVARIANT_IS_STRING(value) || + !logo_postonum( 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); + break; + default: + return INVOKERESULT_GENERIC_ERROR; + } + return INVOKERESULT_NO_ERROR; +} + + +const NPUTF8 * const LibvlcLogoNPObject::methodNames[] = { + "enable", + "disable", + "file", +}; +enum LibvlcLogoNPObjectMethodIds { + ID_logo_enable, + ID_logo_disable, + ID_logo_file, +}; +COUNTNAMES(LibvlcLogoNPObject,methodCount,methodNames); + +RuntimeNPObject::InvokeResult +LibvlcLogoNPObject::invoke(int index, const NPVariant *args, + uint32_t argCount, NPVariant &result) +{ + char *buf, *h; + size_t i, len; + + if( !isPluginRunning() ) + return INVOKERESULT_GENERIC_ERROR; + + libvlc_exception_t ex; + libvlc_exception_init(&ex); + libvlc_media_player_t *p_md = getPrivate()->getMD(&ex); + RETURN_ON_EXCEPTION(this,ex); + + switch( index ) + { + case ID_logo_enable: + case ID_logo_disable: + if( argCount != 0 ) + return INVOKERESULT_GENERIC_ERROR; + + libvlc_video_set_logo_int(p_md, libvlc_logo_enable, + index != ID_logo_disable, &ex); + RETURN_ON_EXCEPTION(this,ex); + VOID_TO_NPVARIANT(result); + break; + + case ID_logo_file: + if( argCount == 0 ) + return INVOKERESULT_GENERIC_ERROR; + + for( len=0,i=0;i; + + LibvlcLogoNPObject(NPP instance, const NPClass *aClass) : + RuntimeNPObject(instance, aClass) { } + virtual ~LibvlcLogoNPObject() { } + + static const int propertyCount; + static const NPUTF8 * const propertyNames[]; + + InvokeResult getProperty(int index, NPVariant &result); + InvokeResult setProperty(int index, const NPVariant &value); + + static const int methodCount; + static const NPUTF8 * const methodNames[]; + + InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result); +}; diff --git a/projects/mozilla/test.html b/projects/mozilla/test.html index 9edd87ed61..9c3c323575 100644 --- a/projects/mozilla/test.html +++ b/projects/mozilla/test.html @@ -235,14 +235,12 @@ Insert Slider widget @@ -786,27 +784,23 @@ function doMarqueeOption(option, value) function doLogoOption(option, value) { var vlc = getVLC("vlc"); - val = parseInt(value); if( vlc ) { if (option == 1) - vlc.video.logo.file(val); + vlc.video.logo.file(value); if (option == 2) - vlc.video.logo.transparency(val); + vlc.video.logo.position = value; + val = parseInt(value); if (option == 3) - vlc.video.logo.position(val); + vlc.video.logo.opacity = val; if (option == 4) - vlc.video.logo.repeat(val); + vlc.video.logo.repeat = val; if (option == 5) - vlc.video.logo.delay(val); + vlc.video.logo.delay = val; if (option == 6) - vlc.video.logo.x(val); + vlc.video.logo.x = val; if (option == 7) - vlc.video.logo.y(val); - if (option == 8) - vlc.video.logo.width(val); - if (option == 9) - vlc.video.logo.height(val); + vlc.video.logo.y = val; } } -- 2.39.2