Ejemplo n.º 1
0
        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();
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
 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);
     }
 }