Merge "[ImsMedia] Add notifyMediaQualityStatus api as per updated imsmedia design"
diff --git a/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/IImsMediaSessionListener.aidl b/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/IImsMediaSessionListener.aidl
index b1e0576..cb221df 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/IImsMediaSessionListener.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/IImsMediaSessionListener.aidl
@@ -37,9 +37,7 @@
oneway void onModifySessionResponse(in android.hardware.radio.ims.media.RtpConfig config, android.hardware.radio.ims.media.RtpError error);
oneway void onFirstMediaPacketReceived(in android.hardware.radio.ims.media.RtpConfig config);
oneway void onHeaderExtensionReceived(in List<android.hardware.radio.ims.media.RtpHeaderExtension> extensions);
- oneway void notifyMediaInactivity(android.hardware.radio.ims.media.MediaProtocolType packetType);
- oneway void notifyPacketLoss(int packetLossPercentage);
- oneway void notifyJitter(int jitter);
+ oneway void notifyMediaQualityStatus(in android.hardware.radio.ims.media.MediaQualityStatus quality);
oneway void triggerAnbrQuery(in android.hardware.radio.ims.media.RtpConfig config);
oneway void onDtmfReceived(char dtmfDigit, int durationMs);
oneway void onCallQualityChanged(in android.hardware.radio.ims.media.CallQuality callQuality);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaProtocolType.aidl b/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaQualityStatus.aidl
similarity index 88%
rename from radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaProtocolType.aidl
rename to radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaQualityStatus.aidl
index 1a290d4..4accf53 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaProtocolType.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaQualityStatus.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2023 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.
@@ -32,8 +32,10 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.radio.ims.media;
-@Backing(type="int") @VintfStability
-enum MediaProtocolType {
- RTP = 0,
- RTCP = 1,
+@VintfStability
+parcelable MediaQualityStatus {
+ int rtpInactivityTimeMillis;
+ int rtcpInactivityTimeMillis;
+ int rtpPacketLossRate;
+ int rtpJitterMillis;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaQualityThreshold.aidl b/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaQualityThreshold.aidl
index a448bac..31cf373 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaQualityThreshold.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.ims.media/current/android/hardware/radio/ims/media/MediaQualityThreshold.aidl
@@ -34,10 +34,11 @@
package android.hardware.radio.ims.media;
@VintfStability
parcelable MediaQualityThreshold {
- int rtpInactivityTimerMillis;
+ int[] rtpInactivityTimerMillis;
int rtcpInactivityTimerMillis;
int rtpPacketLossDurationMillis;
- int rtpPacketLossRate;
- int jitterDurationMillis;
- int rtpJitterMillis;
+ int rtpHysteresisTimeInMillis;
+ int[] rtpPacketLossRate;
+ int[] rtpJitterMillis;
+ boolean notifyCurrentStatus;
}
diff --git a/radio/aidl/android/hardware/radio/ims/media/IImsMediaSession.aidl b/radio/aidl/android/hardware/radio/ims/media/IImsMediaSession.aidl
index a8d2161..ec2fa2b 100644
--- a/radio/aidl/android/hardware/radio/ims/media/IImsMediaSession.aidl
+++ b/radio/aidl/android/hardware/radio/ims/media/IImsMediaSession.aidl
@@ -17,7 +17,6 @@
package android.hardware.radio.ims.media;
import android.hardware.radio.ims.media.IImsMediaSessionListener;
-import android.hardware.radio.ims.media.MediaProtocolType;
import android.hardware.radio.ims.media.MediaQualityThreshold;
import android.hardware.radio.ims.media.RtpConfig;
import android.hardware.radio.ims.media.RtpError;
diff --git a/radio/aidl/android/hardware/radio/ims/media/IImsMediaSessionListener.aidl b/radio/aidl/android/hardware/radio/ims/media/IImsMediaSessionListener.aidl
index d1501fe..8341da2 100644
--- a/radio/aidl/android/hardware/radio/ims/media/IImsMediaSessionListener.aidl
+++ b/radio/aidl/android/hardware/radio/ims/media/IImsMediaSessionListener.aidl
@@ -17,7 +17,7 @@
package android.hardware.radio.ims.media;
import android.hardware.radio.ims.media.CallQuality;
-import android.hardware.radio.ims.media.MediaProtocolType;
+import android.hardware.radio.ims.media.MediaQualityStatus;
import android.hardware.radio.ims.media.RtpConfig;
import android.hardware.radio.ims.media.RtpError;
import android.hardware.radio.ims.media.RtpHeaderExtension;
@@ -59,28 +59,12 @@
void onHeaderExtensionReceived(in List<RtpHeaderExtension> extensions);
/**
- * Notifies media inactivity observed as per thresholds set by
- * setMediaQualityThreshold() API
+ * Notifies when the measured media quality crosses at least one of
+ * {@link MediaQualityThreshold} set by {@link IImsMediaSession#setMediaQualityThreshold()}.
*
- * @param packetType either RTP or RTCP
+ * @param quality The object of MediaQualityStatus with the rtp and the rtcp statistics.
*/
- void notifyMediaInactivity(MediaProtocolType packetType);
-
- /**
- * Notifies RTP packet loss observed as per thresholds set by
- * setMediaQualityThreshold() API
- *
- * @param packetLossPercentage percentage of packet loss calculated over the duration
- */
- void notifyPacketLoss(int packetLossPercentage);
-
- /**
- * Notifies RTP jitter observed as per thresholds set by
- * IImsMediaSession#setMediaQualityThreshold() API
- *
- * @param jitter jitter of the RTP packets in milliseconds calculated over the duration
- */
- void notifyJitter(int jitter);
+ void notifyMediaQualityStatus(in MediaQualityStatus quality);
/**
* The modem RTP stack fires this API to query whether the desired bitrate mentioned
diff --git a/radio/aidl/android/hardware/radio/ims/media/MediaProtocolType.aidl b/radio/aidl/android/hardware/radio/ims/media/MediaProtocolType.aidl
deleted file mode 100644
index 325c6fa..0000000
--- a/radio/aidl/android/hardware/radio/ims/media/MediaProtocolType.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2021 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.
- */
-
-package android.hardware.radio.ims.media;
-
-@VintfStability
-@Backing(type="int")
-enum MediaProtocolType {
- /** Real Time Protocol, see RFC 3550 */
- RTP = 0,
- /** Real Time Control Protocol, see RFC 3550 */
- RTCP = 1,
-}
diff --git a/radio/aidl/android/hardware/radio/ims/media/MediaQualityStatus.aidl b/radio/aidl/android/hardware/radio/ims/media/MediaQualityStatus.aidl
new file mode 100644
index 0000000..b99e501
--- /dev/null
+++ b/radio/aidl/android/hardware/radio/ims/media/MediaQualityStatus.aidl
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+
+package android.hardware.radio.ims.media;
+
+@VintfStability
+parcelable MediaQualityStatus {
+ /**
+ * Rtp inactivity observed as per threshold set by
+ * {@link IImsMediaSession#setMediaQualityThreshold()}
+ */
+ int rtpInactivityTimeMillis;
+ /**
+ * Rtcp inactivity observed as per threshold set by
+ * {@link IImsMediaSession#setMediaQualityThreshold()}
+ */
+ int rtcpInactivityTimeMillis;
+ /**
+ * Rtp packet loss rate observed as per threshold set by
+ * {@link IImsMediaSession#setMediaQualityThreshold()}
+ */
+ int rtpPacketLossRate;
+ /**
+ * Rtp jitter observed as per threshold set by
+ * {@link IImsMediaSession#setMediaQualityThreshold()}
+ */
+ int rtpJitterMillis;
+}
diff --git a/radio/aidl/android/hardware/radio/ims/media/MediaQualityThreshold.aidl b/radio/aidl/android/hardware/radio/ims/media/MediaQualityThreshold.aidl
index 946bd5c..bf98928 100644
--- a/radio/aidl/android/hardware/radio/ims/media/MediaQualityThreshold.aidl
+++ b/radio/aidl/android/hardware/radio/ims/media/MediaQualityThreshold.aidl
@@ -18,19 +18,36 @@
@VintfStability
parcelable MediaQualityThreshold {
- /** Timer in milliseconds for monitoring RTP inactivity */
- int rtpInactivityTimerMillis;
+ /** Array including threshold values in milliseconds for monitoring RTP inactivity */
+ int[] rtpInactivityTimerMillis;
/** Timer in milliseconds for monitoring RTCP inactivity */
int rtcpInactivityTimerMillis;
- /** Duration in milliseconds for monitoring the RTP packet loss rate */
+ /**
+ * This value determines the size of the time window (in milliseconds)
+ * required to calculate the packet loss rate per second for the manner of
+ * smoothly monitoring changes in the packet loss rate value.
+ */
int rtpPacketLossDurationMillis;
/**
- * Packet loss rate in percentage of (total number of packets lost) /
- * (total number of packets expected) during rtpPacketLossDurationMs
+ * The threshold hysteresis time for packet loss and jitter. This has a goal to prevent
+ * frequent ping-pong notification. So whenever a notifier needs to report the cross of
+ * threshold in opposite direction, this hysteresis timer should be respected.
*/
- int rtpPacketLossRate;
- /** Duration in milliseconds for monitoring the jitter for RTP traffic */
- int jitterDurationMillis;
- /** RTP jitter threshold in milliseconds */
- int rtpJitterMillis;
+ int rtpHysteresisTimeInMillis;
+ /**
+ * Array including threshold values of Packet loss rate in percentage of
+ * (total number of packets lost) / (total number of packets expected) calculated
+ * every one sec with the packet received in rtpPacketLossDurationMillis.
+ */
+ int[] rtpPacketLossRate;
+
+ /** Array including threshold values in milliseconds for RTP jitter */
+ int[] rtpJitterMillis;
+
+ /**
+ * A flag indicating whether the client needs to be notified the current media quality status
+ * right after the threshold is being set. True means the media stack should notify the client
+ * of the current status.
+ */
+ boolean notifyCurrentStatus;
}