[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