xref: /third_party/lame/ACM/ACMStream.h (revision 159b3361)
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