internal AudioDevice(IMFActivate dev) { Device = dev; int cItems; HResult hr = dev.GetCount(out cItems); NativeHelpers.CheckHr(hr, "IMFActivate.GetCount"); for (int j = 0; j < cItems; j++) { Guid key; using (PropVariant value = new PropVariant()) { hr = dev.GetItemByIndex(j, out key, value); Debug.WriteLine("{0}={1}", key.ToString(), value.ToString()); if (key == MFAttributesClsid.MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME) { Name = value.ToString(); } else if (key == MFAttributesClsid.MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_SYMBOLIC_LINK) { SymbolicLink = value.ToString(); } else if (key == MFAttributesClsid.MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID) { EndPointId = value.ToString(); } } } }
private static void AddAttribute(IMFActivate mft, int index, StringBuilder sb) { var variantPtr = Marshal.AllocHGlobal(MarshalHelpers.SizeOf <PropVariant>()); try { Guid key; mft.GetItemByIndex(index, out key, variantPtr); var value = MarshalHelpers.PtrToStructure <PropVariant>(variantPtr); string propertyName = FieldDescriptionHelper.Describe(typeof(MediaFoundationAttributes), key); if (key == MediaFoundationAttributes.MFT_INPUT_TYPES_Attributes || key == MediaFoundationAttributes.MFT_OUTPUT_TYPES_Attributes) { var types = value.GetBlobAsArrayOf <MFT_REGISTER_TYPE_INFO>(); sb.AppendFormat("{0}: {1} items:", propertyName, types.Length); sb.AppendLine(); foreach (var t in types) { sb.AppendFormat(" {0}-{1}", FieldDescriptionHelper.Describe(typeof(MediaTypes), t.guidMajorType), FieldDescriptionHelper.Describe(typeof(AudioSubtypes), t.guidSubtype)); sb.AppendLine(); } } else if (key == MediaFoundationAttributes.MF_TRANSFORM_CATEGORY_Attribute) { sb.AppendFormat("{0}: {1}", propertyName, FieldDescriptionHelper.Describe(typeof(MediaFoundationTransformCategories), (Guid)value.Value)); sb.AppendLine(); } else if (value.DataType == (VarEnum.VT_VECTOR | VarEnum.VT_UI1)) { var b = (byte[])value.Value; sb.AppendFormat("{0}: Blob of {1} bytes", propertyName, b.Length); sb.AppendLine(); } else { sb.AppendFormat("{0}: {1}", propertyName, value.Value); sb.AppendLine(); } } finally { PropVariant.Clear(variantPtr); Marshal.FreeHGlobal(variantPtr); } }
private static void AddAttribute(IMFActivate mft, int index, StringBuilder sb) { var variantPtr = Marshal.AllocHGlobal(MarshalHelpers.SizeOf<PropVariant>()); try { Guid key; mft.GetItemByIndex(index, out key, variantPtr); var value = MarshalHelpers.PtrToStructure<PropVariant>(variantPtr); string propertyName = FieldDescriptionHelper.Describe(typeof (MediaFoundationAttributes), key); if (key == MediaFoundationAttributes.MFT_INPUT_TYPES_Attributes || key == MediaFoundationAttributes.MFT_OUTPUT_TYPES_Attributes) { var types = value.GetBlobAsArrayOf<MFT_REGISTER_TYPE_INFO>(); sb.AppendFormat("{0}: {1} items:", propertyName, types.Length); sb.AppendLine(); foreach (var t in types) { sb.AppendFormat(" {0}-{1}", FieldDescriptionHelper.Describe(typeof (MediaTypes), t.guidMajorType), FieldDescriptionHelper.Describe(typeof (AudioSubtypes), t.guidSubtype)); sb.AppendLine(); } } else if (key == MediaFoundationAttributes.MF_TRANSFORM_CATEGORY_Attribute) { sb.AppendFormat("{0}: {1}", propertyName, FieldDescriptionHelper.Describe(typeof (MediaFoundationTransformCategories), (Guid) value.Value)); sb.AppendLine(); } else if (value.DataType == (VarEnum.VT_VECTOR | VarEnum.VT_UI1)) { var b = (byte[]) value.Value; sb.AppendFormat("{0}: Blob of {1} bytes", propertyName, b.Length); sb.AppendLine(); } else { sb.AppendFormat("{0}: {1}", propertyName, value.Value); sb.AppendLine(); } } finally { PropVariant.Clear(variantPtr); Marshal.FreeHGlobal(variantPtr); } }