после нескольких часов поиска в сети Я довольно отчаянно ищут решение для этого. У меня есть &, работающий с декодером OGG Theora в DirectShow, который выпускает цветные модели YV12 и YUY2.Автоматический YUV -> RGB в DirectShow для пользовательского декодера
Теперь я хочу создать фильтр обработки пикселов RGB для этого вывода и обработать его в рендерере видео. Согласно this и this, это должно быть действительно легко и прозрачно, но это не так.
Например, я осуществил в 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 фильтр не работает, как Color Space Converter, т.е. видимой и непосредственно используемой в GraphEdit ...
Я ценю любой намек на это, программирование собственного YV12 -> RGB преобразователь I принять в качестве последнего средства.