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.
Os requisitos gerais para a implementação de terminais conectáveis são:
- O código de streaming subjacente de um terminal conectável deve corresponder aos recursos dos MSPs desejados.
- O terminal deve usar filtros DirectShow para trabalhar com a maioria dos MSPs (isso é assumido daqui em diante).
- Os terminais de áudio devem suportar PCM monolinear de 16 bits de 8 kHz para a maioria dos MSPs.
- O terminal deve permitir o empacotamento com rosca livre através da implementação de IMarshal. O terminal pode fazer isso chamando a API COM CoCreateFreeThreadedMarshaler e agregando IMarshal ao ponteiro retornado. O destrutor do objeto terminal deve chamar IMarshal->Release.
- O terminal deve implementar ou agregar quaisquer interfaces adicionais específicas do terminal que sejam adequadas.
- A implementação do terminal deve ser thread-safe.
- A implementação do terminal deve utilizar #include Termmgr.h para a definição de ITTerminalControl. Isso é além das inclusões e libs usuais que são necessárias para aplicativos TAPI 3 ou TAPI 3 no Windows 2000 SP1.
Notas sobre a implementação da interface e do método:
O terminal deve implementar ITTerminal (dual interface–vtable + IDispatch).
O terminal deve retornar um BSTR representação de um GUID que você escolheu que identifica seu tipo de terminal. Aloque o BSTR através de SysAllocString. Para converter de GUID para BSTR, chame StringFromCLSID, SysAllocStringe CoTaskMemFree.
Geralmente, o terminal deve devolver TT_DYNAMIC se uma aplicação implementar o terminal. Retornar TT_STATIC também funcionará, e retornar esse valor pode ser apropriado se o terminal corresponder a um dispositivo de hardware; no entanto, fazer isso pode ser confuso para os usuários porque um terminal estático não estará presente na enumeração de terminal estático do MSP.
Se a implementação do terminal não limitar arbitrariamente o número de fluxos aos quais o terminal pode ser conectado simultaneamente, o terminal deve sempre retornar TS_NOTINUSE.
Caso contrário, a implementação do terminal limita arbitrariamente o número de fluxos aos quais o terminal pode ser conectado de cada vez. Neste caso, o terminal deve manter uma contagem de a quantos fluxos está conectado. O terminal deve incrementar esta contagem interna em uma chamada ITTerminalControl::ConnectTerminal bem-sucedida e diminuí-la em uma chamada bem-sucedida ITTerminalControl::DisconnectTerminal. Em ITTerminal::get_State, ele deve retornar TS_INUSE se essa contagem for igual ao número máximo de fluxos em que o terminal pode ser selecionado de cada vez; caso contrário, deverá voltar TS_NOTINUSE. Observe que, se o limite for um, a contagem pode simplesmente ser um valor booleano ou TERMINAL_STATE.
O terminal deve retornar um BSTR nome de sua escolha, alocado via SysAllocString. Esse nome deve ser significativo para o usuário e deve ser localizado.
O terminal deve retornar seu tipo de mídia, TAPIMEDIATYPE_AUDIO ou TAPIMEDIATYPE_VIDEO.
O terminal devolve o valor enum TERMINAL_DIRECTION que indica a direção do terminal. Se o terminal for bidirecional (por exemplo, uma ponte), ele deve retornar TD_BIDIRECTIONAL.
O terminal deve implementar ITTerminalControl (somente vtable).
ITTerminalControl::get_AddressHandle
Um terminal fornecido pelo aplicativo deve sempre retornar NULL como o identificador de endereço. Isso indica ao MSP que esse terminal não foi criado em um objeto de endereço MSP específico.
ITTerminalControl::ConnectTerminal
Nesta chamada, o terminal adicionará o(s) seu(s) filtro(s) ao gráfico fornecido e conectá-los-á uns aos outros, se aplicável. Em seguida, o terminal deve retornar o(s) pino(s) exposto(s) pelo terminal para a direção de fluxo especificada.
Um terminal que não suporta conexão simultânea com vários fluxos definiria uma variável interna para TS_INUSE na conclusão bem-sucedida desse método.
O terminal pode usar o parâmetro dwTerminalDirection dessa chamada para determinar a direção do fluxo ao qual está sendo conectado. Isto é necessário para terminais bidirecionais.
Observação
Normalmente, (nas classes base MSP e em todos os MSPs conhecidos), o código de fluxo MSP falhará na conexão se o terminal retornar mais de um pino de uma única chamada ConnectTerminal. Isso é bom, porque um terminal que retorna mais de um pino durante a conexão requer que o MSP tenha conhecimento especial do terminal para fazer uso dos pinos extras de forma eficaz.
ITTerminalControl::CompleteConnectTerminal
O terminal deve apenas devolver S_OK. O terminal também pode fazer inicialização pós-conexão, se necessário.
ITTerminalControl::DisconnectTerminal
O terminal deve fazer o que for necessário para desconectar o terminal do resto do gráfico. Normalmente, isso envolve remover todos os filtros dos terminais do gráfico e definir o estado do terminal para TS_NOTINUSE.
ITTerminalControl::RunRenderFilter
O terminal deve apenas devolver E_NOTIMPL.
ITTerminalControl::StopRenderFilter
O terminal deve apenas devolver E_NOTIMPL.