日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于SDL SDL_CreateWindowFrom和SDL_DestroyWindow第二次后无法将视频显示出来。

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于SDL SDL_CreateWindowFrom和SDL_DestroyWindow第二次后无法将视频显示出来。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近自己用QT搞一個監控平臺的程序UI,然后后臺一些視頻處理是使用FFMPEG和SDL來做的。
在關閉播放窗口SDL_DestroyWindow后,再次去顯示視頻就會發現顯示不出來。代碼如下

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);//sdlScreen = SDL_CreateWindow("Simplest Video Play SDL2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,//1024, 800, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);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();//ShowWindow(m_handle, true);return 0; }

也就是第二次調用時發現視頻出不來了,但是程序什么的都是正常運行的。細心的就會發現界面上的窗口都不見了。

SDL_DestroyWindow(sdlScreen);

這一句代碼會將窗口隱藏起來,所以我們在最后再將窗口顯示出來就好了。

ShowWindow(m_handle, true);

加 ShowWindow不讓窗口隱藏。

總結

以上是生活随笔為你收集整理的关于SDL SDL_CreateWindowFrom和SDL_DestroyWindow第二次后无法将视频显示出来。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。