![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
У меня есть тюнер (AVerMedia H788 PCIe Hybrid) и я с его помощью пытаюсь изучить DirectShow.
Драйвера установлены и программное обеспечение из поставки тюнера работает. Я написал программу, которая: 1) Перебирает все фильтры (CreateClassEnumerator) и в каждом фильтре перебирает все выходы (EnumPins). Функция находит фильтр, в котором есть выходы VBI и Audio и возвращается указатели на фильтр, и два указателя на выходы. 2) Строит граф для выдачи звукового пина (pIGB->Render(pAudio)) 3) И запускает его (pControl->Run()). Возникает ошибка "Устройство не подключено". Та же самая ошибка возникает, если я визуально в GraphEdt составлю граф и попытаюсь его проиграть. Насколько я понимаю, ТВ тюнер требует какой-то ещё инициализации перед запуском (например, выбрать источник видеосигнала, канал и т.п.). Как узнать, что именно необходимо, в какой документации? |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
![]() Попробуй в GraphEdit в построенном графе посмотреть свойства входного фильтра (TV tuner'а). Там могут быть соотвествующие кнопки и настройки. |
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Там нету ![]()
Пробую! Вижу, что тюнер там присутствует во множестве ипостасях... Может, взять какой другой? Я беру AVerMedia 716x DBA Analog Capture из раздела Video Capture Sources. Мож другой надо? Кстати, а почему такое странное действие надо выполнять, чтобы получить интерфейс IAMTVTuner? Почему я должен получать его из CLSID_CaptureGraphBuilder2? Что это вообще за объект? Почему нельзя было получить то же самое через QueryInterface к найденному IBaseFilter? |
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Заработало! Всё было правильно, за исключением порядка выполнения операций. Тюнер надо было поместить на граф ДО получения интерфейса IAVTVTuner.
|
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
Судя по названию это builder для Capture графов.
|
||||
|
|||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
В общем, я рано возрадовался: работает не везде.
На другом компьютере программа не работает. Точнее, работает, но не выдаёт никакого звука (я написал программу для вывода звука с ТВ тюнера), хотя никаких ошибок тоже нет. Понять, почему не работает, пока не получается. Смысл использования ICaptureGraphBuilder2 пока не понимаю -- почему нельзя составить граф поэлементно? |
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Сохранил получившийся в программе граф и открыл его в GraphEdt. Оказалось, она лепит туда ещё кучу фильтров непонятного назначения:
![]() Рыжий квадратик -- это то, что я добавлял сознательно. Всё, что справа от него добавлено автоматически командой Render. Всё, что слева от него добавлено автоматически ICaptureGraphBuilder2. Зачем? Какие функции выполняют эти фильтры? Почему звуковой канал между рыжим квадратиком и фильтром слева от него разорван, а звук всё равно идёт? |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
Согласуют типы пинов (и потоки данных). Процесс построения графа довольно подробно описан в MSDN. Типы данных можно посмотреть в GraphEdit'е выделив пин и кликнув правой мышкой - проперти
Наверное наиболее правильным подходом будет построить граф полностью автоматически (он должен построится, иначе сам TV Tuner не будет работать почти во всех стандартных приложениях), а потом искать в нем то, что интересует. Искать можно как по знакомым типам фильтров, так и по знакомым типам media потоков в пинах фильтров. После того, как нужные концы будут найденны, можно модифицировать построенный граф. |
||||||
|
|||||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Конечно, граф у меня строится автоматически. Выше приведена лишь визуализация результата на компьютере где работает. На другом компьютере граф получается состоящим из других элементов, но принципиально от него не отличается.
Это сообщение отредактировал(а) Dims - 14.10.2009, 11:05 |
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Кажется, понял, в чём было дело: там есть такой кроссбар среди фильтров и в нём есть всякие настройки. Вот с их помощью можно было заставить граф зазвучать....
|
|||
|
||||
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: нет Всего: 1 |
А. Левчук "DirectShow и телевидение" - найдите поиском и почитайте, очень поможет.
|
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |