summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBodam Nam <bodamnam@google.com>2023-02-09 04:16:09 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-02-09 04:16:09 +0000
commite6e5a0a13907a2ff2f6cf592216faaff4d90345b (patch)
tree613a9dceb43c3b40f3139829223cb5dc6b82456b
parent710daeb3efb305998c8adc65b928809f498c80c2 (diff)
parentf5093cd628b7308a28e890918e5453408d9f140a (diff)
downloadImsMedia-e6e5a0a13907a2ff2f6cf592216faaff4d90345b.tar.gz
Merge "Fix to increase the dtmf payload timestamp"
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpTx.cpp10
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/nodes/DtmfSenderNode.cpp128
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h2
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/nodes/DtmfSenderNode.h43
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/BaseNode.h1
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h4
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/BaseNode.cpp1
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp34
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)
{