Compartilhar via


Classe CPosPassThru

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Hierarquia da classe base cpospassthru

A CPosPassThru classe manipula comandos seek para filtros de transformação, passando-os upstream para o próximo filtro.

Quando um aplicativo busca o grafo de filtro, o Gerenciador de Grafo de Filtro fornece o comando seek aos filtros do renderizador. O comando é passado upstream, por meio do pino de saída de cada filtro, até atingir um filtro que pode executar o comando (se houver). Para obter detalhes, consulte Buscando. A CPosPassThru classe passa todos os comandos seek para o pino de saída no filtro upstream, conforme mostrado no diagrama a seguir.

a classe cpospassthru envia comandos seek upstream.

Embora essa classe seja fornecida na biblioteca de classes base, o DirectShow também fornece a mesma classe em Quartz.dll. Usar a versão Quartz.dll pode reduzir um pouco o tamanho do código no filtro, pois a classe é carregada em tempo de execução da DLL. Para usar essa versão, chame a função CreatePosPassThru .

No método NonDelegatingQueryInterface do pin de saída, delegue para o objeto CPosPassThru sempre que a interface solicitada for IMediaSeeking ou IMediaPosition, conforme mostrado no seguinte código:

// 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();
}

Exceto quando observado, todos os métodos IMediaPosition e IMediaSeeking nessa classe chamam o método correspondente no pino conectado e retornam o resultado.

Métodos públicos Descrição
Cpospassthru Método de construtor.
ForceRefresh Obsoleto.
GetMediaTime Recupera os carimbos de data/hora no exemplo atual. Virtual.
Métodos IMediaPosition Descrição
get_Duration Recupera a duração do fluxo.
Put_currentposition Define a posição atual, em relação à duração total do fluxo.
get_StopTime Recupera a hora em que a reprodução será interrompida, em relação à duração do fluxo.
put_StopTime Define a hora em que a reprodução será interrompida, em relação à duração do fluxo.
get_PrerollTime Recupera a quantidade de dados que serão enfileirados antes da posição inicial.
put_PrerollTime Define a quantidade de dados que serão enfileirados antes da posição inicial.
get_Rate Recupera a taxa de reprodução.
put_Rate Define a taxa de reprodução.
get_CurrentPosition Recupera a posição atual, em relação à duração total do fluxo.
CanSeekForward Determina se o fluxo pode ser buscado para trás.
CanSeekBackward Determina se o fluxo pode ser buscado para frente.
Métodos IMediaSeeking Descrição
CheckCapabilities Consulta se um fluxo especificou recursos de busca.
ConvertTimeFormat Converte de um formato de vez em outro.
GetAvailable Recupera o intervalo de vezes em que a busca é eficiente.
GetCapabilities Recupera todos os recursos de busca do fluxo.
Getcurrentposition Recupera a posição atual, em relação à duração total do fluxo.
GetDuration Recupera a duração do fluxo.
GetPositions Recupera a posição atual e a posição de parada, em relação à duração total do fluxo.
GetPreroll Recupera a quantidade de dados que serão enfileirados antes da posição inicial.
GetRate Recupera a taxa de reprodução.
GetStopPosition Recupera a hora em que a reprodução será interrompida, em relação à duração do fluxo.
Gettimeformat Recupera o formato de hora atual.
Isformatsupported Determina se há suporte para um formato de hora especificado.
IsUsingTimeFormat Determina se um formato de hora especificado é o formato atualmente em uso.
QueryPreferredFormat Recupera o formato de hora preferencial para o fluxo.
Setpositions Define a posição atual e a posição de parada.
Setrate Define a taxa de reprodução.
SetTimeFormat Define o formato de hora.
Funções auxiliares Descrição
CreatePosPassThru Cria um CPosPassThru objeto ou CRendererPosPassThru .

Requisitos

Requisito Valor
parâmetro
Ctlutil.h (inclua Streams.h)
Biblioteca
Strmbase.lib (builds de varejo);
Strmbasd.lib (builds de depuração)