Я пишу простой загрузчик 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