Exemple #1
0
        /// <summary>
        /// Cria o Source Node(Nó de entrada) para um determinado fluxo no arquivo a ser renderizado.
        /// </summary>
        /// <param name="Param_StreamDesc">O Descritor para o fluxo no arquivo carregado.</param>
        /// <param name="Param_OutNode">Retorna uma interface para o nó de entrada.</param>
        /// <returns></returns>
        public CarenResult CreateSourceNodeToTopology(ICarenMFStreamDescriptor Param_StreamDesc, out ICarenMFTopologyNode Param_OutNode)
        {
            //Variavel a ser retornada.
            CarenResult Resultado = ResultCode.SS_OK;

            //Cria o nó de origem.
            Param_OutNode = new CarenMFTopologyNode(CA_MF_TOPOLOGY_TYPE.MF_TOPOLOGY_SOURCESTREAM_NODE);

            //Define os atributos no nó.
            Param_OutNode.SetUnknown(GUIDs_MFAttributes_TopologyNode.MF_TOPONODE_SOURCE, myMediaSession.SourceMidia);
            Param_OutNode.SetUnknown(GUIDs_MFAttributes_TopologyNode.MF_TOPONODE_PRESENTATION_DESCRIPTOR, myMediaSession.DescritorMidia);
            Param_OutNode.SetUnknown(GUIDs_MFAttributes_TopologyNode.MF_TOPONODE_STREAM_DESCRIPTOR, Param_StreamDesc);

            //Adiciona o nó a topologia.
            Resultado = myMediaSession.Topologia.AddNode(Param_OutNode);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao tentar adicionar o nó de origem a topologia.", true);

                //Sai do método.
                goto Done;
            }

            Done :;
            //Retorna o resultado.
            return(Resultado);
        }
Exemple #2
0
        /// <summary>
        /// Cria o Output Node(Nó de saída), node responsável pelo codificador de audio ou video para o fluxo no arquivo carregado.
        /// </summary>
        /// <param name="Param_Sink">Uma interface de ativação para um Media Sink(Dissipador/Decoder) que representa o SAR(Áudio) ou o EVR(Vídeo).</param>
        /// <param name="Param_OutNode">Retorna uma interface para o nó de saída.</param>
        /// <returns></returns>
        public CarenResult CreateOutputNodeToTopology(ICarenMFActivate Param_Sink, out ICarenMFTopologyNode Param_OutNode)
        {
            //Variavel a ser retornada.
            CarenResult Resultado = ResultCode.SS_OK;

            //Cria o nó de destino.
            Param_OutNode = new CarenMFTopologyNode(CA_MF_TOPOLOGY_TYPE.MF_TOPOLOGY_OUTPUT_NODE);

            //Adiciona o Sink ao nó
            Resultado = Param_OutNode.SetObject(Param_Sink);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao tentar adicionar o Sink ao nó de saida!", true);

                //Sai do método.
                goto Done;
            }

            //Adiciona o nó a topologia.
            Resultado = myMediaSession.Topologia.AddNode(Param_OutNode);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao tentar adicionar o nó de saida a topologia.", true);

                //Sai do método.
                goto Done;
            }

            //Informa um atributo que indica que a Media Session para não desligar o objeto que pertence a este nó de topologia.
            Resultado = Param_OutNode.SetUINT32(GUIDs_MFAttributes_TopologyNode.MF_TOPONODE_NOSHUTDOWN_ON_REMOVE, 1); // 1 - TRUE | 0 - FALSE

            Done :;

            //Retorna o resultado.
            return(Resultado);
        }