Método IMediaSeeking::SetRate (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 SetRate método establece la velocidad de reproducción.

Sintaxis

HRESULT SetRate(
  [in] double dRate
);

Parámetros

[in] dRate

Velocidad de reproducción. No debe ser cero.

Valor devuelto

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

Código devuelto Descripción
S_OK
Correcto.
E_INVALIDARG
La tasa especificada era cero o un valor negativo. (Vea la sección Comentarios).
E_NOTIMPL
Sin implementar.
E_POINTER
Argumento de puntero NULL.
VFW_E_UNSUPPORTED_AUDIO
El filtro o el dispositivo de audio no admiten esta velocidad.

Comentarios

La velocidad de reproducción se expresa como una relación de la velocidad normal. Por lo tanto, 1,0 es la velocidad de reproducción normal, 0,5 es media velocidad y 2,0 es dos veces la velocidad. En el caso de las secuencias de audio, cambiar la velocidad también cambia el tono.

Los valores negativos indican la reproducción inversa. La mayoría de los filtros no admiten la reproducción negativa, sino que devuelven un código de error si el parámetro dRate es negativo.

Cuando una aplicación llama a este método en el Administrador de gráficos de filtros, el Administrador de gráficos de filtros hace lo siguiente:

  1. Llama al método IMediaSeeking::GetCurrentPosition . Esta llamada devuelve la posición actual calculada por el Administrador de gráficos de filtros.
  2. Detiene el gráfico de filtros (si el gráfico está en pausa o en ejecución).
  3. Llama al método IMediaSeeking::SetPositions en los filtros, con la posición actual como hora de inicio. Esto tiene el efecto de restablecer el tiempo de la secuencia en cero.
  4. Llama al SetRate método en los filtros, con la nueva velocidad.
  5. Reanuda el gráfico de filtros, si estaba en pausa o en ejecución.
Si se produce un error en el paso 4, el Administrador de gráficos de filtros intenta restaurar la tasa anterior.

Los filtros deben responder a los cambios de velocidad de la siguiente manera:

Analizador y filtros de origen: El filtro que origina las marcas de tiempo responde a la SetRate llamada. Normalmente, se trata de un filtro de analizador, como el filtro divisor AVI, pero podría ser un filtro de origen. Después de cualquier cambio de búsqueda o tasa, el filtro debe llamar al método IPin::NewSegment con la nueva configuración. Después de un cambio de tasa, debe ajustar sus marcas de tiempo en consecuencia. Dado que un cambio de velocidad va precedido por una búsqueda, las marcas de tiempo se reinician desde cero, por lo que el filtro simplemente puede dividir por la tasa para calcular las nuevas marcas de tiempo.

Filtros de descodificador: Los descodificadores no deben actuar en SetRate las llamadas que no sean para pasarlas ascendentes. En su lugar, deben responder a la llamada NewSegment que emite el analizador ascendente. Cuando un filtro de descodificador recibe nueva información de segmento, debe almacenar los valores y pasar la llamada NewSegment de bajada. Algunos descodificadores necesitan generar marcas de tiempo adicionales interpolando su entrada; deben tener en cuenta los cambios de velocidad al hacerlo.

Renderizadores: Los representadores de vídeo normalmente pueden omitir los cambios de velocidad, ya que los fotogramas entrantes ya tienen la marca de tiempo correcta. Los representadores de audio deben modificar su velocidad de reproducción, ya que normalmente los descodificadores de audio no realizan conversiones de cambio de velocidad.

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)