Главная страница
    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.011 c
2-1137666070
olevacho_
2006-01-19 13:21
2006.02.05
Автоматическое переключение языка


2-1137414572
Фома
2006-01-16 15:29
2006.02.05
размер текста


3-1133857572
SeZuka
2005-12-06 11:26
2006.02.05
Поля типа Graphic


15-1136862432
vidiv
2006-01-10 06:07
2006.02.05
getdc(0);


15-1137085491
ArtemESC
2006-01-12 20:04
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский