Класс CPosPassThru
Класс CPosPassThru
обрабатывает команды поиска для фильтров преобразования, передав их вышестоящим в следующий фильтр.
Когда приложение ищет граф фильтра, диспетчер фильтра Graph предоставляет команду поиска фильтрам отрисовщика. Команда передается вышестоящим путем через пин-код вывода каждого фильтра, пока не достигнет фильтра, который может выполнить команду (если она есть). Дополнительные сведения см. в разделе "Поиск". Класс 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. |
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|