1/** 2 * 3 * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows 4 * 5 * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 * 21 */ 22 23/*! 24 \author Steve Lhomme 25 \version \$Id$ 26*/ 27 28#if !defined(_ACMSTREAM_H__INCLUDED_) 29#define _ACMSTREAM_H__INCLUDED_ 30 31#if _MSC_VER >= 1000 32#pragma once 33#endif // _MSC_VER >= 1000 34 35#include <mmreg.h> 36#include <msacm.h> 37#include <msacmdrv.h> 38 39#include "ADbg/ADbg.h" 40 41#include "AEncodeProperties.h" 42 43 44typedef enum vbr_mode_e vbr_mode; 45typedef struct lame_global_struct lame_global_flags; 46 47 48class ACMStream 49{ 50public: 51 ACMStream( ); 52 virtual ~ACMStream( ); 53 54 static ACMStream * Create(); 55 static const bool Erase(const ACMStream * a_ACMStream); 56 57 bool init(const int nSamplesPerSec, const int nOutputSamplesPerSec, const int nChannels, const int nAvgBytesPerSec, const vbr_mode mode); 58 bool open(const AEncodeProperties & the_Properties); 59 bool close(LPBYTE pOutputBuffer, DWORD *pOutputSize); 60 61 DWORD GetOutputSizeForInput(const DWORD the_SrcLength) const; 62 bool ConvertBuffer(LPACMDRVSTREAMHEADER a_StreamHeader); 63 64 static unsigned int GetOutputSampleRate(int samples_per_sec, int bitrate, int channels); 65 66protected: 67 lame_global_flags * gfp; 68 69 ADbg * my_debug; 70 int my_SamplesPerSec; 71 int my_Channels; 72 int my_AvgBytesPerSec; 73 int my_OutBytesPerSec; 74 vbr_mode my_VBRMode; 75 DWORD my_SamplesPerBlock; 76 77unsigned int m_WorkingBufferUseSize; 78 char m_WorkingBuffer[2304*2]; // should be at least twice my_SamplesPerBlock 79 80inline int GetBytesPerBlock(DWORD bytes_per_sec, DWORD samples_per_sec, int BlockAlign) const; 81 82}; 83 84#endif // !defined(_ACMSTREAM_H__INCLUDED_) 85 86