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);