Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize 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.]
Quando você cria um gráfico de filtro, o Gerenciador de Gráficos de Filtros escolhe automaticamente um relógio de referência para o gráfico. Todos os filtros no gráfico são sincronizados com o relógio de referência. Em particular, os filtros do renderizador usam o relógio de referência para determinar o tempo de apresentação de cada amostra.
Normalmente, não há razão para um aplicativo substituir a escolha do relógio de referência do Filter Graph Manager. No entanto, você pode fazer isso chamando o IMediaFilter::SetSyncSource método no Filter Graph Manager. Esse método leva um ponteiro para a interface IReferenceClock do relógio. Chame o método enquanto o gráfico está parado.
Se um filtro fornecer um relógio, poderá obter o ponteiro IReferenceClock chamando QueryInterface no filtro. Como alternativa, você pode implementar um relógio de referência externo que não é fornecido por um filtro, desde que seu relógio externo implemente IReferenceClock. O exemplo a seguir mostra como especificar um relógio:
IGraphBuilder *pGraph = 0;
IReferenceClock *pClock = 0;
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
// Build the graph.
pGraph->RenderFile(L"C:\\Example.avi", 0);
// Create your clock.
hr = CreateMyPrivateClock(&pClock);
if (SUCCEEDED(hr))
{
// Set the graph clock.
IMediaFilter *pMediaFilter = 0;
pGraph->QueryInterface(IID_IMediaFilter, (void**)&pMediaFilter);
pMediaFilter->SetSyncSource(pClock);
pClock->Release();
pMediaFilter->Release();
}
Este exemplo pressupõe que CreateMyPrivateClock é uma função definida pelo aplicativo que cria um relógio e retorna um ponteiro IReferenceClock.
Você também pode definir o gráfico de filtro para ser executado sem relógio, chamando SetSyncSource com o valor NULL. Se não houver relógio, o gráfico é executado o mais rápido possível. Sem relógio, os filtros do renderizador não esperam pela hora de apresentação de uma amostra. Em vez disso, eles renderizam cada amostra assim que ela chega. Definir o gráfico para ser executado sem um relógio é útil se você quiser processar dados rapidamente, em vez de visualizá-los em tempo real.
Tópicos relacionados