Поделиться через


Класс CPosPassThru

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Иерархия базовых классов cpospassthru

Класс CPosPassThru обрабатывает команды поиска для фильтров преобразования, передавая их вышестоящий следующему фильтру.

Когда приложение ищет граф фильтра, диспетчер графа фильтров передает команду seek фильтрам отрисовщика. Команда передается вышестоящий через выходной контакт каждого фильтра, пока не достигнет фильтра, который может выполнить команду (если таковой имеется). Дополнительные сведения см. в разделе Поиск. Класс CPosPassThru передает все команды seek в выходной контакт в фильтре вышестоящий, как показано на следующей схеме.

Класс cpospassthru отправляет команды поиска вышестоящий.

Хотя этот класс предоставляется в библиотеке базовых классов, 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 .

Требования

Требование Значение
Заголовок
Ctlutil.h (включая Streams.h)
Библиотека
Strmbase.lib (розничные сборки);
Strmbasd.lib (отладочные сборки)