* Fixes and updates on wxMMedia.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1722 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -10,30 +10,65 @@
|
||||
wxSoundAdpcmCodec::wxSoundAdpcmCodec()
|
||||
: wxSoundCodec()
|
||||
{
|
||||
g72x_init_state(codec_state);
|
||||
// TODO: For the moment, only 1 channel is supported.
|
||||
m_codec_state = new g72x_state;
|
||||
g72x_init_state(m_codec_state);
|
||||
}
|
||||
|
||||
wxSoundAdpcmCodec::~wxSoundAdpcmCodec()
|
||||
{
|
||||
}
|
||||
|
||||
void wxSoundAdpcmCodec::InitWith(const wxSoundDataFormat& format)
|
||||
{
|
||||
m_srate = format.GetSampleRate();
|
||||
}
|
||||
|
||||
int wxSoundAdpcmCodec::GetBits(int nbits)
|
||||
{
|
||||
unsigned int mask;
|
||||
int bits;
|
||||
|
||||
if (bits_waiting == 0)
|
||||
current_byte = m_in_sound->GetChar();
|
||||
if (m_bits_waiting == 0)
|
||||
m_current_byte = m_in_sound->GetChar();
|
||||
|
||||
mask = (1 << nbits) - 1;
|
||||
bits = current_byte & mask;
|
||||
current_byte >>= nbits;
|
||||
bits = m_current_byte & mask;
|
||||
m_current_byte >>= nbits;
|
||||
m_bits_waiting -= nbits;
|
||||
return bits;
|
||||
}
|
||||
|
||||
|
||||
void wxSoundAdpcmCodec::Decode()
|
||||
{
|
||||
int smp, bits;
|
||||
wxSoundDataFormat pref_frmt;
|
||||
|
||||
pref_frmt = GetPreferredFormat(0);
|
||||
if (!(m_io_format == pref_frmt))
|
||||
ChainCodecAfter(pref_frmt);
|
||||
|
||||
bits = GetBits(4);
|
||||
if (m_io_format.GetByteOrder() == wxSND_SAMPLE_LE) {
|
||||
while (!StreamOk()) {
|
||||
smp = g721_decoder(bits, AUDIO_ENCODING_LINEAR, m_codec_state);
|
||||
m_out_sound->PutChar(smp & 0x00ff);
|
||||
m_out_sound->PutChar((smp & 0xff00) >> 8);
|
||||
bits = GetBits(4);
|
||||
}
|
||||
} else {
|
||||
while (!StreamOk()) {
|
||||
smp = g721_decoder(bits, AUDIO_ENCODING_LINEAR, m_codec_state);
|
||||
m_out_sound->PutChar((smp & 0xff00) >> 8);
|
||||
m_out_sound->PutChar(smp & 0x00ff);
|
||||
bits = GetBits(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void wxSoundAdpcmCodec::Encode()
|
||||
{
|
||||
/*
|
||||
int smp;
|
||||
wxSoundDataFormat pref_frmt;
|
||||
|
||||
@@ -57,18 +92,15 @@ void wxSoundAdpcmCodec::Decode()
|
||||
bits = GetBits(4);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void wxSoundMulawCodec::Encode()
|
||||
size_t wxSoundAdpcmCodec::GetByteRate() const
|
||||
{
|
||||
return (m_io_format.GetSampleRate() * m_io_format.GetChannels()) / 2;
|
||||
}
|
||||
|
||||
size_t wxSoundMulawCodec::GetByteRate() const
|
||||
{
|
||||
return m_srate;
|
||||
}
|
||||
|
||||
wxSoundDataFormat wxSoundMulawCodec::GetPreferredFormat(int WXUNUSED(no)) const
|
||||
wxSoundDataFormat wxSoundAdpcmCodec::GetPreferredFormat(int WXUNUSED(no)) const
|
||||
{
|
||||
wxSoundDataFormat format;
|
||||
|
||||
|
Reference in New Issue
Block a user