void MediaWidget::WorkerCallback::consumeBlitRequest() { if (blitRequested(blitState) && mw.running) { usec_t base, inc; BlitterWidget *const blitter = mw.blitterContainer->blitter(); MediaWorker *const worker = mw.worker; worker->source()->generateVideoFrame(blitter->inBuffer()); blitter->blit(); base = synctimebase; inc = synctimeinc; SyncVar::Locked(worker->waitingForSync()).set(true); blitter->draw(); if (!blitter->frameTimeEst()) asleep.sleepUntil(base, inc); if (blitter->sync() < 0) mw.emitVideoBlitterFailure(); worker->setFrameTimeEstimate(blitter->frameTimeEst()); mw.dwmControl_.tick(); } }
void MediaWidget::WorkerCallback::consumeBlitRequest() { if (blitRequested(blitState_) && mw_.running_) { BlitterWidget *const blitter = mw_.blitterContainer_->blitter(); MediaWorker *const worker = mw_.worker_; worker->source().generateVideoFrame(blitter->inBuffer()); blitter->consumeInputBuffer(); usec_t const base = synctimebase_; usec_t const inc = synctimeinc_; SyncVar::Locked(worker->waitingForSync()).set(true); blitter->draw(); if (!blitter->frameTimeEst()) asleep_.sleepUntil(base, inc); if (blitter->present() < 0) mw_.emitVideoBlitterFailure(); worker->setFrameTimeEstimate(blitter->frameTimeEst()); mw_.dwmControl_.tick(); } }