Я пытаюсь воспроизвести видео с помощью SDL. Для этого я использую opencv для загрузки видео и получения кадров. Затем мне нужно только преобразовать те кадры, которые мне нужны, в SDL_Texture*
, и я готов рисовать их на экране.
Это моя проблема, я конвертирую его в SDL_Surface*
, но тогда преобразование в SDL_Texture
не работает, и я не знаю, почему. Вот мой код:
void Cutscene::play()
{
this->onLoop();
this->onRender();
while(!frameMat.empty())
{
this->onLoop();
this->onRender();
}
}
void Cutscene::onLoop()
{
video >> frameMat;
convertCV_MatToSDL_Texture();
}
void Cutscene::onRender()
{
Image::onDraw(GameEngine::getInstance()->getRenderer(), frameTexture);
}
void Cutscene::convertCV_MatToSDL_Texture()
{
IplImage opencvimg2 = (IplImage)frameMat;
IplImage* opencvimg = &opencvimg2;
//Convert to SDL_Surface
frameSurface = SDL_CreateRGBSurfaceFrom((void*)opencvimg->imageData,
opencvimg->width, opencvimg->height,
opencvimg->depth*opencvimg->nChannels,
opencvimg->widthStep,
0xff0000, 0x00ff00, 0x0000ff, 0);
if(frameSurface == NULL)
{
SDL_Log("Couldn't convert Mat to Surface.");
return;
}
//Convert to SDL_Texture
frameTexture = SDL_CreateTextureFromSurface(
GameEngine::getInstance()->getRenderer(), frameSurface);
if(frameTexture == NULL)
{
SDL_Log("Couldn't convert Mat(converted to surface) to Texture."); //<- ERROR!!
return;
}
//cvReleaseImage(&opencvimg);
//MEMORY LEAK?? opencvimg opencvimg2
}
Я использовал эту функцию SDL_CreateTextureFromSurface
в других частях моего проекта, и там она работает. Итак, вопрос: знаете ли вы, в чем проблема с преобразованием, которое я делаю в своем коде? Если нет, есть ли лучший способ сделать то, что я пытаюсь сделать?