Ejemplo n.º 1
0
        public IEnumerable <AcmFormat> GetFormats(AcmFormatTag formatTag)
        {
            if (this.driverHandle == IntPtr.Zero)
            {
                throw new InvalidOperationException("Driver must be opened first");
            }
            this.tempFormatsList = new List <AcmFormat>();
            AcmFormatDetails acmFormatDetails = default(AcmFormatDetails);

            acmFormatDetails.structSize         = Marshal.SizeOf(acmFormatDetails);
            acmFormatDetails.waveFormatByteSize = 1024;
            acmFormatDetails.waveFormatPointer  = Marshal.AllocHGlobal(acmFormatDetails.waveFormatByteSize);
            acmFormatDetails.formatTag          = (int)formatTag.FormatTag;
            MmResult result = AcmInterop.acmFormatEnum(this.driverHandle, ref acmFormatDetails, new AcmInterop.AcmFormatEnumCallback(this.AcmFormatEnumCallback), IntPtr.Zero, AcmFormatEnumFlags.None);

            Marshal.FreeHGlobal(acmFormatDetails.waveFormatPointer);
            MmException.Try(result, "acmFormatEnum");
            return(this.tempFormatsList);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets all the supported formats for a given format tag
        /// </summary>
        /// <param name="formatTag">Format tag</param>
        /// <returns>Supported formats</returns>
        public IEnumerable <AcmFormat> GetFormats(AcmFormatTag formatTag)
        {
            if (driverHandle == IntPtr.Zero)
            {
                throw new InvalidOperationException("Driver must be opened first");
            }
            tempFormatsList = new List <AcmFormat>();
            AcmFormatDetails formatDetails = new AcmFormatDetails();

            formatDetails.structSize         = Marshal.SizeOf(formatDetails);
            formatDetails.waveFormatByteSize = MaxFormatSize;            // formatTag.FormatSize doesn't work;
            formatDetails.waveFormatPointer  = Marshal.AllocHGlobal(formatDetails.waveFormatByteSize);
            formatDetails.formatTag          = (int)formatTag.FormatTag; // (int)WaveFormatEncoding.Unknown
            MmResult result = AcmInterop.acmFormatEnum(driverHandle,
                                                       ref formatDetails, AcmFormatEnumCallback, IntPtr.Zero,
                                                       AcmFormatEnumFlags.None);

            Marshal.FreeHGlobal(formatDetails.waveFormatPointer);
            MmException.Try(result, "acmFormatEnum");
            return(tempFormatsList);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Gets all the supported formats for a given format tag
        /// </summary>
        /// <param name="formatTag">Format tag</param>
        /// <returns>Supported formats</returns>
        public IEnumerable <AcmFormat> GetFormats(AcmFormatTag formatTag)
        {
            if (driverHandle == IntPtr.Zero)
            {
                throw new InvalidOperationException("Driver must be opened first");
            }
            tempFormatsList = new List <AcmFormat>();
            var formatDetails = new AcmFormatDetails();

            formatDetails.structSize = Marshal.SizeOf(formatDetails);
            // need to make sure we have enough space for a waveFormat. formatTag.FormatSize isn't reliable,
            // and some codecs MaxFormatSize isn't either
            formatDetails.waveFormatByteSize = 1024;
            formatDetails.waveFormatPointer  = Marshal.AllocHGlobal(formatDetails.waveFormatByteSize);
            formatDetails.formatTag          = (int)formatTag.FormatTag; // (int)WaveFormatEncoding.Unknown
            var result = AcmInterop.acmFormatEnum(driverHandle,
                                                  ref formatDetails, AcmFormatEnumCallback, IntPtr.Zero,
                                                  AcmFormatEnumFlags.None);

            Marshal.FreeHGlobal(formatDetails.waveFormatPointer);
            MmException.Try(result, "acmFormatEnum");
            return(tempFormatsList);
        }