Transform filter в сторонний проигрыватель
От: Аноним  
Дата: 07.02.08 04:56
Оценка:
Написал Transform фильтр. Протестил через GraphEdit — работает. Поставил высокий приоритет merrit_preffered. После этого действия к штатным проигрывателям (Winamp, Windows Madia Player, PoverDVD) он не прицепляется (а очень бы хотелось), но в GraphEdit их появляется последовательно туева хуча (Filter000->Filter001->...->Filter00n). Т.е. приоритет у фильтра действительно высокий, но не отписана функция JoinFilterGraph(Так кажется).
Свой проигрыватель писать не вариант.
ВОПРОС: Как подключить фильтр к этим (или другим распостроненным ) проигрывателям?????
Детально что есть:
Рабочее "мясо" фильтра(Transform)
Работает вход/выход VideoMediaType Image24RGBSubType
Нет функций AddToRoot и JoinFilterGraph
Что нужно сделать, чтобы получить желаемое

Если сложно объяснить. Можете хотя бы выслать пример Transform фильтра такого, который сам подключается к "штатным" проигрывателям, можно без Transform части.

Возможно ли это в принципе для WinAMP, PowerDVD, Windows Madia Player? Есть ли другие распостраненные проигрыватели, к которым можно подключиться?
Re: Transform filter в сторонний проигрыватель
От: Alexey Polyakov Россия www.elecard.com
Дата: 07.02.08 05:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Возможно ли это в принципе для WinAMP, PowerDVD, Windows Madia Player? Есть ли другие распостраненные проигрыватели, к которым можно подключиться?


Если плеер собирает граф без "intelligent connect", то вклиниться проблематично. Может быть у какого-то плеера и есть настройка типа "ставить в граф такой-то фильтр", но мне такие неизвестны.

Гарантированный способ сборки своего графа, например, в WMP: написать свой source фильтр, зарегистрировать его в системе и научить собирать весь остальной граф. Т.е. source фильтр, который поднимает файл или принимает по сетке, дальше после себя в граф ставит конкретные фильтры.

Алексей.
Re[2]: Transform filter в сторонний проигрыватель
От: Аноним  
Дата: 07.02.08 08:31
Оценка:
Здравствуйте, Alexey Polyakov, Вы писали:

AP>Гарантированный способ сборки своего графа, например, в WMP: написать свой source фильтр, зарегистрировать его в системе и научить собирать весь остальной граф. Т.е. source фильтр, который поднимает файл или принимает по сетке, дальше после себя в граф ставит конкретные фильтры.


AP>Алексей.


А такой фильтр при помощи чего писать?
При помощи DirectX SDK или WM SDK?

Все-таки может кто-нибудь знает "сносный" по качеству/популярности проигрыватель использующий intellect connect?
Re[3]: Transform filter в сторонний проигрыватель
От: Saruman Россия none
Дата: 12.03.08 10:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если сложно объяснить. Можете хотя бы выслать пример Transform фильтра такого, который сам подключается к "штатным" проигрывателям, можно без Transform части.


Выслать исходники не вышлю, но сам факт существования таких фильтров обеспечу %) Например — http://alparysoft.ru/products.php?cid=7 — DirectShow фильтр

А>Возможно ли это в принципе для WinAMP, PowerDVD, Windows Madia Player? Есть ли другие распостраненные проигрыватели, к которым можно подключиться?

Есть. Все которые используют Intelligent Connect, а таких я видел больше, чем тех, котороые его не используют.

А>Все-таки может кто-нибудь знает "сносный" по качеству/популярности проигрыватель использующий intellect connect?

Ну... Windows Media Player %)

А по существу. Необходимо, каким-либо образом в проверять что за фильтр стоит перед твоим. Сделать это можно различными путями, например в CheckInputType проверять неиспользуемые поля BITMAPINFOHEADER'а,
CheckInputType(const CMediaType *mtIn)
{
    const VIDEOINFOHEADER *pvi
        = reinterpret_cast<const VIDEOINFOHEADER *>(mtIn->Format());
    if (pvi->bmiHeader.biXPelsPerMeter == <your unique value> && pvi->bmiHeader.biXPelsPerMeter == <your unique value>) 
        return VFW_E_TYPE_NOT_ACCEPTED;
    .....
}

которые твой же фильтр заполняет в GetMediaType. Если не пересечёшься с другим фильтром использующим такой же <your unique value> то будет работать %)
Но скажем прямо, метод не лишён недостатков.

Более надёжным способом было бы переопределить класс для входного пина и перегрузить метод Connect, в котором проверять к какому фильтру принадлежит пин, с которым собираемся коннектиться через QueryPinInfo. А дальше уже пробовать определить что это за фильтр. Можно использовать св-ва самого COM'а, т.е. если у нас есть один интерфейс, то мы сможем получить и другой интерфейс этого же объекта через QueryInterface, а уж какой интерфейс выискивать, я надеюсь, сам догадаешься... например свой собственный %)
Типа того что как бы...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.