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

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

网上介绍的方法有:

1:修改源码中的代码!

SDL_OnWindowResized中的SDL_WINDOWEVENT_SIZE_CHANGED更改为SDL_WINDOWEVENT_RESIZED

2:SDL_EventState(SDL_WINDOWEVENT, SDL_IGNORE);

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

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

cpp 复制代码
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

cpp 复制代码
		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);

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

相关推荐
阿里巴啦9 小时前
python+yt-dlp开源项目,支持 YouTube, Bilibili, TikTok/抖音,快手 等多个平台的视频/音频/字幕下载/ai摘要等功能
python·ffmpeg·whisper·音视频·视频处理·ai摘要·音视频转录
来鸟 鸣间1 天前
linux下ffmpeg源码编译
linux·运维·ffmpeg
Echo_NGC22371 天前
【FFmpeg使用指南】Part 2:滤镜图架构与信号处理
架构·ffmpeg·音视频·信号处理
Echo_NGC22371 天前
【FFmpeg使用指南】Part 1:核心架构与媒体流处理
ffmpeg·音视频·媒体·视频
ssxueyi1 天前
用 Claude Code 从零开发自己的Direct3D 硬件加速播放器
ffmpeg·ai编程·directx·视频播放器·从零开始·claude code·csdn征文活动
Yan_uuu1 天前
ubuntu18.04 安装 x264、ffmpeg、nv-codec-hearers 支持GPU硬件加速
c++·图像处理·ubuntu·ffmpeg
runner365.git2 天前
做一个基于ffmpeg的AI Agent智能体
人工智能·ffmpeg·大模型
彷徨而立2 天前
【FFmpeg】理解 av_packet_from_data 和 av_packet_unref 接口
ffmpeg
runner365.git2 天前
ffmpeg8.0合入whisper,语音识别模型终于进入ffmpeg
ffmpeg·whisper·语音识别
小徐敲java3 天前
视频推流服务器与FFmpeg 安装配置
服务器·ffmpeg·音视频