From cb9f895d0b71f74322518baee08508cfaaaa6b74 Mon Sep 17 00:00:00 2001 From: bodamnam Date: Thu, 19 Jan 2023 12:33:32 +0000 Subject: Implementation MediaQualityStatus notification Modify setMediaQualityThreshold to use Integer array parameters Modify notifyMediaInactivity, notifyJitter, notifyPacketLoss to single callback Bug: 255862778 Test: atest ImsMediaJavaUnitTests, verified with loopback test using ImsMediaTestingApp Change-Id: If28ab6513fba2194cdd7b9e849d31468cfe776e6 --- .../android/telephony/imsmedia/AudioListener.java | 11 +++-- .../telephony/imsmedia/AudioOffloadListener.java | 18 ++------ .../android/telephony/imsmedia/AudioSession.java | 45 +++++--------------- .../src/com/android/telephony/imsmedia/Utils.java | 48 ++++++++++++++++++---- 4 files changed, 61 insertions(+), 61 deletions(-) (limited to 'service') diff --git a/service/src/com/android/telephony/imsmedia/AudioListener.java b/service/src/com/android/telephony/imsmedia/AudioListener.java index cbdc84e4..738f4083 100644 --- a/service/src/com/android/telephony/imsmedia/AudioListener.java +++ b/service/src/com/android/telephony/imsmedia/AudioListener.java @@ -20,6 +20,7 @@ import android.os.Handler; import android.os.Parcel; import android.telephony.CallQuality; import android.telephony.imsmedia.AudioConfig; +import android.telephony.imsmedia.MediaQualityStatus; import android.util.Log; /** @@ -92,10 +93,12 @@ public class AudioListener implements JNIImsMediaListener { case AudioSession.EVENT_RTP_HEADER_EXTENSION_IND: Utils.sendMessage(mHandler, event); break; - case AudioSession.EVENT_MEDIA_INACTIVITY_IND: - case AudioSession.EVENT_PACKET_LOSS_IND: - case AudioSession.EVENT_JITTER_IND: - Utils.sendMessage(mHandler, event, parcel.readInt(), Utils.UNUSED); + case AudioSession.EVENT_MEDIA_QUALITY_STATUS_IND: + { + final MediaQualityStatus status = + MediaQualityStatus.CREATOR.createFromParcel(parcel); + Utils.sendMessage(mHandler, event, status); + } break; case AudioSession.EVENT_TRIGGER_ANBR_QUERY_IND: final AudioConfig configAnbr = AudioConfig.CREATOR.createFromParcel(parcel); diff --git a/service/src/com/android/telephony/imsmedia/AudioOffloadListener.java b/service/src/com/android/telephony/imsmedia/AudioOffloadListener.java index 62a32eae..f72e424e 100644 --- a/service/src/com/android/telephony/imsmedia/AudioOffloadListener.java +++ b/service/src/com/android/telephony/imsmedia/AudioOffloadListener.java @@ -18,6 +18,7 @@ package com.android.telephony.imsmedia; import android.hardware.radio.ims.media.CallQuality; import android.hardware.radio.ims.media.IImsMediaSessionListener; +import android.hardware.radio.ims.media.MediaQualityStatus; import android.hardware.radio.ims.media.RtpConfig; import android.hardware.radio.ims.media.RtpHeaderExtension; import android.os.Handler; @@ -62,20 +63,9 @@ final class AudioOffloadListener extends IImsMediaSessionListener.Stub { } @Override - public void notifyMediaInactivity(int packetType) { - Utils.sendMessage(handler, AudioSession.EVENT_MEDIA_INACTIVITY_IND, - packetType, Utils.UNUSED); - } - - @Override - public void notifyPacketLoss(int packetLossPercentage) { - Utils.sendMessage(handler, AudioSession.EVENT_PACKET_LOSS_IND, - packetLossPercentage, Utils.UNUSED); - } - - @Override - public void notifyJitter(int jitter) { - Utils.sendMessage(handler, AudioSession.EVENT_JITTER_IND, jitter, Utils.UNUSED); + public void notifyMediaQualityStatus(MediaQualityStatus status) { + Utils.sendMessage(handler, AudioSession.EVENT_MEDIA_QUALITY_STATUS_IND, + Utils.convertMediaQualityStatus(status)); } @Override diff --git a/service/src/com/android/telephony/imsmedia/AudioSession.java b/service/src/com/android/telephony/imsmedia/AudioSession.java index 78ab75d4..603780c2 100644 --- a/service/src/com/android/telephony/imsmedia/AudioSession.java +++ b/service/src/com/android/telephony/imsmedia/AudioSession.java @@ -27,6 +27,7 @@ import android.telephony.ims.RtpHeaderExtension; import android.telephony.imsmedia.AudioConfig; import android.telephony.imsmedia.IImsAudioSession; import android.telephony.imsmedia.IImsAudioSessionCallback; +import android.telephony.imsmedia.MediaQualityStatus; import android.telephony.imsmedia.MediaQualityThreshold; import android.util.Log; @@ -64,13 +65,11 @@ public final class AudioSession extends IImsAudioSession.Stub implements IMediaS public static final int EVENT_CONFIRM_CONFIG_RESPONSE = 205; public static final int EVENT_FIRST_MEDIA_PACKET_IND = 206; public static final int EVENT_RTP_HEADER_EXTENSION_IND = 207; - public static final int EVENT_MEDIA_INACTIVITY_IND = 208; - public static final int EVENT_PACKET_LOSS_IND = 209; - public static final int EVENT_JITTER_IND = 210; - public static final int EVENT_TRIGGER_ANBR_QUERY_IND = 211; - public static final int EVENT_DTMF_RECEIVED_IND = 212; - public static final int EVENT_CALL_QUALITY_CHANGE_IND = 213; - public static final int EVENT_SESSION_CLOSED = 214; + public static final int EVENT_MEDIA_QUALITY_STATUS_IND = 208; + public static final int EVENT_TRIGGER_ANBR_QUERY_IND = 209; + public static final int EVENT_DTMF_RECEIVED_IND = 210; + public static final int EVENT_CALL_QUALITY_CHANGE_IND = 211; + public static final int EVENT_SESSION_CLOSED = 212; private static final int DTMF_DEFAULT_DURATION = 140; @@ -296,14 +295,8 @@ public final class AudioSession extends IImsAudioSession.Stub implements IMediaS case EVENT_RTP_HEADER_EXTENSION_IND: handleRtpHeaderExtensionInd((List)msg.obj); break; - case EVENT_MEDIA_INACTIVITY_IND: - notifyMediaInactivityInd(msg.arg1); - break; - case EVENT_PACKET_LOSS_IND: - notifyPacketLossInd(msg.arg1); - break; - case EVENT_JITTER_IND: - notifyJitterInd(msg.arg1); + case EVENT_MEDIA_QUALITY_STATUS_IND: + handleNotifyMediaQualityStatus((MediaQualityStatus) msg.obj); break; case EVENT_TRIGGER_ANBR_QUERY_IND: handleTriggerAnbrQuery((AudioConfig) msg.obj); @@ -509,29 +502,13 @@ public final class AudioSession extends IImsAudioSession.Stub implements IMediaS } } - private void notifyMediaInactivityInd(int packetType) { - try { - mCallback.notifyMediaInactivity(packetType); - } catch (RemoteException e) { - Log.e(TAG, "Failed to notify media timeout: " + e); - } - - } - - private void notifyPacketLossInd(int percentage) { + private void handleNotifyMediaQualityStatus(MediaQualityStatus status) { try { - mCallback.notifyPacketLoss(percentage); + mCallback.notifyMediaQualityStatus(status); } catch (RemoteException e) { - Log.e(TAG, "Failed to notify packet loss: " + e); + Log.e(TAG, "Failed to notify media quality status: " + e); } - } - private void notifyJitterInd(int jitter) { - try { - mCallback.notifyJitter(jitter); - } catch (RemoteException e) { - Log.e(TAG, "Failed to notify jitter: " + e); - } } private void handleTriggerAnbrQuery(AudioConfig config) { diff --git a/service/src/com/android/telephony/imsmedia/Utils.java b/service/src/com/android/telephony/imsmedia/Utils.java index 38b2ba0a..651413b5 100644 --- a/service/src/com/android/telephony/imsmedia/Utils.java +++ b/service/src/com/android/telephony/imsmedia/Utils.java @@ -30,6 +30,7 @@ import android.telephony.ims.RtpHeaderExtension; import android.telephony.imsmedia.AmrParams; import android.telephony.imsmedia.AudioConfig; import android.telephony.imsmedia.EvsParams; +import android.telephony.imsmedia.MediaQualityStatus; import android.telephony.imsmedia.MediaQualityThreshold; import android.telephony.imsmedia.RtcpConfig; import android.telephony.imsmedia.RtpConfig; @@ -37,6 +38,7 @@ import android.telephony.imsmedia.RtpConfig; import com.android.telephony.imsmedia.ImsMediaController.OpenSessionCallback; import java.net.InetSocketAddress; +import java.util.Arrays; /** * Class consists of utility methods and sub classes @@ -214,6 +216,18 @@ public final class Utils { return rtpConfig; } + /** Converts {@link MediaQuailtyStatus} to HAL MediaQuailtyStatus */ + public static android.hardware.radio.ims.media.MediaQualityStatus + convertToHalMediaQualityStatus(final MediaQualityStatus status) { + final android.hardware.radio.ims.media.MediaQualityStatus halStatus = + new android.hardware.radio.ims.media.MediaQualityStatus(); + halStatus.rtpInactivityTimeMillis = status.getRtpInactivityTimeMillis(); + halStatus.rtcpInactivityTimeMillis = status.getRtcpInactivityTimeMillis(); + halStatus.rtpPacketLossRate = status.getRtpPacketLossRate(); + halStatus.rtpJitterMillis = status.getRtpJitterMillis(); + return halStatus; + } + private static RtcpConfig buildRtcpConfig( final android.hardware.radio.ims.media.RtpConfig rtpConfig) { final RtcpConfig rtcpConfig; @@ -352,12 +366,16 @@ public final class Utils { out = null; } else { out = new android.hardware.radio.ims.media.MediaQualityThreshold(); - out.rtpInactivityTimerMillis = in.getRtpInactivityTimerMillis(); + out.rtpInactivityTimerMillis = Arrays.copyOf(in.getRtpInactivityTimerMillis(), + in.getRtpInactivityTimerMillis().length); out.rtcpInactivityTimerMillis = in.getRtcpInactivityTimerMillis(); - out.rtpPacketLossDurationMillis = in.getPacketLossPeriodMillis(); - out.rtpPacketLossRate = in.getPacketLossThreshold(); - out.jitterDurationMillis = in.getJitterPeriodMillis(); - out.rtpJitterMillis = in.getJitterThresholdMillis(); + out.rtpHysteresisTimeInMillis = in.getRtpHysteresisTimeInMillis(); + out.rtpPacketLossDurationMillis = in.getRtpPacketLossDurationMillis(); + out.rtpPacketLossRate = Arrays.copyOf(in.getRtpPacketLossRate(), + in.getRtpPacketLossRate().length); + out.rtpJitterMillis = Arrays.copyOf(in.getRtpJitterMillis(), + in.getRtpJitterMillis().length); + out.notifyCurrentStatus = in.getNotifyCurrentStatus(); } return out; @@ -369,10 +387,22 @@ public final class Utils { return (in == null) ? null : new MediaQualityThreshold.Builder() .setRtpInactivityTimerMillis(in.rtpInactivityTimerMillis) .setRtcpInactivityTimerMillis(in.rtcpInactivityTimerMillis) - .setPacketLossPeriodMillis(in.rtpPacketLossDurationMillis) - .setPacketLossThreshold(in.rtpPacketLossRate) - .setJitterPeriodMillis(in.jitterDurationMillis) - .setJitterThresholdMillis(in.rtpJitterMillis) + .setRtpHysteresisTimeInMillis(in.rtpHysteresisTimeInMillis) + .setRtpPacketLossDurationMillis(in.rtpPacketLossDurationMillis) + .setRtpPacketLossRate(in.rtpPacketLossRate) + .setRtpJitterMillis(in.rtpJitterMillis) + .setNotifyCurrentStatus(in.notifyCurrentStatus) + .build(); + } + + /** Converts HAL MediaQualityStatus to {@link MediaQualityStatus} */ + public static MediaQualityStatus convertMediaQualityStatus( + final android.hardware.radio.ims.media.MediaQualityStatus in) { + return (in == null) ? null : new MediaQualityStatus.Builder() + .setRtpInactivityTimeMillis(in.rtpInactivityTimeMillis) + .setRtcpInactivityTimeMillis(in.rtcpInactivityTimeMillis) + .setRtpPacketLossRate(in.rtpPacketLossRate) + .setRtpJitterMillis(in.rtpJitterMillis) .build(); } -- cgit v1.2.3