Форум по 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.

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

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

Код ниже:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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;
 
<b>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;</b>
Админ: пользуемся тегами для оформления кода!

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


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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