Exemplo n.º 1
0
int MpdSipxPcmu::decode(const MpRtpBufPtr &pPacket,
                        unsigned decodedBufferLength,// has always sufficient size
                        MpAudioSample *samplesBuffer,
                        UtlBoolean bIsPLCFrame) 
{
   if (!pPacket.isValid())
      return 0;

   unsigned payloadSize = pPacket->getPayloadSize();
   unsigned maxPayloadSize = smCodecInfo.getMaxPacketBits()/8;

   assert(payloadSize <= maxPayloadSize);
   if (payloadSize > maxPayloadSize)
   {
      return 0;
   }

   int sampleCount = pPacket->getPayloadSize(); // number of samples to decode
   G711U_Decoder(sampleCount,
                 (const uint8_t*)pPacket->getDataPtr(),
                 samplesBuffer);
   return sampleCount;
}
Exemplo n.º 2
0
int MpJitterBuffer::ReceivePacket(JB_uchar* RTPpacket, JB_size RTPlength, JB_ulong TS)
{
   int numSamples = 0;
   unsigned char* pRtpData = NULL;
   struct rtpHeader* pHdr = (struct rtpHeader*) RTPpacket;
   int cc;
   int payloadType;
   int overhead;

   payloadType = (pHdr->mpt) & 0x7f;
   cc = (pHdr->vpxcc) & 0x0f;

   overhead = sizeof(struct rtpHeader) + (cc*sizeof(int));
   switch (payloadType) {
   case 0: // G.711 u-Law
   case 8: // G.711 a-Law
      numSamples = RTPlength - overhead;;
      pRtpData = RTPpacket + overhead;
      break;
   default:
      break;
   }

   if (0 == numSamples)
   {
      return 0;
   }

   if (numSamples != 160)
   {
      if (debugCount++ < 10)
      {
	        printf("RTPlength=%d, cc=%d, payloadType=%d\n", RTPlength,
                    cc, payloadType);
      }
   }

   if (JbQWait > 0)
   {
      JbQWait--;
   }

   if (JbQueueSize == JbQCount)
   {
      // discard some data...
      JbQOut = JbQIn + numSamples;
      JbQCount -= numSamples;
   }

   switch (payloadType)
   {
   case 0: // G.711 u-Law
      G711U_Decoder(numSamples, pRtpData, JbQ+JbQIn);
      break;
   case 8: // G.711 a-Law
      G711A_Decoder(numSamples, pRtpData, JbQ+JbQIn);
      break;
   default:
      break;
   }

   JbQCount += numSamples;
   JbQIn += numSamples;

   if (JbQIn >= JbQueueSize)
   {
       JbQIn -= JbQueueSize;
   }
   return 0;
}