AVI Decompressor
От: xsilver  
Дата: 09.02.04 21:27
Оценка:
Имеем: Фильтр (Декодер) собственного сочинения, построенный на основе 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 и т.п) та же фигня, пока носом не ткнешь, показывать не будут…

Теперь вопрос: Что необходимо добавить (уточнить) в декодере (или где?), чтобы Граф фильтров выстраивался корректно?

P.s.: Это мой первый опыт подобной работы.
Re: AVI Decompressor
От: Sergey A. Sablin Россия http://www.elecard.com
Дата: 11.02.04 04:33
Оценка:
Здравствуйте, xsilver, Вы писали:

[]

Обычно выходной формат фильтра выдают в функции GetMediaType, которую вызывает downstream filter. В твоем случае похоже рендер либо так и не знает в каком формате ты ему выдаешь данные, либо ты пытаешься цепляться на обычный VideoRenderer, который для соединения требует RGB формата. По науке декодеры должны поддерживать RGB, для того чтобы между ним и рендером не вставали всякие AVI decompressor'ы или Overlay Mixer'ы.

Удачи.
Сергей.
Re[2]: AVI Decompressor
От: xsilver  
Дата: 11.02.04 19:16
Оценка:
Здравствуйте, Sergey A. Sablin, Вы писали:

SAS>Обычно выходной формат фильтра выдают в функции GetMediaType, которую вызывает downstream filter. В твоем случае похоже рендер либо так и не знает в каком формате ты ему выдаешь данные, либо ты пытаешься цепляться на обычный VideoRenderer, который для соединения требует RGB формата. По науке декодеры должны поддерживать RGB, для того чтобы между ним и рендером не вставали всякие AVI decompressor'ы или Overlay Mixer'ы.


В GetMediaType все замечательно, "Собака порылась" в CheckTransform — я не достаточно строго проверял параметры "выхода"

Что касается RGB, особой острой необходмости в этом я не увидел, так как все равно
преобразование 4:2:2 -> 4:4:4 -> RGB возможно только после декодирования исходных данных. Так зачем изобретать велосипед? на производительности это не сказывается.
Re[3]: AVI Decompressor
От: Sergey A. Sablin Россия http://www.elecard.com
Дата: 12.02.04 07:01
Оценка:
Здравствуйте, xsilver, Вы писали:

X>Здравствуйте, Sergey A. Sablin, Вы писали:


SAS>>Обычно выходной формат фильтра выдают в функции GetMediaType, которую вызывает downstream filter. В твоем случае похоже рендер либо так и не знает в каком формате ты ему выдаешь данные, либо ты пытаешься цепляться на обычный VideoRenderer, который для соединения требует RGB формата. По науке декодеры должны поддерживать RGB, для того чтобы между ним и рендером не вставали всякие AVI decompressor'ы или Overlay Mixer'ы.


X>В GetMediaType все замечательно, "Собака порылась" в CheckTransform — я не достаточно строго проверял параметры "выхода"


X>Что касается RGB, особой острой необходмости в этом я не увидел, так как все равно

X>преобразование 4:2:2 -> 4:4:4 -> RGB возможно только после декодирования исходных данных. Так зачем изобретать велосипед? на производительности это не сказывается.

Если ты хочешь сказать, что какой-нибудь AVI decompressor или Overlay Mixer делает YUV->RGB преобразование быстрее чем ты сможешь сделать в декодере, спешу тебя разочаровать — они это делают гораздо медленнее + ко всему прочему из AVI decompressor вываливаеться в большинстве случаев RGB565 — что не может не сказаться на выходном качестве.
Сергей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.