Skip to content

Commit

Permalink
improvement(sdlvideorender): improve init and destroy
Browse files Browse the repository at this point in the history
Signed-off-by: pingkai <pingkai010@gmail.com>
  • Loading branch information
pingkai committed Jun 5, 2020
1 parent b68e37b commit d011609
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 19 deletions.
31 changes: 13 additions & 18 deletions framework/render/video/SdlAFVideoRender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ SdlAFVideoRender::SdlAFVideoRender()
{
mVSync = VSyncFactory::create(*this, 60);
// mHz = 0;
SDL_InitSubSystem(SDL_INIT_VIDEO);
mVSync->start();
};

Expand All @@ -20,23 +21,19 @@ SdlAFVideoRender::~SdlAFVideoRender()
if (mVideoTexture != nullptr) {
SDL_DestroyTexture(mVideoTexture);
}
if (mInitByMe) {
SDL_QuitSubSystem(SDL_INIT_VIDEO);
if (mRenderNeedRelease) {
SDL_DestroyRenderer(mVideoRender);
}
SDL_QuitSubSystem(SDL_INIT_VIDEO);
}


int SdlAFVideoRender::init()
{
int initRet = 0;
if (SDL_WasInit(SDL_INIT_VIDEO) != SDL_INIT_VIDEO) {
initRet = SDL_Init(SDL_INIT_VIDEO);
mInitByMe = true;
}

if (initRet < 0) {
AF_LOGE("SdlAFVideoRender could not initialize! Error: %s\n", SDL_GetError());
mInitByMe = false;
return initRet;
}

Expand Down Expand Up @@ -413,29 +410,27 @@ int SdlAFVideoRender::setDisPlay(void *view)
if (mCurrentView == nullptr) {
return 0;
}
if (mVideoWindow != nullptr) {
SDL_DestroyWindow(mVideoWindow);
mVideoWindow = nullptr;
if (mVideoTexture != nullptr) {
SDL_DestroyTexture(mVideoTexture);
}
if (mVideoRender != nullptr) {
if (mRenderNeedRelease) {
SDL_DestroyRenderer(mVideoRender);
mVideoRender = nullptr;
}
if (SDL_WasInit(SDL_INIT_VIDEO) != SDL_INIT_VIDEO) {
SDL_Init(SDL_INIT_VIDEO);
mInitByMe = true;
mRenderNeedRelease = false;
}
if (display->type == CicadaSDLViewType_NATIVE_WINDOW) {
mVideoWindow = SDL_CreateWindowFrom(display->view);
SDL_ShowWindow(mVideoWindow);
} else
} else {
mVideoWindow = static_cast<SDL_Window *>(display->view);
}

if (mVideoWindow) {
mVideoRender = SDL_GetRenderer(mVideoWindow);
if (mVideoRender == nullptr) {
mVideoRender = SDL_CreateRenderer(mVideoWindow, -1, 0);
}
mRenderNeedRelease = true;
} else
mRenderNeedRelease = false;
}

return 0;
Expand Down
2 changes: 1 addition & 1 deletion framework/render/video/SdlAFVideoRender.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ class SdlAFVideoRender : public IVideoRender, private IVSync::Listener {
SDL_Window *mVideoWindow = nullptr;
SDL_Texture *mVideoTexture = nullptr;
SDL_Renderer *mVideoRender = nullptr;
bool mRenderNeedRelease{false};
void* mCurrentView = nullptr;

std::unique_ptr<IAFFrame> mLastVideoFrame{};
Expand All @@ -106,7 +107,6 @@ class SdlAFVideoRender : public IVideoRender, private IVSync::Listener {
std::mutex mRenderMutex;
std::unique_ptr<IVSync> mVSync{nullptr};
std::function<void(int64_t, bool)> mRenderResultCallback = nullptr;
bool mInitByMe{false};
};


Expand Down

0 comments on commit d011609

Please sign in to comment.