ReactOS  0.4.14-dev-1314-gacf135d
audio_resampler_acm Class Reference

#include <audio_resampler_acm.hpp>

Inheritance diagram for audio_resampler_acm:
Collaboration diagram for audio_resampler_acm:

Public Member Functions

 audio_resampler_acm (audio_format fmt_in, audio_format fmt_out)
 
 ~audio_resampler_acm (void)
 
void open (void)
 
void close (void)
 
void audio_receive (unsigned char *, unsigned int)
 
- Public Member Functions inherited from audio_receiver
 audio_receiver (void)
 
virtual ~audio_receiver (void)
 
void set_b_received (unsigned int r)
 

Protected Attributes

HACMSTREAM acm_stream
 
ACMSTREAMHEADER acm_header
 
DWORD src_buflen
 
DWORD dst_buflen
 
bool stream_opened
 
audio_format audfmt_in
 
audio_format audfmt_out
 
float buf_secs
 
WAVEFORMATEX wformat_src
 
WAVEFORMATEX wformat_dst
 
- Protected Attributes inherited from audio_receiver
unsigned int bytes_received
 

Private Member Functions

void init_ (void)
 

Detailed Description

Definition at line 17 of file audio_resampler_acm.hpp.

Constructor & Destructor Documentation

◆ audio_resampler_acm()

audio_resampler_acm::audio_resampler_acm ( audio_format  fmt_in,
audio_format  fmt_out 
)
inline

Definition at line 39 of file audio_resampler_acm.hpp.

40  : acm_stream(0),
41  src_buflen(0),
42  dst_buflen(0),
43  stream_opened(false),
44  audfmt_in(fmt_in),
45  audfmt_out(fmt_out),
47  {
48  init_();
49  }
#define _AUDIO_DEFAULT_BUFSECS
Definition: audio_def.hpp:21

◆ ~audio_resampler_acm()

audio_resampler_acm::~audio_resampler_acm ( void  )
inline

Definition at line 52 of file audio_resampler_acm.hpp.

53  {
54  }

Member Function Documentation

◆ audio_receive()

void audio_resampler_acm::audio_receive ( unsigned char data,
unsigned int  size 
)
virtual

Implements audio_receiver.

Definition at line 193 of file audio_resampler_acm.cpp.

194 {
195  MMRESULT err;
196 
197  /* Checking for acm stream opened */
198  if (stream_opened)
199  {
200  /* Copy audio data from extern to internal source buffer */
202 
205 
207 
208  if (err != MMSYSERR_NOERROR)
209  {
210  /* TODO: throw error */
211  MessageBox(0, _T("acmStreamConvert error"), _T("ERROR"), MB_ICONERROR);
212  }
213 
214  /* Wait for sound conversion */
216 
217  /* Copy resampled audio, to destination buffer */
218  //memcpy(pbOutputData, acm_header.pbDst, acm_header.cbDstLengthUsed);
219  }
220 }
#define ACM_STREAMCONVERTF_BLOCKALIGN
Definition: msacm.h:205
LPBYTE pbSrc
Definition: msacm.h:553
UINT MMRESULT
Definition: mmsystem.h:962
#define ACMSTREAMHEADER_STATUSF_DONE
Definition: msacm.h:209
DWORD cbDstLengthUsed
Definition: msacm.h:559
DWORD cbSrcLength
Definition: msacm.h:554
#define _T(x)
Definition: vfdio.h:22
GLsizeiptr size
Definition: glext.h:5919
#define MMSYSERR_NOERROR
Definition: mmsystem.h:96
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define MB_ICONERROR
Definition: winuser.h:781
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define MessageBox
Definition: winuser.h:5797
#define err(...)
DWORD fdwStatus
Definition: msacm.h:551
ACMSTREAMHEADER acm_header
MMRESULT WINAPI acmStreamConvert(HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwConvert)
Definition: stream.c:89

◆ close()

void audio_resampler_acm::close ( void  )

Definition at line 113 of file audio_resampler_acm.cpp.

