Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио-видео захватом в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и Audio/Video Capture в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Диспетчер фильтров Graph предоставляет три интерфейса, которые поддерживают уведомление о событии.
- IMediaEventSink содержит метод фильтрации для публикации событий.
- IMediaEvent содержит методы для получения событий приложениями.
- IMediaEventEx наследует и расширяет интерфейс IMediaEvent.
Фильтрует уведомления о событиях, вызывая метод IMediaEventSink::Notify в диспетчере графов фильтров. Уведомление о событии состоит из кода события, который определяет тип события и два параметра, которые предоставляют дополнительные сведения. В зависимости от кода события параметры могут содержать указатели, коды возврата, время ссылки или другие сведения. Полный список кодов событий и параметров см. в разделе Коды уведомлений о событиях.
Чтобы получить событие из очереди, приложение вызывает метод IMediaEvent::GetEvent в диспетчере графов фильтров. Этот метод блокирует до тех пор, пока не произойдет какое-либо событие для возврата или не истечет указанное время. Если имеется событие очереди, метод возвращается с кодом события и двумя параметрами события. После вызова GetEventприложение всегда должно вызывать метод IMediaEvent::FreeEventParams, чтобы освободить все ресурсы, связанные с параметрами события. Например, параметр может быть значением BSTR, которое было выделено графом фильтров.
В следующем примере кода представлено описание способа извлечения событий из очереди.
long evCode;
LONG_PTR param1, param2;
HRESULT hr;
while (hr = pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0), SUCCEEDED(hr))
{
switch(evCode)
{
// Call application-defined functions for each
// type of event that you want to handle.
}
hr = pEvent->FreeEventParams(evCode, param1, param2);
}
Чтобы переопределить обработку диспетчера графов фильтров по умолчанию для события, вызовите метод IMediaEvent::CancelDefaultHandling с кодом события в качестве параметра. Вы можете восстановить обработку по умолчанию, вызвав метод IMediaEvent::RestoreDefaultHandling. Если граф фильтров не выполняет обработку по умолчанию для указанного кода события, вызов этих методов не действует.
Связанные разделы
-
уведомление о событиях в DirectShow