1 /*****************************************************************************
\r
2 * vlc.cpp: support for NPRuntime API for Netscape Script-able plugins
\r
3 * FYI: http://www.mozilla.org/projects/plugins/npruntime.html
\r
4 *****************************************************************************
\r
5 * Copyright (C) 2005 the VideoLAN team
\r
7 * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
\r
9 * This program is free software; you can redistribute it and/or modify
\r
10 * it under the terms of the GNU General Public License as published by
\r
11 * the Free Software Foundation; either version 2 of the License, or
\r
12 * (at your option) any later version.
\r
14 * This program is distributed in the hope that it will be useful,
\r
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
17 * GNU General Public License for more details.
\r
19 * You should have received a copy of the GNU General Public License
\r
20 * along with this program; if not, write to the Free Software
\r
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
\r
22 *****************************************************************************/
\r
31 #ifdef HAVE_MOZILLA_CONFIG_H
\r
32 # include <mozilla-config.h>
\r
35 #include "npolibvlc.h"
\r
36 #include "vlcplugin.h"
\r
39 ** implementation of libvlc root object
\r
42 LibvlcRootNPObject::LibvlcRootNPObject(NPP instance, const NPClass *aClass) :
\r
43 RuntimeNPObject(instance, aClass)
\r
45 static NPClass *audioClass = new RuntimeNPClass<LibvlcAudioNPObject>();
\r
46 static NPClass *inputClass = new RuntimeNPClass<LibvlcInputNPObject>();
\r
47 static NPClass *playlistClass = new RuntimeNPClass<LibvlcPlaylistNPObject>();
\r
48 static NPClass *videoClass = new RuntimeNPClass<LibvlcVideoNPObject>();
\r
50 audioObj = NPN_CreateObject(instance, audioClass);
\r
51 inputObj = NPN_CreateObject(instance, inputClass);
\r
52 playlistObj = NPN_CreateObject(instance, playlistClass);
\r
53 videoObj = NPN_CreateObject(instance, videoClass);
\r
56 LibvlcRootNPObject::~LibvlcRootNPObject()
\r
58 NPN_ReleaseObject(audioObj);
\r
59 NPN_ReleaseObject(inputObj);
\r
60 NPN_ReleaseObject(playlistObj);
\r
61 NPN_ReleaseObject(videoObj);
\r
64 const NPUTF8 * const LibvlcRootNPObject::propertyNames[] =
\r
72 enum LibvlcRootNPObjectPropertyIds
\r
80 const int LibvlcRootNPObject::propertyCount = sizeof(LibvlcRootNPObject::propertyNames)/sizeof(NPUTF8 *);
\r
82 RuntimeNPObject::InvokeResult LibvlcRootNPObject::getProperty(int index, NPVariant *result)
\r
87 OBJECT_TO_NPVARIANT(NPN_RetainObject(audioObj), *result);
\r
88 return INVOKERESULT_NO_ERROR;
\r
90 OBJECT_TO_NPVARIANT(NPN_RetainObject(inputObj), *result);
\r
91 return INVOKERESULT_NO_ERROR;
\r
93 OBJECT_TO_NPVARIANT(NPN_RetainObject(playlistObj), *result);
\r
94 return INVOKERESULT_NO_ERROR;
\r
96 OBJECT_TO_NPVARIANT(NPN_RetainObject(videoObj), *result);
\r
97 return INVOKERESULT_NO_ERROR;
\r
99 return INVOKERESULT_GENERIC_ERROR;
\r
102 const NPUTF8 * const LibvlcRootNPObject::methodNames[] =
\r
107 const int LibvlcRootNPObject::methodCount = sizeof(LibvlcRootNPObject::methodNames)/sizeof(NPUTF8 *);
\r
110 ** implementation of libvlc audio object
\r
113 const NPUTF8 * const LibvlcAudioNPObject::propertyNames[] =
\r
119 enum LibvlcAudioNPObjectPropertyIds
\r
125 const int LibvlcAudioNPObject::propertyCount = sizeof(LibvlcAudioNPObject::propertyNames)/sizeof(NPUTF8 *);
\r
127 RuntimeNPObject::InvokeResult LibvlcAudioNPObject::getProperty(int index, NPVariant *result)
\r
129 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
132 libvlc_exception_t ex;
\r
133 libvlc_exception_init(&ex);
\r
139 vlc_bool_t muted = libvlc_audio_get_mute(p_plugin->getVLC(), &ex);
\r
140 if( libvlc_exception_raised(&ex) )
\r
142 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
143 libvlc_exception_clear(&ex);
\r
144 return INVOKERESULT_GENERIC_ERROR;
\r
146 BOOLEAN_TO_NPVARIANT(muted, *result);
\r
147 return INVOKERESULT_NO_ERROR;
\r
151 int volume = libvlc_audio_get_volume(p_plugin->getVLC(), &ex);
\r
152 if( libvlc_exception_raised(&ex) )
\r
154 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
155 libvlc_exception_clear(&ex);
\r
156 return INVOKERESULT_GENERIC_ERROR;
\r
158 INT32_TO_NPVARIANT(volume, *result);
\r
159 return INVOKERESULT_NO_ERROR;
\r
163 return INVOKERESULT_GENERIC_ERROR;
\r
166 RuntimeNPObject::InvokeResult LibvlcAudioNPObject::setProperty(int index, const NPVariant *value)
\r
168 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
171 libvlc_exception_t ex;
\r
172 libvlc_exception_init(&ex);
\r
177 if( NPVARIANT_IS_BOOLEAN(*value) )
\r
179 libvlc_audio_set_mute(p_plugin->getVLC(),
\r
180 NPVARIANT_TO_BOOLEAN(*value), &ex);
\r
181 if( libvlc_exception_raised(&ex) )
\r
183 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
184 libvlc_exception_clear(&ex);
\r
185 return INVOKERESULT_GENERIC_ERROR;
\r
187 return INVOKERESULT_NO_ERROR;
\r
189 return INVOKERESULT_INVALID_VALUE;
\r
191 if( isNumberValue(*value) )
\r
193 libvlc_audio_set_volume(p_plugin->getVLC(),
\r
194 numberValue(*value), &ex);
\r
195 if( libvlc_exception_raised(&ex) )
\r
197 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
198 libvlc_exception_clear(&ex);
\r
199 return INVOKERESULT_GENERIC_ERROR;
\r
201 return INVOKERESULT_NO_ERROR;
\r
203 return INVOKERESULT_INVALID_VALUE;
\r
206 return INVOKERESULT_GENERIC_ERROR;
\r
209 const NPUTF8 * const LibvlcAudioNPObject::methodNames[] =
\r
214 enum LibvlcAudioNPObjectMethodIds
\r
219 const int LibvlcAudioNPObject::methodCount = sizeof(LibvlcAudioNPObject::methodNames)/sizeof(NPUTF8 *);
\r
221 RuntimeNPObject::InvokeResult LibvlcAudioNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result)
\r
223 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
226 libvlc_exception_t ex;
\r
227 libvlc_exception_init(&ex);
\r
231 case ID_togglemute:
\r
232 if( argCount == 0 )
\r
234 libvlc_audio_toggle_mute(p_plugin->getVLC(), &ex);
\r
235 if( libvlc_exception_raised(&ex) )
\r
237 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
238 libvlc_exception_clear(&ex);
\r
239 return INVOKERESULT_GENERIC_ERROR;
\r
243 VOID_TO_NPVARIANT(*result);
\r
244 return INVOKERESULT_NO_ERROR;
\r
247 return INVOKERESULT_NO_SUCH_METHOD;
\r
249 return INVOKERESULT_NO_SUCH_METHOD;
\r
252 return INVOKERESULT_GENERIC_ERROR;
\r
256 ** implementation of libvlc input object
\r
259 const NPUTF8 * const LibvlcInputNPObject::propertyNames[] =
\r
268 enum LibvlcInputNPObjectPropertyIds
\r
277 const int LibvlcInputNPObject::propertyCount = sizeof(LibvlcInputNPObject::propertyNames)/sizeof(NPUTF8 *);
\r
279 RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVariant *result)
\r
281 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
284 libvlc_exception_t ex;
\r
285 libvlc_exception_init(&ex);
\r
287 libvlc_input_t *p_input = libvlc_playlist_get_input(p_plugin->getVLC(), &ex);
\r
288 if( libvlc_exception_raised(&ex) )
\r
290 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
291 libvlc_exception_clear(&ex);
\r
292 return INVOKERESULT_GENERIC_ERROR;
\r
299 double val = (double)libvlc_input_get_length(p_input, &ex);
\r
300 libvlc_input_free(p_input);
\r
301 if( libvlc_exception_raised(&ex) )
\r
303 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
304 libvlc_exception_clear(&ex);
\r
305 return INVOKERESULT_GENERIC_ERROR;
\r
307 DOUBLE_TO_NPVARIANT(val, *result);
\r
308 return INVOKERESULT_NO_ERROR;
\r
312 double val = libvlc_input_get_position(p_input, &ex);
\r
313 libvlc_input_free(p_input);
\r
314 if( libvlc_exception_raised(&ex) )
\r
316 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
317 libvlc_exception_clear(&ex);
\r
318 return INVOKERESULT_GENERIC_ERROR;
\r
320 DOUBLE_TO_NPVARIANT(val, *result);
\r
321 return INVOKERESULT_NO_ERROR;
\r
325 double val = (double)libvlc_input_get_time(p_input, &ex);
\r
326 libvlc_input_free(p_input);
\r
327 if( libvlc_exception_raised(&ex) )
\r
329 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
330 libvlc_exception_clear(&ex);
\r
331 return INVOKERESULT_GENERIC_ERROR;
\r
333 DOUBLE_TO_NPVARIANT(val, *result);
\r
334 return INVOKERESULT_NO_ERROR;
\r
338 double val = libvlc_input_get_fps(p_input, &ex);
\r
339 libvlc_input_free(p_input);
\r
340 if( libvlc_exception_raised(&ex) )
\r
342 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
343 libvlc_exception_clear(&ex);
\r
344 return INVOKERESULT_GENERIC_ERROR;
\r
346 DOUBLE_TO_NPVARIANT(val, *result);
\r
347 return INVOKERESULT_NO_ERROR;
\r
351 vlc_bool_t val = libvlc_input_has_vout(p_input, &ex);
\r
352 libvlc_input_free(p_input);
\r
353 if( libvlc_exception_raised(&ex) )
\r
355 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
356 libvlc_exception_clear(&ex);
\r
357 return INVOKERESULT_GENERIC_ERROR;
\r
359 BOOLEAN_TO_NPVARIANT(val, *result);
\r
360 return INVOKERESULT_NO_ERROR;
\r
363 libvlc_input_free(p_input);
\r
365 return INVOKERESULT_GENERIC_ERROR;
\r
368 RuntimeNPObject::InvokeResult LibvlcInputNPObject::setProperty(int index, const NPVariant *value)
\r
370 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
373 libvlc_exception_t ex;
\r
374 libvlc_exception_init(&ex);
\r
376 libvlc_input_t *p_input = libvlc_playlist_get_input(p_plugin->getVLC(), &ex);
\r
377 if( libvlc_exception_raised(&ex) )
\r
379 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
380 libvlc_exception_clear(&ex);
\r
381 return INVOKERESULT_GENERIC_ERROR;
\r
388 if( ! NPVARIANT_IS_DOUBLE(*value) )
\r
390 libvlc_input_free(p_input);
\r
391 return INVOKERESULT_INVALID_VALUE;
\r
394 float val = (float)NPVARIANT_TO_DOUBLE(*value);
\r
395 libvlc_input_set_position(p_input, val, &ex);
\r
396 libvlc_input_free(p_input);
\r
397 if( libvlc_exception_raised(&ex) )
\r
399 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
400 libvlc_exception_clear(&ex);
\r
401 return INVOKERESULT_GENERIC_ERROR;
\r
403 return INVOKERESULT_NO_ERROR;
\r
408 if( NPVARIANT_IS_INT32(*value) )
\r
409 val = (vlc_int64_t)NPVARIANT_TO_INT32(*value);
\r
410 else if( NPVARIANT_IS_DOUBLE(*value) )
\r
411 val = (vlc_int64_t)NPVARIANT_TO_DOUBLE(*value);
\r
414 libvlc_input_free(p_input);
\r
415 return INVOKERESULT_INVALID_VALUE;
\r
418 libvlc_input_set_time(p_input, val, &ex);
\r
419 libvlc_input_free(p_input);
\r
420 if( libvlc_exception_raised(&ex) )
\r
422 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
423 libvlc_exception_clear(&ex);
\r
424 return INVOKERESULT_GENERIC_ERROR;
\r
426 return INVOKERESULT_NO_ERROR;
\r
429 libvlc_input_free(p_input);
\r
431 return INVOKERESULT_GENERIC_ERROR;
\r
434 const NPUTF8 * const LibvlcInputNPObject::methodNames[] =
\r
439 const int LibvlcInputNPObject::methodCount = sizeof(LibvlcInputNPObject::methodNames)/sizeof(NPUTF8 *);
\r
442 ** implementation of libvlc playlist object
\r
446 const NPUTF8 * const LibvlcPlaylistNPObject::propertyNames[] =
\r
452 enum LibvlcPlaylistNPObjectPropertyIds
\r
458 const int LibvlcPlaylistNPObject::propertyCount = sizeof(LibvlcPlaylistNPObject::propertyNames)/sizeof(NPUTF8 *);
\r
460 RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::getProperty(int index, NPVariant *result)
\r
462 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
465 libvlc_exception_t ex;
\r
466 libvlc_exception_init(&ex);
\r
470 case ID_itemscount:
\r
472 int val = libvlc_playlist_items_count(p_plugin->getVLC(), &ex);
\r
473 if( libvlc_exception_raised(&ex) )
\r
475 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
476 libvlc_exception_clear(&ex);
\r
477 return INVOKERESULT_GENERIC_ERROR;
\r
479 INT32_TO_NPVARIANT(val, *result);
\r
480 return INVOKERESULT_NO_ERROR;
\r
484 int val = libvlc_playlist_isplaying(p_plugin->getVLC(), &ex);
\r
485 if( libvlc_exception_raised(&ex) )
\r
487 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
488 libvlc_exception_clear(&ex);
\r
489 return INVOKERESULT_GENERIC_ERROR;
\r
491 BOOLEAN_TO_NPVARIANT(val, *result);
\r
492 return INVOKERESULT_NO_ERROR;
\r
496 return INVOKERESULT_GENERIC_ERROR;
\r
499 const NPUTF8 * const LibvlcPlaylistNPObject::methodNames[] =
\r
511 enum LibvlcPlaylistNPObjectMethodIds
\r
523 const int LibvlcPlaylistNPObject::methodCount = sizeof(LibvlcPlaylistNPObject::methodNames)/sizeof(NPUTF8 *);
\r
525 RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result)
\r
527 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
530 libvlc_exception_t ex;
\r
531 libvlc_exception_init(&ex);
\r
536 if( (argCount == 1) && NPVARIANT_IS_STRING(args[0]) )
\r
538 const NPString &name = NPVARIANT_TO_STRING(args[0]);
\r
539 NPUTF8 *s = new NPUTF8[name.utf8length+1];
\r
542 strncpy(s, name.utf8characters, name.utf8length);
\r
543 s[name.utf8length] = '\0';
\r
545 char *url = p_plugin->getAbsoluteURL(s);
\r
549 return INVOKERESULT_GENERIC_ERROR;
\r
551 int item = libvlc_playlist_add(p_plugin->getVLC(), url, NULL, &ex);
\r
553 if( libvlc_exception_raised(&ex) )
\r
555 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
556 libvlc_exception_clear(&ex);
\r
557 return INVOKERESULT_GENERIC_ERROR;
\r
561 INT32_TO_NPVARIANT(item, *result);
\r
562 return INVOKERESULT_NO_ERROR;
\r
566 return INVOKERESULT_OUT_OF_MEMORY;
\r
568 return INVOKERESULT_NO_SUCH_METHOD;
\r
570 if( argCount == 0 )
\r
572 libvlc_playlist_play(p_plugin->getVLC(), -1, 0, NULL, &ex);
\r
573 if( libvlc_exception_raised(&ex) )
\r
575 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
576 libvlc_exception_clear(&ex);
\r
577 return INVOKERESULT_GENERIC_ERROR;
\r
581 VOID_TO_NPVARIANT(*result);
\r
582 return INVOKERESULT_NO_ERROR;
\r
585 return INVOKERESULT_NO_SUCH_METHOD;
\r
586 case ID_togglepause:
\r
587 if( argCount == 0 )
\r
589 libvlc_playlist_pause(p_plugin->getVLC(), &ex);
\r
590 if( libvlc_exception_raised(&ex) )
\r
592 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
593 libvlc_exception_clear(&ex);
\r
594 return INVOKERESULT_GENERIC_ERROR;
\r
598 VOID_TO_NPVARIANT(*result);
\r
599 return INVOKERESULT_NO_ERROR;
\r
602 return INVOKERESULT_NO_SUCH_METHOD;
\r
604 if( argCount == 0 )
\r
606 libvlc_playlist_stop(p_plugin->getVLC(), &ex);
\r
607 if( libvlc_exception_raised(&ex) )
\r
609 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
610 libvlc_exception_clear(&ex);
\r
611 return INVOKERESULT_GENERIC_ERROR;
\r
615 VOID_TO_NPVARIANT(*result);
\r
616 return INVOKERESULT_NO_ERROR;
\r
619 return INVOKERESULT_NO_SUCH_METHOD;
\r
621 if( argCount == 0 )
\r
623 libvlc_playlist_next(p_plugin->getVLC(), &ex);
\r
624 if( libvlc_exception_raised(&ex) )
\r
626 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
627 libvlc_exception_clear(&ex);
\r
628 return INVOKERESULT_GENERIC_ERROR;
\r
632 VOID_TO_NPVARIANT(*result);
\r
633 return INVOKERESULT_NO_ERROR;
\r
636 return INVOKERESULT_NO_SUCH_METHOD;
\r
638 if( argCount == 0 )
\r
640 libvlc_playlist_prev(p_plugin->getVLC(), &ex);
\r
641 if( libvlc_exception_raised(&ex) )
\r
643 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
644 libvlc_exception_clear(&ex);
\r
645 return INVOKERESULT_GENERIC_ERROR;
\r
649 VOID_TO_NPVARIANT(*result);
\r
650 return INVOKERESULT_NO_ERROR;
\r
653 return INVOKERESULT_NO_SUCH_METHOD;
\r
655 if( argCount == 0 )
\r
657 libvlc_playlist_clear(p_plugin->getVLC(), &ex);
\r
658 if( libvlc_exception_raised(&ex) )
\r
660 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
661 libvlc_exception_clear(&ex);
\r
662 return INVOKERESULT_GENERIC_ERROR;
\r
666 VOID_TO_NPVARIANT(*result);
\r
667 return INVOKERESULT_NO_ERROR;
\r
670 return INVOKERESULT_NO_SUCH_METHOD;
\r
671 case ID_deleteitem:
\r
672 if( (argCount == 1) && isNumberValue(args[0]) )
\r
674 libvlc_playlist_delete_item(p_plugin->getVLC(), numberValue(args[0]), &ex);
\r
675 if( libvlc_exception_raised(&ex) )
\r
677 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
678 libvlc_exception_clear(&ex);
\r
679 return INVOKERESULT_GENERIC_ERROR;
\r
683 VOID_TO_NPVARIANT(*result);
\r
684 return INVOKERESULT_NO_ERROR;
\r
687 return INVOKERESULT_NO_SUCH_METHOD;
\r
689 return INVOKERESULT_NO_SUCH_METHOD;
\r
692 return INVOKERESULT_GENERIC_ERROR;
\r
696 ** implementation of libvlc video object
\r
699 const NPUTF8 * const LibvlcVideoNPObject::propertyNames[] =
\r
706 enum LibvlcVideoNPObjectPropertyIds
\r
713 const int LibvlcVideoNPObject::propertyCount = sizeof(LibvlcVideoNPObject::propertyNames)/sizeof(NPUTF8 *);
\r
715 RuntimeNPObject::InvokeResult LibvlcVideoNPObject::getProperty(int index, NPVariant *result)
\r
717 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
720 libvlc_exception_t ex;
\r
721 libvlc_exception_init(&ex);
\r
723 libvlc_input_t *p_input = libvlc_playlist_get_input(p_plugin->getVLC(), &ex);
\r
724 if( libvlc_exception_raised(&ex) )
\r
726 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
727 libvlc_exception_clear(&ex);
\r
728 return INVOKERESULT_GENERIC_ERROR;
\r
733 case ID_fullscreen:
\r
735 int val = libvlc_get_fullscreen(p_input, &ex);
\r
736 libvlc_input_free(p_input);
\r
737 if( libvlc_exception_raised(&ex) )
\r
739 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
740 libvlc_exception_clear(&ex);
\r
741 return INVOKERESULT_GENERIC_ERROR;
\r
743 BOOLEAN_TO_NPVARIANT(val, *result);
\r
744 return INVOKERESULT_NO_ERROR;
\r
748 int val = libvlc_video_get_height(p_input, &ex);
\r
749 libvlc_input_free(p_input);
\r
750 if( libvlc_exception_raised(&ex) )
\r
752 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
753 libvlc_exception_clear(&ex);
\r
754 return INVOKERESULT_GENERIC_ERROR;
\r
756 INT32_TO_NPVARIANT(val, *result);
\r
757 return INVOKERESULT_NO_ERROR;
\r
761 int val = libvlc_video_get_width(p_input, &ex);
\r
762 libvlc_input_free(p_input);
\r
763 if( libvlc_exception_raised(&ex) )
\r
765 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
766 libvlc_exception_clear(&ex);
\r
767 return INVOKERESULT_GENERIC_ERROR;
\r
769 INT32_TO_NPVARIANT(val, *result);
\r
770 return INVOKERESULT_NO_ERROR;
\r
773 libvlc_input_free(p_input);
\r
775 return INVOKERESULT_GENERIC_ERROR;
\r
778 RuntimeNPObject::InvokeResult LibvlcVideoNPObject::setProperty(int index, const NPVariant *value)
\r
780 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
783 libvlc_exception_t ex;
\r
784 libvlc_exception_init(&ex);
\r
786 libvlc_input_t *p_input = libvlc_playlist_get_input(p_plugin->getVLC(), &ex);
\r
787 if( libvlc_exception_raised(&ex) )
\r
789 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
790 libvlc_exception_clear(&ex);
\r
791 return INVOKERESULT_GENERIC_ERROR;
\r
796 case ID_fullscreen:
\r
798 if( ! NPVARIANT_IS_BOOLEAN(*value) )
\r
800 libvlc_input_free(p_input);
\r
801 return INVOKERESULT_INVALID_VALUE;
\r
804 int val = NPVARIANT_TO_BOOLEAN(*value);
\r
805 libvlc_set_fullscreen(p_input, val, &ex);
\r
806 libvlc_input_free(p_input);
\r
807 if( libvlc_exception_raised(&ex) )
\r
809 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
810 libvlc_exception_clear(&ex);
\r
811 return INVOKERESULT_GENERIC_ERROR;
\r
813 return INVOKERESULT_NO_ERROR;
\r
816 libvlc_input_free(p_input);
\r
818 return INVOKERESULT_GENERIC_ERROR;
\r
821 const NPUTF8 * const LibvlcVideoNPObject::methodNames[] =
\r
823 "togglefullscreen",
\r
826 enum LibvlcVideoNPObjectMethodIds
\r
828 ID_togglefullscreen,
\r
831 const int LibvlcVideoNPObject::methodCount = sizeof(LibvlcVideoNPObject::methodNames)/sizeof(NPUTF8 *);
\r
833 RuntimeNPObject::InvokeResult LibvlcVideoNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result)
\r
835 VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);
\r
838 libvlc_exception_t ex;
\r
839 libvlc_exception_init(&ex);
\r
841 libvlc_input_t *p_input = libvlc_playlist_get_input(p_plugin->getVLC(), &ex);
\r
842 if( libvlc_exception_raised(&ex) )
\r
844 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
845 libvlc_exception_clear(&ex);
\r
846 return INVOKERESULT_GENERIC_ERROR;
\r
851 case ID_togglefullscreen:
\r
852 if( argCount == 0 )
\r
854 libvlc_toggle_fullscreen(p_input, &ex);
\r
855 libvlc_input_free(p_input);
\r
856 if( libvlc_exception_raised(&ex) )
\r
858 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
859 libvlc_exception_clear(&ex);
\r
860 return INVOKERESULT_GENERIC_ERROR;
\r
864 VOID_TO_NPVARIANT(*result);
\r
865 return INVOKERESULT_NO_ERROR;
\r
870 /* cannot get input, probably not playing */
\r
871 if( libvlc_exception_raised(&ex) )
\r
873 NPN_SetException(this, libvlc_exception_get_message(&ex));
\r
874 libvlc_exception_clear(&ex);
\r
876 return INVOKERESULT_GENERIC_ERROR;
\r
878 return INVOKERESULT_NO_SUCH_METHOD;
\r
880 return INVOKERESULT_NO_SUCH_METHOD;
\r
883 return INVOKERESULT_GENERIC_ERROR;
\r