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

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na 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 Captura de Áudio/Vídeo no 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 SetRate método define a taxa de reprodução.

Sintaxe

HRESULT SetRate(
  [in] double dRate
);

Parâmetros

[in] dRate

Taxa de reprodução. Não deve ser zero.

Retornar valor

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

Código de retorno Descrição
S_OK
Êxito.
E_INVALIDARG
A taxa especificada era zero ou um valor negativo. (Consulte os comentários.)
E_NOTIMPL
Não implementado.
E_POINTER
Argumento de ponteiro NULL.
VFW_E_UNSUPPORTED_AUDIO
O dispositivo ou filtro de áudio não dá suporte a essa taxa.

Comentários

A taxa de reprodução é expressa como uma taxa da velocidade normal. Assim, 1.0 é velocidade de reprodução normal, 0,5 é meia velocidade e 2,0 é duas vezes mais velocidade. Para fluxos de áudio, alterar a taxa também altera o tom.

Valores negativos indicam a reprodução inversa. A maioria dos filtros não dá suporte à reprodução negativa, mas retorna um código de erro se o parâmetro dRate for negativo.

Quando um aplicativo chama esse método no Gerenciador de Grafo de Filtro, o Gerenciador de Grafo de Filtros faz o seguinte:

  1. Chama o método IMediaSeeking::GetCurrentPosition . Essa chamada retorna a posição atual, conforme calculado pelo Gerenciador de Grafo de Filtro.
  2. Interrompe o grafo de filtro (se o grafo estiver em pausa ou em execução).
  3. Chama o método IMediaSeeking::SetPositions nos filtros, com a posição atual como a hora de início. Isso tem o efeito de redefinir o tempo de fluxo para zero.
  4. Chama o SetRate método nos filtros, com a nova taxa.
  5. Retoma o grafo de filtro, se ele foi pausado ou em execução.
Se ocorrer um erro na etapa 4, o Gerenciador de Grafo de Filtro tentará restaurar a taxa anterior.

Os filtros devem responder às alterações de taxa da seguinte maneira:

Filtros de analisador e de origem: O filtro que origina os carimbos de data/hora responde à SetRate chamada. Geralmente, esse é um filtro de analisador, como o Filtro de Divisor de AVI, mas pode ser um filtro de origem. Após qualquer busca ou alteração de taxa, o filtro deve chamar o método IPin::NewSegment com as novas configurações. Após uma alteração de taxa, ele deve ajustar seus carimbos de data/hora adequadamente. Como uma alteração de taxa é precedida por uma busca, os carimbos de data/hora são reiniciados de zero, portanto, o filtro pode simplesmente dividir pela taxa para calcular os novos carimbos de data/hora.

Filtros de decodificador: Os decodificadores não devem agir em SetRate chamadas além de passá-las upstream. Em vez disso, eles devem responder à chamada NewSegment que o upstream problemas do analisador. Quando um filtro de decodificador recebe novas informações de segmento, ele deve armazenar os valores e passar a chamada NewSegment downstream. Alguns decodificadores precisam gerar carimbos de data/hora extras interpolando sua entrada; eles devem levar em conta as alterações de taxa ao fazê-lo.

Renderers: Normalmente, os renderizadores de vídeo podem ignorar as alterações de taxa, pois os quadros de entrada já têm o carimbo de data/hora correto. Os renderizadores de áudio devem modificar sua taxa de reprodução, pois os decodificadores de áudio normalmente não fazem conversões de alteração de taxa.

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