[vlc-devel] [PATCH] libvlc: add corked and uncorked events

Harald Sitter sitter at kde.org
Mon Jul 27 12:54:01 CEST 2015


LGTM

<3 Rémi <3

On Mon, Jul 27, 2015 at 12:47 PM, Rémi Denis-Courmont <remi at remlab.net> wrote:
> This exposes (audio) policy cork events to LibVLC applications. The
> intended usage is for applications to pause/resume playback.
>
> We decided against pausing and resuming automatically as it would most
> likely confuse the playback state machine of existing applications. By
> default, the OS decides might either mute or duck the audio stream.
>
> Cc: Harald Sitter <sitter at kde.org>
> ---
>  include/vlc/libvlc_events.h |  2 ++
>  lib/event.c                 |  2 ++
>  lib/media_player.c          | 28 ++++++++++++++++++++++++++++
>  3 files changed, 32 insertions(+)
>
> diff --git a/include/vlc/libvlc_events.h b/include/vlc/libvlc_events.h
> index c99e25c..171b8d5 100644
> --- a/include/vlc/libvlc_events.h
> +++ b/include/vlc/libvlc_events.h
> @@ -77,6 +77,8 @@ enum libvlc_event_e {
>      libvlc_MediaPlayerESAdded,
>      libvlc_MediaPlayerESDeleted,
>      libvlc_MediaPlayerESSelected,
> +    libvlc_MediaPlayerCorked,
> +    libvlc_MediaPlayerUncorked,
>
>      libvlc_MediaListItemAdded=0x200,
>      libvlc_MediaListWillAddItem,
> diff --git a/lib/event.c b/lib/event.c
> index 4a95cee..b164376 100644
> --- a/lib/event.c
> +++ b/lib/event.c
> @@ -283,6 +283,8 @@ static const event_name_t event_list[] = {
>      DEF(MediaPlayerESAdded)
>      DEF(MediaPlayerESDeleted)
>      DEF(MediaPlayerESSelected)
> +    DEF(MediaPlayerCorked)
> +    DEF(MediaPlayerUncorked)
>
>      DEF(MediaListItemAdded)
>      DEF(MediaListWillAddItem)
> diff --git a/lib/media_player.c b/lib/media_player.c
> index b826346..462dceb 100644
> --- a/lib/media_player.c
> +++ b/lib/media_player.c
> @@ -67,6 +67,10 @@ input_es_selected( vlc_object_t * p_this, char const * psz_cmd,
>                     vlc_value_t oldval, vlc_value_t newval,
>                     void * p_userdata );
>
> +static int
> +corks_changed(vlc_object_t *obj, const char *name, vlc_value_t old,
> +              vlc_value_t cur, void *opaque);
> +
>  static void
>  add_es_callbacks( input_thread_t *p_input_thread, libvlc_media_player_t *p_mi );
>
> @@ -462,6 +466,23 @@ static int snapshot_was_taken(vlc_object_t *p_this, char const *psz_cmd,
>      return VLC_SUCCESS;
>  }
>
> +static int corks_changed(vlc_object_t *obj, const char *name, vlc_value_t old,
> +                         vlc_value_t cur, void *opaque)
> +{
> +    libvlc_media_player_t *mp = (libvlc_media_player_t *)obj;
> +
> +    if (!old.i_int != !cur.i_int)
> +    {
> +        libvlc_event_t event;
> +
> +        event.type = cur.i_int ? libvlc_MediaPlayerCorked
> +                               : libvlc_MediaPlayerUncorked;
> +        libvlc_event_send(mp->p_event_manager, &event);
> +    }
> +    VLC_UNUSED(name); VLC_UNUSED(opaque);
> +    return VLC_SUCCESS;
> +}
> +
>  /**************************************************************************
>   * Create a Media Instance object.
>   *
> @@ -637,6 +658,10 @@ libvlc_media_player_new( libvlc_instance_t *instance )
>      register_event(mp, ESAdded);
>      register_event(mp, ESDeleted);
>      register_event(mp, ESSelected);
> +    register_event(mp, Corked);
> +    register_event(mp, Uncorked);
> +
> +    var_AddCallback(mp, "corks", corks_changed, NULL);
>
>      /* Snapshot initialization */
>      register_event(mp, SnapshotTaken);
> @@ -687,6 +712,9 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi )
>      var_DelCallback( p_mi->p_libvlc,
>                       "snapshot-file", snapshot_was_taken, p_mi );
>
> +    /* Detach callback from the media player / input manager object */
> +    var_DelCallback( p_mi, "corks", corks_changed, NULL );
> +
>      /* No need for lock_input() because no other threads knows us anymore */
>      if( p_mi->input.p_thread )
>          release_input_thread(p_mi);
> --
> 1.9.1
>



More information about the vlc-devel mailing list