DirectShow: рендеринг для YV12
От: Vicul  
Дата: 22.10.18 11:32
Оценка:
Пытаюсь разобраться, как происходит преобразование YV12 фрейма. Для простоты создаю вот такой DS граф

http://kvy.com.ua/files/Graph.jpg

С камеры снимаю фреймы размером 640x480, после ЛАВ декодер преобразовывает его в YV12 и передает его на DS рендер.
С Выхода декодера вижу следующее:

Ширина фрейма преобразовалась с 640 на 1024, соответственно, вместо ожидаемого размера 1.5*640*480=460800 вижу 737280,
т.е пересчитанный для ширины 1024. По теории страйд может отличаться от ширины кадра на рендере. Но почему на столько и почему 1024?

Когда я вместо ЛАВ декодера ставлю свой фильтр с преобразованием RGB24 в YV12 (https://gist.github.com/thedeemon/8052fb98f8ba154510d7),
у меня выходит искаженное изображение, хотя параметры такие же:

http://kvy.com.ua/files/fail.jpg

И еще, почему в VIDEOINFOHEADER2 установлен флаг деинтерлейсинга — dwInterlaceFlags, хотя в ЛАВ декодере он отключен? Т.е. выходит
, что простым преобразованием RGB24 в YV12 не обойтись, и в мой фильтр нужно добавлять деинтерлейсинг, чтобы нормально заработал DS рендер?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.