[vlc-devel] [PATCH] lib: add libvlc_media_player_set_android_context

Rémi Denis-Courmont remi at remlab.net
Thu Jun 25 14:50:04 CEST 2015


Le 2015-06-25 15:03, Thomas Guillem a écrit :
> Used to pass the Java VM and a
> rg.videolan.libvlc.IAWindowNativeHandler jobject.
> ---
>  include/vlc/libvlc_media_player.h | 21 +++++++++++++++++++++
>  lib/media_player.c                | 20 ++++++++++++++++++++
>  2 files changed, 41 insertions(+)
>
> diff --git a/include/vlc/libvlc_media_player.h
> b/include/vlc/libvlc_media_player.h
> index d24392d..890c404 100644
> --- a/include/vlc/libvlc_media_player.h
> +++ b/include/vlc/libvlc_media_player.h
> @@ -31,6 +31,12 @@ extern "C" {
>  # else
>  #  include <stdbool.h>
>  # endif
> +# ifdef __ANDROID__
> +#  include <jni.h>
> +# else
> +   typedef void JavaVM;
> +   typedef void *jobject;

This is awful. What if JavaVM or jobject are defined in the including 
module?

> +# endif
>
>  /** \defgroup libvlc_media_player LibVLC media player
>   * \ingroup libvlc
> @@ -514,6 +520,21 @@ LIBVLC_API void libvlc_media_player_set_hwnd (
> libvlc_media_player_t *p_mi, void
>  LIBVLC_API void *libvlc_media_player_get_hwnd (
> libvlc_media_player_t *p_mi );
>
>  /**
> + * Set the android context.
> + *
> + * \version LibVLC 3.0.0 and later.
> + *
> + * \param p_mi the media player
> + * \param p_jvm the Java VM of the android process.
> + * \param awindow_handler org.videolan.libvlc.IAWindowNativeHandler
> interface
> + *        implemented by the org.videolan.libvlc.MediaPlayer class 
> from the
> + *        libvlc-android project.
> + */
> +LIBVLC_API void libvlc_media_player_set_android_context(
> libvlc_media_player_t *p_mi,
> +                                                         JavaVM 
> *p_jvm,
> +                                                         jobject
> awindow_handler );

The MacOS port used to require a custom protocol for embedding, instead 
of a standard platform surface/window handle. From what I have seen, it 
really did not go down well with the application developers.

> +
> +/**
>   * Callback prototype for audio playback.
>   * \param data data pointer as passed to 
> libvlc_audio_set_callbacks() [IN]
>   * \param samples pointer to the first audio sample to play back 
> [IN]
> diff --git a/lib/media_player.c b/lib/media_player.c
> index f35c0cb..d58865a 100644
> --- a/lib/media_player.c
> +++ b/lib/media_player.c
> @@ -515,6 +515,10 @@ libvlc_media_player_new( libvlc_instance_t 
> *instance )
>      var_Create (mp, "drawable-agl", VLC_VAR_INTEGER);
>      var_Create (mp, "drawable-nsobject", VLC_VAR_ADDRESS);
>  #endif
> +#ifdef __ANDROID__
> +    var_Create (mp, "android-jvm", VLC_VAR_ADDRESS);
> +    var_Create (mp, "drawable-androidwindow", VLC_VAR_ADDRESS);
> +#endif
>
>      var_Create (mp, "keyboard-events", VLC_VAR_BOOL);
>      var_SetBool (mp, "keyboard-events", true);
> @@ -1097,6 +1101,22 @@ void *libvlc_media_player_get_hwnd(
> libvlc_media_player_t *p_mi )
>  #endif
>  }
>
> 
> +/**************************************************************************
> + * set_android_context
> + 
> **************************************************************************/
> +void libvlc_media_player_set_android_context( libvlc_media_player_t 
> *p_mi,
> +                                              JavaVM *p_jvm,
> +                                              jobject 
> awindow_handler )
> +{
> +    assert (p_mi != NULL);
> +#ifdef __ANDROID__
> +    var_SetAddress (p_mi, "android-jvm", p_jvm);
> +    var_SetAddress (p_mi, "drawable-androidwindow", 
> awindow_handler);
> +#else
> +    (void) p_mi; (void) p_jvm; (void) awindow_handler;
> +#endif
> +}
> +
>  void libvlc_audio_set_callbacks( libvlc_media_player_t *mp,
>                                   libvlc_audio_play_cb play_cb,
>                                   libvlc_audio_pause_cb pause_cb,

-- 
Rémi Denis-Courmont
http://www.remlab.net/



More information about the vlc-devel mailing list