Смекни!
smekni.com

Обзор элементов языка программирования (стр. 2 из 5)

Фильтры делятся на три типа:

Фильтры-источники (Sourcefilters) - эти фильтры просто получают данные из какого-то источника, с диска (как фильтр File Source (Async) на рисунке), с CD или DVD дисковода или с TV – карты или карты, к которой подключена цифровая видеокамера.

Фильтры-преобразователи (Transform filters) – эти фильтры как видно из названия преобразуют поток данных, проходящий через них каким-либо образом, например – разделяет поток данных на кадры, производят декомпрессию и т.п. На нашем рисунке к таким фильтрам относятся AVI Splitter и AVI Decompressor.

Фильтры вывода (Renderer filters) – фильтры, которые получают полностью обработанные данные и выводят их на монитор, звуковую карту, пишут на диск или выводят на еще какое-нибудь устройство.

Итак из фильтров-кубиков можно выстраивать граф. Делается это с помощью интерфейса IGraphBuilder. Создать объект типа IGraphBuilder можно так:

CoCreateInstance(CLSID_FilterGraph,nil,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,MyGraphBuilder);

Здесь переменная MyGraphBuilderимеет тип IGraphBuilder; идентификатор класса CLSID_FilterGraphи IID_IGraphBuilderобьявлены в файле DShow.pas, поэтому не забудьте добавить:

uses DShow.pas

Итак, интерфейс IGraphBuilder получен. Можно построить граф фильтров, такой, какой нам нужно. Впрочем, все не так сложно, IGraphBuilder достаточно интеллектуален, он может сам, автоматически, построить граф, в зависимости от

того какие файлы мы собираемся воспроизводить. Интерфейс IGraphBuilder имеет метод RenderFile, который получает имя файла в качестве параметра и, в зависимости от типа файла (которое определяется по расширению и по

специальным сигнатурам в файле), сканирует реестр, в поисках необходимой для построения графа информации, создает необходимые фильтры и строит

Выполнил Муханов А. 05.12.09. КР 3706002 000009 ПЗ лист Проверила Енсепова Г. К. 07.12.09.

9

изм лист № докум Подпись Дата

граф, предназначенный для воспроизведения файлов этого типа (WAV, AVI, MP2, MPG и т.д.).

2.2 Описание программ комплекса

После построения графа, DirectShow готов к воспроизведению. Для управления потоком данных через граф обработки предназначен интерфейс IMediaControl – он имеет методы Run, Pause и Stop.

Пример:

uses

... DShow, ActiveX,ComObj;

var

MyGraphBuilder : IGraphBuilder;

MyMediaControl : IMediaControl;

begin

CoInitialize(nil);

{получаеминтерфейс IGraphBuilder}

CoCreateInstance(CLSID_FilterGraph,nil,CLSCTX_INPROC_SERVER,IID_I GraphBuilder,MyGraphBuilder);

{вызываем RenderFile - граф фильтров строится автоматически}

