Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.10.2012, 18:42
Lavr!k Lavr!k вне форума
Прохожий
 
Регистрация: 07.07.2012
Сообщения: 5
Репутация: 10
По умолчанию Захват видео - ошибка при добавлении фильтра захвата

Уважаемые господа!!
Пожалуйста, помогите советом.

Хочу написать программу по захвату видео с вэбки. Под захватом подразумеваю только просмотр, хотя в дальнейшем планирую добавить ещё и фильтры записи в файл.

Идея простая: на форме Panel1 и кнопка Button1. Жмём на кнопку и видео воспроизводиться на панели. Смотрел книгу С.А. Есенина DirectX, но там разобран пример, где пользователю предлагают выбирать устройство захвата. Я хотел бы обойтись без этого, так как у меня будет использоваться всего 1 устройство с известным TGUID.

Я попытался создать и добавить фильтр захвата как добавляют обычные фильтры (фильтр источника, фильтр вывода и т.д.). Но создать его так не получается. Пожалуйста, подскажите у кого какие мысли?

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

Код ниже:
Код:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses ActiveX, DirectShow9;

const

CLSID_CaptureUSB: TGUID='{65e8773d-8f56-11d0-a3b9-00a0c9223196}';

var
   pGraphBuilder: IGraphBuilder = nil;
   pMediaControl: IMediaControl = nil;
   pMediaEvent: IMediaEvent = nil;
   pCaptureGraphBuilder2: ICaptureGraphBuilder2 = nil;
   pVideoWindow: IVideoWindow = nil;
   pCaptureUSB: IBaseFilter = nil;

procedure TForm1.FormCreate(Sender: TObject);
begin
   CoInitialize(nil);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   CoUninitialize;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   hr: HRESULT;
   evCode: Integer;
begin

If Assigned(pGraphBuilder) then pGraphbuilder:= nil;
if Assigned(pMediaControl) then pMediaControl:= nil;
If Assigned(pMediaEvent) then pMediaEvent:= nil;
IF Assigned(pCaptureGraphBuilder2) then pCaptureGraphBuilder2:= nil;
If Assigned(pVideoWindow) then pVideoWindow:= nil;
If Assigned(pCaptureUSB) then pCaptureUSB:= nil;

hr:= CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IGraphBuilder, pGraphBuilder);
if FAILED(hr) then begin
ShowMessage('Не удаётся создать GraphBuilder');
exit;
end;

hr:= CoCreateInstance(CLSID_CaptureGraphBuilder2, nil, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, pCaptureGraphBuilder2);
if FAILED(hr) then begin
ShowMessage('Не удаётся создать CaptureGraphBuilder');
exit;
end;

hr:= pCaptureGraphBuilder2.SetFiltergraph(pGraphBuilder);
if FAILED(hr) then begin
exit;
end;

hr:= CoCreateInstance(CLSID_CaptureUSB, nil, CLSCTX_INPROC, IID_IBaseFilter, pCaptureUSB);
if FAILED(hr) then begin
ShowMessage('Не удаётся создать CaptureUSB');
exit;
end;

hr:= pGraphBuilder.AddFilter(pCaptureUSB,'CaptureUSB');
if FAILED(hr) then begin
ShowMessage('Не удаётся добавить фильтр источника к графу');
exit;
end;
Админ: пользуемся тегами для оформления кода!

// Далее рендеринг и работа с окном вывода...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter