[vlc-commits] commit: mozilla: activex: add cache filling level to event MediaPlayerBuffering (Jean-Paul Saman )
git at videolan.org
git at videolan.org
Tue Sep 7 13:03:11 CEST 2010
vlc | branch: master | Jean-Paul Saman <jean-paul.saman at m2x.nl> | Tue May 18 16:21:37 2010 +0200| [366cc4b93cb1f964d2bda55770954201031dfe8e] | committer: Jean-Paul Saman
mozilla: activex: add cache filling level to event MediaPlayerBuffering
Add cache filling level to the MediaPlayerBuffering event.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=366cc4b93cb1f964d2bda55770954201031dfe8e
---
include/vlc/libvlc_events.h | 4 ++++
projects/activex/axvlc.idl | 2 +-
projects/activex/axvlc.tlb | Bin 22360 -> 22392 bytes
projects/activex/plugin.cpp | 15 +++++++++++----
projects/activex/plugin.h | 2 +-
projects/mozilla/vlcplugin.cpp | 9 +++++----
src/control/media_list.c | 1 +
src/control/media_player.c | 8 +++++++-
8 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/include/vlc/libvlc_events.h b/include/vlc/libvlc_events.h
index 8aa41d8..8046b5f 100644
--- a/include/vlc/libvlc_events.h
+++ b/include/vlc/libvlc_events.h
@@ -140,6 +140,10 @@ typedef struct libvlc_event_t
/* media instance */
struct
{
+ float new_cache;
+ } media_player_buffering;
+ struct
+ {
float new_position;
} media_player_position_changed;
struct
diff --git a/projects/activex/axvlc.idl b/projects/activex/axvlc.idl
index de7562d..85ef773 100644
--- a/projects/activex/axvlc.idl
+++ b/projects/activex/axvlc.idl
@@ -206,7 +206,7 @@ library AXVLC
[id(DISPID_MediaPlayerOpeningEvent), helpstring("Opening media")]
void MediaPlayerOpening();
[id(DISPID_MediaPlayerBufferingEvent), helpstring("Buffering media")]
- void MediaPlayerBuffering();
+ void MediaPlayerBuffering([in] long cache);
[id(DISPID_MediaPlayerPlayingEvent), helpstring("Media is playing")]
void MediaPlayerPlaying();
[id(DISPID_MediaPlayerPausedEvent), helpstring("Media is paused")]
diff --git a/projects/activex/axvlc.tlb b/projects/activex/axvlc.tlb
index a65b13e..ac0a118 100644
Binary files a/projects/activex/axvlc.tlb and b/projects/activex/axvlc.tlb differ
diff --git a/projects/activex/plugin.cpp b/projects/activex/plugin.cpp
index 1627e5e..52c1965 100644
--- a/projects/activex/plugin.cpp
+++ b/projects/activex/plugin.cpp
@@ -1021,10 +1021,17 @@ void VLCPlugin::fireOnMediaPlayerOpeningEvent()
vlcConnectionPointContainer->fireEvent(DISPID_MediaPlayerOpeningEvent, &dispparamsNoArgs);
};
-void VLCPlugin::fireOnMediaPlayerBufferingEvent()
+void VLCPlugin::fireOnMediaPlayerBufferingEvent(long cache)
{
- DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
- vlcConnectionPointContainer->fireEvent(DISPID_MediaPlayerBufferingEvent, &dispparamsNoArgs);
+ DISPPARAMS params;
+ params.cArgs = 1;
+ params.rgvarg = (VARIANTARG *) CoTaskMemAlloc(sizeof(VARIANTARG) * params.cArgs) ;
+ memset(params.rgvarg, 0, sizeof(VARIANTARG) * params.cArgs);
+ params.rgvarg[0].vt = VT_I4;
+ params.rgvarg[0].lVal = cache;
+ params.rgdispidNamedArgs = NULL;
+ params.cNamedArgs = 0;
+ vlcConnectionPointContainer->fireEvent(DISPID_MediaPlayerBufferingEvent, ¶ms);
};
void VLCPlugin::fireOnMediaPlayerPlayingEvent()
@@ -1081,7 +1088,7 @@ static void handle_input_state_event(const libvlc_event_t* event, void *param)
plugin->fireOnMediaPlayerOpeningEvent();
break;
case libvlc_MediaPlayerBuffering:
- plugin->fireOnMediaPlayerBufferingEvent();
+ plugin->fireOnMediaPlayerBufferingEvent(event->u.media_player_buffering.new_cache);
break;
case libvlc_MediaPlayerPlaying:
plugin->fireOnMediaPlayerPlayingEvent();
diff --git a/projects/activex/plugin.h b/projects/activex/plugin.h
index 412bdce..7db813a 100644
--- a/projects/activex/plugin.h
+++ b/projects/activex/plugin.h
@@ -241,7 +241,7 @@ public:
// async events;
void fireOnMediaPlayerNothingSpecialEvent();
void fireOnMediaPlayerOpeningEvent();
- void fireOnMediaPlayerBufferingEvent();
+ void fireOnMediaPlayerBufferingEvent(long cache);
void fireOnMediaPlayerPlayingEvent();
void fireOnMediaPlayerPausedEvent();
void fireOnMediaPlayerForwardEvent();
diff --git a/projects/mozilla/vlcplugin.cpp b/projects/mozilla/vlcplugin.cpp
index 320b190..2fabfc0 100644
--- a/projects/mozilla/vlcplugin.cpp
+++ b/projects/mozilla/vlcplugin.cpp
@@ -112,7 +112,7 @@ static vlcplugin_event_t vlcevents[] = {
{ "MediaPlayerMediaChanged", libvlc_MediaPlayerMediaChanged, handle_input_event },
{ "MediaPlayerNothingSpecial", libvlc_MediaPlayerNothingSpecial, handle_input_event },
{ "MediaPlayerOpening", libvlc_MediaPlayerOpening, handle_input_event },
- { "MediaPlayerBuffering", libvlc_MediaPlayerBuffering, handle_input_event },
+ { "MediaPlayerBuffering", libvlc_MediaPlayerBuffering, handle_changed_event },
{ "MediaPlayerPlaying", libvlc_MediaPlayerPlaying, handle_input_event },
{ "MediaPlayerPaused", libvlc_MediaPlayerPaused, handle_input_event },
{ "MediaPlayerStopped", libvlc_MediaPlayerStopped, handle_input_event },
@@ -135,7 +135,6 @@ static void handle_input_event(const libvlc_event_t* event, void *param)
{
case libvlc_MediaPlayerNothingSpecial:
case libvlc_MediaPlayerOpening:
- case libvlc_MediaPlayerBuffering:
case libvlc_MediaPlayerPlaying:
case libvlc_MediaPlayerPaused:
case libvlc_MediaPlayerStopped:
@@ -158,6 +157,9 @@ static void handle_changed_event(const libvlc_event_t* event, void *param)
VlcPlugin *plugin = (VlcPlugin*)param;
switch( event->type )
{
+ case libvlc_MediaPlayerBuffering:
+ DOUBLE_TO_NPVARIANT(event->u.media_player_buffering.new_cache, npparam[0]);
+ break;
case libvlc_MediaPlayerTimeChanged:
DOUBLE_TO_NPVARIANT(event->u.media_player_time_changed.new_time, npparam[0]);
break;
@@ -207,7 +209,6 @@ void EventObj::deliver(NPP browser)
NPVariant result;
NPVariant *params = iter->params();
uint32_t count = iter->count();
- assert( params );
NPObject *listener = j->listener();
assert( listener );
@@ -225,7 +226,7 @@ void EventObj::deliver(NPP browser)
NPN_MemFree( (void*)NPVARIANT_TO_OBJECT(params[n]) );
}
}
- NPN_MemFree( params );
+ if (params) NPN_MemFree( params );
}
}
}
diff --git a/src/control/media_list.c b/src/control/media_list.c
index 8dc7e0c..0827124 100644
--- a/src/control/media_list.c
+++ b/src/control/media_list.c
@@ -183,6 +183,7 @@ libvlc_media_list_new( libvlc_instance_t * p_inst )
vlc_mutex_init( &p_mlist->refcount_lock ); // FIXME: spinlock?
vlc_array_init( &p_mlist->items );
+ assert( p_mlist->items.i_count == 0 );
p_mlist->i_refcount = 1;
p_mlist->p_md = NULL;
diff --git a/src/control/media_player.c b/src/control/media_player.c
index 4b71ec8..328a7e4 100644
--- a/src/control/media_player.c
+++ b/src/control/media_player.c
@@ -299,9 +299,15 @@ input_event_changed( vlc_object_t * p_this, char const * psz_cmd,
from_mtime(var_GetTime( p_input, "length" ));
libvlc_event_send( p_mi->p_event_manager, &event );
}
+ else if( newval.i_int == INPUT_EVENT_CACHE )
+ {
+ event.type = libvlc_MediaPlayerBuffering;
+ event.u.media_player_buffering.new_cache = (int)(100 *
+ var_GetFloat( p_input, "cache" ));
+ libvlc_event_send( p_mi->p_event_manager, &event );
+ }
return VLC_SUCCESS;
-
}
/**************************************************************************
More information about the vlc-commits
mailing list