summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosep Torra <n770galaxy@gmail.com>2014-03-26 11:10:29 +0100
committerJosep Torra <n770galaxy@gmail.com>2014-03-26 11:10:29 +0100
commit2a9846138a14c819fe6ebef2e1be9e44c5296eb4 (patch)
treedb65e2923dee750ab48ef32b1ed2197e373506e5
parent1b38283ce3deda5abf9b70e6a4373ce53ddcfafd (diff)
Prepare code for supporting IPC between threads
-rw-r--r--triangle.c13
-rw-r--r--triangle.h4
-rw-r--r--video.c5
3 files changed, 15 insertions, 7 deletions
diff --git a/triangle.c b/triangle.c
index 42a78a4..420a459 100644
--- a/triangle.c
+++ b/triangle.c
@@ -77,6 +77,8 @@ typedef struct
// current distance from camera
GLfloat distance;
GLfloat distance_inc;
+
+ IPC_T ipc;
} CUBE_STATE_T;
static void init_ogl(CUBE_STATE_T *state);
@@ -91,7 +93,6 @@ static void exit_func(void);
static volatile int terminate;
static CUBE_STATE_T _state, *state=&_state;
-static void* eglImage = 0;
static pthread_t thread1;
@@ -402,21 +403,21 @@ static void init_textures(CUBE_STATE_T *state)
/* Create EGL Image */
- eglImage = eglCreateImageKHR(
+ state->ipc.eglImage = eglCreateImageKHR(
state->display,
state->context,
EGL_GL_TEXTURE_2D_KHR,
(EGLClientBuffer)state->tex,
0);
- if (eglImage == EGL_NO_IMAGE_KHR)
+ if (state->ipc.eglImage == EGL_NO_IMAGE_KHR)
{
printf("eglCreateImageKHR failed.\n");
exit(1);
}
// Start rendering
- pthread_create(&thread1, NULL, video_decode_test, eglImage);
+ pthread_create(&thread1, NULL, video_decode_test, &state->ipc);
// setup overall texture environment
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
@@ -432,9 +433,9 @@ static void init_textures(CUBE_STATE_T *state)
static void exit_func(void)
// Function to be passed to atexit().
{
- if (eglImage != 0)
+ if (state->ipc.eglImage != 0)
{
- if (!eglDestroyImageKHR(state->display, (EGLImageKHR) eglImage))
+ if (!eglDestroyImageKHR(state->display, (EGLImageKHR) state->ipc.eglImage))
printf("eglDestroyImageKHR failed.");
}
diff --git a/triangle.h b/triangle.h
index 0f50e93..8b69c55 100644
--- a/triangle.h
+++ b/triangle.h
@@ -26,5 +26,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
+typedef struct
+{
+ void* eglImage;
+} IPC_T;
void* video_decode_test(void* arg);
diff --git a/video.c b/video.c
index 7012019..6da0493 100644
--- a/video.c
+++ b/video.c
@@ -35,6 +35,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "bcm_host.h"
#include "ilclient.h"
+#include "triangle.h"
+
static OMX_BUFFERHEADERTYPE* eglBuffer = NULL;
static COMPONENT_T* egl_render = NULL;
@@ -54,7 +56,8 @@ void my_fill_buffer_done(void* data, COMPONENT_T* comp)
void *video_decode_test(void* arg)
{
const char* filename = "/opt/vc/src/hello_pi/hello_video/test.h264";
- eglImage = arg;
+ IPC_T * ipc = (IPC_T *) arg;
+ eglImage = ipc->eglImage;
if (eglImage == 0)
{