diff options
author | Josep Torra <n770galaxy@gmail.com> | 2014-03-26 11:10:29 +0100 |
---|---|---|
committer | Josep Torra <n770galaxy@gmail.com> | 2014-03-26 11:10:29 +0100 |
commit | 2a9846138a14c819fe6ebef2e1be9e44c5296eb4 (patch) | |
tree | db65e2923dee750ab48ef32b1ed2197e373506e5 | |
parent | 1b38283ce3deda5abf9b70e6a4373ce53ddcfafd (diff) |
Prepare code for supporting IPC between threads
-rw-r--r-- | triangle.c | 13 | ||||
-rw-r--r-- | triangle.h | 4 | ||||
-rw-r--r-- | video.c | 5 |
3 files changed, 15 insertions, 7 deletions
@@ -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."); } @@ -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); @@ -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) { |