diff options
author | Chung-yih Wang <cywang@google.com> | 2010-03-16 11:01:12 +0800 |
---|---|---|
committer | Chung-yih Wang <cywang@google.com> | 2010-03-16 14:43:33 +0800 |
commit | f9b135f5168c23ec1e62dab7619a3647326bf7f9 (patch) | |
tree | 2d047f58230bf5e9d8abc13f25b71f4d3e92c42c | |
parent | 532000813aec1db7fca614b28384295be9239470 (diff) | |
download | nist-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.java | 28 | ||||
-rw-r--r-- | src/com/android/sip/media/AudioStream.java | 17 | ||||
-rw-r--r-- | src/com/android/sip/media/G711Codec.java | 3 |
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]; } |