Tarefas de driver do modo de usuário miracast para dar suporte a vídeos sem fio Miracast em Windows 8.1
Observação
A partir do Windows 10 (WDDM 2.0), o sistema operacional é fornecido com uma pilha Miracast interna que pode funcionar em qualquer GPU. Para obter informações sobre a pilha microsoft Miracast e os requisitos de drivers e hardware para dar suporte a exibições miracast a partir de Windows 10, consulte a seguinte documentação:
Criando as melhores soluções de projeção sem fio da classe com Windows 10
A documentação relevante da WHLK em Device.Graphics.WDDM13.DisplayRender.WirelessDisplay
Os desenvolvedores de driver não devem mais implementar uma pilha Miracast personalizada. A Microsoft pode remover o suporte para pilhas Miracast personalizadas em uma versão futura do Windows.
Para habilitar telas sem fio Miracast no windows 8.1, você precisa criar uma DLL autônoma e exclusiva que implemente um driver de modo de usuário Miracast. Esse driver é carregado em um processo de sessão 0 dedicado. Adicione o nome do driver nas configurações de software do dispositivo no arquivo INF como MiracastDriverName:
[MyDevice_DeviceSettings]
HKR,, MiracastDriverName, %REG_SZ%, Miracast.dll
A DLL deve ter uma função de exportação chamada QueryMiracastDriverInterface que o sistema operacional pode chamar. Esse binário de driver não deve usar uma DLL de driver de exibição do modo de usuário direct3D existente.
Como o driver de modo de usuário Miracast é carregado no processo UMDF0, nenhuma versão separada do Windows no Windows (WOW) desse driver é necessária. Por exemplo, uma versão de 64 bits do driver é usada em um processador de 64 bits.
Quando o sistema operacional estiver pronto para se preparar para uma sessão conectada do Miracast, ele chamará a função CreateMiracastContext do driver de modo de usuário miracast. Quando essa função é chamada, o driver de modo de usuário miracast aloca todos os recursos de software necessários para iniciar uma sessão conectada ao Miracast. Nessa chamada, o sistema operacional também fornece ponteiros para funções de retorno de chamada que o driver pode chamar durante o tempo de vida do contexto miracast atual. Em seguida, depois que um link Real-Time do protocolo RTSP for estabelecido, o sistema operacional chamará StartMiracastSession para realmente iniciar a sessão conectada do Miracast. Quando o driver responde a essa chamada de função, ele deve usar a função getaddrinfo winsock, ou outras funções relevantes, para obter o endereço IP do coletor Miracast e usar funções Winsock padrão para criar um soquete RDP (Protocolo de Área de Trabalho Remota) DO HTCP (Hypertext Caching Protocol).
Se uma exibição Miracast ficar disponível, o driver de modo de usuário miracast chamará a função MiracastIoControl fornecida pelo sistema operacional para enviar uma solicitação de controle de E/S para o driver de miniporto de exibição para relatar um valor de reconhecimento de HPD (detecção de hot-plug de chegada do monitor). O driver de modo de usuário miracast também deve consultar informações e funcionalidades do coletor Miracast e relatar algumas dessas informações, como a descrição do monitor, para o driver de miniporta de exibição chamando MiracastIoControl.
Depois que a sessão conectada miracast tiver sido iniciada e depois que os dados de streaming tiverem sido preparados e antes de enviá-los para a rede, o driver precisará chamar a função de retorno de chamada ReportStatistic para relatar as estatísticas do link miracast para o sistema operacional.
Quando o sistema operacional interrompe uma sessão conectada do Miracast, ele chama a função StopMiracastSession do driver de modo de usuário miracast. Em resposta a essa chamada de função, o driver deve fechar todos os soquetes que criou e descartar todo o streaming de dados adicional. O driver não deve fechar o soquete RTSP que o sistema operacional deu a ele. Ele também não deve enviar uma solicitação ao driver de miniporta de exibição para relatar um HPD na partida do monitor.
O driver de modo de usuário miracast deve liberar todos os recursos de software alocados em CreateMiracastContext em resposta às chamadas do sistema operacional para a função DestroyMiracastContext .
Quando o driver de miniporto de exibição recebe uma solicitação DxgkDdiCommitVidPn para desligar o monitor Miracast conectado, o driver deve chamar a função de retorno de chamada DxgkCbMiracastSendMessage fornecida pelo sistema operacional para enviar uma mensagem ao driver de modo de usuário miracast. Em seguida, o driver de modo de usuário Miracast deve colocar o coletor Miracast em um estado de baixa potência.
Opcionalmente, a função de retorno de chamada RegisterForDataRateNotifications pode ser chamada pelo driver de modo de usuário Miracast para se registrar no sistema operacional para receber, uma vez por segundo, notificações de QoS (qualidade de serviço) de rede e a largura de banda de rede atual da conexão Miracast. Essas informações de rede são fornecidas por chamadas do sistema operacional para a função pfnDataRateNotify .
O driver de modo de usuário miracast também pode chamar essas funções de retorno de chamada opcionais fornecidas pelo sistema operacional:
Função | Descrição |
---|---|
GetNextChunkData | Fornece informações sobre a próxima parte de codificação. |
ReportSessionStatus | O driver chama essa função para relatar o status da sessão conectada do Miracast atual. |