0
我正在寫一個簡單的AVI加載程序,以從AVI文件中獲取每個幀並將其保存爲OpenGL紋理。我正在使用VFW,並且AVIStreamRead
未返回任何內容。這是我的代碼,抓住每一幀:爲什麼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
不會返回任何錯誤。在documentation中,唯一沒有提及的數據是:
如果lpBuffer爲NULL,則此函數不讀取任何數據;
但是lpBuffer
不爲NULL。我會發布更多的代碼,但它到處亂跑。在其他地方沒有其他明顯的錯誤,調試器顯示所有正確的信息。
我試過了多個視頻。當我使用'ICLocate'來查找解壓縮程序時,它使用有效數據成功。一切運行良好,直到這裏。我會環顧一些樣品,但沒有很多好的樣品。 – smoth190