summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChung-yih Wang <cywang@google.com>2010-03-16 11:01:12 +0800
committerChung-yih Wang <cywang@google.com>2010-03-16 14:43:33 +0800
commitf9b135f5168c23ec1e62dab7619a3647326bf7f9 (patch)
tree2d047f58230bf5e9d8abc13f25b71f4d3e92c42c
parent532000813aec1db7fca614b28384295be9239470 (diff)
downloadnist-sip-f9b135f5168c23ec1e62dab7619a3647326bf7f9.tar.gz
+Add Mic gain
+Add ringing and vibrating for incoming call. Change-Id: I7a2eda8d9beb1774e5407cdd0882d0c7a35423cb
-rw-r--r--src/com/android/sip/SipMain.java28
-rw-r--r--src/com/android/sip/media/AudioStream.java17
-rw-r--r--src/com/android/sip/media/G711Codec.java3
3 files changed, 47 insertions, 1 deletions
diff --git a/src/com/android/sip/SipMain.java b/src/com/android/sip/SipMain.java
index b3b62b4..595217c 100644
--- a/src/com/android/sip/SipMain.java
+++ b/src/com/android/sip/SipMain.java
@@ -20,18 +20,23 @@ import com.android.sip.media.AudioStream;
import android.content.Context;
import android.media.AudioManager;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
import android.net.sip.SdpSessionDescription;
import android.net.sip.SessionDescription;
import android.net.sip.SipProfile;
import android.net.sip.SipSession;
import android.net.sip.SipSessionLayer;
import android.net.sip.SipSessionListener;
+import android.net.Uri;
import android.os.Bundle;
+import android.os.Vibrator;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceClickListener;
+import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
@@ -67,6 +72,7 @@ public class SipMain extends PreferenceActivity
private SipSession mSipSession;
private SipSession mSipCallSession;
private AudioStream mAudio;
+ private Ringtone mRingtone;
private DatagramSocket mMediaSocket;
private boolean mHolding = false;
@@ -186,6 +192,7 @@ public class SipMain extends PreferenceActivity
Log.e(TAG, "createSessionDescription()", e);
}
setCallStatus();
+ startRinging();
}
public void onRingingBack(SipSession session) {
@@ -200,6 +207,7 @@ public class SipMain extends PreferenceActivity
new SdpSessionDescription(sessionDescription);
Log.v(TAG, "sip call established: " + session + ": " + sd);
startAudioCall(sd);
+ stopRinging();
} catch (SdpException e) {
Log.e(TAG, "createSessionDescription()", e);
}
@@ -213,6 +221,7 @@ public class SipMain extends PreferenceActivity
mSipCallSession = null;
mHolding = false;
setCallStatus();
+ stopRinging();
}
public void onCallBusy(SipSession session) {
@@ -232,6 +241,7 @@ public class SipMain extends PreferenceActivity
Log.v(TAG, "sip session error: " + e);
mHolding = false;
setCallStatus();
+ stopRinging();
}
public void onRegistrationDone(SipSession session) {
@@ -382,6 +392,24 @@ public class SipMain extends PreferenceActivity
});
}
+ private void stopRinging() {
+ Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+ v.cancel();
+ if (mRingtone != null) mRingtone.stop();
+ }
+
+ private void startRinging() {
+ long[] vibratePattern = {0,1000,1000};
+ Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+ v.vibrate(vibratePattern,1);
+ AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+ if (am.getStreamVolume(AudioManager.STREAM_RING) > 0) {
+ String sRingtone = Settings.System.DEFAULT_RINGTONE_URI.toString();
+ mRingtone = RingtoneManager.getRingtone(this, Uri.parse(sRingtone));
+ mRingtone.play();
+ }
+ }
+
private void setInCallMode() {
AudioManager am =
(AudioManager) getSystemService(Context.AUDIO_SERVICE);
diff --git a/src/com/android/sip/media/AudioStream.java b/src/com/android/sip/media/AudioStream.java
index 4eaf7d4..fcc7a16 100644
--- a/src/com/android/sip/media/AudioStream.java
+++ b/src/com/android/sip/media/AudioStream.java
@@ -259,6 +259,20 @@ public class AudioStream {
new Thread(this).start();
}
+ void adjustMicGain(short[] buf, int len, int factor) {
+ int i,j;
+ for (i = 0; i < len; i++) {
+ j = buf[i];
+ if (j > 32768/factor) {
+ buf[i] = 32767;
+ } else if (j < -(32768/factor)) {
+ buf[i] = -32767;
+ } else {
+ buf[i] = (short)(factor*j);
+ }
+ }
+ }
+
public void run() {
Encoder encoder = new G711Codec();
int recordBufferSize = encoder.getSampleCount(mFrameSize);
@@ -288,6 +302,9 @@ public class AudioStream {
while (mRunning) {
int count = recorder.read(recordBuffer, 0, recordBufferSize);
+ // TODO: remove the mic gain if the issue is fixed on Passion.
+ adjustMicGain(recordBuffer, count, 32);
+
int encodeCount =
encoder.encode(recordBuffer, count, buffer, offset);
try {
diff --git a/src/com/android/sip/media/G711Codec.java b/src/com/android/sip/media/G711Codec.java
index 74fc657..64a419b 100644
--- a/src/com/android/sip/media/G711Codec.java
+++ b/src/com/android/sip/media/G711Codec.java
@@ -73,8 +73,9 @@ public class G711Codec implements Encoder, Decoder {
}
return count;
}
-
+
public int encode(short[] b16, int count, byte[] b8, int offset) {
+
for (int i = 0, j = offset; i < count; i++, j++) {
b8[j] = table12to8[(b16[i] & 0xffff) >> 4];
}