Имеем: Фильтр (Декодер) собственного сочинения, построенный на основе CVideoTransformFilter, при этом:
const AMOVIESETUP_PIN psudPins[] = {
{
L"Input", // String pin name
FALSE, // Is it rendered
FALSE, // Is it an output
FALSE, // Allowed none
FALSE, // Allowed many
&CLSID_NULL, // Connects to filter
L"Output", // Connects to pin
1, // Number of types
// The pin details
{
&MEDIATYPE_Video,
&MEDIASUBTYPE_ADV1 // Нестандартный формат (ADV601/611)
}
},
{
L"Output", // String pin name
FALSE, // Is it rendered
TRUE, // Is it an output
FALSE, // Allowed none
FALSE, // Allowed many
&CLSID_NULL, // Connects to filter
L"Input", // Connects to pin
1, // Number of types
// The pin details
{
&MEDIATYPE_Video, // Major type
&MEDIASUBTYPE_UYVY // Minor type
},
} };
const AMOVIESETUP_FILTER sudFilter =
{
&CLSID_ADV1CODEC, // Filter CLSID
L"ADV1 Codec”, // Filter name
MERIT_NORMAL, // Its merit
2, // Number of pins
psudPins // Pin details
};
Регистрирую через regsvr32 – Ok
Смотрю в GraphEdit’е – фильтр появился в разделе DirectShow Filters – Ok
Через «Render Media File» загружаю AVI файл в соответствующем формате – появляется следующий граф:
[ Файл.avi] -> [AVI Splitter] -> [ADV1 Codec ] -> [ Video Renderer ]
Жму Play, а в ответ тишина… (декодер ошибок не выдает)
Ставлю между декодером и Рендерером AVI Decompressor (я же не просто так тип выходного пина обозначил как UYVY [16bit/360x288] !?) – Все пучком! Видео без проблем проигрывается…
В проигрывателях (WMP и т.п) та же фигня, пока носом не ткнешь, показывать не будут…
Теперь вопрос: Что необходимо добавить (уточнить) в декодере (или где?), чтобы Граф фильтров выстраивался корректно?