www.pudn.com > mediator15src.zip > AudioCodecEnumerator.h


/* 
 * AudioCodecEnumerator.h 
 * Copyright (C) 2002 Arno Hornberger  
 * Original Version Copyright (C) Alberto Vigata - January 2000 - ultraflask@yahoo.com 
 * 
 * This file is part of MPEG Mediator, a free MPEG stream converter. 
 * 
 * MPEG Mediator is free software; you can redistribute it and/or modify 
 * it under the terms of the GNU General Public License as published by 
 * the Free Software Foundation; either version 2 of the License, or 
 * (at your option) any later version. 
 * 
 * MPEG Mediator is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 * GNU General Public License for more details. 
 * 
 * You should have received a copy of the GNU General Public License 
 * along with this program; if not, write to the Free Software 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 */ 
 
#ifndef AUDIOCODECENUMERATOR_H 
#define AUDIOCODECENUMERATOR_H 
 
#include  
#include  
#include  
 
class AudioCodecEnumerator 
{ 
	public: 
		class CWaveFormatEx : public CByteArray 
		{ 
			public: 
				CWaveFormatEx& operator =(const CWaveFormatEx &src) 
				{ 
					Copy(src); 
					return *this; 
				} 
				WAVEFORMATEX *Get() { return (WAVEFORMATEX *)GetData(); } 
		}; 
 
		class CAudioCodecInfo 
		{ 
			public: 
				// MFC doesnt define the assigment operator for CArray class. 
			CAudioCodecInfo& operator =(const CAudioCodecInfo &src) 
			{ 
				strcpy(szFormatTag, src.szFormatTag); 
				hadid     = src.hadid; 
				formatTag = src.formatTag; 
				m_vFormatDetailsList.Copy(src.m_vFormatDetailsList); 
				m_vWaveFormatExList.Copy(src.m_vWaveFormatExList); 
				return *this; 
			} 
     
			char szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];  
			DWORD formatTag; 
			HACMDRIVERID hadid; 
			CArray m_vFormatDetailsList; 
			CArray m_vWaveFormatExList; 
		}; 
   
		AudioCodecEnumerator() { } 
		~AudioCodecEnumerator() { } 
 
		bool IsEnumerated(HACMDRIVERID hadid, WAVEFORMATEX *wfx, int cbSize, int *dwFormatTagIdx, int *FormatIdx); 
		void Enumerate(LPWAVEFORMATEX lpwfx); 
		const CArray& GetEnumeratedCodecs(); 
 
		friend BOOL CALLBACK acmDriverEnumCallback(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport); 
		friend BOOL CALLBACK acmFormatEnumCallback(HACMDRIVERID hadid, LPACMFORMATDETAILS pafd,  
																							 DWORD dwInstance, DWORD fdwSupport); 
 
		friend BOOL CALLBACK acmFormatTagEnumCallback(HACMDRIVERID hadid, LPACMFORMATTAGDETAILS paftd,   
																									DWORD dwInstance, DWORD fdwSupport); 
	private: 
		CArray  m_vAudioCodecList; 
	  char szTempFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; 
	  HACMDRIVER m_hHad;	// handle to opened driver 
		int m_nSampleFreq; 
		int m_nChannels; 
		int m_nBitsPerSample; 
		ACMDRIVERDETAILS m_add; 
}; 
 
#endif