使用SDL+FFMPEG将视频绑定到指定窗口显示颜色失真

在学习使用SDL+FFMPEG来制作简易播放器时,发现将图像显示到指定窗口上时,颜色会出现失真情况,设置窗口大小代码如下:

RECT wrect;
GetWindowRect((HWND)m_hwnd, &wrect);
m_nWidth = wrect.right - wrect.left;
m_nHeight = wrect.bottom - wrect.top;
m_surface = SDL_SetVideoMode(m_nWidth, m_nHeight, 0, 0);


失真情况如下图所示

后来发现是调用SDL_SetVideoMode函数设置的窗口大小不是偶数的原因,加上如下代码即可

RECT wrect;
GetWindowRect((HWND)m_hwnd, &wrect);
m_nWidth = wrect.right - wrect.left;
m_nHeight = wrect.bottom - wrect.top;
//需要保证图像的原始宽度和高度为偶数,保证UV数据拷贝不错位
if (m_nWidth % 2 != 0)
{
	m_nWidth -= 1;
}
if (m_nHeight % 2 != 0)
{
	m_nHeight -= 1;
}
m_surface = SDL_SetVideoMode(m_nWidth, m_nHeight, 0, 0);

看看效果图

One Comment

  1. ronaldo9说道:

    你好,我用SDL和ffmpeg播放视频成功,但是不知道如何在MFC下面,把视频捅到窗口,能指教一下吗