114 {
115  MMRESULT err;
116 
117  if (acm_stream)
118  {
120  {
123 
125  if (err != MMSYSERR_NOERROR)
126  {
127  /* Free buffer memory */
128  if (acm_header.pbSrc != 0)
129  {
130  delete[] acm_header.pbSrc;
131  acm_header.pbSrc = 0;
132  }
133 
134  if (acm_header.pbDst != 0)
135  {
136  delete[] acm_header.pbDst;
137  acm_header.pbDst = 0;
138  }
139 
140  /* Re-init structures */
141  init_();
142  /* Updating status */
143  stream_opened = false;
144  /* TODO: throw error */
145  MessageBox(0, _T("acmStreamUnPrepareHeader error"), _T("ERROR"), MB_ICONERROR);
146  }
147  }
148 
150  acm_stream = 0;
151 
152  if (err != MMSYSERR_NOERROR)
153  {
154  /* Free buffer memory */
155  if (acm_header.pbSrc != 0)
156  {
157  delete[] acm_header.pbSrc;
158  acm_header.pbSrc = 0;
159  }
160 
161  if (acm_header.pbDst != 0)
162  {
163  delete[] acm_header.pbDst;
164  acm_header.pbDst = 0;
165  }
166 
167  /* Re-init structures */
168  init_();
169  /* Updating status */
170  stream_opened = false;
171  /* TODO: throw error! */
172  MessageBox(0, _T("acmStreamClose error"), _T("ERROR"), MB_ICONERROR);
173  }
174 
175  } /* if acm_stream != 0 */
176 
177  /* Free buffer memory */
178  if (acm_header.pbSrc != 0)
179  delete[] acm_header.pbSrc;
180 
181  if (acm_header.pbDst != 0)
182  delete[] acm_header.pbDst;
183 
184  /* Re-init structures */
185  init_();
186  /* Updating status */
187  stream_opened = false;
188 
189  /* ACM sream successfully closed */
190 }
DWORD cbDstLength
Definition: msacm.h:558
LPBYTE pbSrc
Definition: msacm.h:553
UINT MMRESULT
Definition: mmsystem.h:962
DWORD cbSrcLength
Definition: msacm.h:554
MMRESULT WINAPI acmStreamUnprepareHeader(HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwUnprepare)
Definition: stream.c:449
LPBYTE pbDst
Definition: msacm.h:557
#define _T(x)
Definition: vfdio.h:22
#define MMSYSERR_NOERROR
Definition: mmsystem.h:96
static const WCHAR L[]
Definition: oid.c:1250
#define MB_ICONERROR
Definition: winuser.h:781
#define MessageBox
Definition: winuser.h:5797
#define err(...)
DWORD fdwStatus
Definition: msacm.h:551
#define ACMSTREAMHEADER_STATUSF_PREPARED
Definition: msacm.h:210
ACMSTREAMHEADER acm_header
MMRESULT WINAPI acmStreamClose(HACMSTREAM has, DWORD fdwClose)
Definition: stream.c:65

◆ init_()

_AUDIO_NAMESPACE_START_ void audio_resampler_acm::init_ ( void  )
private

Definition at line 16 of file audio_resampler_acm.cpp.

17 {
18  /* Zeroing structures */
22 
23  /* Setting structures sizes */
27 
28  /* Setting WAVEFORMATEX structure parameters
29  according to `audio_format' in/out classes */
30 
37 
44 
45  /* Init acm structures completed successful */
46 }
unsigned int sample_rate(void) const
#define ZeroMemory
Definition: winbase.h:1648
struct tWAVEFORMATEX WAVEFORMATEX
Definition: austream.idl:23
unsigned short int bits(void) const
#define WAVE_FORMAT_PCM
Definition: constants.h:425
unsigned int byte_rate(void) const
WORD wBitsPerSample
Definition: audioclient.idl:45
DWORD cbStruct
Definition: msacm.h:550
DWORD nSamplesPerSec
Definition: audioclient.idl:42
unsigned int block_align(void) const
struct _ACMSTREAMHEADER ACMSTREAMHEADER
DWORD nAvgBytesPerSec
Definition: audioclient.idl:43
unsigned short int channels(void) const
ACMSTREAMHEADER acm_header

Referenced by audio_resampler_acm(), and close().

◆ open()

void audio_resampler_acm::open ( void  )

Definition at line 51 of file audio_resampler_acm.cpp.

