Форум: "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