Ejemplo n.º 1
0
void AsyncVideoProvider::ProcAsync(uint_fast32_t req_version, bool check_updated) {
	// Only actually produce the frame if there's no queued changes waiting
	if (req_version < version || frame_number < 0) return;

	std::vector<AssDialogueBase const*> visible_lines;
	for (auto const& line : subs->Events) {
		if (!line.Comment && !(line.Start > time || line.End <= time))
			visible_lines.push_back(&line);
	}

	if (check_updated && !NeedUpdate(visible_lines)) return;

	last_lines.clear();
	last_lines.reserve(visible_lines.size());
	for (auto line : visible_lines)
		last_lines.push_back(*line);
	last_rendered = frame_number;

	try {
		FrameReadyEvent *evt = new FrameReadyEvent(ProcFrame(frame_number, time), time);
		evt->SetEventType(EVT_FRAME_READY);
		parent->QueueEvent(evt);
	}
	catch (wxEvent const& err) {
		// Pass error back to parent thread
		parent->QueueEvent(err.Clone());
	}
}
Ejemplo n.º 2
0
void OpenCVAdapter::Loop(){
	f_loop=true;
	cvNamedWindow (windowNameCap.c_str(), CV_WINDOW_AUTOSIZE);
	cvNamedWindow (windowNameThr.c_str(), CV_WINDOW_AUTOSIZE);
	HWND hWndCap=(HWND)cvGetWindowHandle(windowNameCap.c_str());
	HWND hWndThr=(HWND)cvGetWindowHandle(windowNameThr.c_str());
	cvCreateTrackbar(trackbarName.c_str(),windowNameThr.c_str(),&trackbarPosition,100,NULL);
	cvCreateTrackbar(trackbarName2.c_str(),windowNameThr.c_str(),&trackbarPosition2,200,NULL);

	label = new unsigned char[xnum*ynum];
	labeled = new short[xnum*ynum];

	int fc=0;

	for(;f_loop;){
		if(f_start){
			GetFrame();
			LabelFrame();
			ProcFrame();
			cvShowImage (windowNameThr.c_str(), frame);
		}
		cvWaitKey (1000/fps);

	}
	SAFE_DELETE_ARRAY(label);
	SAFE_DELETE_ARRAY(labeled);

	cvDestroyWindow (windowNameCap.c_str());
	cvDestroyWindow (windowNameThr.c_str());
}
Ejemplo n.º 3
0
std::shared_ptr<VideoFrame> ThreadedFrameSource::GetFrame(int frame, double time, bool raw) {
	std::shared_ptr<VideoFrame> ret;
	worker->Sync([&]{
		ret = ProcFrame(frame, time, raw);
	});
	return ret;
}
Ejemplo n.º 4
0
void *ThreadedFrameSource::Entry() {
	while (!TestDestroy()) {
		double time;
		int frameNum;
		std::unique_ptr<AssFile> newSubs;
		std::deque<std::pair<size_t, std::unique_ptr<AssEntry>>> updates;
		{
			wxMutexLocker jobLocker(jobMutex);

			if (!run)
				return EXIT_SUCCESS;

			if (nextTime == -1.) {
				jobReady.Wait();
				continue;
			}

			time = nextTime;
			frameNum = nextFrame;
			nextTime = -1.;
			newSubs = move(nextSubs);
			updates = move(changedSubs);
		}

		if (newSubs || updates.size()) {
			wxMutexLocker fileLocker(fileMutex);

			if (newSubs)
				subs = move(newSubs);

			if (updates.size()) {
				size_t i = 0;
				auto it = subs->Line.begin();
				// Replace each changed line in subs with the updated version
				for (auto& update : updates) {
					advance(it, update.first - i);
					i = update.first;
					subs->Line.insert(it, *update.second.release());
					delete &*it--;
				}
			}

			singleFrame = -1;
		}

		try {
			FrameReadyEvent *evt = new FrameReadyEvent(ProcFrame(frameNum, time), time);
			evt->SetEventType(EVT_FRAME_READY);
			parent->QueueEvent(evt);
		}
		catch (wxEvent const& err) {
			// Pass error back to parent thread
			parent->QueueEvent(err.Clone());
		}
	}

	return EXIT_SUCCESS;
}
Ejemplo n.º 5
0
void ThreadedFrameSource::ProcAsync(uint_fast32_t req_version) {
	// Only actually produce the frame if there's no queued changes waiting
	if (req_version < version || frame_number < 0) return;

	try {
		FrameReadyEvent *evt = new FrameReadyEvent(ProcFrame(frame_number, time), time);
		evt->SetEventType(EVT_FRAME_READY);
		parent->QueueEvent(evt);
	}
	catch (wxEvent const& err) {
		// Pass error back to parent thread
		parent->QueueEvent(err.Clone());
	}
}
Ejemplo n.º 6
0
void *ThreadedFrameSource::Entry() {
	while (!TestDestroy()) {
		double time;
		int frameNum;
		std::auto_ptr<AssFile> newSubs;
		{
			wxMutexLocker jobLocker(jobMutex);

			if (!run)
				return EXIT_SUCCESS;

			if (nextTime == -1.) {
				jobReady.Wait();
				continue;
			}

			time = nextTime;
			frameNum = nextFrame;
			nextTime = -1.;
			newSubs = nextSubs;
		}

		if (newSubs.get()) {
			wxMutexLocker fileLocker(fileMutex);
			subs = newSubs;
			singleFrame = -1;
		}

		try {
			FrameReadyEvent *evt = new FrameReadyEvent(ProcFrame(frameNum, time), time);
			evt->SetEventType(EVT_FRAME_READY);
			parent->QueueEvent(evt);
		}
		catch (wxEvent const& err) {
			// Pass error back to parent thread
			parent->QueueEvent(err.Clone());
		}
	}

	return EXIT_SUCCESS;
}
Ejemplo n.º 7
0
std::shared_ptr<AegiVideoFrame> ThreadedFrameSource::GetFrame(int frame, double time, bool raw) {
	return ProcFrame(frame, time, raw);
}
Ejemplo n.º 8
0
std::shared_ptr<VideoFrame> AsyncVideoProvider::GetFrame(int frame, double time, bool raw) {
	std::shared_ptr<VideoFrame> ret;
	worker->Sync([&]{ ret = ProcFrame(frame, time, raw); });
	return ret;
}