]> git.saurik.com Git - wxWidgets.git/blame - utils/wxMMedia/sndmulaw.cpp
Added test for sprintf and vsnprintf to fix string.cpp for non-GNU systems.
[wxWidgets.git] / utils / wxMMedia / sndmulaw.cpp
CommitLineData
4d6306eb
GL
1#ifdef __GNUG__
2#pragma implementation "sndmulaw.h"
3#endif
4
5#include "sndsnd.h"
6#include "sndfrmt.h"
7#include "sndmulaw.h"
8#include "adpcm/g72x.h"
9
10wxSoundMulawCodec::wxSoundMulawCodec()
11 : wxSoundCodec()
12{
13}
14
15wxSoundMulawCodec::~wxSoundMulawCodec()
16{
17}
18
19void wxSoundMulawCodec::Decode()
20{
21 int smp;
22 wxSoundDataFormat pref_frmt;
23
24 pref_frmt = GetPreferredFormat(0);
25 if (m_io_format != pref_frmt)
26 ChainCodecAfter(pref_frmt);
27
28 InitMode(DECODING);
29
30 while (!Good()) {
31 smp = ulaw2linear(m_in_sound->GetChar());
32#ifdef USE_BE_MACH
33 m_out_sound->PutChar((smp & 0xff00) >> 8);
34 m_out_sound->PutChar(smp & 0xff);
35#else
36 m_out_sound->PutChar(smp & 0xff);
37 m_out_sound->PutChar((smp & 0xff00) >> 8);
38#endif
39 }
40}
41
42void wxSoundMulawCodec::Encode()
43{
44 int smp;
45 wxSoundDataFormat pref_frmt;
46
47 pref_frmt = GetPreferredFormat(0);
48 if (m_io_format != pref_frmt)
49 ChainCodecBefore(pref_frmt);
50
51 InitMode(ENCODING);
52
53 while (!Good()) {
54#ifdef USE_BE_MACH
55 smp = ((unsigned short)m_in_sound->GetChar()) << 8;
56 smp |= m_in_sound->GetChar() & 0xff;
57#else
58 smp = m_in_sound->GetChar() & 0xff;
59 smp |= ((unsigned short)m_in_sound->GetChar()) << 8;
60#endif
61 m_out_sound->PutChar(linear2ulaw(smp));
62 }
63}
64
65size_t wxSoundMulawCodec::GetByteRate() const
66{
67 return m_srate;
68}
69
70wxSoundDataFormat wxSoundMulawCodec::GetPreferredFormat(int WXUNUSED(no)) const
71{
72 wxSoundDataFormat format;
73
74 format.SetCodecNo(WXSOUND_PCM);
75 format.SetSampleRate(m_srate);
76 format.SetBps(16);
77 format.SetChannels(1);
78 format.SetSign(wxSND_SAMPLE_SIGNED);
79#ifdef USE_BE_MACH
80 format.SetByteOrder(wxSND_SAMPLE_BE);
81#else
82 format.SetByteOrder(wxSND_SAMPLE_LE);
83#endif
84 return format;
85}