MyGraphBuilder.RenderFile(cool.avi',nil);

{получаеминтерфейс ImediaControl}

MyGraphBuilder.QueryInterface(IID_IMediaControl,MyMediaControl);

{Примечание - MyMediaControl - переменнаятипа IMediaControl}

{проигрываем видео}

MyMediaControl.Run;

{ждем пока пользователь не нажмет ОК (видео воспроизводится в отдельном (thread) потоке)}

ShowMessage('Нажмите OК');

CoUninitialize;

end;

Интерфейс IVideoWindow содержит методы для управления заголовком, стилем, местоположением и размерами окошка в котором проигрывается видео.

Давайте попробуем переделать наш пример так, чтобы видео выводилось не в отдельном окошке, а, скажем на компоненте TPanel, расположенном в нашей форме. Добавьте на форму компонент TPanel, пусть он называется Panel1.

Выполнил Муханов А. 05.12.09. КР 3706002 000009 ПЗ лист Проверила ЕнсеповаГ.К. 07.12.09

10

изм лист № докум Подпись Дата

uses

... DShow, ActiveX,ComObj;

procedure TForm1.Button1Click(Sender: TObject);

var

MyGraphBuilder : IGraphBuilder;

MyMediaControl : IMediaControl;

VideoWindow : IVideoWindow;

begin

CoInitialize(nil);

{получаем интерфейс IGraphBuilder}

CoCreateInstance(CLSID_FilterGraph,nil,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,MyGraphBuilder);

{вызываем RenderFile - граф фильтров строится автоматически}

MyGraphBuilder.RenderFile('C:\Program Files\Borland\Pascal\Demos\Coolstuf\cool.avi',nil);

{получаем интерфейс ImediaControl}

MyGraphBuilder.QueryInterface(IID_IMediaControl,MyMediaControl);

{Примечание - MyMediaControl - переменнаятипа IMediaControl}

{получаем интерфейс IVideoWindow}

MyGraphBuilder.QueryInterface(IID_IVideoWindow,VideoWindow);

{Примечание - VideoWindow - переменнаятипа IVideoWindow}

{располагаем окошко с видео на панель}

VideoWindow.Set_Owner(Self.Panel1.Handle);

VideoWindow.Set_WindowStyle(WS_CHILD OR WS_CLIPSIBLINGS);

VideoWindow.SetWindowPosition(0,0,Panel1.ClientRect.Right,Panel1.ClientRect.Bottom);

{проигрываем видео}

MyMediaControl.Run;

ShowMessage('Нажмите OК');

CoUninitialize;

end;

Программа Speaker1 предназначена для генерации последовательности прямоугольных звуковых импульсов:

Двоичное представление шестнадцатеричного значения #FC имеет вид 11111100. Вначале определяются значение, находящееся в порте динамика, и два младших бита обнуляются (благодаря использованию операции and и маски $FC). В цикле динамик включается (в бит b1 записывается единица), затем, после

небольшой задержки, отключается и так повторяется до нажатия произвольной

Выполнил Муханов А. 05.12.09. КР 3706002 000009 ПЗ лист Проверила Енсепова Г.К. 07.12.09.

11

изм лист № докум Подпись Дата

клавиши. После нажатия клавиши выполнение цикла прекращается. Важно то, что оба младших бита будут содержать нулевые значения, и при всех последующих обращениях к динамику других программ он будет работать правильно. Программа генерирует тон частотой примерно 100Гц.

2.3 Макро блок - схема комплекса

Существует много способов описания, представления алгоритмов. Мы остановимся на четырех: естественном языке, графическом языке, алгоритмическом языке и языке программирования.

Каждый вид представления имеет средства описания алгоритмов, ориентированные на своего исполнителя:

- естественный язык - слова на естественном языке общения;

- графический язык - графические схемы (блок-схемы) с описанием действий;

-алгоритмический язык - определенные слова естественного языка, которым придается значение действия или команды для исполнителя;

-язык программирования - команды языка программирования.

Во всех предложенных способах представления алгоритма, кроме последнего исполнителем является человек, а в последнем четвертом случае исполнитель-компьютер.

Алгоритмический язык - это система обозначений и правил для единообразной и точной записи алгоритмов и их исполнения.

Алгоритмический язык, с одной стороны, близок к обычному языку, поэтому читается и записывается как обыкновенный текст. С другой стороны, по своей форме алгоритмический язык приближается к языкам программирования, что дает возможность быстрее освоить языки программирования для ЭВМ.

Алгоритмический язык имеет свой словарь. Основу его составляют слова, представляющие команды этого языка. В алгоритмическом языке также используются слова, смысл и способ употребления которых не изменяется. Они называются служебными словами.

Служебные слова алгоритмического языка подчеркиваются и записываются, как правило, в сокращенной форме и предназначены для оформления алгоритма.

Синтаксические конструкции языка подразделяются на два типа: описания данных (величин) и операторов (команд).

Представление алгоритмов в виде блок-схем. Наиболее наглядным способом представления алгоритма является его графическое представление в виде блок-схем.

Блок-схема - это графическое представление алгоритма, каждое действие алгоритма записывается соответствующей геометрической фигурой.

Выполнил Муханов А. 05.12.09. КР 3706002 000009 ПЗ лист Проверила Енсепова Г. К. 07.12.09

12

изм лист № докум Подпись Дата
Условное обозначение Пояснение
Начало алгоритма;Конец алгоритма;Процесс или группа действий;Выбор действия в зависимости от истинности или ложности;Повторение действии заданное количество разВвод (вывод) значений переменных;Направление вычисления.

2.4 Таблица идентификаторов комплекса