[vlc-commits] nativewindowpriv: use only one call to lock/unlock sw buffers
Thomas Guillem
git at videolan.org
Fri Nov 21 11:13:07 CET 2014
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Fri Nov 21 10:48:50 2014 +0100| [1779b7fe569d441ed7c47e3065f8d97f57e232a1] | committer: Jean-Baptiste Kempf
nativewindowpriv: use only one call to lock/unlock sw buffers
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1779b7fe569d441ed7c47e3065f8d97f57e232a1
---
modules/video_output/android/android_window.c | 19 +++++--------------
modules/video_output/android/nativewindowpriv.c | 21 +++++++++++++++++----
modules/video_output/android/utils.h | 4 ++--
3 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/modules/video_output/android/android_window.c b/modules/video_output/android/android_window.c
index d2ac522..644fa9e 100644
--- a/modules/video_output/android/android_window.c
+++ b/modules/video_output/android/android_window.c
@@ -470,20 +470,13 @@ static void AndroidWindow_UnlockPicture(vout_display_sys_t *sys,
picture_sys_t *p_picsys = p_pic->p_sys;
if (p_window->b_use_priv) {
- int err = 0;
void *p_handle = p_picsys->priv.sw.p_handle;
if (p_handle == NULL)
return;
- err = sys->anwp.unlockData(p_window->p_handle_priv, p_handle);
-
- if (err == 0) {
- if (p_picsys->b_render)
- err = sys->anwp.queue(p_window->p_handle_priv, p_handle);
- else
- err = sys->anwp.cancel(p_window->p_handle_priv, p_handle);
- }
+ sys->anwp.unlockData(p_window->p_handle_priv, p_handle,
+ p_picsys->b_render);
} else
sys->anw.unlockAndPost(p_window->p_handle);
}
@@ -498,11 +491,9 @@ static int AndroidWindow_LockPicture(vout_display_sys_t *sys,
void *p_handle;
int err;
- err = sys->anwp.dequeue(p_window->p_handle_priv, &p_handle);
- err = err == 0 ? sys->anwp.lock(p_window->p_handle_priv, p_handle) : err;
- err = err == 0 ? sys->anwp.lockData(p_window->p_handle_priv,
- p_handle,
- &p_picsys->priv.sw.buf) : err;
+ err = sys->anwp.lockData(p_window->p_handle_priv,
+ &p_handle,
+ &p_picsys->priv.sw.buf);
if (err != 0)
return -1;
p_picsys->priv.sw.p_handle = p_handle;
diff --git a/modules/video_output/android/nativewindowpriv.c b/modules/video_output/android/nativewindowpriv.c
index 626f117..0557fcf 100644
--- a/modules/video_output/android/nativewindowpriv.c
+++ b/modules/video_output/android/nativewindowpriv.c
@@ -291,15 +291,22 @@ int ANativeWindowPriv_cancel( native_window_priv *priv, void *p_handle )
return 0;
}
-int ANativeWindowPriv_lockData( native_window_priv *priv, void *p_handle,
+int ANativeWindowPriv_lockData( native_window_priv *priv, void **pp_handle,
ANativeWindow_Buffer *p_out_anb )
{
- ANativeWindowBuffer_t *anb = (ANativeWindowBuffer_t *)p_handle;
+ ANativeWindowBuffer_t *anb;
status_t err = NO_ERROR;
void *p_data;
+ err = ANativeWindowPriv_dequeue( priv, pp_handle );
+ CHECK_ERR();
+
+ anb = (ANativeWindowBuffer_t *)*pp_handle;
CHECK_ANB();
+ err = ANativeWindowPriv_lock( priv, *pp_handle );
+ CHECK_ERR();
+
err = priv->gralloc->lock( priv->gralloc, anb->handle, priv->usage,
0, 0, anb->width, anb->height, &p_data );
CHECK_ERR();
@@ -314,16 +321,22 @@ int ANativeWindowPriv_lockData( native_window_priv *priv, void *p_handle,
return 0;
}
-int ANativeWindowPriv_unlockData( native_window_priv *priv, void *p_handle )
+int ANativeWindowPriv_unlockData( native_window_priv *priv, void *p_handle,
+ bool b_render )
{
ANativeWindowBuffer_t *anb = (ANativeWindowBuffer_t *)p_handle;
status_t err = NO_ERROR;
CHECK_ANB();
- err = priv->gralloc->unlock(priv->gralloc, anb->handle);
+ err = priv->gralloc->unlock( priv->gralloc, anb->handle );
CHECK_ERR();
+ if( b_render )
+ ANativeWindowPriv_queue( priv, p_handle );
+ else
+ ANativeWindowPriv_cancel( priv, p_handle );
+
return 0;
}
diff --git a/modules/video_output/android/utils.h b/modules/video_output/android/utils.h
index 7ff1542..96d4f86 100644
--- a/modules/video_output/android/utils.h
+++ b/modules/video_output/android/utils.h
@@ -82,8 +82,8 @@ typedef int (*ptr_ANativeWindowPriv_dequeue) (native_window_priv *, void **);
typedef int (*ptr_ANativeWindowPriv_lock) (native_window_priv *, void *);
typedef int (*ptr_ANativeWindowPriv_queue) (native_window_priv *, void *);
typedef int (*ptr_ANativeWindowPriv_cancel) (native_window_priv *, void *);
-typedef int (*ptr_ANativeWindowPriv_lockData) (native_window_priv *, void *, ANativeWindow_Buffer *);
-typedef int (*ptr_ANativeWindowPriv_unlockData) (native_window_priv *, void *);
+typedef int (*ptr_ANativeWindowPriv_lockData) (native_window_priv *, void **, ANativeWindow_Buffer *);
+typedef int (*ptr_ANativeWindowPriv_unlockData) (native_window_priv *, void *, bool b_render);
typedef int (*ptr_ANativeWindowPriv_setOrientation) (native_window_priv *, int);
typedef struct
More information about the vlc-commits
mailing list