Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Лишнее окно при захвате видео :(

0 views
Skip to first unread message

Sergei Shvaiko

unread,
Jun 28, 2004, 2:20:31 AM6/28/04
to
28 Jun 04 06:56:57 Turnaev Leonid писал All на тему <Лишнее окно при захвате видео :(>

TL> (CapturePin) -> SampleGrabber -> NullRender
TL> (PreviewPin) -> VideoRender

TL> При запуске получаю одно окно с изображением в моей программе и второе
TL> окно отдельно. В обоих окнах - изображение с карты захвата. Второе окно
TL> можно даже закрыть.

А NullRender у тебя случайно не равен Null?

Regards, Sergei Shvaiko: gli...@rambler.ru ICQ: 52622425

Turnaev Leonid

unread,
Jun 28, 2004, 5:36:45 AM6/28/04
to
On Mon, 28 Jun 2004, Sergei Shvaiko wrote:

> А NullRender у тебя случайно не равен Null?

Хм... интересная идея :) Посмотрел - нет, не равен. Проверка есть что
NullRender не равен Null. Что еще может быть?

Такая штука, с вторым окном происходит только на Radeon 9000 (на нем есть
видеовход)

Sergei Shvaiko

unread,
Jun 28, 2004, 4:47:27 AM6/28/04
to
28 Jun 04 13:36:45 Turnaev Leonid писал Sergei Shvaiko на тему <Re: Лишнее окно при захвате видео :(>

TL> Хм... интересная идея :) Посмотрел - нет, не равен. Проверка есть что
TL> NullRender не равен Null. Что еще может быть?

TL> Такая штука, с вторым окном происходит только на Radeon 9000 (на нем
TL> есть видеовход)

А на других нет видеовхода? С чего тогда захватываешь?

Попробуй сохранить граф на диск и открыть потом в графедите. Ибо без кода
трудно что-нить посоветовать.

Turnaev Leonid

unread,
Jun 28, 2004, 11:29:40 PM6/28/04
to
> TL> Такая штука, с вторым окном происходит только на Radeon 9000 (на нем
> TL> есть видеовход)
>
> А на других нет видеовхода? С чего тогда захватываешь?

:) есть. Просто моя программа дает такой интересный эффект только на этой
карте. В остальных случаях... на специализированных картах для захвата видео -
все нормально.

> Попробуй сохранить граф на диск и открыть потом в графедите. Ибо без кода
> трудно что-нить посоветовать.

Дело в том, что физически этой карты у меня нет... она у пользователя
стоит... поэтому сохранение графа на диск ничего не даст. Ведь когда я этот
файл буду просматривать уже у себя на машине, ничего полезного не увижу.

Вот мой код... может он чем поможет (проверки сознательно откушены):

CComPtr< ICaptureGraphBuilder2 > m_pBuilder;
CComPtr< IGraphBuilder > m_pGraph;

CComPtr< ISampleGrabber > m_pGrabber;
CComPtr< IBaseFilter > m_pCap;

//создаем граф и графбилдер
m_pBuilder.CoCreateInstance( CLSID_CaptureGraphBuilder2 );
m_pGraph.CoCreateInstance( CLSID_FilterGraph );

//передаем граф графбилдеру
m_pBuilder->SetFiltergraph( m_pGraph );

//ищем дефалтное устройство захвата, добавляем в граф
GetDefaultCapDevice( &m_pCap );
m_pGraph->AddFilter( m_pCap, L"Cap" );

//создаем SampleGrabber, добавляем в граф
m_pGrabber.CoCreateInstance( CLSID_SampleGrabber );
CComQIPtr< IBaseFilter, &IID_IBaseFilter > pGrabBase( m_pGrabber );
m_pGraph->AddFilter( pGrabBase, L"Grabber" );

//создаем NullRenderer, добавляем в граф
CComPtr< IBaseFilter > pNullRenderer;
pNullRenderer.CoCreateInstance( CLSID_NullRenderer );
m_pGraph->AddFilter( pNullRenderer, L"NullRenderer" );

//устанавливаем медиа-тип для SampleGrabber
AM_MEDIA_TYPE mt;
ZeroMemory( &mt, sizeof(mt) );
mt.majortype = MEDIATYPE_Video;
mt.subtype = MEDIASUBTYPE_RGB24;
m_pGrabber->SetMediaType( &mt );

//настраиваем SampleGrabber, передаем указатель на интерфейс для обратного
вызова
m_pGrabber->SetBufferSamples( FALSE );
m_pGrabber->SetOneShot( FALSE );
m_pGrabber->SetCallback( &Grabber, 1 );

//рендерим CapturePin через SampleGrabber на NullRenderer
m_pBuilder->RenderStream(
&PIN_CATEGORY_CAPTURE, // Pin category
&MEDIATYPE_Video, // Media type
m_pCap, // Capture filter
pGrabBase, // Compression filter (optional)
pNullRenderer // Multiplexer or renderer filter
);

//рендерим PreviewPin (должен использоваться рендер по-умолчанию - Video
Renderer)
m_pBuilder->RenderStream(
&PIN_CATEGORY_PREVIEW, // Pin category
&MEDIATYPE_Video, // Media type
m_pCap, // Capture filter
NULL, // Compression filter (optional)
NULL // Multiplexer or renderer filter
);

//получаем интерфейс IVideoWindow
CComQIPtr< IVideoWindow, &IID_IVideoWindow > pWindow = m_pGraph;

//работаем с ним ...
pWindow->put_Owner( (OAHWND) Parent );
pWindow->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS );

Sergei Shvaiko

unread,
Jun 30, 2004, 7:17:10 AM6/30/04
to
29 Jun 04 07:29:40 Turnaev Leonid писал Sergei Shvaiko на тему <Re: Лишнее окно при захвате видео :(>

>> Попробуй сохранить граф на диск и открыть потом в графедите. Ибо без

TL> Дело в том, что физически этой карты у меня нет... она у пользователя
TL> стоит... поэтому сохранение графа на диск ничего не даст. Ведь когда я
TL> этот файл буду просматривать уже у себя на машине, ничего полезного не
TL> увижу.

Так дай ему графедит пусть скриншот сделает.

0 new messages