Есть программа работающая в несколько потоков и есть необходимость заполнять буфер в потоке данными из другого потока.
Код: Выделить всё
class Stream : protected Thread {
struct StreamEnv {
Rendezvous_Handle hRendezvousInit;
unsigned int imageWidth;
unsigned int imageHeight;
Fifo_Handle hInFifo;
source_buff_t m_jpeg;
source_buff_t m_meta;
} streamEnv;
....................................
public:
friend int Display::fillMetaBuffer(unsigned char *buff);
............................
Код: Выделить всё
int Display::fillMetaBuffer(unsigned char *buff)
{
if (NULL == buff)
return -1;
unsigned int size = 32;
pthread_mutex_lock(&streamEnv.m_meta.mutex);
streamEnv.m_meta.buff[0] = (streamEnv.imageWidth >> 24) & 0xFF;
streamEnv.m_meta.buff[1] = (streamEnv.imageWidth >> 16) & 0xFF;
streamEnv.m_meta.buff[2] = (streamEnv.imageWidth >> 8) & 0xFF;
streamEnv.m_meta.buff[3] = streamEnv.imageWidth & 0xFF;
streamEnv.m_meta.buff[4] = (streamEnv.imageHeight >> 24) & 0xFF;
streamEnv.m_meta.buff[5] = (streamEnv.imageHeight >> 16) & 0xFF;
streamEnv.m_meta.buff[6] = (streamEnv.imageHeight >> 8) & 0xFF;
streamEnv.m_meta.buff[7] = streamEnv.imageHeight & 0xFF;
streamEnv.m_meta.size = 8;
memcpy(streamEnv.m_meta.buff + streamEnv.m_meta.size, buff, size);
streamEnv.m_meta.size += size;
pthread_mutex_unlock(&streamEnv.m_meta.mutex);
return 0;
}
Ошибка при компиляции - error: ‘streamEnv’ was not declared in this scope
Как бы её решить или как по другому, или может быть более правильно, решить эту задачу?
Спасибо.
Upd
Если я привожу фукцию к виду - fillMetaBuffer(const Stream&,unsigned char *buff), то ошибка следующая:
Код: Выделить всё
display.hpp:60: error: expected ‘,’ or ‘...’ before ‘&’ token
display.hpp:60: error: ISO C++ forbids declaration of ‘Stream’ with no type