两个线程:主线程和子线程;
1、主线程用来创建SDL
if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
{
qDebug()<< "initSdl() SDL_Init() error!" <<__FILE__<<" "<<__LINE__;
return;
}
// 创建窗体
m_psdlWindow = SDL_CreateWindowFrom((void *)m_WId);
if (m_psdlWindow == nullptr){
qDebug()<< "SDL_CreateWindowFrom() error!" <<__FILE__<<" "<<__LINE__;
return;
}
// 从窗体创建渲染器
m_psdlRenderer = SDL_CreateRenderer(m_psdlWindow, -1, 0);
if (m_psdlRenderer == nullptr){
qDebug()<< "SDL_CreateRenderer() error!" <<__FILE__<<" "<<__LINE__;
return;
}
// 创建渲染器纹理
m_psdlTexture = SDL_CreateTexture(m_psdlRenderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, m_mWidth, m_mHeight);
if (m_psdlTexture == nullptr){
qDebug()<< "SDL_CreateTexture() error!" <<__FILE__<<" "<<__LINE__;
return;
}
2、子线程用来渲染画面
SDL_UpdateYUVTexture(m_psdlTexture, NULL, pFrame->data[0], pFrame->linesize[0],
pFrame->data[1], pFrame->linesize[1], pFrame->data[2],
pFrame->linesize[2]);
SDL_UpdateTexture( m_psdlTexture,NULL, m_pVideoBuffer, pitch);
SDL_RenderClear(m_psdlRenderer);
SDL_RenderCopy(m_psdlRenderer, m_psdlTexture, NULL, NULL);
SDL_RenderPresent(m_psdlRenderer);
av_frame_free(&pFrame);
问题是无法渲染出画面?