void createMediaTypeBtns(string aSymbolicLink, XmlNode aSourceNode)
    {
        var lMediaTypeNodes = aSourceNode.SelectNodes("PresentationDescriptor/StreamDescriptor/MediaTypes/MediaType");

        if (lMediaTypeNodes == null)
        {
            return;
        }

        mMediaTypeDataList.Clear();

        foreach (var item in lMediaTypeNodes)
        {
            XmlNode lMediaTypeNode = item as XmlNode;

            if (lMediaTypeNode != null)
            {
                var lWidthAttr = lMediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[1]/@Value");

                var lHeightAttr = lMediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[2]/@Value");


                var lMediaTypeData = new MediaTypeData();

                lMediaTypeData.mWidth = lWidthAttr.Value;

                lMediaTypeData.mHeight = lHeightAttr.Value;

                lMediaTypeData.mSymbolicLink = aSymbolicLink;


                mMediaTypeDataList.Add(lMediaTypeData);
            }
        }
    }
Exemplo n.º 2
0
    void selectAudioStream()
    {
        if (audioSourceDropdown == null)
        {
            return;
        }
        if (audioStreamDropdown == null)
        {
            return;
        }

        if (audioSourceDropdown.value > 0 && audioSourceDropdown.value <= mAudioSourceDataList.Count)
        {
            audioStreamDropdown.value = 0;

            audioStreamDropdown.ClearOptions();

            audioStreamDropdown.onValueChanged.RemoveAllListeners();

            var l_streamNodes = mAudioSourceDataList[audioSourceDropdown.value - 1].mSourceNode.SelectNodes("PresentationDescriptor/StreamDescriptor");

            if (l_streamNodes == null)
            {
                return;
            }

            mAudioStreamDataList.Clear();

            List <string> l_StreamFriendlyNames = new List <string>();

            l_StreamFriendlyNames.Add("");

            foreach (var item in l_streamNodes)
            {
                XmlNode lStreamNode = item as XmlNode;

                if (lStreamNode != null)
                {
                    l_StreamFriendlyNames.Add("Audio Stream");


                    StreamData l_StreamData = new StreamData();

                    var l_media_type_nodes = lStreamNode.SelectNodes("MediaTypes/MediaType");

                    l_StreamData.mMediaTypes = new List <MediaTypeData>();

                    foreach (var mediatypenode in l_media_type_nodes)
                    {
                        XmlNode l_mediatypenode = mediatypenode as XmlNode;

                        MediaTypeData l_MediaTypeData = new MediaTypeData();

                        l_MediaTypeData.mFriendlyData = l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_BITS_PER_SAMPLE']/SingleValue/@Value").Value;

                        l_MediaTypeData.mFriendlyData += " x " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_NUM_CHANNELS']/SingleValue/@Value").Value;

                        l_MediaTypeData.mFriendlyData += ", " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_SAMPLES_PER_SECOND']/SingleValue/@Value").Value;

                        l_MediaTypeData.mFriendlyData += ", " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@Value").Value.Replace("MFAudioFormat_", "");

                        l_StreamData.mMediaTypes.Add(l_MediaTypeData);
                    }

                    mAudioStreamDataList.Add(l_StreamData);
                }
            }

            audioStreamDropdown.AddOptions(l_StreamFriendlyNames);

            audioStreamDropdown.gameObject.SetActive(true);

            audioStreamDropdown.onValueChanged.AddListener(delegate
            {
                audioMediaTypeDropdown.value = 0;

                selectAudioMediaType();
            });
        }
        else
        {
            audioStreamDropdown.value = 0;

            audioStreamDropdown.ClearOptions();

            audioStreamDropdown.gameObject.SetActive(false);
        }
    }
