Fix audio mute by dtmf frames
When the dtmf payload is processed in the AudioRtpPayloadDecoder,
unexpected CMR operation makes audio codec error. I add statement to
prevent the dtmf payload processed in AudioPayloadDecoder.
Add statement for error filtering for zero payload in
RtpDecoder/RtpEncoderNode.
Bug: 260996850
Test: test with device with dtmf receiving case, atest ImsMediaNativeTests
Change-Id: I41db2fa4d12c7b7bca3542b5746c9e4aac78cfec
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpDecoderNode.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpDecoderNode.cpp
index 974fd1d..a5e469c 100644
--- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpDecoderNode.cpp
+++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpDecoderNode.cpp
@@ -89,6 +89,12 @@
{
IMLOGD1("[Start] type[%d]", mMediaType);
+ if (mRtpPayloadTx == 0 || mRtpPayloadRx == 0)
+ {
+ IMLOGE0("[Start] invalid payload number");
+ return RESULT_INVALID_PARAM;
+ }
+
if (mRtpSession == NULL)
{
mRtpSession = IRtpSession::GetInstance(mMediaType, mLocalAddress, mPeerAddress);
@@ -387,6 +393,13 @@
"sampling[%d], ext[%d]",
mMediaType, datasize, timestamp, mark, seq, payloadType, mSamplingRate, extension);
+ if (mMediaType == IMS_MEDIA_AUDIO && mRtpPayloadRx != payloadType &&
+ mRtpPayloadTx != payloadType)
+ {
+ IMLOGE1("[OnMediaDataInd] media[%d] invalid frame", mMediaType);
+ return;
+ }
+
// no need to change to timestamp to milliseconds unit in audio or text packet
if (mMediaType != IMS_MEDIA_VIDEO && mSamplingRate != 0)
{
@@ -463,7 +476,7 @@
}
else
{
- IMLOGI2("[OnMediaDataInd] MediaType[%d] INVALID payload[%d] is received", mMediaType,
+ IMLOGI2("[OnMediaDataInd] media[%d] INVALID payload[%d] is received", mMediaType,
payloadType);
}
}
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 0d5295f..ffa4307 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
@@ -63,6 +63,12 @@
{
IMLOGD1("[Start] type[%d]", mMediaType);
+ if (mRtpPayloadTx == 0 || mRtpPayloadRx == 0)
+ {
+ IMLOGE0("[Start] invalid payload number");
+ return RESULT_INVALID_PARAM;
+ }
+
if (mRtpSession == NULL)
{
mRtpSession = IRtpSession::GetInstance(mMediaType, mLocalAddress, mPeerAddress);