Compartilhar via


Método IMediaSeeking::SetPositions (strmif.h)

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

O SetPositions método define a posição atual e a posição de parada.

Sintaxe

HRESULT SetPositions(
  [in, out] LONGLONG *pCurrent,
  [in]      DWORD    dwCurrentFlags,
  [in, out] LONGLONG *pStop,
  [in]      DWORD    dwStopFlags
);

Parâmetros

[in, out] pCurrent

[in,out] Ponteiro para uma variável que especifica a posição atual, em unidades do formato de hora atual.

[in] dwCurrentFlags

Combinação bit a bit de sinalizadores. Consulte Observações.

[in, out] pStop

[in,out] Ponteiro para uma variável que especifica a hora de parada, em unidades do formato de hora atual.

[in] dwStopFlags

Combinação bit a bit de sinalizadores. Consulte Observações.

Valor retornado

Retorna um valor HRESULT . Os possíveis valores incluem os seguintes.

Código de retorno Descrição
S_FALSE
Nenhuma alteração de posição. (Ambos os sinalizadores não especificam nenhuma busca.)
S_OK
Êxito.
E_INVALIDARG
Argumento inválido.
E_NOTIMPL
Não há suporte para o método .
E_POINTER
Argumento de ponteiro NULL.

Comentários

Os parâmetros dwCurrentFlags e dwStopFlags definem o tipo de busca. Os sinalizadores a seguir são definidos.

Sinalizadores de posicionamento Descrição
AM_SEEKING_NoPositioning Nenhuma alteração na posição. (O parâmetro de hora pode ser NULL.)
AM_SEEKING_AbsolutePositioning A posição especificada é absoluta.
AM_SEEKING_RelativePositioning A posição especificada é relativa ao valor anterior.
AM_SEEKING_IncrementalPositioning A posição de parada (pStop) é relativa à posição atual (pCurrent).
 
Sinalizadores do modificador Descrição
AM_SEEKING_SeekToKeyFrame Procure o quadro-chave mais próximo. Isso pode ser mais rápido, mas menos preciso. Nenhum dos filtros fornecidos com o DirectShow dá suporte a esse sinalizador. Os decodificadores são o tipo de filtro mais provável para dar suporte a ele.
AM_SEEKING_ReturnTime Retornar os tempos de referência equivalentes.
AM_SEEKING_Segment Use a busca de segmentos.
AM_SEEKING_NoFlush Não libere.
 

Para cada parâmetro, use um sinalizador de posicionamento. Opcionalmente, inclua um ou mais sinalizadores modificador.

Se o sinalizador AM_SEEKING_ReturnTime for especificado, o método converterá o valor da posição em um tempo de referência e o retornará na variável pCurrent ou pStop . Esse sinalizador será útil se você estiver usando outro formato de hora, como quadros.

Os sinalizadores AM_SEEKING_Segment e AM_SEEKING_NoFlush dão suporte a looping contínuo:

  • Se o sinalizador AM_SEEKING_Segment estiver presente, o filtro de origem enviará um evento EC_END_OF_SEGMENT quando atingir a posição de parada, em vez de chamar IPin::EndOfStream. O aplicativo pode aguardar esse evento e emitir outro comando seek.
  • Se o sinalizador AM_SEEKING_NoFlush estiver presente, o grafo não liberará dados durante a busca. Use esse sinalizador com AM_SEEKING_Segment.
Para executar o looping, o grafo deve relatar AM_SEEKING_CanDoSegments no método IMediaSeeking::GetCapabilities . Atualmente, somente o Filtro de Analisador WAVE dá suporte a esse recurso.

Os valores de entrada de pCurrent e pStop são expressos no formato de hora atual. O formato de hora padrão é REFERENCE_TIME unidades (100 nanossegundos). Para alterar os formatos de hora, use o método IMediaSeeking::SetTimeFormat . Se o sinalizador AM_SEEKING_ReturnTime estiver presente, o método converterá o valor de saída em unidades de REFERENCE_TIME .

Filtrar Desenvolvedores

Se você implementar esse método, poderá marcar se o chamador está solicitando uma alteração na posição atual ou parada, usando o valor AM_SEEKING_PositioningBitsMask para mascarar os sinalizadores do modificador. Por exemplo:
DWORD dwCurrentPos = dwCurrentFlags & AM_SEEKING_PositioningBitsMask
if (dwCurrentPos == AM_SEEKING_AbsolutePositioning)
{ 
    // Set new position to pCurrent.
    m_rtStart = *pCurrent;
}
else if (dwCurrentPos == AM_SEEKING_RelativePositioning)
{
    // Increment current position by pCurrent.
    m_rtStart += *pCurrent;
}
Para obter mais informações, consulte o código-fonte do método CSourceSeeking::SetPositions na biblioteca de classes base.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho strmif.h (inclua Dshow.h)
Biblioteca Strmiids.lib

Confira também

Códigos de erro e êxito

IMediaSeeking Interface