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.]
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.
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 |
|
Biblioteca |
|