Пример #1
0
        private void TestCopy()
        {
            IWMStreamConfig  sc;
            IWMPropertyVault pv2;
            Guid             g = Guid.NewGuid();

            byte[]       b    = null;
            int          iLen = 0;
            AttrDataType pType;

            m_pProfile.CreateNewStream(MediaType.Video, out sc);
            pv2 = sc as IWMPropertyVault;

            pv2.SetProperty("moo", AttrDataType.GUID, g.ToByteArray(), 16);

            m_pv.CopyPropertiesFrom(pv2);

            m_pv.GetPropertyByName("moo", out pType, b, ref iLen);
            Debug.Assert(iLen == 16);
            Debug.Assert(pType == AttrDataType.GUID);
            b = new byte[iLen];
            m_pv.GetPropertyByName("moo", out pType, b, ref iLen);

            Debug.Assert(new Guid(b) == g);
        }
Пример #2
0
        public WM_ATTR GetProperty(string name)
        {
            uint              datalen = 0;
            object            obj;
            WMT_ATTR_DATATYPE type;

            Logger.WriteLogMessage("Get property[" + name + "].");

            _propertyVault.GetPropertyByName(name, out type, IntPtr.Zero, ref datalen);

            switch (type)
            {
            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
                obj = (uint)0;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
                obj = Guid.NewGuid();
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
                obj = (ulong)0;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
                obj = (ushort)0;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:
            case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
                obj = new byte[datalen];
                break;

            default:
                throw new InvalidOperationException(String.Format("Not supported data type: {0}.", type.ToString()));
            }

            GCHandle h = GCHandle.Alloc(obj, GCHandleType.Pinned);

            try
            {
                IntPtr ptr = h.AddrOfPinnedObject();

                _propertyVault.GetPropertyByName(name, out type, ptr, ref datalen);

                switch (type)
                {
                case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:
                    obj = Marshal.PtrToStringUni(ptr);
                    break;

                case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
                    obj = ((uint)obj != 0);
                    break;
                }
            }
            finally
            {
                h.Free();
            }

            return(new WM_ATTR(name, type, obj));
        }