DirectShow: IVMRWindowlessControl :: SetVideoPosition шага (?) - PullRequest
0 голосов
/ 27 марта 2012

У меня есть свой собственный источник видео и использующий VMR7.Когда я использую глубину 24 цвета, мой график содержит фильтр Color Space Converter, который преобразует 24 бита в ARGB32.Все отлично работаетКогда я использую 32-битную глубину цвета, мое изображение выглядит дезинтегрированным.В этом случае мой источник создает изображения RGB32 и передает их непосредственно в VMR7 без преобразования цвета.Во время изменения размера окна я заметил, что при изменении высоты пункта назначения изображение становится «интегрированным» (нормальным) при некотором конкретном значении высоты пункта назначения.Я не знаю, где проблема.Вот примеры фотографий: http://talbot.szm.com/desintegrated.jpg и http://talbot.szm.com/integrated.jpg Спасибо за помощь.

1 Ответ

0 голосов
/ 16 января 2013

Вам необходимо проверить изменение MediaType в вашем методе FillBuffer.

HRESULT hr = pSample->GetMediaType((AM_MEDIA_TYPE**)&pmt);
if (S_OK == hr)
{
    SetMediaType(pmt);
    DeleteMediaType(pmt);
}

В зависимости от вашей графики вы получаете различную ширину для вашего буфера.Это означает, что вы соединяетесь с шириной изображения 1000 пикселей, но с первым образцом вы получаете новую ширину для вашего буфера.В моем примере это было 1024 пикселя.

enter image description here

Теперь у вас есть новый размер изображения в BitmapInfoHeader.biWidth и вы получили старый размер в VideoInfoHeader.rcSource.Таким образом, одна строка вашего изображения имеет размер 1024 пикселей, а не 1000 пикселей.Если вы этого не помните, вы можете иногда получать фотографии, как вы.

...