Автоматический YUV -> RGB в DirectShow для пользовательского декодера - PullRequest
3 голосов
/ 27 октября 2008

после нескольких часов поиска в сети, я совершенно отчаянно пытаюсь найти решение для этого. У меня есть и работает 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, который я выбрал в качестве последнего средства.

1 Ответ

3 голосов
/ 07 августа 2009

В Directshow нет встроенного преобразователя цветового пространства YUV в RGG. Причина того, что файлы WMV работают для вас, заключается в том, что фильтр декодера WMV будет выплевывать данные RGB или YUV в зависимости от типа фильтра, который вы подключаете.

Лучшее, что вы можете здесь сделать, - это самостоятельно написать фильтр преобразователя цветового пространства или просто преобразовать данные YUV после того, как вы их получите.

Fourcc.org содержит прекрасную статью о преобразовании из YUV в RGB . Также в книге Видео, демистифицированной Китом Джеком есть все подробности о преобразованиях цветового пространства.

...