[vlc-devel] [PATCH 1/2] android: add a new file in order to refactor common code between Android vout modules.

Felix Abecassis felix.abecassis at gmail.com
Tue Jan 14 17:34:33 CET 2014


Implement a function to load the Native Window API from the Android
library.  This API is needed by current vouts nativewindow and surface
and will also be needed by the opaque vout.
---
 modules/video_output/android/utils.c | 50 ++++++++++++++++++++++++++++++++++++
 modules/video_output/android/utils.h | 42 ++++++++++++++++++++++++++++++
 2 files changed, 92 insertions(+)
 create mode 100644 modules/video_output/android/utils.c
 create mode 100644 modules/video_output/android/utils.h

diff --git a/modules/video_output/android/utils.c b/modules/video_output/android/utils.c
new file mode 100644
index 0000000..027ba6d
--- /dev/null
+++ b/modules/video_output/android/utils.c
@@ -0,0 +1,50 @@
+/*****************************************************************************
+ * utils.c: shared code between Android vout modules.
+ *****************************************************************************
+ * Copyright (C) 2014 VLC authors and VideoLAN
+ *
+ * Authors: Felix Abecassis <felix.abecassis at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#include "utils.h"
+#include <dlfcn.h>
+
+void *LoadNativeWindowAPI(native_window_api_t *native)
+{
+    void *p_library = dlopen("libandroid.so", RTLD_NOW);
+    if (!p_library)
+        return NULL;
+
+    native->winFromSurface =
+        (ptr_ANativeWindow_fromSurface)(dlsym(p_library, "ANativeWindow_fromSurface"));
+    native->winRelease =
+        (ptr_ANativeWindow_release)(dlsym(p_library, "ANativeWindow_release"));
+    native->winLock =
+        (ptr_ANativeWindow_lock)(dlsym(p_library, "ANativeWindow_lock"));
+    native->unlockAndPost =
+        (ptr_ANativeWindow_unlockAndPost)(dlsym(p_library, "ANativeWindow_unlockAndPost"));
+
+    if (native->winFromSurface && native->winRelease && native->winLock && native->unlockAndPost)
+        return p_library;
+
+    native->winFromSurface = NULL;
+    native->winRelease = NULL;
+    native->winLock = NULL;
+    native->unlockAndPost = NULL;
+
+    dlclose(p_library);
+    return NULL;
+}
diff --git a/modules/video_output/android/utils.h b/modules/video_output/android/utils.h
new file mode 100644
index 0000000..cd36bc3
--- /dev/null
+++ b/modules/video_output/android/utils.h
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ * utils.h: shared code between Android vout modules.
+ *****************************************************************************
+ * Copyright (C) 2014 VLC authors and VideoLAN
+ *
+ * Authors: Felix Abecassis <felix.abecassis at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#include <android/native_window.h>
+#include <jni.h>
+#include <android/native_window_jni.h>
+
+typedef ANativeWindow* (*ptr_ANativeWindow_fromSurface)(JNIEnv*, jobject);
+typedef void (*ptr_ANativeWindow_release)(ANativeWindow*);
+typedef int32_t (*ptr_ANativeWindow_lock)(ANativeWindow*, ANativeWindow_Buffer*, ARect*);
+typedef void (*ptr_ANativeWindow_unlockAndPost)(ANativeWindow*);
+
+typedef struct
+{
+    ptr_ANativeWindow_fromSurface winFromSurface;
+    ptr_ANativeWindow_release winRelease;
+    ptr_ANativeWindow_lock winLock;
+    ptr_ANativeWindow_unlockAndPost unlockAndPost;
+} native_window_api_t;
+
+/* Fill the structure passed as parameter and return a library handle
+   that should be destroyed with dlclose. */
+void *LoadNativeWindowAPI(native_window_api_t *native);
-- 
1.8.3.2




More information about the vlc-devel mailing list