FskErr KplScreenSetContinuousDrawing(void *state, void *obj, UInt32 propertyID, FskMediaPropertyValue property) { Boolean on = property->value.b; #if SUPPORT_FLIP_THREAD if (on) { if (!gKplScreen->drawingPumpEnabled) { gKplScreen->drawingPumpEnabled = true; FskTimeClear(&gKplScreen->lastUpdateTime); FskTimeGetNow(&gKplScreen->lastFlipTime); // Just trying to get close, since we just turned on the pump and can't rely on the last flip time FskTimeAddMS(&gKplScreen->lastFlipTime, FskTimeInMS(&gKplScreen->updateIntervalTime) >> 1); FskInstrumentedTypePrintfNormal(&gKplScreenTypeInstrumentation, "START drawing pump **\n"); // Kick off the drawing pump FskThreadPostCallback(FskThreadGetMain(), drawingPumpCallback, (void*)gKplScreen->callbackPostedCount, NULL, NULL, NULL); } }
Boolean KplTimeCallbackGetNextTime(const KplTime now, KplTime whenNext, void *threadIn) { KplThread thread = threadIn ? threadIn : KplThreadGetCurrent(); if (thread->timerCallbacks) { KplTimeCallback cb = (KplTimeCallback)thread->timerCallbacks; if (FskTimeCompare((FskTime)now, (FskTime)&cb->trigger) < 1) { FskTimeClear((FskTime)whenNext); return false; } *whenNext = cb->trigger; } else { *whenNext = *now; FskTimeAddSecs((FskTime)whenNext, 3600 * 12); // a long time from now } return true; }
FskErr KplScreenSetUpdateInterval(void *state, void *obj, UInt32 propertyID, FskMediaPropertyValue property) { UInt32 i, updateRate; // We set the actual interval based on the vsync interval updateRate = (UInt32)floor(((double)property->value.integer / gKplScreen->vSyncInterval + 0.5)); if (!updateRate) updateRate = 1; gKplScreen->updateInterval = updateRate * gKplScreen->vSyncInterval; MLOG("Setting update interval to %ld ms", gKplScreen->updateInterval); FskTimeClear(&gKplScreen->updateIntervalTime); for (i = 0; i < updateRate; ++i) FskTimeAdd(&gKplScreen->vSyncIntervalTime, &gKplScreen->updateIntervalTime); MLOG("Setting update interval time to %ld.%06lds", gKplScreen->updateIntervalTime.seconds, gKplScreen->updateIntervalTime.useconds); return kFskErrNone; }