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 |
---|---|
|
Nenhuma alteração de posição. (Ambos os sinalizadores não especificam nenhuma busca.) |
|
Êxito. |
|
Argumento inválido. |
|
Não há suporte para o método . |
|
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.
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; } |
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 |