Пример #1
0
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;
}
Пример #2
0
void UlawToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk)
{
	m_outputAudioChunk.reset();

	if(inputAudioChunk.get() == NULL)
	{
		return;
	}
	else 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)ulaw2linear(inputBuffer[i]);
	}	
}
Пример #3
0
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;
}
Пример #4
0
int PCMUCodec::Decode (BYTE *in,int inLen,WORD* out,int outLen)
{
	//Comprobamos las longitudes
	if (outLen<inLen)
		return 0;

	//Decodificamos
	for (int j = 0; j< inLen ;j++)
		out[j]=ulaw2linear(in[j]);

	return inLen;	
}
Пример #5
0
/* Decodes one byte PCMU data to two bytes unsigned linear data */
static int
vocoder_ulaw(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] = ulaw2linear(pl[i]);
	if (write(fd, wbuf, wlen) < wlen)
		return -1;
	return wlen;
}
Пример #6
0
//#define ECHO
thread basic_receive(ushort uart, ushort udp)
{
    uint len = 0;
    uchar buf[BUF_SIZE];
#ifdef ECHO
    int i, j = 0;
    uint value[5 * BUF_SIZE];
#endif

    /* Enable all interrupts */
    enable();

    while (TRUE)
    {
        /* Read from the UDP device */
        len = read(udp, buf, BUF_SIZE);

        if (len > 0)
        {
#ifdef ECHO
            /* Echo audio effect */
            for (i = 0; i < len; i++)
            {
                value[j] =
                    value[(j + BUF_SIZE) % (5 * BUF_SIZE)] * 4 / 5 +
                    ulaw2linear(buf[i]) / 64 + 512;
                buf[i] = linear2ulaw((value[j] - 512) * 64);
                j = (j + 1) % (5 * BUF_SIZE);
            }
#endif

            /* Write to the serial device */
            write(uart, buf, len);
        }
    }
}