Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.05;
Скачать: CL | DM;

Вниз

Попытка видеозахвата (DirectShow)   Найти похожие ветки 

 
Исследователь   (2005-08-25 05:26) [0]

Добрый день мастера!

Начал потихоньку изучать DirectShow, залез на MSDN и попробовал воспроизвести все по их описанию... но к сожалению до конца не разобрался и с первого раза ничего не получилось... :)

Может, кто хорошо знаком с данной темой ткнет пальцем в "неверное место в коде".

var
  pGraph   : IGraphBuilder         = nil;
  pBuild   : ICaptureGraphBuilder2 = nil;
  pCap     : IBaseFilter           = nil;
  pDevEnum : ICreateDevEnum        = nil;
  pEnum    : IEnumMoniker          = nil;
  pMoniker : IMoniker              = nil;
  pPropBag : IPropertyBag          = nil;

{...}

var
  HR      : HRESULT;
  varName : OleVariant;
  s       : string;
begin
    hr := CoCreateInstance(CLSID_CaptureGraphBuilder2, nil, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, pBuild);
    if FAILED(hr) then begin
      ShowMessage("1");
      exit;
    end;

    hr := CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, pGraph);
    if FAILED(hr) then begin
      ShowMessage("2");
      exit;
    end;

    pBuild.SetFiltergraph(pGraph);

    // create system device enumerator.
    hr := CoCreateInstance(CLSID_SystemDeviceEnum, nil,
                       CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, pDevEnum);
    if FAILED(hr) then begin
      ShowMessage("3");
      exit;
    end;

    hr := pDevEnum.CreateClassEnumerator(CLSID_VideoInputDeviceCategory, pEnum, 0);
    if FAILED(hr) then begin
      ShowMessage("4");
      exit;
    end;

    // select device
    while (pEnum.Next(1, pMoniker, nil) = S_OK) do begin
      if (pMoniker.BindToStorage(nil, nil, IID_IPropertyBag, pPropBag) = S_OK) and (pPropBag<>nil) then begin
        pPropBag.Read("FriendlyName", varName, nil);
        s := varName;
        MainForm.List.Items.Add(s);
      end;
    end;

    // create capture filter
    hr := pMoniker.BindToObject(nil, nil, IID_IBaseFilter, pCap);
    if FAILED(hr) then begin
      ShowMessage("5");
      exit;
    end;

    // add filter into graph
    hr := pGraph.AddFilter(pCap, "Capture Filter");
    if FAILED(hr) then begin
      ShowMessage("6");
      exit;
    end;

    // build video preview graph
    hr := pBuild.RenderStream(@PIN_CATEGORY_PREVIEW, @MEDIATYPE_Video, pCap, nil, nil);
end;


Заранее спасибо.


 
Исследователь   (2005-08-25 05:29) [1]

Да, совсем забыл уточнить делали :)

Пробую сделать превью с вебкамеры. Ошибка AV Read of address 00000000 на строчке:

hr := pMoniker.BindToObject(nil, nil, IID_IBaseFilter, pCap);



Страницы: 1 вся ветка

Текущий архив: 2006.02.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.027 c
3-1134069262
Сафаров
2005-12-08 22:14
2006.02.05
master/detail


6-1130173528
Kostya
2005-10-24 21:05
2006.02.05
Обработка ошибок в TidHTTP


2-1137679539
Compton's G
2006-01-19 17:05
2006.02.05
TStringlist


15-1137489290
Некто
2006-01-17 12:14
2006.02.05
Корпоративная ICQ


5-1124170286
Michael5
2005-08-16 09:31
2006.02.05
Мне нужно поместить на панель (TPanel) таблицу (DBGrid), но чтобы