mirror of
https://code.videolan.org/videolan/vlc
synced 2024-09-24 20:48:52 +02:00
lib: rework how libvlc_MediaDurationChanged is sent
From the player, listen to vlc_player_cbs.on_length_changed. From the parser, listen to vlc_metadata_cbs.on_preparse_ended. This event will be send only one time from the parser. This event can be send several time (when the demux is updating the length) from the player.
This commit is contained in:
parent
a414c3ddc9
commit
afa8306455
33
lib/media.c
33
lib/media.c
@ -241,25 +241,6 @@ void libvlc_media_add_subtree(libvlc_media_t *p_md, input_item_node_t *node)
|
|||||||
libvlc_event_send( &p_md->event_manager, &event );
|
libvlc_event_send( &p_md->event_manager, &event );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* \internal
|
|
||||||
* input_item_duration_changed (Private) (vlc event Callback)
|
|
||||||
*/
|
|
||||||
static void input_item_duration_changed( const vlc_event_t *p_event,
|
|
||||||
void * user_data )
|
|
||||||
{
|
|
||||||
libvlc_media_t * p_md = user_data;
|
|
||||||
libvlc_event_t event;
|
|
||||||
|
|
||||||
/* Construct the event */
|
|
||||||
event.type = libvlc_MediaDurationChanged;
|
|
||||||
event.u.media_duration_changed.new_duration =
|
|
||||||
libvlc_time_from_vlc_tick(p_event->u.input_item_duration_changed.new_duration);
|
|
||||||
|
|
||||||
/* Send the event */
|
|
||||||
libvlc_event_send( &p_md->event_manager, &event );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void input_item_attachments_added( input_item_t *item,
|
static void input_item_attachments_added( input_item_t *item,
|
||||||
input_attachment_t *const *array,
|
input_attachment_t *const *array,
|
||||||
size_t count, void *user_data )
|
size_t count, void *user_data )
|
||||||
@ -296,6 +277,12 @@ static void send_parsed_changed( libvlc_media_t *p_md,
|
|||||||
if (atomic_exchange(&p_md->parsed_status, new_status) == new_status)
|
if (atomic_exchange(&p_md->parsed_status, new_status) == new_status)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* Duration event */
|
||||||
|
event.type = libvlc_MediaDurationChanged;
|
||||||
|
event.u.media_duration_changed.new_duration =
|
||||||
|
input_item_GetDuration( p_md->p_input_item );
|
||||||
|
libvlc_event_send( &p_md->event_manager, &event );
|
||||||
|
|
||||||
/* Meta event */
|
/* Meta event */
|
||||||
event.type = libvlc_MediaMetaChanged;
|
event.type = libvlc_MediaMetaChanged;
|
||||||
event.u.media_meta_changed.meta_type = 0;
|
event.u.media_meta_changed.meta_type = 0;
|
||||||
@ -355,10 +342,6 @@ static void input_item_preparse_ended(input_item_t *item,
|
|||||||
*/
|
*/
|
||||||
static void install_input_item_observer( libvlc_media_t *p_md )
|
static void install_input_item_observer( libvlc_media_t *p_md )
|
||||||
{
|
{
|
||||||
vlc_event_attach( &p_md->p_input_item->event_manager,
|
|
||||||
vlc_InputItemDurationChanged,
|
|
||||||
input_item_duration_changed,
|
|
||||||
p_md );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -367,10 +350,6 @@ static void install_input_item_observer( libvlc_media_t *p_md )
|
|||||||
*/
|
*/
|
||||||
static void uninstall_input_item_observer( libvlc_media_t *p_md )
|
static void uninstall_input_item_observer( libvlc_media_t *p_md )
|
||||||
{
|
{
|
||||||
vlc_event_detach( &p_md->p_input_item->event_manager,
|
|
||||||
vlc_InputItemDurationChanged,
|
|
||||||
input_item_duration_changed,
|
|
||||||
p_md );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -238,6 +238,16 @@ on_length_changed(vlc_player_t *player, vlc_tick_t new_length, void *data)
|
|||||||
|
|
||||||
libvlc_event_t event;
|
libvlc_event_t event;
|
||||||
|
|
||||||
|
libvlc_media_t *md = mp->p_md;
|
||||||
|
if (md != NULL)
|
||||||
|
{
|
||||||
|
/* Duration event */
|
||||||
|
event.type = libvlc_MediaDurationChanged;
|
||||||
|
event.u.media_duration_changed.new_duration =
|
||||||
|
input_item_GetDuration( md->p_input_item );
|
||||||
|
libvlc_event_send( &md->event_manager, &event );
|
||||||
|
}
|
||||||
|
|
||||||
event.type = libvlc_MediaPlayerLengthChanged;
|
event.type = libvlc_MediaPlayerLengthChanged;
|
||||||
event.u.media_player_length_changed.new_length =
|
event.u.media_player_length_changed.new_length =
|
||||||
MS_FROM_VLC_TICK(new_length);
|
MS_FROM_VLC_TICK(new_length);
|
||||||
|
Loading…
Reference in New Issue
Block a user