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); }
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)); }