OpenEL GS之深入解析视频图像处理中怎么实现错帧同步
void AsyncFramework::FirstStepProcess() {
LOGCATE("AsyncFramework::FirstStepProcess start");
int index = 0;
while (true) {
// 等待主线程发来的信号
sem_wait(&first_thread_sem);
if(!work_thread_running) break;
LOGCATE("AsyncFramework::FirstStepProcess index=%d", index);
strcat(work_buffers[index % WORK_THREAD_NUM], "FirstStep ");
// 休眠模拟处理耗时
this_thread::sleep_for(chrono::milliseconds(200));
// 处理完成后通知第二个工作线程进行第二步处理
sem_post(&second_thread_sem);
index++;
}
LOGCATE("AsyncFramework::FirstStepProcess end");
}
void AsyncFramework::SecondStepProcess() {
LOGCATE("AsyncFramework::SecondStepProcess start");
int index = 0;
while (true) {
// 等待第一个工作线程发来的信号
sem_wait(&second_thread_sem);
if(!work_thread_running) break;
LOGCATE("AsyncFramework::SecondStepProces index=%d", index);
strcat(work_buffers[index % WORK_THREAD_NUM], "SecondStep");
// 休眠模拟处理耗时
this_thread::sleep_for(chrono::milliseconds(200));
// 第二步处理完成后通知主线程结束等待
sem_post(&main_sem);
index++;
}
LOGCATE("AsyncFramework::SecondStepProcess end");
}