diff options
Diffstat (limited to 'service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/AudioRtpPayloadDecoderNode.cpp')
-rw-r--r-- | service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/AudioRtpPayloadDecoderNode.cpp | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/AudioRtpPayloadDecoderNode.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/AudioRtpPayloadDecoderNode.cpp index 2525acfd..279557fc 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/AudioRtpPayloadDecoderNode.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/AudioRtpPayloadDecoderNode.cpp @@ -49,7 +49,7 @@ ImsMediaResult AudioRtpPayloadDecoderNode::Start() mEvsMode = (kEvsBitrate)ImsMediaAudioUtil::GetMaximumEvsMode(mCoreEvsMode); mEvsCodecMode = (kEvsCodecMode)ImsMediaAudioUtil::ConvertEvsCodecMode(mEvsMode); - mPrevCMR = 15; + mPrevCMR = mCodecType == kAudioCodecEvs ? 127 : 15; mListFrameType.clear(); mNodeState = kNodeStateRunning; return RESULT_SUCCESS; @@ -133,7 +133,7 @@ void AudioRtpPayloadDecoderNode::OnDataFromFrontNode(ImsMediaSubType subtype, ui { case kAudioCodecAmr: case kAudioCodecAmrWb: - DecodePayloadAmr(pData, nDataSize, nTimestamp, bMark, nSeqNum, arrivalTime); + DecodePayloadAmr(pData, nDataSize, nTimestamp, nSeqNum, arrivalTime); break; case kAudioCodecPcmu: case kAudioCodecPcma: @@ -152,14 +152,13 @@ void AudioRtpPayloadDecoderNode::OnDataFromFrontNode(ImsMediaSubType subtype, ui } void AudioRtpPayloadDecoderNode::DecodePayloadAmr(uint8_t* pData, uint32_t nDataSize, - uint32_t nTimestamp, bool bMark, uint32_t nSeqNum, uint32_t arrivalTime) + uint32_t nTimestamp, uint32_t nSeqNum, uint32_t arrivalTime) { if (pData == nullptr || nDataSize == 0) { return; } - (void)bMark; uint32_t timestamp = nTimestamp; uint32_t eRate; uint32_t f; @@ -167,9 +166,9 @@ void AudioRtpPayloadDecoderNode::DecodePayloadAmr(uint8_t* pData, uint32_t nData uint32_t QbitPos; // Q_Speech_Sid_Bad IMLOGD_PACKET5(IM_PACKET_LOG_PH, - "[DecodePayloadAmr] GetCodectype[%d], octetAligned[%d], nSeqNum[%d], TS[%u], " + "[DecodePayloadAmr] codec type[%d], octetAligned[%d], size[%d], TS[%u], " "arrivalTime[%u]", - mCodecType, mOctetAligned, nSeqNum, timestamp, arrivalTime); + mCodecType, mOctetAligned, nDataSize, timestamp, arrivalTime); mBitReader.SetBuffer(pData, nDataSize); // read cmr @@ -236,19 +235,20 @@ void AudioRtpPayloadDecoderNode::DecodePayloadAmr(uint8_t* pData, uint32_t nData mListFrameType.pop_front(); mBitWriter.SetBuffer(mPayload, MAX_AUDIO_PAYLOAD_SIZE); - // set payload header + uint32_t bufferSize = (nDataBitSize + 7) >> 3; + // set TOC mBitWriter.Write(f, 1); mBitWriter.Write(eRate, 4); mBitWriter.Write(QbitPos, 1); mBitWriter.Write(0, 2); mBitReader.ReadByteBuffer(mPayload + 1, nDataBitSize); - // add payload header to payload size - uint32_t nBufferSize = ((nDataBitSize + 7) >> 3) + 1; + bufferSize++; + IMLOGD_PACKET6(IM_PACKET_LOG_PH, "[DecodePayloadAmr] result = %02X %02X %02X %02X, len[%d], eRate[%d]", mPayload[0], - mPayload[1], mPayload[2], mPayload[3], nBufferSize, eRate); + mPayload[1], mPayload[2], mPayload[3], bufferSize, eRate); // send remaining packet number in bundle as bMark value - SendDataToRearNode(MEDIASUBTYPE_RTPPAYLOAD, mPayload, nBufferSize, timestamp, + SendDataToRearNode(MEDIASUBTYPE_RTPPAYLOAD, mPayload, bufferSize, timestamp, mListFrameType.size(), nSeqNum, MEDIASUBTYPE_UNDEFINED, arrivalTime); timestamp += 20; @@ -263,10 +263,9 @@ void AudioRtpPayloadDecoderNode::DecodePayloadEvs(uint8_t* pData, uint32_t nData return; } - IMLOGD_PACKET5(IM_PACKET_LOG_PH, - "[DecodePayloadEvs] GetCodectype[%d], octetAligned[%d], nSeqNum[%d], TS[%u], " - "arrivalTime[%u]", - mCodecType, mOctetAligned, nSeqNum, nTimeStamp, arrivalTime); + IMLOGD_PACKET4(IM_PACKET_LOG_PH, + "[DecodePayloadEvs] codec type[%d], size[%d], TS[%u], arrivalTime[%u]", mCodecType, + nDataSize, nTimeStamp, arrivalTime); kRtpPyaloadHeaderMode eEVSReceivedPHFormat = kRtpPyaloadHeaderModeEvsCompact; kEvsCodecMode kEvsCodecMode = kEvsCodecModePrimary; @@ -321,7 +320,7 @@ void AudioRtpPayloadDecoderNode::DecodePayloadEvs(uint8_t* pData, uint32_t nData mBitReader.ReadByteBuffer(mPayload, nDataBitSize); - IMLOGD6("[DecodePayloadEvs] Result =%02X %02X %02X %02X, len=%d,nFrameType=%d", + IMLOGD6("[DecodePayloadEvs] Result=%02X %02X %02X %02X, len=%d,nFrameType=%d", mPayload[0], mPayload[1], mPayload[2], mPayload[3], nDataSize, nFrameType); SendDataToRearNode(MEDIASUBTYPE_RTPPAYLOAD, mPayload, nDataSize, timestamp, bMark, @@ -608,7 +607,6 @@ void AudioRtpPayloadDecoderNode::DecodePayloadEvs(uint8_t* pData, uint32_t nData } else // ToC byte { - IMLOGD0("[DecodePayloadEvs] Decoding TOC header"); toc_f = mBitReader.Read(1); toc_ft_m = mBitReader.Read(1); toc_ft_q = mBitReader.Read(1); @@ -636,14 +634,16 @@ void AudioRtpPayloadDecoderNode::DecodePayloadEvs(uint8_t* pData, uint32_t nData } mBitWriter.SetBuffer(mPayload, MAX_AUDIO_PAYLOAD_SIZE); + uint32_t bufferSize = (nDataBitSize + 7) >> 3; + // set TOC mBitWriter.Write(h, 1); mBitWriter.Write(toc_f, 1); mBitWriter.Write(toc_ft_m, 1); mBitWriter.Write(toc_ft_q, 1); mBitWriter.Write(toc_ft_b, 4); - mBitReader.ReadByteBuffer(mPayload + 1, nDataBitSize); + bufferSize++; // remove padding bit { @@ -653,10 +653,10 @@ void AudioRtpPayloadDecoderNode::DecodePayloadEvs(uint8_t* pData, uint32_t nData } IMLOGD6("[DecodePayloadEvs] result = %02X %02X %02X %02X, len=%d, eRate=%d", - mPayload[0], mPayload[1], mPayload[2], mPayload[3], nDataSize, toc_ft_b); + mPayload[0], mPayload[1], mPayload[2], mPayload[3], bufferSize, toc_ft_b); - SendDataToRearNode(MEDIASUBTYPE_RTPPAYLOAD, mPayload, (((nDataBitSize + 7) >> 3)), - timestamp, mListFrameType.size(), nSeqNum, MEDIASUBTYPE_UNDEFINED, arrivalTime); + SendDataToRearNode(MEDIASUBTYPE_RTPPAYLOAD, mPayload, bufferSize, timestamp, + mListFrameType.size(), nSeqNum, MEDIASUBTYPE_UNDEFINED, arrivalTime); timestamp += 20; } |