MVH/NAudio-2.2.1/NAudio.Wasapi/Dmo/WindowsMediaMp3Decoder.cs

89 lines
2.6 KiB
C#
Raw Normal View History

2024-06-07 00:47:07 +02:00
using System;
using System.Runtime.InteropServices;
using NAudio.CoreAudioApi.Interfaces;
namespace NAudio.Dmo
{
// http://msdn.microsoft.com/en-us/library/ff819509%28VS.85%29.aspx
// CLSID_CMP3DecMediaObject
/// <summary>
/// implements IMediaObject (DirectX Media Object)
/// implements IMFTransform (Media Foundation Transform)
/// On Windows XP, it is always an MM (if present at all)
/// </summary>
[ComImport, Guid("bbeea841-0a63-4f52-a7ab-a9b3a84ed38a")]
class WindowsMediaMp3DecoderComObject
{
}
/// <summary>
/// Windows Media MP3 Decoder (as a DMO)
/// WORK IN PROGRESS - DO NOT USE!
/// </summary>
public class WindowsMediaMp3Decoder : IDisposable
{
MediaObject mediaObject;
IPropertyStore propertyStoreInterface;
//IWMResamplerProps resamplerPropsInterface;
WindowsMediaMp3DecoderComObject mediaComObject;
/// <summary>
/// Creates a new Resampler based on the DMO Resampler
/// </summary>
public WindowsMediaMp3Decoder()
{
mediaComObject = new WindowsMediaMp3DecoderComObject();
mediaObject = new MediaObject((IMediaObject)mediaComObject);
propertyStoreInterface = (IPropertyStore)mediaComObject;
//resamplerPropsInterface = (IWMResamplerProps)mediaComObject;
}
/// <summary>
/// Media Object
/// </summary>
public MediaObject MediaObject
{
get
{
return mediaObject;
}
}
#region IDisposable Members
/// <summary>
/// Dispose code - experimental at the moment
/// Was added trying to track down why Resampler crashes NUnit
/// This code not currently being called by ResamplerDmoStream
/// </summary>
public void Dispose()
{
if(propertyStoreInterface != null)
{
Marshal.ReleaseComObject(propertyStoreInterface);
propertyStoreInterface = null;
}
/*if(resamplerPropsInterface != null)
{
Marshal.ReleaseComObject(resamplerPropsInterface);
resamplerPropsInterface = null;
}*/
if (mediaObject != null)
{
mediaObject.Dispose();
mediaObject = null;
}
if (mediaComObject != null)
{
Marshal.ReleaseComObject(mediaComObject);
mediaComObject = null;
}
}
#endregion
}
}