Пример #1
0
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();
	}
}
Пример #2
0
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();
	}
}