Beispiel #1
0
StGLTextureQueue::StGLTextureQueue(const size_t theQueueSizeMax)
: myDataFront(NULL),
  myDataSnap(NULL),
  myDataBack(NULL),
  myQueueSize(0),
  myQueueSizeMax(theQueueSizeMax),
  mySwapFBCount(0),
  myCurrSrcFormat(ST_V_SRC_MONO),
  myCurrPts(0.0),
  myNewShotEvent(false),
  myIsInUpdTexture(false),
  myIsReadyToSwap(false),
  myToCompress(false),
  myHasStream(false) {
    ST_DEBUG_ASSERT(myQueueSizeMax >= 2);

    // we create 'empty' queue
    myDataFront = new StGLTextureData();
    StGLTextureData* iter = myDataFront;
    for(size_t i = 1; i < myQueueSizeMax; ++i) {
        iter->setNext(new StGLTextureData());
        iter = iter->getNext();
    }
    iter->setNext(myDataFront); // data in loop
    myDataBack = myDataFront;
}
Beispiel #2
0
void StGLTextureQueue::clear() {
    myMutexPop.lock();
    myMutexPush.lock();
    myMutexSize.lock();
    mySwapFBMutex.lock();
        // decrease StStereoSource counters
        StGLTextureData* anIterFront = myDataFront;
        for(size_t i = 0; i < myQueueSize; ++i, anIterFront = anIterFront->getNext()) {
            anIterFront->resetStParams();
        }
        // reset queue
        myQueueSize     = 0;
        myDataBack      = myDataFront;
        if(myDataSnap != NULL) {
            myDataSnap->resetStParams();
        }
        myDataSnap      = NULL;
        mySwapFBCount   = 0;
        myIsReadyToSwap = false; // invalidate currently uploaded image in back buffer
        // empty texture update sequence
        myIsInUpdTexture = false;
    mySwapFBMutex.unlock();
    myMutexSize.unlock();
    myMutexPush.unlock();
    myMutexPop.unlock();
}