int PcmaDecodeStream::decode( unsigned char *in, short *out ) { int len = 160; while ( len-- > 0 ) *out++ = alaw2linear( *in++ ); return 160; }
bool CDVDAudioCodecPcm::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) { SetDefault(); m_codecID = hints.codec; m_iSourceChannels = hints.channels; m_iSourceSampleRate = hints.samplerate; m_iSourceBitrate = 16; switch (m_codecID) { case CODEC_ID_PCM_ALAW: { for (int i = 0; i < 256; i++) table[i] = alaw2linear(i); break; } case CODEC_ID_PCM_MULAW: { for (int i = 0; i < 256; i++) table[i] = ulaw2linear(i); break; } default: { break; } } // set desired output m_iOutputChannels = m_iSourceChannels; return true; }
void AlawToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk) { m_outputAudioChunk.reset(); if(inputAudioChunk.get() == NULL) { return; } if(inputAudioChunk->GetNumSamples() == 0) { return; } AudioChunkDetails outputDetails = *inputAudioChunk->GetDetails(); if(SupportsInputRtpPayloadType(outputDetails.m_rtpPayloadType) == false) { return; } // Create output buffer m_outputAudioChunk.reset(new AudioChunk()); outputDetails.m_rtpPayloadType = -1; // Override details that this filter changes outputDetails.m_encoding = PcmAudio; int numSamples = inputAudioChunk->GetNumSamples(); outputDetails.m_numBytes = numSamples*2; short* outputBuffer = (short*)m_outputAudioChunk->CreateBuffer(outputDetails); char* inputBuffer = (char*)inputAudioChunk->m_pBuffer; for(int i=0; i<numSamples; i++) { outputBuffer[i] = (short)alaw2linear(inputBuffer[i]); } }
static av_cold int pcm_decode_init(AVCodecContext * avctx) { PCMDecode *s = avctx->priv_data; int i; switch(avctx->codec->id) { case CODEC_ID_PCM_ALAW: for(i=0;i<256;i++) s->table[i] = alaw2linear(i); break; case CODEC_ID_PCM_MULAW: for(i=0;i<256;i++) s->table[i] = ulaw2linear(i); break; default: break; } avctx->sample_fmt = avctx->codec->sample_fmts[0]; if (avctx->sample_fmt == SAMPLE_FMT_S32) avctx->bits_per_raw_sample = av_get_bits_per_sample(avctx->codec->id); return 0; }
int wr_g711a_decode(void * state, const char * input, size_t size, short * output) { int i = 0; wr_g711a_decoder_state * s = (wr_g711a_decoder_state * )state; for (i=0; i < size; i++){ output[i] = (short)alaw2linear((int)(input[i])); } return size; }
static kal_uint16 alawGetSample( const kal_uint16 **pbuf ) { if( pcm.data_count == 0 ) { kal_uint16 data = **pbuf; pcm.data[1] = alaw2linear( (kal_uint8)(data & 0xFF) ); pcm.data[0] = alaw2linear( (kal_uint8)(data >> 8) ); *pbuf = *pbuf + 1; pcm.data_count = 2; }
/* Decodes one byte PCMU data to two bytes unsigned linear data */ static int vocoder_alaw(int fd, u_char *pl, int len) { u_int16_t wbuf[2048]; int i = 0; int wlen = len * sizeof(u_int16_t); for (i = 0; i < len && (i < sizeof(wbuf) / sizeof(u_int16_t)); i++) wbuf[i] = alaw2linear(pl[i]); if (write(fd, wbuf, wlen) < wlen) return -1; return wlen; }