--- /dev/null
+------------------------------------------------------------------------------
+| WARNING: This sub-package doesn't work, so don't try to compile it if you |
+| don't want to make some development on it. |
+------------------------------------------------------------------------------
+
+If you want to build it rename Makefile.bd in Makefile and Makefile.ibd in
+Makefile.in. After that, rerun config.status.
--- /dev/null
+#ifdef __GNUG__
+#pragma implementation "sndmulaw.h"
+#endif
+
+#include "sndsnd.h"
+#include "sndfrmt.h"
+#include "sndadpcm.h"
+#include "adpcm/g72x.h"
+
+wxSoundAdpcmCodec::wxSoundAdpcmCodec()
+ : wxSoundCodec()
+{
+ g72x_init_state(codec_state);
+}
+
+wxSoundAdpcmCodec::~wxSoundAdpcmCodec()
+{
+}
+
+int wxSoundAdpcmCodec::GetBits(int nbits)
+{
+ unsigned int mask;
+ int bits;
+
+ if (bits_waiting == 0)
+ current_byte = m_in_sound->GetChar();
+
+ mask = (1 << nbits) - 1;
+ bits = current_byte & mask;
+ current_byte >>= nbits;
+ return bits;
+}
+
+
+void wxSoundAdpcmCodec::Decode()
+{
+ int smp;
+ 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, 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, codec_state);
+ m_out_sound->PutChar((smp & 0xff00) >> 8);
+ m_out_sound->PutChar(smp & 0x00ff);
+ bits = GetBits(4);
+ }
+ }
+}
+
+void wxSoundMulawCodec::Encode()
+{
+}
+
+size_t wxSoundMulawCodec::GetByteRate() const
+{
+ return m_srate;
+}
+
+wxSoundDataFormat wxSoundMulawCodec::GetPreferredFormat(int WXUNUSED(no)) const
+{
+ wxSoundDataFormat format;
+
+ format.SetCodecNo(WXSOUND_PCM);
+ format.SetSampleRate(m_srate);
+ format.SetBps(16);
+ format.SetChannels(1);
+ format.SetSign(wxSND_SAMPLE_SIGNED);
+#ifdef USE_BE_MACH
+ format.SetByteOrder(wxSND_SAMPLE_BE);
+#else
+ format.SetByteOrder(wxSND_SAMPLE_LE);
+#endif
+ return format;
+}
case WXSOUND_PCM: {
wxSoundPcmCodec *pcm_codec = (wxSoundPcmCodec *)codec;
- pcm_codec->SetBits(m_bps);
- pcm_codec->SetByteOrder(m_byteorder);
- pcm_codec->SetSign(m_sign);
+ pcm_codec->m_orig_format.SetSampleRate(m_srate);
+ pcm_codec->m_orig_format.SetBps(m_bps);
+ pcm_codec->m_orig_format.SetChannels(m_channels);
+ pcm_codec->m_orig_format.SetByteOrder(m_byteorder);
+ pcm_codec->m_orig_format.SetSign(m_sign);
break;
}
default:
wxSoundPcmCodec();
virtual ~wxSoundPcmCodec();
- void SetSampleRate(int srate) { m_orig_format.SetSampleRate(srate); }
- void SetBits(int bits) { m_orig_format.SetBps(bits); }
- void SetByteOrder(int order) { m_orig_format.SetByteOrder(order); }
- void SetSign(int sample_sign) { m_orig_format.SetSign(sample_sign); }
-
size_t GetByteRate() const;
wxSoundDataFormat GetPreferredFormat(int codec = 0) const;
void OutputSwapAndSign16();
protected:
+ friend class wxSoundDataFormat;
wxSoundDataFormat m_orig_format;
char m_char_stack;
bool m_char_bool;