Я пытался использовать pthread для параллельного сохранения видеокадров, используя C ++ OpenCV VideoWriter, в то время как снятие кадров с V4L2 (Ubuntu PC) в другом потоке.
До сих пор я делалобъявить объект Videowriter глобально, не передавая аргументы pthread. Тем не менее, я могу записать только 1 видеофайл за один запуск приложения.
Videowriter video('filename.avi', CV_FOURCC('M','J','P','G'), 30, Size(1920, 1080));
Mat img;
void *get_image(void *)
{
//dequeue v4l2 img
}
void *create_video(void *)
{
video.write(img)
}
int main()
{
i = 0;
pthread_t tid1, tid2;
//dequeue v4l2 first frame img
while(i<1000)
{
pthread_create(&tid1, NULL, &create_video, NULL);
pthread_create(&tid2, NULL, &get_image, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
i++;
}
return 0;
}
Я хочу избежать использования глобального объекта Videowriter, чтобы я мог изменять параметры видео, которое я сохраняю во время выполнения (FPS), и записывать разные видео из разных каналов, создавая несколько видеофайлов во время выполнения.
Кто-нибудь может подсказать, как этого добиться? Спасибо.