Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

Попытка видеозахвата (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 вся ветка

Форум: "Media";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.019 c
2-1137666070
olevacho_
2006-01-19 13:21
2006.02.05
Автоматическое переключение языка


1-1136798080
scrat
2006-01-09 12:14
2006.02.05
Запрет доступа к папке


1-1136042407
SnupDog
2005-12-31 18:20
2006.02.05
ListBox - програмное выделение строчки


8-1125320969
qwe
2005-08-29 17:09
2006.02.05
Запись звука в wav


2-1137624234
Змей
2006-01-19 01:43
2006.02.05
Перевод строки из русской в английскую и наоборот.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский