#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <poll.h>
#include <errno.h>
#include "RenderThread.h"
#include "Render.h"
#include "CaptureDebug.h"
Functions | |
void * | RenderThreadFunc (void *arg) |
int | CreateRenderThread (psRender pRender, psRenderThreadArgs pRenderThreadArgs) |
void | JoinRenderThread (psRender pRender) |
void | FreeRenderThreadArgs (psRenderThreadArgs *pRenderThreadArgs) |
Variables | |
int | RenderThreadStop = 0 |
sBufferFIFO | sBufFIFO |
int CreateRenderThread | ( | psRender | pRender, | |
psRenderThreadArgs | pRenderThreadArgs | |||
) |
Implementation of CreateRenderThread.
00090 { 00091 int ret = 0; 00092 00093 if(pRenderThreadArgs) 00094 { 00095 CapError("Render Thread structure(%p) may be initialised, bailing out\n", pRenderThreadArgs); 00096 return -1; 00097 } 00098 00099 pRenderThreadArgs = malloc(sizeof(sRenderThreadArgs)); 00100 if(pRenderThreadArgs == 0) 00101 return -1; 00102 00103 memset(pRenderThreadArgs, 0, sizeof(sRenderThreadArgs)); 00104 pRenderThreadArgs->pRender = pRender; 00105 ret = pthread_create(&pRender->RenderThread, NULL, RenderThreadFunc, (void*)pRenderThreadArgs); 00106 return 0; 00107 }
void FreeRenderThreadArgs | ( | psRenderThreadArgs * | pRenderThreadArgs | ) |
void JoinRenderThread | ( | psRender | pRender | ) |
Implementation of JoinRenderThread.
00113 { 00114 CapMessage("Waiting for Render thread to join...\n"); 00115 pthread_join(pRender->RenderThread, 0); 00116 CapMessage("Capture Render has joined...\n"); 00117 }
void* RenderThreadFunc | ( | void * | arg | ) |
Implementation of CaptureThreadFunc.
00037 { 00038 psRenderThreadArgs pRenderThreadArgs = (psRenderThreadArgs)arg; 00039 psRender pRender = pRenderThreadArgs->pRender; 00040 00041 CapError("Render Thread Starting\n"); 00042 while(!RenderThreadStop) 00043 { 00044 CapError("Render Thread Working [ rd(%d) - wt(%d)\n", 00045 sBufFIFO.read, sBufFIFO.read); 00046 if(sBufFIFO.read != sBufFIFO.write) 00047 { 00048 if(sBufFIFO.write > sBufFIFO.read) 00049 { 00050 if((sBufFIFO.write - sBufFIFO.read) >= 5) 00051 { 00052 /* Got some stuff to process */ 00053 CapError("Render Thread Processing\n"); 00054 sBufFIFO.read++; 00055 if(sBufFIFO.read == 8) 00056 { 00057 sBufFIFO.read = 0; 00058 } 00059 } 00060 } 00061 else 00062 { 00063 if((8 - sBufFIFO.read + 1) >= 5) 00064 { 00065 /* Got some stuff to process */ 00066 CapError("Render Thread Processing (2)\n"); 00067 sBufFIFO.read++; 00068 if(sBufFIFO.read == 8) 00069 { 00070 sBufFIFO.read = 0; 00071 } 00072 } 00073 } 00074 } 00075 else 00076 { 00077 CapError("Render Thread Wait for more data\n"); 00078 } 00079 sleep(1); 00080 } 00081 00082 CapMessage("Render Thread Finished\n"); 00083 CapError("Render Thread Finished\n"); 00084 }
int RenderThreadStop = 0 |