📄 speexcodec.cxx
字号:
EQUIVALENCE_MANUFACTURER_CODE,
NULL, 0, 0, P_MAX_INDEX)
{
PStringStream s;
if (sampleRate == 8000)
s << "Speex bs" << speex_nb_mode.bitstream_version << " Narrow" << mode;
else
s << "Speex bs" << speex_wb_mode.bitstream_version << " Wide" << mode;
PINDEX len = s.GetLength();
memcpy(nonStandardData.GetPointer(len), (const char *)s, len);
}
/////////////////////////////////////////////////////////////////////////
SpeexNarrow2AudioCapability::SpeexNarrow2AudioCapability()
: SpeexNonStandardAudioCapability(2, 8000)
{
}
PObject * SpeexNarrow2AudioCapability::Clone() const
{
return new SpeexNarrow2AudioCapability(*this);
}
PString SpeexNarrow2AudioCapability::GetFormatName() const
{
return OpalSpeexNarrow_5k95;
}
/////////////////////////////////////////////////////////////////////////
SpeexNarrow3AudioCapability::SpeexNarrow3AudioCapability()
: SpeexNonStandardAudioCapability(3, 8000)
{
}
PObject * SpeexNarrow3AudioCapability::Clone() const
{
return new SpeexNarrow3AudioCapability(*this);
}
PString SpeexNarrow3AudioCapability::GetFormatName() const
{
return OpalSpeexNarrow_8k;
}
/////////////////////////////////////////////////////////////////////////
SpeexNarrow4AudioCapability::SpeexNarrow4AudioCapability()
: SpeexNonStandardAudioCapability(4, 8000)
{
}
PObject * SpeexNarrow4AudioCapability::Clone() const
{
return new SpeexNarrow4AudioCapability(*this);
}
PString SpeexNarrow4AudioCapability::GetFormatName() const
{
return OpalSpeexNarrow_11k;
}
/////////////////////////////////////////////////////////////////////////
SpeexNarrow5AudioCapability::SpeexNarrow5AudioCapability()
: SpeexNonStandardAudioCapability(5, 8000)
{
}
PObject * SpeexNarrow5AudioCapability::Clone() const
{
return new SpeexNarrow5AudioCapability(*this);
}
PString SpeexNarrow5AudioCapability::GetFormatName() const
{
return OpalSpeexNarrow_15k;
}
/////////////////////////////////////////////////////////////////////////
SpeexNarrow6AudioCapability::SpeexNarrow6AudioCapability()
: SpeexNonStandardAudioCapability(6, 8000)
{
}
PObject * SpeexNarrow6AudioCapability::Clone() const
{
return new SpeexNarrow6AudioCapability(*this);
}
PString SpeexNarrow6AudioCapability::GetFormatName() const
{
return OpalSpeexNarrow_18k2;
}
/////////////////////////////////////////////////////////////////////////
SpeexWide6AudioCapability::SpeexWide6AudioCapability()
: SpeexNonStandardAudioCapability(6, 16000)
{
}
PObject * SpeexWide6AudioCapability::Clone() const
{
return new SpeexWide6AudioCapability(*this);
}
PString SpeexWide6AudioCapability::GetFormatName() const
{
return OpalSpeexWide_20k6;
}
#endif
/////////////////////////////////////////////////////////////////////////////
Opal_Speex_Transcoder::Opal_Speex_Transcoder(const OpalMediaFormat & inputMediaFormat,
const OpalMediaFormat & outputMediaFormat,
unsigned inputBytesPerFrame,
unsigned outputBytesPerFrame)
: OpalFramedTranscoder(inputMediaFormat, outputMediaFormat, inputBytesPerFrame, outputBytesPerFrame)
{
bits = new SpeexBits;
speex_bits_init(bits);
}
Opal_Speex_Transcoder::~Opal_Speex_Transcoder()
{
speex_bits_destroy(bits);
delete bits;
}
///////////////////////////////////////////////////////////////////////////////
Opal_Speex_Decoder::Opal_Speex_Decoder(const OpalMediaFormat & inputMediaFormat, int mode, int sampleRate)
: Opal_Speex_Transcoder(inputMediaFormat, OpalPCM16, Speex_Bytes_Per_Frame(mode, sampleRate), (sampleRate == 8000)?NARROW_SAMPLES_PER_FRAME*2:WIDE_SAMPLES_PER_FRAME*2)
{
if (sampleRate == 8000)
decoder = speex_decoder_init(&speex_nb_mode);
else
decoder = speex_decoder_init(&speex_wb_mode);
samples_per_frame = (sampleRate == 8000)?NARROW_SAMPLES_PER_FRAME:WIDE_SAMPLES_PER_FRAME;
}
Opal_Speex_Decoder::~Opal_Speex_Decoder()
{
if (decoder != NULL)
speex_decoder_destroy(decoder);
}
BOOL Opal_Speex_Decoder::ConvertFrame(const BYTE * src, BYTE * dst)
{
speex_bits_reset(bits);
speex_bits_read_from(bits, (char *)src, inputBytesPerFrame);
speex_decode_int(decoder, bits, (spx_int16_t *) dst);
return TRUE;
}
BOOL Opal_Speex_Decoder::ConvertSilentFrame(BYTE * dst)
{
speex_decode_int(decoder, NULL, (spx_int16_t *) dst);
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
Opal_Speex_Encoder::Opal_Speex_Encoder(const OpalMediaFormat & outputMediaFormat, int mode, int sampleRate)
: Opal_Speex_Transcoder(OpalPCM16, outputMediaFormat, (sampleRate == 8000)?NARROW_SAMPLES_PER_FRAME*2:WIDE_SAMPLES_PER_FRAME*2, Speex_Bytes_Per_Frame(mode, sampleRate))
{
if (sampleRate == 8000)
encoder = speex_encoder_init(&speex_nb_mode);
else
encoder = speex_encoder_init(&speex_wb_mode);
speex_encoder_ctl(encoder, SPEEX_SET_MODE, &mode);
samples_per_frame = (sampleRate == 8000)?NARROW_SAMPLES_PER_FRAME:WIDE_SAMPLES_PER_FRAME;
PTRACE(3, "Codec\tSpeex encoder created");
}
Opal_Speex_Encoder::~Opal_Speex_Encoder()
{
if (encoder != NULL)
speex_encoder_destroy(encoder);
}
BOOL Opal_Speex_Encoder::ConvertFrame(const BYTE * src, BYTE * dst)
{
speex_bits_reset(bits);
speex_encode_int(encoder, (spx_int16_t *) src, bits);
speex_bits_write(bits, (char *)dst, outputBytesPerFrame);
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
Opal_Speex_5k95_PCM::Opal_Speex_5k95_PCM()
: Opal_Speex_Decoder(OpalSpeexNarrow_5k95, 2, 8000)
{
}
Opal_PCM_Speex_5k95::Opal_PCM_Speex_5k95()
: Opal_Speex_Encoder(OpalSpeexNarrow_5k95, 2, 8000)
{
}
Opal_Speex_8k_PCM::Opal_Speex_8k_PCM()
: Opal_Speex_Decoder(OpalSpeexNarrow_8k, 3, 8000)
{
}
Opal_PCM_Speex_8k::Opal_PCM_Speex_8k()
: Opal_Speex_Encoder(OpalSpeexNarrow_8k, 3, 8000)
{
}
Opal_Speex_11k_PCM::Opal_Speex_11k_PCM()
: Opal_Speex_Decoder(OpalSpeexNarrow_11k, 4, 8000)
{
}
Opal_PCM_Speex_11k::Opal_PCM_Speex_11k()
: Opal_Speex_Encoder(OpalSpeexNarrow_11k, 4, 8000)
{
}
Opal_Speex_15k_PCM::Opal_Speex_15k_PCM()
: Opal_Speex_Decoder(OpalSpeexNarrow_15k, 5, 8000)
{
}
Opal_PCM_Speex_15k::Opal_PCM_Speex_15k()
: Opal_Speex_Encoder(OpalSpeexNarrow_15k, 5, 8000)
{
}
Opal_Speex_18k2_PCM::Opal_Speex_18k2_PCM()
: Opal_Speex_Decoder(OpalSpeexNarrow_18k2, 6, 8000)
{
}
Opal_PCM_Speex_18k2::Opal_PCM_Speex_18k2()
: Opal_Speex_Encoder(OpalSpeexNarrow_18k2, 6, 8000)
{
}
Opal_Speex_20k6_PCM::Opal_Speex_20k6_PCM()
: Opal_Speex_Decoder(OpalSpeexWide_20k6, 6, 16000)
{
}
Opal_PCM_Speex_20k6::Opal_PCM_Speex_20k6()
: Opal_Speex_Encoder(OpalSpeexWide_20k6, 6, 16000)
{
}
/////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -