我正在编写一个简单的 AVI 加载器来从 AVI 文件中获取每一帧并将其保存到 OpenGL 纹理中。我正在使用 VFW,并且AVIStreamRead
没有返回任何东西。这是我抓取每一帧的代码:
void CVideoControl::SetFrame(long frame)
{
HRESULT result;
long bytes, samples;
//Update variables
m_currentFrame = frame;
m_lastFrameChangeMS = gGlobalData->GetLastFrame();
//Get the frame
result = AVIStreamRead(m_aviStream, m_currentFrame, 1, m_inputTexture, m_videoAdjustedWidth * m_videoAdjustedHeight * 3, &bytes, &samples);
if(FAILED(result))
return;
//Decompress the stream
if(ICDecompress(m_decompressor, 0, m_inFormat, m_inputTexture, m_outFormat, m_outputTexture) != ICERR_OK)
return;
//Draw it to the OpenGL texture
glBindTexture(GL_TEXTURE_2D, m_videoOutputTexture);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_videoAdjustedWidth, m_videoAdjustedHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, m_outputTexture);
}
该变量bytes
的值为 2740,samples
为 1。但是,m_inputTexture
为空。这不是一个坏指针或任何东西,它只是......空的。AVIStreamRead
不返回任何错误。在文档中,唯一提到未读取数据的是:
如果 lpBuffer 为 NULL,则该函数不读取任何数据;
但lpBuffer
不是NULL。我会发布更多代码,但它到处都是乱码。其他任何地方都没有其他明显错误,调试器显示所有正确信息。