From 366cc4b93cb1f964d2bda55770954201031dfe8e Mon Sep 17 00:00:00 2001 From: Jean-Paul Saman Date: Tue, 18 May 2010 16:21:37 +0200 Subject: [PATCH] mozilla: activex: add cache filling level to event MediaPlayerBuffering Add cache filling level to the MediaPlayerBuffering event. --- 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 8aa41d820c..8046b5f708 100644 --- a/include/vlc/libvlc_events.h +++ b/include/vlc/libvlc_events.h @@ -139,6 +139,10 @@ typedef struct libvlc_event_t /* media instance */ struct + { + float new_cache; + } media_player_buffering; + struct { float new_position; } media_player_position_changed; diff --git a/projects/activex/axvlc.idl b/projects/activex/axvlc.idl index de7562ddf2..85ef7731a1 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 a65b13ef28bbc73237fa71344794e21dcd199ab4..ac0a11879fb814698b12ff5b25f7fb0f8fced5e5 100644 GIT binary patch delta 567 zcmYL_F-Tic6o$`vFVFXqJW(N$m{zPJ4Y5iiwh-u&LJJNp2%4l8m6WTHK?{OHgbo>W zb7*>WlhTqF93-T?4qZw+c6bimgkmS56doN!Xoo`lud(#NckaFaJ)C>~d(_}R4St@n zYD6?!yZx>IuS?WIbU~;jiGuk5^P-ILK+l_TqHf&&t9mca{6x;m!;s<+@(%ft#4W{>vVlA-#~1l-hl-S^@e1Y02}z^l zv9VK-@78t6*pAV3<)xjJ89Tu{vSKT)$XEL&W?*OHVxN*Z$Kexi$w`^vlS@m!>_&^R zYf+-?rJ^ka5uz9Fvvd<0g^7HuIfJN#x-+wFvm4q0>h`c!<*l27i$iz7ps4(Ehr&6O z>Q?*G*LkPEq>G)l@&yg`jgCoZYu;+-??|jIv|1Luy04z7@=~!_^va2mJ~L52^>)WU z4f34ir|To5WKjZd>W_%gJ#s@9u|6O^$B0ZatJ(mQ*E_SoT$1(t4c?R2d6gzirOoQ; sN}vk%fe!+pP3ezVld-~;w2zJfaM6AgJOImJ8ytWm5W=@)WVP_)9IpDQkpKVy delta 534 zcmYL^UnoOy6vxlGch|j}E7Vp){hrzlo^v|C^DX8upTo4DQj!fLnV$Rl7aib> zqY?n-YXJ(b|Nl|y#K!7$H$WA4|EBh776WKe1`WyTqZM^d3ARX(r76ikjm}sHs982} zl{Q%O^vdd?5u1UBbjmtJF2%qgt+Q6qLrDkA3`b;)Ux5%5Wy+OJONl5wDy`&KH7Tpp zo?1&0)r|>SRt=n_JGF~%KrK+py)>g~cxx_bUfF*8YssRW@(HJ24&eE%2n!;%^rSD# zHLwF%{0&I}VV--Je{6noe&PVw|fr!(k@fZ8h?uf7d+jK5xcRS{gfOXaWV?04d?w2|>_pibzXw;WT?A zbBJNu8E?l;x*Rur1-?gk5s!;ofireEvent(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 412bdcedf3..7db813ac19 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 320b19005c..2fabfc0499 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 8dc7e0c6ae..08271247a3 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 4b71ec885d..328a7e40cf 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; - } /************************************************************************** -- 2.39.2