src/RenderThread.c File Reference

#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

Function Documentation

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  ) 

Implementation of FreeCaptureThreadArgs.

00123 {
00124    if(pRenderThreadArgs && *pRenderThreadArgs)
00125    {
00126       free(*pRenderThreadArgs);
00127       *pRenderThreadArgs = 0;
00128    }
00129 }

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 }


Variable Documentation

int RenderThreadStop = 0

sBufferFIFO sBufFIFO


Generated on Fri Jan 20 10:36:57 2017 for Vision Utils by  doxygen 1.4.7