Класс CPosPassThru

cpospassthru base class hierarchy

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

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

the cpospassthru class sends seek commands upstream.

Хотя этот класс предоставляется в библиотеке базовых классов, 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 (include Потоки.h)
Библиотека
Strmbase.lib (розничные сборки);
Strmbasd.lib (отладочные сборки)