Интернет магазин китайских планшетных компьютеров



Компьютеры - DirectShow - Пример программы на языке C++

01 мая 2011


Оглавление:
1. DirectShow
2. История
3. Возможности
4. Пример программы на языке C++
5. Критика



Представленный ниже пример программы воспроизводит видеофайл формата AVI. Это очень простой пример, состоящий всего из одной функции main, но наглядно показывающий способ использования объектов DirectShow. В данном случае, это менеджер графа-фильтров, интерфейс управления менеджером и интерфейс передачи сообщений. Менеджер графа-фильтров сам создаёт набор необходимых фильтров при загрузке файла. А при помощи интерфейса управления файл запускается на воспроизведение, при завершении воспроизведения — останавливается.

//---------------------------------------------------------------------------
#include <stdio.h>
#include <dshow.h>
//---------------------------------------------------------------------------
char * pcFileName = "test.avi";
//---------------------------------------------------------------------------
int main
{
    IGraphBuilder * pGraph;    //Интерфейс менеджера графа-фильтров
    IMediaControl * pControl;  //Интерфейс управления
    IMediaEvent   * pEvent;    //Интерфейс сообщений
 
    //Инициализация библиотеки COM
    HRESULT hr = CoInitializeEx;
    if)
    {
        //Создание менеджера графа-фильтров
        hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
                                IID_IGraphBuilder, &pGraph);
        if)
        {
            //Получение интерфейса управления
            hr = pGraph->QueryInterface&pControl);
            if)
            {
                //Получение интерфейса сообщений
                hr = pGraph->QueryInterface&pEvent);
                if)
                {
                    //Загрузка файла
                    WCHAR wFileName;
                    MultiByteToWideChar;
                    hr = pGraph->RenderFilewFileName, NULL);
 
                    //Для не Unicode
                    //hr = pGraph->RenderFilepcFileName, NULL);
 
                    if)
                    {
                        //Запуск воспроизведения
                        hr = pControl->Run;
                        if)
                        {
                            //В реальном приложении INFINITE лучше не использовать
                            long evCode;
                            pEvent->WaitForCompletion;
                        }
 
                        //Остановка графа-фильтров
                        hr = pControl->Stop;
                    }
                }
                else
                {
                    printf;
                }
            }
            else
            {
                printf;
            }
        }
        else
        {
            printf;
        }
 
        //Освобождаем ресурсы
        if pControl->Release;
        if   pEvent->Release;
        if   pGraph->Release;
 
        CoUninitialize;
    }
    else
    {
        printf;
    }
 
    return hr;
}
//---------------------------------------------------------------------------


Просмотров: 4867


<<< Мультимедийный фреймворк
FFmpeg >>>