[vlc-devel] [PATCH 4/5] android: util: implement wrapper for ASurfaceTexture API

Thomas Guillem thomas at gllm.fr
Tue Apr 28 13:03:36 CEST 2020



On Mon, Apr 27, 2020, at 23:28, Louis Regnier wrote:
> To use new native functions, we wrap ASurfaceTextureAPI structure pointers
> inside a new set of native functions, it allow to describe some specifics
> behaviors for the NDK API.
> ---
>  modules/video_output/android/utils.c | 50 +++++++++++++++++++++++++++-
>  1 file changed, 49 insertions(+), 1 deletion(-)
> 
> diff --git a/modules/video_output/android/utils.c 
> b/modules/video_output/android/utils.c
> index 62d5ba16b0..cb190a3c53 100644
> --- a/modules/video_output/android/utils.c
> +++ b/modules/video_output/android/utils.c
> @@ -30,6 +30,19 @@ typedef ANativeWindow* 
> (*ptr_ANativeWindow_fromSurface)(JNIEnv*, jobject);
>  typedef ANativeWindow* 
> (*ptr_ANativeWindow_fromSurfaceTexture)(JNIEnv*, jobject);
>  typedef void (*ptr_ANativeWindow_release)(ANativeWindow*);
>  
> +typedef int (*ptr_SurfaceTexture_attachToGLContext)
> +                                        (AWindowHandler *p_awh, 
> uint32_t tex_name);
> +typedef int (*ptr_SurfaceTexture_updateTexImage)(AWindowHandler *p_awh,
> +                                        const float 
> **pp_transform_mtx);
> +typedef void (*ptr_SurfaceTexture_detachFromGLContext)(AWindowHandler 
> *p_awh);
> +
> +struct SurfaceTextureHandler
> +{
> +    ptr_SurfaceTexture_attachToGLContext pf_attachToGL;
> +    ptr_SurfaceTexture_updateTexImage pf_updateTexImage;
> +    ptr_SurfaceTexture_detachFromGLContext pf_detachFromGL;
> +};
> +
>  typedef void (*ptr_ASurfaceTexture_getTransformMatrix)
>                                          (ASurfaceTexture *st, float 
> mtx[16]);
>  typedef ASurfaceTexture* (*ptr_ASurfaceTexture_fromSurfaceTexture)
> @@ -76,6 +89,7 @@ struct AWindowHandler
>      ptr_ANativeWindow_release pf_winRelease;
>      native_window_api_t anw_api;
>  
> +    struct SurfaceTextureHandler st;
>      struct ASurfaceTextureAPI ast_api;
>      bool b_has_ast_api;
>  
> @@ -311,6 +325,13 @@ static int JNI_getSurfaceTexture(JNIEnv *env)
>      return 0;
>  }
>  
> +static int
> +ASurfaceTexture_attachToGLContext(AWindowHandler *p_awh, uint32_t 
> texName);
> +static int
> +ASurfaceTexture_updateTexImage(AWindowHandler *p_awh, const float 
> **pp_transform_mtx);
> +static void
> +ASurfaceTexture_detachFromGLContext(AWindowHandler *p_awh);
> +
>  static int
>  LoadSurfaceTextureAPI(AWindowHandler *p_awh, void *p_library)
>  {
> @@ -373,9 +394,13 @@ LoadNativeWindowAPI(AWindowHandler *p_awh, JNIEnv 
> *p_env)
>       && p_awh->anw_api.winLock && p_awh->anw_api.unlockAndPost
>       && p_awh->anw_api.setBuffersGeometry)
>      {
> -        if (LoadSurfaceTextureAPI(p_awh, p_library) == VLC_SUCCESS)
> +        if (!LoadSurfaceTextureAPI(p_awh, p_library))

Why this change ?

>              JNI_getSurfaceTexture(p_env);
>          p_awh->b_has_ast_api = false;
> +        p_awh->st.pf_attachToGL = ASurfaceTexture_attachToGLContext;
> +        p_awh->st.pf_updateTexImage = ASurfaceTexture_updateTexImage;
> +        p_awh->st.pf_detachFromGL = 
> ASurfaceTexture_detachFromGLContext;
> +
>          p_awh->p_anw_dl = p_library;
>      }
>      else
> @@ -869,6 +894,12 @@ AWindowHandler_setVideoLayout(AWindowHandler 
> *p_awh,
>      return VLC_SUCCESS;
>  }
>  
> +static int
> +ASurfaceTexture_attachToGLContext(AWindowHandler *p_awh, uint32_t 
> texName)
> +{
> +    return p_awh->ast_api.pf_attachToGL(p_awh->ast_api.p_ast, texName);
> +}
> +
>  int
>  SurfaceTexture_attachToGLContext(AWindowHandler *p_awh, int tex_name)
>  {
> @@ -880,6 +911,12 @@ SurfaceTexture_attachToGLContext(AWindowHandler 
> *p_awh, int tex_name)
>             VLC_SUCCESS : VLC_EGENERIC;
>  }
>  
> +static void
> +ASurfaceTexture_detachFromGLContext(AWindowHandler *p_awh)
> +{
> +    p_awh->ast_api.pf_detachFromGL(p_awh->ast_api.p_ast);
> +}
> +
>  void
>  SurfaceTexture_detachFromGLContext(AWindowHandler *p_awh)
>  {
> @@ -900,6 +937,17 @@ SurfaceTexture_detachFromGLContext(AWindowHandler *p_awh)
>      }
>  }
>  
> +static int
> +ASurfaceTexture_updateTexImage(AWindowHandler *p_awh, const float 
> **pp_transform_mtx)
> +{
> +    if (p_awh->ast_api.pf_updateTexImage(p_awh->ast_api.p_ast))
> +        return VLC_EGENERIC;
> +
> +    p_awh->ast_api.pf_getTransMatrix(p_awh->ast_api.p_ast, 
> p_awh->ast_api.transMat);
> +    *pp_transform_mtx = p_awh->ast_api.transMat;
> +    return VLC_SUCCESS;
> +}
> +
>  int
>  SurfaceTexture_waitAndUpdateTexImage(AWindowHandler *p_awh,
>                                       const float **pp_transform_mtx)

Patches 4 and 5 should be squashed together.

Indeed, you break the git bisect here: if the patch 4 is applied without the patch 5, the legacy JNI API will be disabled.

> -- 
> 2.26.2
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list