DirectShow является частью DirectX, которая предназначена для управления воспроизведением видео. Это очень полезный набор компонент, позволяющих работать с множеством разнообразных типов медиа, включая различные аудио форматы, такие как .тр3 и .wma, и видео форматы, такие как mpg, .avi и даже закодированные файлы DVD!
Т. к. нас интересует только часть, относящаяся к воспроизведению видео, вы можете игнорировать большую часть компонент DirectShow и сосредоточиться только на тех, которые работают с видео. Хм - после некоторых размышлений, я понял что самым простым способом работы с видео является создание специализированного фильтра, который бы обрабатывал данные видео, импортируемые DirectShow. Давайте посмотрим, как можно использовать фильтры для анимации текстур.
Замечание. Те из вас, кто изучал DirectX SDK самостоятельно, видели демонстрационную программу Texture3D, которая иллюстрирует использование видео файла для текстурирования полигонов. В этой главе я расширю функциональность этой программы, разработав способ использования неограниченного количества видео файлов в трехмерных сценах.
Использование фильтров в DirectShow
DirectShow работает с различными медиа форматами посредством фильтров. Каждый фильтр предназначен для кодирования или декодирования медиа данных при их записи или считывании из файла. Фильтры могут быть объединены, при этом один фильтр ответственен за декодирование одного типа данных медиа, а другой фильтр обрабатывает эти данные и отображает их (см. рис. 14.1).
Вы можете начать с создания собственного фильтра DirectShow и вставки его в поток декодирования видео. Как только вы начнете декодировать видео файл с помощью DirectShow, фильтр обработает и отправит данные этого файла непосредственно на поверхность текстуры, используемой при визуализации полигонов. Звучит просто, не так ли?
Проблема заключается в том, что последние версии DirectShow используют более 70 фильтров и более 70 интерфейсов! Ничего себе - этого достаточно, чтобы заставить поежиться самых опытных программистов! Что такой программист, как вы или я, может сделать с этим огромным количеством интерфейсов? Я скажу, что вы можете сделать...вы можете использовать базовые классы.

Рис. 14.1. Медиа файл может пройти через множество фильтров, прежде чем будет проигран
Использование базовых классов
Вот здесь то и приходит на помощь корпорация Microsoft! Зная, что непосредственная работа с декодерами видео и разнообразными интерфейсами DirectShow может быть затруднительна, корпорация Microsoft создала набор классов, которые облегчают разработку фильтров. Эти классы расположены в инсталляционной директории DirectX SDK в\Samples\Multimedia\DirectShow\BaseClasses и называют базовые классы DirectShow.
Совет. Чтобы изменить настройки компилятора Visual C/C++, в главном меню выберите Build (Построить), а затем Set Active Configuration (Установить текущую конфигурацию). В диалоговом окне Set Active Project Configuration (Установка текущей конфигурации проекта) выберите желаемую конфигурацию (либо отладочную (debug), либо рабочую(rеlеаsе) из списка Project Configurations (Настройки проекта) и нажмите кнопку OR.
Чтобы использовать базовые классы в проектах, необходимо сначала откомпилировать их. Запустите Visual C/C++ и откройте проект BaseClasses, который расположен в инсталляционной директории DirectX SDK в \Samples\Multimedia\Direct-Show\BaseClasses\BaseClasses.dsw. Скомпилируйте проект базовых классов, используя отладочную и release настройки.
После компиляции (убедитесь, что вы скомпилировали обе конфигурации!) необходимо скопировать две полученные библиотеки (\debug\strmbasd.lib для отладочной версии и \release\strmbase.lib для рабочей версии) и все файлы .h, расположенные в директории BaseClasses, в директорию вашего проекта.
В диалоговом окне проекта Settings/Link (Установки/Привязка) добавьте strmbasd.lib или strmbase.lib (отладочные или рабочие соответственно, в зависимости от конфигурации) к списку Object/Library Modules (Объектные/Библиотечные модули) проекта. Также убедитесь, что при использовании DirectShow вы подключаете заголовочные файлы streams.h и dshow.h (из директории базовых классов).
Замечание. Если вы не хотите помещать файлы базовых классов в директорию своего проекта (чтобы сэкономить место на диске или чтобы избежать огромного количества файлов в директории), просто добавьте директорию базовых классов в список используемых компилятором директорий заголовочных файлов. Убедитесь, что проделали то же самое и для директории библиотек; или вместо этого непосредственно привяжите библиотеки в настройках привязки компилятора.
Теперь вы готовы к действиям! Чтобы импортировать видео данные, необходимо сначала создать собственный фильтр.
⇐Использование файлов видео в качестве текстур || Оглавление || Создание специализированного фильтра⇒