Главная страница
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.026 c
15-1137108846
Quattro
2006-01-13 02:34
2006.02.05
KaZaa


15-1136978114
syte_ser78
2006-01-11 14:15
2006.02.05
винт с 16Мб кеша


3-1134031355
Schooler
2005-12-08 11:42
2006.02.05
Interbase: помогите разобраться с правами.


1-1135794073
SergProger
2005-12-28 21:21
2006.02.05
Указать кодировку


15-1137548206
Фрэнд
2006-01-18 04:36
2006.02.05
Что в папке C: WINDOWS Recent ?