Example #1
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);
        }
Example #2
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);
        }
Example #3
0
        /// <summary>
        /// Método responsável por configurar o Media Sink(Dissipador/Decoder) para o fluxo selecionado e conectar o nó de entra ao de saída.
        /// </summary>
        /// <param name="Param_Id">O ID do fluxo a ser criado o Media Sink adequado.</param>
        /// <returns></returns>
        public CarenResult Configurar_Nodes_Topologia(uint Param_Id)
        {
            //Variavel que vai retornar o resultado da operação.
            CarenResult Resultado = ResultCode.SS_OK;

            //Variaveis utilizadas.
            ICarenMFStreamDescriptor OutStreamIdDescriptor = null;
            ICarenMFActivate         OutSinkActivator      = null;
            ICarenMFTopologyNode     OutSourceNode         = null;
            ICarenMFTopologyNode     OutOutputNode         = null;

            //Recupera a interface para o descritor do fluxo no id.
            Resultado = myMediaSession.DescritorMidia.GetStreamDescriptorByIndex(Param_Id, out bool OutSelecionado, out OutStreamIdDescriptor);

            //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 obter o descritor de fluxo para a midia carregada!", true);

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

            //Verifica se está selecionado e configura.
            if (!OutSelecionado)
            {
                //Não está selecionado..

                //Sai do método
                goto Done;
            }

            //Cria um ativador para o media sink
            CreateMediaSinkByStream(OutStreamIdDescriptor, out OutSinkActivator);

            //Cria e adiciona o nó de entrada.
            CreateSourceNodeToTopology(OutStreamIdDescriptor, out OutSourceNode);

            //Cria e adiciona o nó de saida.
            CreateOutputNodeToTopology(OutSinkActivator, out OutOutputNode);

            //Conecta o nó de entrada ao nó de saida.
            Resultado = OutSourceNode.ConnectOutput(0, OutOutputNode, 0);

            //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 conectar o nó de entrada ao nó de saida!", true);

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

            Done :;

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