Вам необходимо проверить изменение MediaType в вашем методе FillBuffer
.
HRESULT hr = pSample->GetMediaType((AM_MEDIA_TYPE**)&pmt);
if (S_OK == hr)
{
SetMediaType(pmt);
DeleteMediaType(pmt);
}
В зависимости от вашей графики вы получаете различную ширину для вашего буфера.Это означает, что вы соединяетесь с шириной изображения 1000 пикселей, но с первым образцом вы получаете новую ширину для вашего буфера.В моем примере это было 1024 пикселя.
Теперь у вас есть новый размер изображения в BitmapInfoHeader.biWidth
и вы получили старый размер в VideoInfoHeader.rcSource
.Таким образом, одна строка вашего изображения имеет размер 1024 пикселей, а не 1000 пикселей.Если вы этого не помните, вы можете иногда получать фотографии, как вы.