Как передать объект opencv Videowriter в качестве аргумента pthread, не используя глобальную переменную Videowriter? - PullRequest
0 голосов
/ 30 сентября 2019

Я пытался использовать 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), и записывать разные видео из разных каналов, создавая несколько видеофайлов во время выполнения.

Кто-нибудь может подсказать, как этого добиться? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...