Класс CPosPassThru
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Класс CPosPassThru
обрабатывает команды поиска для фильтров преобразования, передавая их вышестоящий следующему фильтру.
Когда приложение ищет граф фильтра, диспетчер графа фильтров передает команду seek фильтрам отрисовщика. Команда передается вышестоящий через выходной контакт каждого фильтра, пока не достигнет фильтра, который может выполнить команду (если таковой имеется). Дополнительные сведения см. в разделе Поиск. Класс CPosPassThru
передает все команды seek в выходной контакт в фильтре вышестоящий, как показано на следующей схеме.
Хотя этот класс предоставляется в библиотеке базовых классов, DirectShow также предоставляет тот же класс в Quartz.dll. Использование версии Quartz.dll может несколько уменьшить размер кода в фильтре, так как класс загружается во время выполнения из библиотеки DLL. Чтобы использовать такую версию, вызовите функцию CreatePosPassThru .
В методе NonDelegatingQueryInterface выходных данных делегируйте объекту CPosPassThru всякий раз, когда запрошенным интерфейсом является IMediaSeeking или IMediaPosition, как показано в следующем коде:
// The following member variables are assumed:
IPin *m_pInput; // Pointer to the input pin on your filter.
IUnknown *m_pPos; // Pointer to the CPosPassThru object.
STDMETHODIMP CMyPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
HRESULT hr
if (riid == IID_IMediaPosition || riid == IID_IMediaSeeking)
{
if (m_pPos == NULL)
{
// We have not created the CPosPassThru object yet. Do so now.
hr = CreatePosPassThru(GetOwner(), FALSE, m_pInput, &m_pPos);
if (FAILED(hr)) return hr;
}
return m_pPos->QueryInterface(riid, ppv);
}
else
{
// Other interfaces (not shown).
}
}
~CMyPin::CMyPin()
{
// Release the CPosPassThruObject.
if (m_pPos != NULL) m_pPos->Release();
}
За исключением случаев, когда указано, все методы IMediaPosition и IMediaSeeking в этом классе вызывают соответствующий метод в подключенном контакте и возвращают результат.
Открытые методы | Описание |
---|---|
CPosPassThru | Метод конструктора. |
ForceRefresh | Является устаревшей. |
GetMediaTime | Извлекает метки времени в текущем примере. Виртуальной. |
Методы IMediaPosition | Описание |
get_Duration | Извлекает длительность потока. |
put_CurrentPosition | Задает текущую позицию относительно общей длительности потока. |
get_StopTime | Извлекает время остановки воспроизведения относительно длительности потока. |
put_StopTime | Задает время остановки воспроизведения относительно длительности потока. |
get_PrerollTime | Извлекает объем данных, которые будут помещены в очередь до начальной позиции. |
put_PrerollTime | Задает объем данных, которые будут помещены в очередь до начальной позиции. |
get_Rate | Извлекает частоту воспроизведения. |
put_Rate | Задает частоту воспроизведения. |
get_CurrentPosition | Извлекает текущую позицию относительно общей длительности потока. |
CanSeekForward | Определяет, можно ли искать поток назад. |
CanSeekBackward | Определяет, можно ли искать поток вперед. |
Методы IMediaSeeking | Описание |
CheckCapabilities | Запрашивает, заданы ли в потоке возможности поиска. |
ConvertTimeFormat | Преобразует один формат времени в другой. |
GetAvailable | Извлекает диапазон времени, в котором поиск является эффективным. |
GetCapabilities | Извлекает все возможности поиска потока. |
GetCurrentPosition | Извлекает текущую позицию относительно общей длительности потока. |
GetDuration | Извлекает длительность потока. |
GetPositions | Извлекает текущую позицию и позицию остановки относительно общей длительности потока. |
GetPreroll | Извлекает объем данных, которые будут помещены в очередь до начальной позиции. |
GetRate | Извлекает частоту воспроизведения. |
GetStopPosition | Извлекает время остановки воспроизведения относительно длительности потока. |
GetTimeFormat | Извлекает формат текущего времени. |
IsFormatSupported | Определяет, поддерживается ли указанный формат времени. |
IsUsingTimeFormat | Определяет, является ли указанный формат времени используемым в настоящее время форматом. |
QueryPreferredFormat | Извлекает предпочтительный формат времени для потока. |
SetPositions | Задает текущую и стоп-позицию. |
SetRate | Задает частоту воспроизведения. |
SetTimeFormat | Задает формат времени. |
Вспомогательные функции | Описание |
CreatePosPassThru | Создает CPosPassThru объект или CRendererPosPassThru . |
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|