52 {
53  MMRESULT err;
54 
55  /* Opens ACM stream */
57  0,
58  &wformat_src,
59  &wformat_dst,
60  0, 0, 0,
62 
63  if (err != MMSYSERR_NOERROR)
64  {
65  /* TODO: throw error */
66  MessageBox(0, _T("acmOpen error: %i"), _T("ERROR"), MB_ICONERROR);
67  }
68 
69  /* Calcs source buffer length */
70  src_buflen = (unsigned int)((float)audfmt_in.byte_rate() * (float)buf_secs);
71 
72  /* Calcs destination source buffer length with help of ACM apis */
74  src_buflen,
75  &dst_buflen,
77 
78  if (err != MMSYSERR_NOERROR)
79  {
80  /* TODO: throw error */
81  MessageBox(0, _T("acmStreamSize error"), _T("ERROR"), MB_ICONERROR);
82  }
83 
84  /* Initialize ACMSTREAMHEADER structure,
85  and alloc memory for source and destination buffers */
86 
88  acm_header.dwUser = 0;
89 
94 
99 
100  /* Give ACMSTREAMHEADER initialized correctly to the driver */
102  if (err != MMSYSERR_NOERROR)
103  {
104  /* TODO: throw error */
105  MessageBox(0, _T("acmStreamPrepareHeader error"), _T("ERROR"), MB_ICONERROR);
106  }
107 
108  /* ACM stream successfully opened */
109  stream_opened = true;
110 }
DWORD cbDstLength
Definition: msacm.h:558
LPBYTE pbSrc
Definition: msacm.h:553
UINT MMRESULT
Definition: mmsystem.h:962
DWORD_PTR dwDstUser
Definition: msacm.h:560
DWORD cbSrcLengthUsed
Definition: msacm.h:555
DWORD cbDstLengthUsed
Definition: msacm.h:559
DWORD cbSrcLength
Definition: msacm.h:554
unsigned char * LPBYTE
Definition: typedefs.h:53
unsigned int byte_rate(void) const
LPBYTE pbDst
Definition: msacm.h:557
#define _T(x)
Definition: vfdio.h:22
#define MMSYSERR_NOERROR
Definition: mmsystem.h:96
#define ACM_STREAMSIZEF_SOURCE
Definition: msacm.h:217
static const WCHAR L[]
Definition: oid.c:1250
#define MB_ICONERROR
Definition: winuser.h:781
unsigned char BYTE
Definition: mem.h:68
#define MessageBox
Definition: winuser.h:5797
#define err(...)
DWORD_PTR dwSrcUser
Definition: msacm.h:556
DWORD_PTR dwUser
Definition: msacm.h:552
static float(__cdecl *square_half_float)(float x
DWORD fdwStatus
Definition: msacm.h:551
MMRESULT WINAPI acmStreamOpen(PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
Definition: stream.c:149
MMRESULT WINAPI acmStreamPrepareHeader(HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwPrepare)
Definition: stream.c:299
MMRESULT WINAPI acmStreamSize(HACMSTREAM has, DWORD cbInput, LPDWORD pdwOutputBytes, DWORD fdwSize)
Definition: stream.c:394
#define ACM_STREAMOPENF_NONREALTIME
Definition: msacm.h:215
ACMSTREAMHEADER acm_header
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Member Data Documentation

◆ acm_header

ACMSTREAMHEADER audio_resampler_acm::acm_header
protected

Definition at line 24 of file audio_resampler_acm.hpp.

Referenced by audio_receive(), close(), init_(), and open().

◆ acm_stream

HACMSTREAM audio_resampler_acm::acm_stream
protected

Definition at line 23 of file audio_resampler_acm.hpp.

Referenced by audio_receive(), close(), and open().

◆ audfmt_in

audio_format audio_resampler_acm::audfmt_in
protected

Definition at line 29 of file audio_resampler_acm.hpp.

Referenced by init_(), and open().

◆ audfmt_out

audio_format audio_resampler_acm::audfmt_out
protected

Definition at line 30 of file audio_resampler_acm.hpp.

Referenced by init_().

◆ buf_secs

float audio_resampler_acm::buf_secs
protected

Definition at line 32 of file audio_resampler_acm.hpp.

Referenced by open().

◆ dst_buflen

DWORD audio_resampler_acm::dst_buflen
protected

Definition at line 26 of file audio_resampler_acm.hpp.

Referenced by close(), and open().

◆ src_buflen

DWORD audio_resampler_acm::src_buflen
protected

Definition at line 25 of file audio_resampler_acm.hpp.

Referenced by close(), and open().

◆ stream_opened

bool audio_resampler_acm::stream_opened
protected

Definition at line 27 of file audio_resampler_acm.hpp.

Referenced by audio_receive(), close(), and open().

◆ wformat_dst

WAVEFORMATEX audio_resampler_acm::wformat_dst
protected

Definition at line 35 of file audio_resampler_acm.hpp.

Referenced by init_(), and open().

◆ wformat_src

WAVEFORMATEX audio_resampler_acm::wformat_src
protected

Definition at line 34 of file audio_resampler_acm.hpp.

Referenced by init_(), and open().


The documentation for this class was generated from the following files: