生活随笔
收集整理的這篇文章主要介紹了
关于SDL SDL_CreateWindowFrom和SDL_DestroyWindow第二次后无法将视频显示出来。
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近自己用QT搞一個(gè)監(jiān)控平臺(tái)的程序UI,然后后臺(tái)一些視頻處理是使用FFMPEG和SDL來(lái)做的。
在關(guān)閉播放窗口SDL_DestroyWindow后,再次去顯示視頻就會(huì)發(fā)現(xiàn)顯示不出來(lái)。代碼如下
int SDLPlayer::SDLPlay()
{SDL_Window
*sdlScreen
{ NULL };SDL_Renderer
* sdlRenderer
{ NULL };SDL_Texture
* sdlTexture
{ NULL };SDL_Init(SDL_INIT_VIDEO
);sdlScreen
= SDL_CreateWindowFrom(m_handle
);if (sdlScreen
== 0){printf("SDL: could not create SDL_Window - exiting:%s\n", SDL_GetError());return -1;}sdlRenderer
= SDL_CreateRenderer(sdlScreen
, -1, SDL_RENDERER_ACCELERATED
);if (sdlRenderer
== NULL){printf("SDL: could not create SDL_Renderer - exiting:%s\n", SDL_GetError());return -1;}sdlTexture
= SDL_CreateTexture(sdlRenderer
, SDL_PIXELFORMAT_YV12
, SDL_TEXTUREACCESS_STREAMING
, 1920, 1080);if (sdlTexture
== NULL){printf("SDL: could not create SDL_Texture - exiting:%s\n", SDL_GetError());return -1;}m_bInitWindow
= true;AVFrame
* yuvframe
= av_frame_alloc();while (getPlayFlag()){Sleep(40);if (GetDisplayFlag() && m_bInitWindow
){GetYUVFrame(yuvframe
);if (yuvframe
== NULL || yuvframe
->data
[0] == NULL){continue;}SDL_UpdateYUVTexture(sdlTexture
, NULL,yuvframe
->data
[0], yuvframe
->linesize
[0],yuvframe
->data
[1], yuvframe
->linesize
[1],yuvframe
->data
[2], yuvframe
->linesize
[2]);SDL_RenderClear(sdlRenderer
);SDL_RenderCopy(sdlRenderer
, sdlTexture
, NULL, NULL);SDL_RenderPresent(sdlRenderer
);}}SDL_DestroyWindow(sdlScreen
);SDL_DestroyTexture(sdlTexture
);SDL_Quit();return 0;
}
也就是第二次調(diào)用時(shí)發(fā)現(xiàn)視頻出不來(lái)了,但是程序什么的都是正常運(yùn)行的。細(xì)心的就會(huì)發(fā)現(xiàn)界面上的窗口都不見(jiàn)了。
SDL_DestroyWindow(sdlScreen
);
這一句代碼會(huì)將窗口隱藏起來(lái),所以我們?cè)谧詈笤賹⒋翱陲@示出來(lái)就好了。
ShowWindow(m_handle
, true);
加 ShowWindow不讓窗口隱藏。
總結(jié)
以上是生活随笔為你收集整理的关于SDL SDL_CreateWindowFrom和SDL_DestroyWindow第二次后无法将视频显示出来。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。