Повышение потоков и FFmpeg: такой простой код дает мне ошибку C2064.Что я делаю не так? - PullRequest
0 голосов
/ 08 ноября 2010

У меня есть некоторый класс file.h, где public: bool frameSendingFinished; определено.Итак, в логике класса я создаю и кодирую видеокадр, теперь я хочу отправить его на какой-нибудь сервер с помощью ffmpeg.Я хочу отправить в отдельном потоке, поэтому в одной из моих функций классов (в file.cpp) я делаю:

  if (frameSendingFinished)
  {
      boost::thread UrlWriteFrame(url_context, (unsigned char *)pb_buffer, len);
  }

 ....// some other functions code etc.

     void VideoEncoder::UrlWriteFrame( URLContext *h, const unsigned char *buf, int size )
{
    frameSendingFinished =false;
    url_write (h, (unsigned char *)buf, size);
    frameSendingFinished =true;
}

, он работает без создания нового потока.Комментирование строки потока приводит к компиляции ...

, поэтому ошибка равна error c2064 term does not evaluate to a function taking 2 arguments

Итак, что мне делать с моим кодом, чтобы заставить работать надстройку в моем классе?

1 Ответ

1 голос
/ 08 ноября 2010

Когда вы пишете:

boost::thread UrlWriteFrame(url_context, (unsigned char *)pb_buffer, len);

, вы создаете объект boost :: thread с именем UrlWriteFrame и передаете url_context, pb_buffer и len конструктор boost :: thread.Один из ctors boost :: thread ожидает что-то вызываемое (указатель на функцию, объект-функцию) в качестве 1-го аргумента и передает другие аргументы этой функции.В вашем примере это заканчивается тем, что вы пытаетесь что-то вроде:

url_context(pb_buffer, len);

, что, вероятно, вызывает ошибку «не вычисляется для функции, принимающей 2 аргумента».

IIUC, вам бы хотелосьвызвать функцию UrlWriteFrame в новом потоке.Правильный способ сделать это с boost :: thread будет выглядеть примерно так:

boost::thread (&VideoEncoder::UrlWriteFrame, this, url_context, (unsigned char *)pb_buffer, len);

(при условии, что это вызывается одним из методов VideoEncoder)

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