나는 간단한 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
그러나, m_inputTexture
가 비어 1입니다. 나쁜 포인터가 아니거나 그저 ... 비어 있습니다. AVIStreamRead
은 오류를 반환하지 않습니다. documentation에서 읽을 수없는 유일한 데이터는 다음과 같습니다.
lpBuffer가 NULL이면이 함수는 데이터를 읽지 않습니다.
그러나 lpBuffer
은 NULL이 아닙니다. 나는 더 많은 코드를 게시 할 것이지만, 여기 저기에 뒤섞여있다. 다른 곳에서는 명백한 오류가 없으며 디버거는 모든 정확한 정보를 보여줍니다.
여러 비디오를 시도했습니다. decompressor를 찾기 위해'ICLocate '를 사용하면 유효한 데이터로 성공합니다. 여기까지는 모든 것이 잘 돌아갑니다. 몇 가지 샘플을 살펴 보 겠지만 좋은 샘플은별로 없습니다. – smoth190