после нескольких часов поиска в сети, я совершенно отчаянно пытаюсь найти решение для этого. У меня есть и работает OGG Theora декодер в DirectShow, который выводит цветовые модели YV12 и YUY2.
Теперь я хочу сделать фильтр манипулирования пикселями RGB для этого вывода и обработать его в видеорендере.
Согласно это и
это , это должно быть действительно легко и прозрачно, но это не так.
Например, я реализовал в CheckInputType()
эту проверку:
if( IsEqualGUID(*mtIn->Type(), MEDIATYPE_Video )
&& IsEqualGUID(*mtIn->Subtype(), MEDIASUBTYPE_RGB565 ) )
{
return S_OK;
}
и я ожидаю, что он вставит MSYUV между Theora и моим декодером и выполнит эту работу за меня (т.е. преобразует его в RGB). Проблема в том, что я получаю ошибку каждый раз (в приложении GraphEdit). И я на 100% уверен, что это YV12 в качестве ввода (проверено в отладчике). Единственное объяснение, которое я мог придумать, - это упоминание декомпрессора AVI, но никакой дополнительной информации об этом нет.
- Означает ли это, что я должен использовать контейнер AVI, если я хочу получить эту автоматическую функциональность?
- Странно то, что он работает, например, для видео WMV (с YUV на выходе), только у этого OGG-декодера есть проблема с ним. Так что, вероятно, вопрос в том, что пропустил этот декодер OGG?
Жаль, что фильтр MSYUV не работает как преобразователь цветового пространства, то есть видимый и непосредственно используемый в GraphEdit ...
Я ценю любой намек на это, программируя собственный конвертер YV12 -> RGB, который я выбрал в качестве последнего средства.