diff options
author | Bodam Nam <bodamnam@google.com> | 2023-02-09 04:16:09 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-02-09 04:16:09 +0000 |
commit | e6e5a0a13907a2ff2f6cf592216faaff4d90345b (patch) | |
tree | 613a9dceb43c3b40f3139829223cb5dc6b82456b /service | |
parent | 710daeb3efb305998c8adc65b928809f498c80c2 (diff) | |
parent | f5093cd628b7308a28e890918e5453408d9f140a (diff) | |
download | ImsMedia-e6e5a0a13907a2ff2f6cf592216faaff4d90345b.tar.gz |
Merge "Fix to increase the dtmf payload timestamp"
Diffstat (limited to 'service')
8 files changed, 14 insertions, 209 deletions
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpTx.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpTx.cpp index 372a137d..3444ab43 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpTx.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpTx.cpp @@ -20,7 +20,6 @@ #include <AudioConfig.h> #include <IAudioSourceNode.h> #include <DtmfEncoderNode.h> -#include <DtmfSenderNode.h> #include <AudioRtpPayloadEncoderNode.h> #include <RtpEncoderNode.h> #include <SocketWriterNode.h> @@ -175,16 +174,9 @@ bool AudioStreamGraphRtpTx::createDtmfGraph(RtpConfig* config, BaseNode* rtpEnco AddNode(pDtmfEncoderNode); mListDtmfNodes.push_back(pDtmfEncoderNode); - BaseNode* pDtmfSenderNode = new DtmfSenderNode(mCallback); - pDtmfSenderNode->SetMediaType(IMS_MEDIA_AUDIO); - pDtmfSenderNode->SetConfig(audioConfig); - pDtmfEncoderNode->ConnectRearNode(pDtmfSenderNode); - AddNode(pDtmfSenderNode); - mListDtmfNodes.push_back(pDtmfSenderNode); - if (rtpEncoderNode != nullptr) { - pDtmfSenderNode->ConnectRearNode(rtpEncoderNode); + pDtmfEncoderNode->ConnectRearNode(rtpEncoderNode); } return true; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/DtmfSenderNode.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/DtmfSenderNode.cpp deleted file mode 100644 index d0c75835..00000000 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/DtmfSenderNode.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/** - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <ImsMediaDefine.h> -#include <ImsMediaTrace.h> -#include <DtmfSenderNode.h> -#include <ImsMediaTimer.h> -#include <AudioConfig.h> - -DtmfSenderNode::DtmfSenderNode(BaseSessionCallback* callback) : - BaseNode(callback) -{ - mNextTime = 0; - mPrevTime = 0; - mPtime = 20; -} - -DtmfSenderNode::~DtmfSenderNode() {} - -kBaseNodeId DtmfSenderNode::GetNodeId() -{ - return kNodeIdDtmfSender; -} - -ImsMediaResult DtmfSenderNode::Start() -{ - mNextTime = 0; - mNodeState = kNodeStateRunning; - return RESULT_SUCCESS; -} - -void DtmfSenderNode::Stop() -{ - mNextTime = 0; - ClearDataQueue(); - mNodeState = kNodeStateStopped; -} - -bool DtmfSenderNode::IsRunTime() -{ - return false; -} - -bool DtmfSenderNode::IsSourceNode() -{ - return false; -} - -void DtmfSenderNode::SetConfig(void* config) -{ - AudioConfig* pConfig = reinterpret_cast<AudioConfig*>(config); - - if (pConfig != nullptr) - { - mPtime = pConfig->getPtimeMillis(); - } -} - -bool DtmfSenderNode::IsSameConfig(void* config) -{ - if (config == nullptr) - { - return true; - } - - AudioConfig* pConfig = reinterpret_cast<AudioConfig*>(config); - return (mPtime == pConfig->getPtimeMillis()); -} - -void DtmfSenderNode::ProcessData() -{ - ImsMediaSubType subtype; - uint8_t* pData; - uint32_t nDataSize; - uint32_t nTimeStamp; - bool bMark; - uint32_t nCurrTime; - - if (GetData(&subtype, &pData, &nDataSize, &nTimeStamp, &bMark, nullptr) == false) - { - return; - } - - nCurrTime = ImsMediaTimer::GetTimeInMilliSeconds(); - - if (mNextTime && !(nCurrTime >= mNextTime || nCurrTime < mPrevTime || mNextTime < mPrevTime)) - { - mPrevTime = nCurrTime; - return; - } - - if (subtype == MEDIASUBTYPE_DTMFSTART) - { - SendDataToRearNode(subtype, pData, nDataSize, nTimeStamp, bMark, 0); - DeleteData(); - mNextTime = nCurrTime; - - // send the first dtmf packet - if (GetData(&subtype, &pData, &nDataSize, &nTimeStamp, &bMark, nullptr, nullptr) && - subtype == MEDIASUBTYPE_DTMF_PAYLOAD) - { - SendDataToRearNode(subtype, pData, nDataSize, nTimeStamp, bMark, 0); - DeleteData(); - mNextTime += mPtime; - } - } - else - { - SendDataToRearNode(subtype, pData, nDataSize, nTimeStamp, bMark, 0); - DeleteData(); - mNextTime += mPtime; - } - - mPrevTime = nCurrTime; -} diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h index 5853de91..c042b7c7 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h @@ -33,7 +33,7 @@ public: * * @param config AudioConfig for setting the parameters for nodes * @param rtpEncoderNode The RtpEncoderNode instance to connect as a rear node after the - * DtmfSenderNode, if it is null, no dtmf packet will be delivered to RtpEncoderNode. + * DtmfEncoderNode, if it is null, no dtmf packet will be delivered to RtpEncoderNode. * @return true Returns when the graph created without error * @return false Returns when the given parameters are invalid. */ diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/nodes/DtmfSenderNode.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/nodes/DtmfSenderNode.h deleted file mode 100644 index 8956b90b..00000000 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/nodes/DtmfSenderNode.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef DTMFSENDERNODE_H_INCLUDED -#define DTMFSENDERNODE_H_INCLUDED - -#include <ImsMediaDefine.h> -#include <BaseNode.h> - -class DtmfSenderNode : public BaseNode -{ -public: - DtmfSenderNode(BaseSessionCallback* callback = nullptr); - virtual ~DtmfSenderNode(); - virtual kBaseNodeId GetNodeId(); - virtual ImsMediaResult Start(); - virtual void Stop(); - virtual bool IsRunTime(); - virtual bool IsSourceNode(); - virtual void SetConfig(void* config); - virtual bool IsSameConfig(void* config); - virtual void ProcessData(); - -private: - uint32_t mNextTime; - uint32_t mPrevTime; - int8_t mPtime; // msec unit, interval between dtmf packets -}; - -#endif // DTMFSENDERNODE_H_INCLUDED diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/BaseNode.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/BaseNode.h index 78dde778..360c46bc 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/BaseNode.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/BaseNode.h @@ -49,7 +49,6 @@ enum kBaseNodeId kNodeIdAudioSource, kNodeIdAudioPlayer, kNodeIdDtmfEncoder, - kNodeIdDtmfSender, kNodeIdAudioPayloadEncoder, kNodeIdAudioPayloadDecoder, // for Video diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h index d134f435..788f227e 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h @@ -58,8 +58,7 @@ public: void SetRtpHeaderExtension(tRtpHeaderExtensionInfo& tExtension); private: - bool ProcessAudioData( - ImsMediaSubType subtype, uint8_t* pData, uint32_t nDataSize, uint32_t timestamp); + bool ProcessAudioData(ImsMediaSubType subtype, uint8_t* pData, uint32_t nDataSize); void ProcessVideoData(ImsMediaSubType subtype, uint8_t* pData, uint32_t nDataSize, uint32_t timestamp, bool mark); void ProcessTextData(ImsMediaSubType subtype, uint8_t* pData, uint32_t nDataSize, @@ -72,7 +71,6 @@ private: bool mDTMFMode; bool mMark; uint32_t mPrevTimestamp; - uint32_t mDTMFTimestamp; int8_t mSamplingRate; int8_t mRtpPayloadTx; int8_t mRtpPayloadRx; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/BaseNode.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/BaseNode.cpp index 4e29d706..b2fb076f 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/BaseNode.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/BaseNode.cpp @@ -30,7 +30,6 @@ static std::vector<NODE_ID_PAIR> vectorNodeId{ std::make_pair(kNodeIdAudioSource, "AudioSource"), std::make_pair(kNodeIdAudioPlayer, "AudioPlayer"), std::make_pair(kNodeIdDtmfEncoder, "DtmfEncoder"), - std::make_pair(kNodeIdDtmfSender, "DtmfSender"), std::make_pair(kNodeIdAudioPayloadEncoder, "AudioPayloadEncoder"), std::make_pair(kNodeIdAudioPayloadDecoder, "AudioPayloadDecoder"), std::make_pair(kNodeIdVideoSource, "VideoSource"), diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp index ff45e252..d89d5bed 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp @@ -30,7 +30,6 @@ RtpEncoderNode::RtpEncoderNode(BaseSessionCallback* callback) : mDTMFMode = false; mMark = false; mPrevTimestamp = 0; - mDTMFTimestamp = 0; mSamplingRate = 0; mRtpPayloadTx = 0; mRtpPayloadRx = 0; @@ -108,7 +107,6 @@ ImsMediaResult RtpEncoderNode::Start() mDTMFMode = false; mMark = true; mPrevTimestamp = 0; - mDTMFTimestamp = 0; #ifdef DEBUG_JITTER_GEN_SIMULATION_DELAY mNextTime = 0; #endif @@ -156,7 +154,7 @@ void RtpEncoderNode::ProcessData() { if (mMediaType == IMS_MEDIA_AUDIO) { - if (!ProcessAudioData(subtype, data, size, timestamp)) + if (!ProcessAudioData(subtype, data, size)) { return; } @@ -350,8 +348,7 @@ void RtpEncoderNode::SetRtpHeaderExtension(tRtpHeaderExtensionInfo& tExtension) mRtpExtension = tExtension; } -bool RtpEncoderNode::ProcessAudioData( - ImsMediaSubType subtype, uint8_t* data, uint32_t size, uint32_t timestamp) +bool RtpEncoderNode::ProcessAudioData(ImsMediaSubType subtype, uint8_t* data, uint32_t size) { uint32_t currentTimestamp; uint32_t timeDiff; @@ -373,30 +370,21 @@ bool RtpEncoderNode::ProcessAudioData( { if (mDTMFMode) { - IMLOGD_PACKET2(IM_PACKET_LOG_RTP, "[ProcessAudioData] DTMF - size[%d], TS[%d]", size, - mDTMFTimestamp); - // the first dtmf event - if (timestamp == 0) - { - currentTimestamp = ImsMediaTimer::GetTimeInMilliSeconds(); - mDTMFTimestamp = currentTimestamp; - timeDiff = ((currentTimestamp - mPrevTimestamp) + 10) / 20 * 20; - - if (timeDiff == 0) - { - timeDiff = 20; - } + currentTimestamp = ImsMediaTimer::GetTimeInMilliSeconds(); + timeDiff = currentTimestamp - mPrevTimestamp; - mPrevTimestamp += timeDiff; - } - else + if (timeDiff < 20) { - timeDiff = 0; + return false; } + mPrevTimestamp = currentTimestamp; timestampDiff = timeDiff * mSamplingRate; + + IMLOGD_PACKET2(IM_PACKET_LOG_RTP, "[ProcessAudioData] dtmf payload, size[%u], TS[%u]", + size, currentTimestamp); mRtpSession->SendRtpPacket( - mRtpTxDtmfPayload, data, size, mDTMFTimestamp, mMark, timestampDiff); + mRtpTxDtmfPayload, data, size, currentTimestamp, mMark, timestampDiff); if (mMark) { |