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 |
---|---|
|
Sin cambio de posición. (Ambas marcas no especifican ninguna búsqueda). |
|
Correcto. |
|
Argumento no válido. |
|
No se admite el método . |
|
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.
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; } |
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 |