Hello,
I have developed a game and people can activate their cameras up to 20 players. But CPU usage is very high.
Currently I am using this code to process each frame for each player:
void Player::camera(unsigned char *video, int len)
{
auto img = new Image();
if (img->initWithImageData(video, len))
{
img->autorelease();
}
else
{
img->release();
return;
}
auto tex = new Texture2D();
if (tex->initWithImage(img))
{
tex->autorelease();
}
else
{
tex->release();
return;
}
this->lastCam = 0;
cam->setOpacity(255);
Rect rect = Rect::ZERO;
rect.size = tex->getContentSize();
cam->sprite->setTexture(tex);
cam->sprite->setTextureRect(rect);
cam->sprite->setScale(Director::getInstance()->getContentScaleFactor() * PLAYER_SIZE / tex->getContentSizeInPixels().height);
updateDisplay();
}
The display is done in the cocos thread.
May I display image differently since they are only displayed once ?
Is their a better approch ? natively ?
Thank you