am afa583e6: SipAudioCall: expose startAudio()

Merge commit 'afa583e6557557577188c3e40146ac8d6f2aa7c7' into gingerbread-plus-aosp

* commit 'afa583e6557557577188c3e40146ac8d6f2aa7c7':
  SipAudioCall: expose startAudio()
This commit is contained in:
Hung-ying Tyan
2010-09-17 01:01:07 -07:00
committed by Android Git Automerger
3 changed files with 75 additions and 63 deletions

View File

@@ -626,6 +626,7 @@ public class SipPhone extends SipPhoneBase {
if (newState == Call.State.INCOMING) { if (newState == Call.State.INCOMING) {
setState(mOwner.getState()); // INCOMING or WAITING setState(mOwner.getState()); // INCOMING or WAITING
} else { } else {
if (newState == Call.State.ACTIVE) call.startAudio();
setState(newState); setState(newState);
} }
mOwner.onConnectionStateChanged(SipConnection.this); mOwner.onConnectionStateChanged(SipConnection.this);

View File

@@ -153,7 +153,7 @@ public interface SipAudioCall {
void setListener(Listener listener, boolean callbackImmediately); void setListener(Listener listener, boolean callbackImmediately);
/** /**
* Closes this object. The object is not usable after being closed. * Closes this object. This object is not usable after being closed.
*/ */
void close(); void close();
@@ -171,6 +171,12 @@ public interface SipAudioCall {
void makeCall(SipProfile callee, SipManager sipManager, int timeout) void makeCall(SipProfile callee, SipManager sipManager, int timeout)
throws SipException; throws SipException;
/**
* Starts the audio for the established call. This method should be called
* after {@link Listener#onCallEstablished} is called.
*/
void startAudio();
/** /**
* Attaches an incoming call to this call object. * Attaches an incoming call to this call object.
* *

View File

@@ -37,6 +37,7 @@ import android.util.Log;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.ParseException; import java.text.ParseException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@@ -239,24 +240,18 @@ public class SipAudioCallImpl extends SipSessionAdapter
} }
} }
private synchronized void establishCall(String sessionDescription) {
stopRingbackTone();
stopRinging();
try {
SdpSessionDescription sd =
new SdpSessionDescription(sessionDescription);
Log.d(TAG, "sip call established: " + sd);
startCall(sd);
mInCall = true;
} catch (SdpException e) {
Log.e(TAG, "createSessionDescription()", e);
}
}
@Override @Override
public void onCallEstablished(ISipSession session, public void onCallEstablished(ISipSession session,
String sessionDescription) { String sessionDescription) {
establishCall(sessionDescription); stopRingbackTone();
stopRinging();
try {
mPeerSd = new SdpSessionDescription(sessionDescription);
Log.d(TAG, "sip call established: " + mPeerSd);
} catch (SdpException e) {
Log.e(TAG, "createSessionDescription()", e);
}
Listener listener = mListener; Listener listener = mListener;
if (listener != null) { if (listener != null) {
try { try {
@@ -609,10 +604,23 @@ public class SipAudioCallImpl extends SipSessionAdapter
return copies; return copies;
} }
private void startCall(SdpSessionDescription peerSd) { public void startAudio() {
try {
startAudioInternal();
} catch (UnknownHostException e) {
onError(mSipSession, SipErrorCode.PEER_NOT_REACHABLE.toString(),
e.getMessage());
} catch (Throwable e) {
onError(mSipSession, SipErrorCode.CLIENT_ERROR.toString(),
e.getMessage());
}
}
private synchronized void startAudioInternal() throws UnknownHostException {
stopCall(DONT_RELEASE_SOCKET); stopCall(DONT_RELEASE_SOCKET);
mInCall = true;
SdpSessionDescription peerSd = mPeerSd;
if (isWifiOn()) grabWifiHighPerfLock(); if (isWifiOn()) grabWifiHighPerfLock();
mPeerSd = peerSd;
String peerMediaAddress = peerSd.getPeerMediaAddress(AUDIO); String peerMediaAddress = peerSd.getPeerMediaAddress(AUDIO);
// TODO: handle multiple media fields // TODO: handle multiple media fields
int peerMediaPort = peerSd.getPeerMediaPort(AUDIO); int peerMediaPort = peerSd.getPeerMediaPort(AUDIO);
@@ -621,7 +629,7 @@ public class SipAudioCallImpl extends SipSessionAdapter
int localPort = getLocalMediaPort(); int localPort = getLocalMediaPort();
int sampleRate = 8000; int sampleRate = 8000;
int frameSize = sampleRate / 50; // 160 int frameSize = sampleRate / 50; // 160
try {
// TODO: get sample rate from sdp // TODO: get sample rate from sdp
mCodec = getCodec(peerSd); mCodec = getCodec(peerSd);
@@ -671,9 +679,6 @@ public class SipAudioCallImpl extends SipSessionAdapter
audioGroup.setMode(AudioGroup.MODE_NORMAL); audioGroup.setMode(AudioGroup.MODE_NORMAL);
} }
} }
} catch (Exception e) {
Log.e(TAG, "call()", e);
}
} }
private void stopCall(boolean releaseSocket) { private void stopCall(boolean releaseSocket) {