Имя:
Пароль:
-- ИЛИ --
Войти, используя:

Форум   Общая тематика и компьютеры   Программирование

определить формат фала

 
Пост #63908 от 22 сентября 2009, 12:36 

zaym

собственно сабж. какими средствами ДиректШоу можно определить формат файла.
Все хорошо до тех пор пока не появляется MPEG-2 (VIDEOINFOHEADER2). IMediaDet его не определяет, поскольку работает только с форматами VIDEOINFOHEADER.
Вопрос заключается в том, чтобы по имющемуся пуки к фалу определить его формат, так как это делает GSpot.
Плиз, нид хелп. Последняя загвоздка проекта.

добавлено спустя 18 часов 47 Минут

РАЗОБРАЛСЯ :pc
Кому тиресно, дело обстоит так.
Грубо говоря, для успешного определения любого формата файла необходимо написать код который будит выполнять следующие действия:
- создать граф
- добавить фильтр источник с необходимым фалом
- найти выходной пин фильтра источника и отрендерить его
- найти в графе сплитер
- найти его выходной пин и проверить его subtype
- сравнить результат с известными подтипами (FourCC)

В этой схеме сплитер является индикатором формата фала.
Буду раз если кому пригодится инфа. Спасибо за внимание.
Отправить личное сообщениеПрофиль пользователя---
Постов: 64
Нарушений: Нет
Пост #63922 от 22 сентября 2009, 12:51 

Vlafy

zaym : найти выходной пин фильтра источника и отрендерить его
Не очень хороший способ. Потому что процесс рендеренья может затянуться на десятки секунд и, теоретически, может привести к падению программы, если в системе есть "кривые" фильтры.

Лучше уж сначала открыть файл и считать из него первые несколько сотен байт и по ним определить, чего там внутри.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #63925 от 22 сентября 2009, 16:22 

zaym

может не совсем корректно выразился под словом "отрендерить" имел в виду вызов IGraphBuilder::Render(pPinOutput). Сам процесс на воспроизведение не запускается.
Да и обрамить эту проверку трай-кечем, и никаких крешей не будет.
Алгоритм был навеян GSpot-ом и форумами мсдн-а.
Производительность более чем приемлемая список из 20 роликов обрабатывает за 2-4 секунды.
Отправить личное сообщениеПрофиль пользователя---
Постов: 64
Нарушений: Нет
Пост #63926 от 22 сентября 2009, 16:39 

Vlafy

zaym : Да и обрамить эту проверку трай-кечем, и никаких крешей не будет.
Наивно. Будут. При таком рендеринге графменеджер будет пытаться соединять все фильтры подряд исходя из величины их merit'а. И если есть фильтр с высоким значением merit, то он будет влезать к месту и не к месту. Могу написать вам такой фильтр, который будет ронять вашу программу (и все остальные, которые собирают граф в автоматическом режиме).


zaym :список из 20 роликов обрабатывает за 2-4 секунды.
На конкретной системе - вполне возможно. Если программа должна работать на разных системах, то никакой гарантии дать нельзя. Будет зависеть от установленного софта.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #63927 от 22 сентября 2009, 16:51 

zaym

посмотрим, что скажет опытно-промышленная эксплуатация по поводу устойчивости системы.
если что перепишу по вашему алгоритму.
Отправить личное сообщениеПрофиль пользователя---
Постов: 64
Нарушений: Нет
Если Вы зарегистрированы, то для отправки сообщений, пожалуйста, авторизуйтесь.
-- ИЛИ --
Войдите, используя: Facebook Twitter Yandex Вконтакте Mail.ru ...
Страница создана за 0.061 секунды
Copyright © 1999-2012 PcTuner.Ru · Design by Alex Dovby