Exemplo n.º 3
0
    List <StreamData> getEncoderMediaTypes(string aSymbolicLink,
                                           int aStreamIndex,
                                           int aMediaTypeIndex,
                                           string aEncoderIID,
                                           bool aIsVideo)
    {
        var l_SymbolicLink_BSTR = Marshal.StringToBSTR(aSymbolicLink);

        var l_EncoderIID_BSTR = Marshal.StringToBSTR(aEncoderIID);

        var lBSTR = getEncoderMediaTypes(l_SymbolicLink_BSTR, aStreamIndex, aMediaTypeIndex, l_EncoderIID_BSTR);

        Marshal.FreeBSTR(l_EncoderIID_BSTR);

        Marshal.FreeBSTR(l_SymbolicLink_BSTR);

        string lxmldoc = Marshal.PtrToStringBSTR(lBSTR);

        Marshal.FreeBSTR(lBSTR);

        Debug.Log(lxmldoc);

        XmlDocument doc = new XmlDocument();

        doc.LoadXml(lxmldoc);

        var lGroupNodes = doc.SelectNodes("EncoderMediaTypes/Group");

        List <StreamData> l_groups = new List <StreamData>();

        l_groups.Add(new StreamData()
        {
            mFriendlyName = "", mMediaTypes = new List <MediaTypeData>()
            {
                new MediaTypeData()
                {
                    mFriendlyData = ""
                }
            }
        });

        if (lGroupNodes == null)
        {
            return(l_groups);
        }

        foreach (var item in lGroupNodes)
        {
            XmlNode lGroupNode = item as XmlNode;

            if (lGroupNode != null)
            {
                StreamData l_StreamData = new StreamData();

                l_StreamData.mFriendlyName = lGroupNode.Attributes["Title"].Value;

                l_StreamData.mGUID = lGroupNode.Attributes["GUID"].Value;

                l_StreamData.mMediaTypes = new List <MediaTypeData>();

                l_StreamData.mMediaTypes.Add(new MediaTypeData()
                {
                    mFriendlyData = ""
                });

                var l_MediaTypeNodes = lGroupNode.SelectNodes("MediaTypes/MediaType");

                foreach (var itemnode in l_MediaTypeNodes)
                {
                    XmlNode l_MediaTypeNode = itemnode as XmlNode;

                    if (l_MediaTypeNode != null)
                    {
                        MediaTypeData l_MediaTypeData = new MediaTypeData();

                        if (aIsVideo)
                        {
                            l_MediaTypeData.mFriendlyData = l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[1]/@Value").Value;

                            l_MediaTypeData.mFriendlyData += " x " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[2]/@Value").Value;

                            l_MediaTypeData.mFriendlyData += ", " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_RATE']/RatioValue/@Value").Value;

                            l_MediaTypeData.mFriendlyData += ", " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@Value").Value.Replace("MFVideoFormat_", "");

                            var ltempNode = l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_MPEG2_PROFILE']/SingleValue/@Value");

                            if (ltempNode != null)
                            {
                                switch (ltempNode.Value)
                                {
                                case "66":
                                    l_MediaTypeData.mFriendlyData += ", " + "Baseline Profile";
                                    break;

                                case "77":
                                    l_MediaTypeData.mFriendlyData += ", " + "Main Profile";
                                    break;

                                case "100":
                                    l_MediaTypeData.mFriendlyData += ", " + "High Profile";
                                    break;

                                default:
                                    break;
                                }
                            }
                        }
                        else
                        {
                            var ltempNode = l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_BITS_PER_SAMPLE']/SingleValue/@Value");

                            if (ltempNode != null)
                            {
                                l_MediaTypeData.mFriendlyData = ltempNode.Value;
                            }

                            l_MediaTypeData.mFriendlyData += " x " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_NUM_CHANNELS']/SingleValue/@Value").Value;

                            l_MediaTypeData.mFriendlyData += ", " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_SAMPLES_PER_SECOND']/SingleValue/@Value").Value;

                            l_MediaTypeData.mFriendlyData += ", " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@Value").Value.Replace("MFAudioFormat_", "");

                            ltempNode = l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_AVG_BYTES_PER_SECOND']/SingleValue/@Value");

                            if (ltempNode != null)
                            {
                                int l_value = 0;

                                if (int.TryParse(ltempNode.Value, out l_value))
                                {
                                    l_MediaTypeData.mFriendlyData += ", " + (l_value * 8) / 1000 + " kbits";
                                }
                            }
                        }

                        l_StreamData.mMediaTypes.Add(l_MediaTypeData);
                    }
                }


                l_groups.Add(l_StreamData);
            }
        }

        return(l_groups);
    }
Exemplo n.º 4
0
    void selectVideoStream()
    {
        if (videoSourceDropdown == null)
        {
            return;
        }
        if (videoStreamDropdown == null)
        {
            return;
        }

        if (videoSourceDropdown.value > 0 && videoSourceDropdown.value <= mVideoSourceDataList.Count)
        {
            videoStreamDropdown.value = 0;

            videoStreamDropdown.ClearOptions();

            videoStreamDropdown.onValueChanged.RemoveAllListeners();

            var l_streamNodes = mVideoSourceDataList[videoSourceDropdown.value - 1].mSourceNode.SelectNodes("PresentationDescriptor/StreamDescriptor");

            if (l_streamNodes == null)
            {
                return;
            }

            mVideoStreamDataList.Clear();

            List <string> l_StreamFriendlyNames = new List <string>();

            l_StreamFriendlyNames.Add("");

            foreach (var item in l_streamNodes)
            {
                XmlNode lStreamNode = item as XmlNode;

                if (lStreamNode != null)
                {
                    l_StreamFriendlyNames.Add("Video Stream");


                    StreamData l_StreamData = new StreamData();

                    var l_media_type_nodes = lStreamNode.SelectNodes("MediaTypes/MediaType");

                    l_StreamData.mMediaTypes = new List <MediaTypeData>();

                    foreach (var mediatypenode in l_media_type_nodes)
                    {
                        XmlNode l_mediatypenode = mediatypenode as XmlNode;

                        MediaTypeData l_MediaTypeData = new MediaTypeData();

                        l_MediaTypeData.mFriendlyData = l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[1]/@Value").Value;

                        l_MediaTypeData.mFriendlyData += " x " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[2]/@Value").Value;

                        l_MediaTypeData.mFriendlyData += ", " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_RATE']/RatioValue/@Value").Value;

                        l_MediaTypeData.mFriendlyData += ", " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@Value").Value.Replace("MFVideoFormat_", "");

                        l_StreamData.mMediaTypes.Add(l_MediaTypeData);
                    }

                    mVideoStreamDataList.Add(l_StreamData);
                }
            }

            videoStreamDropdown.AddOptions(l_StreamFriendlyNames);

            videoStreamDropdown.gameObject.SetActive(true);

            videoStreamDropdown.onValueChanged.AddListener(delegate
            {
                videoMediaTypeDropdown.value = 0;

                selectVideoMediaType();
            });
        }
        else
        {
            videoStreamDropdown.value = 0;

            videoStreamDropdown.ClearOptions();

            videoStreamDropdown.gameObject.SetActive(false);
        }
    }