1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17 package android.telephony.ims; 18 19 import android.annotation.SystemApi; 20 import android.os.Parcel; 21 import android.os.Parcelable; 22 23 /** 24 * Parcelable object to handle IMS stream media profile. 25 * It provides the media direction, quality of audio and/or video. 26 * 27 * @hide 28 */ 29 @SystemApi 30 public final class ImsStreamMediaProfile implements Parcelable { 31 private static final String TAG = "ImsStreamMediaProfile"; 32 33 /** 34 * Media directions 35 */ 36 public static final int DIRECTION_INVALID = (-1); 37 public static final int DIRECTION_INACTIVE = 0; 38 public static final int DIRECTION_RECEIVE = 1; 39 public static final int DIRECTION_SEND = 2; 40 public static final int DIRECTION_SEND_RECEIVE = 3; 41 42 /** 43 * Audio information 44 */ 45 public static final int AUDIO_QUALITY_NONE = 0; 46 public static final int AUDIO_QUALITY_AMR = 1; 47 public static final int AUDIO_QUALITY_AMR_WB = 2; 48 public static final int AUDIO_QUALITY_QCELP13K = 3; 49 public static final int AUDIO_QUALITY_EVRC = 4; 50 public static final int AUDIO_QUALITY_EVRC_B = 5; 51 public static final int AUDIO_QUALITY_EVRC_WB = 6; 52 public static final int AUDIO_QUALITY_EVRC_NW = 7; 53 public static final int AUDIO_QUALITY_GSM_EFR = 8; 54 public static final int AUDIO_QUALITY_GSM_FR = 9; 55 public static final int AUDIO_QUALITY_GSM_HR = 10; 56 public static final int AUDIO_QUALITY_G711U = 11; 57 public static final int AUDIO_QUALITY_G723 = 12; 58 public static final int AUDIO_QUALITY_G711A = 13; 59 public static final int AUDIO_QUALITY_G722 = 14; 60 public static final int AUDIO_QUALITY_G711AB = 15; 61 public static final int AUDIO_QUALITY_G729 = 16; 62 public static final int AUDIO_QUALITY_EVS_NB = 17; 63 public static final int AUDIO_QUALITY_EVS_WB = 18; 64 public static final int AUDIO_QUALITY_EVS_SWB = 19; 65 public static final int AUDIO_QUALITY_EVS_FB = 20; 66 67 /** 68 * Video information 69 */ 70 public static final int VIDEO_QUALITY_NONE = 0; 71 public static final int VIDEO_QUALITY_QCIF = (1 << 0); 72 public static final int VIDEO_QUALITY_QVGA_LANDSCAPE = (1 << 1); 73 public static final int VIDEO_QUALITY_QVGA_PORTRAIT = (1 << 2); 74 public static final int VIDEO_QUALITY_VGA_LANDSCAPE = (1 << 3); 75 public static final int VIDEO_QUALITY_VGA_PORTRAIT = (1 << 4); 76 77 /** 78 * RTT Modes 79 */ 80 public static final int RTT_MODE_DISABLED = 0; 81 public static final int RTT_MODE_FULL = 1; 82 83 // Audio related information 84 /** @hide */ 85 public int mAudioQuality; 86 /** @hide */ 87 public int mAudioDirection; 88 // Video related information 89 /** @hide */ 90 public int mVideoQuality; 91 /** @hide */ 92 public int mVideoDirection; 93 // Rtt related information 94 /** @hide */ 95 public int mRttMode; 96 97 /** @hide */ ImsStreamMediaProfile(Parcel in)98 public ImsStreamMediaProfile(Parcel in) { 99 readFromParcel(in); 100 } 101 102 /** 103 * Constructor. 104 * 105 * @param audioQuality The audio quality. Can be one of the following: 106 * {@link #AUDIO_QUALITY_AMR}, 107 * {@link #AUDIO_QUALITY_AMR_WB}, 108 * {@link #AUDIO_QUALITY_QCELP13K}, 109 * {@link #AUDIO_QUALITY_EVRC}, 110 * {@link #AUDIO_QUALITY_EVRC_B}, 111 * {@link #AUDIO_QUALITY_EVRC_WB}, 112 * {@link #AUDIO_QUALITY_EVRC_NW}, 113 * {@link #AUDIO_QUALITY_GSM_EFR}, 114 * {@link #AUDIO_QUALITY_GSM_FR}, 115 * {@link #AUDIO_QUALITY_GSM_HR}, 116 * {@link #AUDIO_QUALITY_G711U}, 117 * {@link #AUDIO_QUALITY_G723}, 118 * {@link #AUDIO_QUALITY_G711A}, 119 * {@link #AUDIO_QUALITY_G722}, 120 * {@link #AUDIO_QUALITY_G711AB}, 121 * {@link #AUDIO_QUALITY_G729}, 122 * {@link #AUDIO_QUALITY_EVS_NB}, 123 * {@link #AUDIO_QUALITY_EVS_WB}, 124 * {@link #AUDIO_QUALITY_EVS_SWB}, 125 * {@link #AUDIO_QUALITY_EVS_FB}, 126 * @param audioDirection The audio direction. Can be one of the following: 127 * {@link #DIRECTION_INVALID}, 128 * {@link #DIRECTION_INACTIVE}, 129 * {@link #DIRECTION_RECEIVE}, 130 * {@link #DIRECTION_SEND}, 131 * {@link #DIRECTION_SEND_RECEIVE}, 132 * @param videoQuality The video quality. Can be one of the following: 133 * {@link #VIDEO_QUALITY_NONE}, 134 * {@link #VIDEO_QUALITY_QCIF}, 135 * {@link #VIDEO_QUALITY_QVGA_LANDSCAPE}, 136 * {@link #VIDEO_QUALITY_QVGA_PORTRAIT}, 137 * {@link #VIDEO_QUALITY_VGA_LANDSCAPE}, 138 * {@link #VIDEO_QUALITY_VGA_PORTRAIT}, 139 * @param videoDirection The video direction. Can be one of the following: 140 * {@link #DIRECTION_INVALID}, 141 * {@link #DIRECTION_INACTIVE}, 142 * {@link #DIRECTION_RECEIVE}, 143 * {@link #DIRECTION_SEND}, 144 * {@link #DIRECTION_SEND_RECEIVE}, 145 * @param rttMode The rtt mode. Can be one of the following: 146 * {@link #RTT_MODE_DISABLED}, 147 * {@link #RTT_MODE_FULL} 148 */ ImsStreamMediaProfile(int audioQuality, int audioDirection, int videoQuality, int videoDirection, int rttMode)149 public ImsStreamMediaProfile(int audioQuality, int audioDirection, 150 int videoQuality, int videoDirection, int rttMode) { 151 mAudioQuality = audioQuality; 152 mAudioDirection = audioDirection; 153 mVideoQuality = videoQuality; 154 mVideoDirection = videoDirection; 155 mRttMode = rttMode; 156 } 157 158 /** @hide */ ImsStreamMediaProfile()159 public ImsStreamMediaProfile() { 160 mAudioQuality = AUDIO_QUALITY_NONE; 161 mAudioDirection = DIRECTION_SEND_RECEIVE; 162 mVideoQuality = VIDEO_QUALITY_NONE; 163 mVideoDirection = DIRECTION_INVALID; 164 mRttMode = RTT_MODE_DISABLED; 165 } 166 167 /** @hide */ ImsStreamMediaProfile(int audioQuality, int audioDirection, int videoQuality, int videoDirection)168 public ImsStreamMediaProfile(int audioQuality, int audioDirection, 169 int videoQuality, int videoDirection) { 170 mAudioQuality = audioQuality; 171 mAudioDirection = audioDirection; 172 mVideoQuality = videoQuality; 173 mVideoDirection = videoDirection; 174 } 175 176 /** @hide */ ImsStreamMediaProfile(int rttMode)177 public ImsStreamMediaProfile(int rttMode) { 178 mRttMode = rttMode; 179 } 180 copyFrom(ImsStreamMediaProfile profile)181 public void copyFrom(ImsStreamMediaProfile profile) { 182 mAudioQuality = profile.mAudioQuality; 183 mAudioDirection = profile.mAudioDirection; 184 mVideoQuality = profile.mVideoQuality; 185 mVideoDirection = profile.mVideoDirection; 186 mRttMode = profile.mRttMode; 187 } 188 189 @Override toString()190 public String toString() { 191 return "{ audioQuality=" + mAudioQuality + 192 ", audioDirection=" + mAudioDirection + 193 ", videoQuality=" + mVideoQuality + 194 ", videoDirection=" + mVideoDirection + 195 ", rttMode=" + mRttMode + " }"; 196 } 197 198 @Override describeContents()199 public int describeContents() { 200 return 0; 201 } 202 203 @Override writeToParcel(Parcel out, int flags)204 public void writeToParcel(Parcel out, int flags) { 205 out.writeInt(mAudioQuality); 206 out.writeInt(mAudioDirection); 207 out.writeInt(mVideoQuality); 208 out.writeInt(mVideoDirection); 209 out.writeInt(mRttMode); 210 } 211 readFromParcel(Parcel in)212 private void readFromParcel(Parcel in) { 213 mAudioQuality = in.readInt(); 214 mAudioDirection = in.readInt(); 215 mVideoQuality = in.readInt(); 216 mVideoDirection = in.readInt(); 217 mRttMode = in.readInt(); 218 } 219 220 public static final Creator<ImsStreamMediaProfile> CREATOR = 221 new Creator<ImsStreamMediaProfile>() { 222 @Override 223 public ImsStreamMediaProfile createFromParcel(Parcel in) { 224 return new ImsStreamMediaProfile(in); 225 } 226 227 @Override 228 public ImsStreamMediaProfile[] newArray(int size) { 229 return new ImsStreamMediaProfile[size]; 230 } 231 }; 232 233 /** 234 * Determines if it's RTT call 235 * @return true if RTT call, false otherwise. 236 */ isRttCall()237 public boolean isRttCall() { 238 return (mRttMode == RTT_MODE_FULL); 239 } 240 241 /** 242 * Updates the RttCall attribute 243 */ setRttMode(int rttMode)244 public void setRttMode(int rttMode) { 245 mRttMode = rttMode; 246 } 247 getAudioQuality()248 public int getAudioQuality() { 249 return mAudioQuality; 250 } 251 getAudioDirection()252 public int getAudioDirection() { 253 return mAudioDirection; 254 } 255 getVideoQuality()256 public int getVideoQuality() { 257 return mVideoQuality; 258 } 259 getVideoDirection()260 public int getVideoDirection() { 261 return mVideoDirection; 262 } 263 getRttMode()264 public int getRttMode() { 265 return mRttMode; 266 } 267 } 268