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

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

El SetPositions método establece la posición actual y la posición de detención.

Sintaxis

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

Parámetros

[in, out] pCurrent

[in,out] Puntero a una variable que especifica la posición actual, en unidades del formato de hora actual.

[in] dwCurrentFlags

Combinación bit a bit de marcas. Vea la sección Comentarios.

[in, out] pStop

[in,out] Puntero a una variable que especifica la hora de detención, en unidades del formato de hora actual.

[in] dwStopFlags

Combinación bit a bit de marcas. Vea la sección Comentarios.

Valor devuelto

Devuelve un valor HRESULT . Estos son algunos de los valores posibles.

Código devuelto Descripción
S_FALSE
Sin cambio de posición. (Ambas marcas no especifican ninguna búsqueda).
S_OK
Correcto.
E_INVALIDARG
Argumento no válido.
E_NOTIMPL
No se admite el método .
E_POINTER
Argumento de puntero NULL.

Comentarios

Los parámetros dwCurrentFlags y dwStopFlags definen el tipo de seek. Se definen las marcas siguientes.

Marcas de posicionamiento Descripción
AM_SEEKING_NoPositioning No hay ningún cambio en la posición. (El parámetro time puede ser NULL).
AM_SEEKING_AbsolutePositioning La posición especificada es absoluta.
AM_SEEKING_RelativePositioning La posición especificada es relativa al valor anterior.
AM_SEEKING_IncrementalPositioning La posición de detención (pStop) es relativa a la posición actual (pCurrent).
 
Marcas modificadores Descripción
AM_SEEKING_SeekToKeyFrame Busque el fotograma clave más cercano. Esto puede ser más rápido, pero menos preciso. Ninguno de los filtros que se incluyen con DirectShow admite esta marca. Los descodificadores son el tipo de filtro más probable para admitirlo.
AM_SEEKING_ReturnTime Devuelve los tiempos de referencia equivalentes.
AM_SEEKING_Segment Use la búsqueda de segmentos.
AM_SEEKING_NoFlush No vacíe.
 

Para cada parámetro, use una marca de posicionamiento. Opcionalmente, incluya una o varias marcas modificadores.

Si se especifica la marca AM_SEEKING_ReturnTime, el método convierte el valor de posición en una hora de referencia y lo devuelve en la variable pCurrent o pStop . Esta marca es útil si usa otro formato de hora, como fotogramas.

Las marcas AM_SEEKING_Segment y AM_SEEKING_NoFlush admiten bucles sin problemas:

  • Si la marca AM_SEEKING_Segment está presente, el filtro de origen envía un evento de EC_END_OF_SEGMENT cuando alcanza la posición de detención, en lugar de llamar a IPin::EndOfStream. La aplicación puede esperar este evento y, a continuación, emitir otro comando seek.
  • Si la marca AM_SEEKING_NoFlush está presente, el gráfico no vacía los datos durante la búsqueda. Use esta marca con AM_SEEKING_Segment.
Para realizar un bucle, el gráfico debe notificar AM_SEEKING_CanDoSegments en el método IMediaSeeking::GetCapabilities . Actualmente, solo el filtro wave parser admite esta característica.

Los valores entrantes de pCurrent y pStop se expresan en el formato de hora actual. El formato de hora predeterminado es REFERENCE_TIME unidades (100 nanosegundos). Para cambiar los formatos de hora, use el método IMediaSeeking::SetTimeFormat . Si la marca AM_SEEKING_ReturnTime está presente, el método convierte el valor saliente en REFERENCE_TIME unidades.

Filtrar desarrolladores

Si implementa este método, puede comprobar si el autor de la llamada solicita un cambio en la posición actual o de detención, mediante el valor AM_SEEKING_PositioningBitsMask para enmascarar las marcas modificadores. Por ejemplo:
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 obtener más información, vea el código fuente del método CSourceSeeking::SetPositions en la biblioteca de clases base.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado strmif.h (incluya Dshow.h)
Library Strmiids.lib

Consulte también

Códigos de error y éxito

IMediaSeeking (interfaz)