SDL库自适应窗口大小及遇到的坑

server/2024/11/13 9:53:49/

一、窗口尺寸改变大小时,视频卡住不动

网上介绍的方法有:

1:修改源码中的代码!
SDL_OnWindowResized中的SDL_WINDOWEVENT_SIZE_CHANGED更改为SDL_WINDOWEVENT_RESIZED
2:SDL_EventState(SDL_WINDOWEVENT, SDL_IGNORE);

我都试过了,确实可以实现,但是牺牲了分辨率,视频边的模糊

我总结了方法,既然不信那就重新创建SDL_Window、SDL_Renderer、SDL_Texture呗,再利用事件即可解决

void SDLRender::_HandleEventProc()
{std::string str = "1";while (true){SDL_Event event;if (SDL_PollEvent(&event)){switch (event.type){case SDL_WINDOWEVENT:switch (event.window.event){case SDL_WINDOWEVENT_RESIZED:case SDL_WINDOWEVENT_SIZE_CHANGED:m_nScaleWidth = event.window.data1;m_nScaleHeight = event.window.data2;if (m_SdlWindow){SDL_DestroyWindow(m_SdlWindow);m_SdlWindow = nullptr;}if (m_SdlTexture){SDL_DestroyTexture(m_SdlTexture);m_SdlTexture = nullptr;}if (m_SdlRender){SDL_DestroyRenderer(m_SdlRender);m_SdlRender = nullptr;}if (!m_SdlWindow)m_SdlWindow = SDL_CreateWindowFrom(m_hwnd);if (!m_SdlRender)m_SdlRender = SDL_CreateRenderer(m_SdlWindow, -1, SDL_RendererFlags::SDL_RENDERER_ACCELERATED);break;default:break;}break;default:break;}}}
}

只要检测到窗口尺寸变化就重新创建。

二、播放不同分辨率视频会崩溃

解决办法:检测到不用分辨率的帧重新创建SDL_CreateTexture

		if (m_SdlTexture){SDL_DestroyTexture(m_SdlTexture);m_SdlTexture = nullptr;}m_SdlTexture = SDL_CreateTexture(m_SdlRender, GetSDLFormat((AVPixelFormat)frame->format), SDL_TEXTUREACCESS_STREAMING, frame->width, frame->height);

有不足指出还请指教。。。。


http://www.ppmy.cn/server/102271.html

相关文章

Golang | Leetcode Golang题解之第343题整数拆分

题目&#xff1a; 题解&#xff1a; func integerBreak(n int) int {if n < 3 {return n - 1}quotient : n / 3remainder : n % 3if remainder 0 {return int(math.Pow(3, float64(quotient)))} else if remainder 1 {return int(math.Pow(3, float64(quotient - 1))) * …

C#多态_接口

接口是行为的抽象表现 关键字 interface 接口申明的规范 1.不包含成员变量 2.只包含&#xff0c;方法&#xff0c;属性&#xff0c;索引器&#xff0c;事件 3.成员不能被实现 4.成员可以不用写访问修饰符&#xff0c;不能是私有的&#xff08;不写默认是public也可以写pro…

c语言编程有什么难点

C语言编程面临的难点主要有1、指针的理解和使用、2、内存管理、3、复杂的数据结构实现、4、并发和多线程编程以及5、跨平台编程。指针是C语言中最具特色也最令人头疼的部分。它直接操作内存地址&#xff0c;能够提供强大但复杂的数据管理方式。正确而高效地使用指针&#xff0c…

记处理微前端的一些问题

主子应用样式 因为子应用是是后加载的 所以如果柱应用和子应用有重的 会以子应用为准、 需要我们将主应用的样式权重提高或尽量避免重复 我这里还遇到一个问题就是主应用使用rem定义的样式加载子应用会失效 解决办法就是没定义默认字体html{ font-size: 16px; } 主应用重新加载…

掌握ChatGPT写作艺术:从入门到精通的四个层次

这些周末我仔细研究了如何通过优化提示词提升ChatGPT输出内容的质量。 关于如何使用ChatGPT辅助我们的写作&#xff0c;我归纳了以下规律&#xff0c;希望能为你带来启发。 一、写作步骤 撰写一篇文章&#xff0c;思路上必须是从抽象到具体逐步深入。 首先我们需要明确写什么…

leetcode 31-40(2024.08.18)

立个flag&#xff0c;1-100题每天分配10题&#xff0c;不会就先空着&#xff08;2&#xff0c;8&#xff09;。 昨天周六&#xff0c;摆烂一天。 1. 31&#xff1a;下一个排列 class Solution:def nextPermutation(self, nums: List[int]) -> None:"""Do …

SMS流媒体服务器-MPEG-PS流的深度解析

1.简介 ps流的解析&#xff0c;只要按照标准文档对照16进制的流数据&#xff0c;基本都能看的明白。但是实际项目中会碰到各种各样的问题。本文将对如何高效的解析出音视频数据发表一下个人的看法。 介绍一下本人的开源流媒体&#xff0c;点个star&#xff0c;有兴趣一起开发的…

深入探索Golang的hash包:哈希算法的高效实现

标题&#xff1a;深入探索Golang的hash包&#xff1a;哈希算法的高效实现 引言 Go语言&#xff0c;以其简洁的语法和高效的并发处理能力而广受开发者喜爱。在Go语言的标凈库中&#xff0c;hash包提供了一套强大的哈希算法实现&#xff0c;包括MD5、SHA1、SHA256等。本文将详细…