diff -r f5a5d9237d69 -r e8d6255306f8 src/org/sipdroid/media/RtpStreamReceiver.java --- a/src/org/sipdroid/media/RtpStreamReceiver.java Sat Jan 23 21:48:58 2010 +0100 +++ b/src/org/sipdroid/media/RtpStreamReceiver.java Sat Jan 23 22:19:43 2010 +0100 @@ -19,18 +19,19 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -package org.sipdroid.media; +package src.org.sipdroid.media; + +import java.io.IOException; +import java.net.SocketException; -import jlibrtp.AppCallerThread; -import jlibrtp.DataFrame; -import jlibrtp.Participant; -import jlibrtp.RTPAppIntf; -import jlibrtp.RTPReceiverThread; -import jlibrtp.RTPSession; +import org.sipdroid.sipua.UserAgent; +import org.sipdroid.sipua.ui.Receiver; +import org.sipdroid.sipua.ui.Sipdroid; +import org.sipdroid.pjlib.Codec; -import org.sipdroid.media.codecs.Codec; -import org.sipdroid.net.tools.DataFramePool; -import org.sipdroid.net.tools.DatagramPool; +import src.org.sipdroid.net.RtpPacket; +import src.org.sipdroid.net.RtpSocket; +import src.org.sipdroid.net.SipdroidSocket; import android.content.ContentResolver; import android.content.Context; @@ -39,6 +40,7 @@ import android.media.AudioManager; import android.media.AudioTrack; import android.media.ToneGenerator; +import android.os.PowerManager; import android.preference.PreferenceManager; import android.provider.Settings; @@ -46,11 +48,14 @@ * RtpStreamReceiver is a generic stream receiver. It receives packets from RTP * and writes them into an OutputStream. */ -public class RtpStreamReceiver extends Thread implements RTPAppIntf{ +public class RtpStreamReceiver extends Thread { /** Whether working in debug mode. */ public static boolean DEBUG = true; + /** Payload type */ + int p_type; + /** Size of the read buffer */ public static final int BUFFER_SIZE = 1024; @@ -58,61 +63,31 @@ public static final int SO_TIMEOUT = 200; /** The RtpSocket */ - RTPSession rtpSession = null; - byte[] buffer; - - /** The codec */ - private Codec codec; - private Context mContext; - - private int frame_size; - private int codec_frame_size; - private int sampling_rate; + RtpSocket rtp_socket = null; /** Whether it is running */ boolean running; AudioManager am; ContentResolver cr; - - private int codec_divider; public static int speakermode; - - short lin[]; - short lin2[]; - int user, server, lserver, luser, cnt, todo, headroom, len, timeout = 1, seq = 0, cnt2 = 0, m = 1, - expseq, getseq, vm = 1, gap, oldvol; - boolean islate; - - Codec.Context codecCtx; - - AudioTrack track; - + /** * Constructs a RtpStreamReceiver. - * @param ctx - * @param remoteAddr * * @param output_stream * the stream sink * @param socket * the local receiver SipdroidSocket */ - public RtpStreamReceiver(Codec ci, RTPSession rtpSession, Context ctx) { - init(ci, rtpSession, ctx); + public RtpStreamReceiver(SipdroidSocket socket, int payload_type) { + init(socket); + p_type = payload_type; } - /** Inits the RtpStreamReceiver - * @param ctx - * @param remoteAddr - **/ - private void init(Codec ci, RTPSession rtpSession, Context ctx) { - this.rtpSession = rtpSession; - codec = ci; - codec_frame_size = codec.getInfo().codecFrameSize; - codec_divider = codec.getInfo().rtpSampleDivider; - frame_size = 160 * codec_divider; - sampling_rate = codec.getInfo().samplingRate; - mContext = ctx; + /** Inits the RtpStreamReceiver */ + private void init(SipdroidSocket socket) { + if (socket != null) + rtp_socket = new RtpSocket(socket); } /** Whether is running */ @@ -124,25 +99,25 @@ public void halt() { running = false; } - + public int speaker(int mode) { int old = speakermode; - + + if (Receiver.headset > 0 && mode == AudioManager.MODE_NORMAL) + return old; saveVolume(); - speakermode = mode; + setMode(speakermode = mode); restoreVolume(); return old; } double smin = 200,s; - - private int REAL_BUFFER_SIZE; public static int nearend; - + void calc(short[] lin,int off,int len) { int i,j; double sm = 30000,r; - + for (i = 0; i < len; i += 5) { j = lin[i+off]; s = 0.03*Math.abs(j) + 0.97*s; @@ -162,30 +137,58 @@ r = (double)len/100000; smin = sm*r + smin*(1-r); } - + + static void setStreamVolume(final int stream,final int vol,final int flags) { + (new Thread() { + public void run() { + AudioManager am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE); + am.setStreamVolume(stream, vol, flags); + if (stream == AudioManager.STREAM_MUSIC) restored = true; + } + }).start(); + } + + static boolean restored; + void restoreVolume() { - am.setStreamVolume(AudioManager.STREAM_MUSIC, - PreferenceManager.getDefaultSharedPreferences(mContext).getInt("volume"+speakermode, - am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)* - (speakermode == AudioManager.MODE_NORMAL?4:3)/4 + switch (am.getMode()) { + case AudioManager.MODE_IN_CALL: + setStreamVolume(AudioManager.STREAM_RING,(int)( + am.getStreamMaxVolume(AudioManager.STREAM_RING)* + org.sipdroid.sipua.ui.Settings.getEarGain()), 0); + track.setStereoVolume(AudioTrack.getMaxVolume()* + org.sipdroid.sipua.ui.Settings.getEarGain() + ,AudioTrack.getMaxVolume()* + org.sipdroid.sipua.ui.Settings.getEarGain()); + break; + case AudioManager.MODE_NORMAL: + track.setStereoVolume(AudioTrack.getMaxVolume(),AudioTrack.getMaxVolume()); + break; + } + setStreamVolume(AudioManager.STREAM_MUSIC, + PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("volume"+speakermode, + am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)* + (speakermode == AudioManager.MODE_NORMAL?4:3)/4 ),0); } - + void saveVolume() { - Editor edit = PreferenceManager.getDefaultSharedPreferences(mContext).edit(); - edit.putInt("volume"+speakermode,am.getStreamVolume(AudioManager.STREAM_MUSIC)); - edit.commit(); + if (restored) { + Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit(); + edit.putInt("volume"+speakermode,am.getStreamVolume(AudioManager.STREAM_MUSIC)); + edit.commit(); + } } - + void saveSettings() { - if (!PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean("oldvalid",false)) { + if (!PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getBoolean("oldvalid",false)) { int oldvibrate = am.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER); int oldvibrate2 = am.getVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION); - if (!PreferenceManager.getDefaultSharedPreferences(mContext).contains("oldvibrate2")) + if (!PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).contains("oldvibrate2")) oldvibrate2 = AudioManager.VIBRATE_SETTING_ON; int oldpolicy = android.provider.Settings.System.getInt(cr, android.provider.Settings.System.WIFI_SLEEP_POLICY, Settings.System.WIFI_SLEEP_POLICY_DEFAULT); - Editor edit = PreferenceManager.getDefaultSharedPreferences(mContext).edit(); + Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit(); edit.putInt("oldvibrate", oldvibrate); edit.putInt("oldvibrate2", oldvibrate2); edit.putInt("oldpolicy", oldpolicy); @@ -194,164 +197,287 @@ edit.commit(); } } + + public static void setMode(int mode) { + Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit(); + edit.putBoolean("setmode", mode != AudioManager.MODE_NORMAL); + edit.commit(); + AudioManager am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE); + am.setMode(mode); + } + + public static void restoreMode() { + if (PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getBoolean("setmode",true)) { + if (Receiver.pstn_state == null || Receiver.pstn_state.equals("IDLE")) + setMode(AudioManager.MODE_NORMAL); + else { + Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit(); + edit.putBoolean("setmode", false); + edit.commit(); + } + } + } - void restoreSettings() { - int oldvibrate = PreferenceManager.getDefaultSharedPreferences(mContext).getInt("oldvibrate",0); - int oldvibrate2 = PreferenceManager.getDefaultSharedPreferences(mContext).getInt("oldvibrate2",0); - int oldpolicy = PreferenceManager.getDefaultSharedPreferences(mContext).getInt("oldpolicy",0); - am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,oldvibrate); - am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,oldvibrate2); - Settings.System.putInt(cr, Settings.System.WIFI_SLEEP_POLICY, oldpolicy); - am.setStreamVolume(AudioManager.STREAM_RING, PreferenceManager.getDefaultSharedPreferences(mContext).getInt("oldring",0), 0); - Editor edit = PreferenceManager.getDefaultSharedPreferences(mContext).edit(); - edit.putBoolean("oldvalid", false); - edit.commit(); + public static void restoreSettings() { + if (PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getBoolean("oldvalid",true)) { + AudioManager am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE); + ContentResolver cr = Receiver.mContext.getContentResolver(); + int oldvibrate = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("oldvibrate",0); + int oldvibrate2 = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("oldvibrate2",0); + int oldpolicy = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("oldpolicy",0); + am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,oldvibrate); + am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,oldvibrate2); + Settings.System.putInt(cr, Settings.System.WIFI_SLEEP_POLICY, oldpolicy); + setStreamVolume(AudioManager.STREAM_RING, PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("oldring",0), 0); + Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit(); + edit.putBoolean("oldvalid", false); + edit.commit(); + PowerManager pm = (PowerManager) Receiver.mContext.getSystemService(Context.POWER_SERVICE); + PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | + PowerManager.ACQUIRE_CAUSES_WAKEUP, "Sipdroid.RtpStreamReceiver"); + wl.acquire(1000); + } + restoreMode(); } public static float good, late, lost, loss; - + public static int timeout; + + void empty() { + try { + rtp_socket.getDatagramSocket().setSoTimeout(1); + for (;;) + rtp_socket.receive(rtp_packet); + } catch (SocketException e2) { + if (!Sipdroid.release) e2.printStackTrace(); + } catch (IOException e) { + } + try { + rtp_socket.getDatagramSocket().setSoTimeout(1000); + } catch (SocketException e2) { + if (!Sipdroid.release) e2.printStackTrace(); + } + } + + RtpPacket rtp_packet; + AudioTrack track; + /** Runs it in a new Thread. */ - @Override public void run() { - REAL_BUFFER_SIZE = BUFFER_SIZE * codec_divider; - speakermode = AudioManager.MODE_IN_CALL; - android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_AUDIO); - am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); - cr = mContext.getContentResolver(); - //saveSettings(); + boolean nodata = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getBoolean("nodata",false); + + if (rtp_socket == null) { + if (DEBUG) + println("ERROR: RTP socket is null"); + return; + } - Settings.System.putInt(cr, Settings.System.WIFI_SLEEP_POLICY,Settings.System.WIFI_SLEEP_POLICY_NEVER); - //am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF); - //am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF); - //oldvol = am.getStreamVolume(AudioManager.STREAM_MUSIC); - restoreVolume(); + byte[] buffer = new byte[BUFFER_SIZE+12]; + byte[] buffer_gsm = new byte[33+12]; + int i; + rtp_packet = new RtpPacket(buffer, 0); + + if (DEBUG) + println("Reading blocks of max " + buffer.length + " bytes"); - track = new AudioTrack(AudioManager.STREAM_MUSIC, sampling_rate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, - REAL_BUFFER_SIZE*2*2, AudioTrack.MODE_STREAM); + running = true; + speakermode = Receiver.docked > 0?AudioManager.MODE_NORMAL:AudioManager.MODE_IN_CALL; + restored = false; + + android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_AUDIO); + am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE); + cr = Receiver.mContext.getContentResolver(); + saveSettings(); + Settings.System.putInt(cr, Settings.System.WIFI_SLEEP_POLICY,Settings.System.WIFI_SLEEP_POLICY_NEVER); + am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF); + am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF); + int oldvol = am.getStreamVolume(AudioManager.STREAM_MUSIC); + track = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, + BUFFER_SIZE*2*2, AudioTrack.MODE_STREAM); + short lin[] = new short[BUFFER_SIZE]; + short lin2[] = new short[BUFFER_SIZE]; + int user, server, lserver, luser, cnt, todo, headroom, len = 0, seq = 0, cnt2 = 0, m = 1, + expseq, getseq, vm = 1, gap, gseq; + timeout = 1; + boolean islate; + user = 0; + lserver = 0; + luser = -8000; + cnt = 0; + switch (p_type) { + case 3: + Codec.init(); + break; + case 0: + case 8: + G711.init(); + break; + } + ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_MUSIC,(int)(ToneGenerator.MAX_VOLUME*2*org.sipdroid.sipua.ui.Settings.getEarGain())); track.play(); - lin = new short[REAL_BUFFER_SIZE]; - lin2 = new short[REAL_BUFFER_SIZE]; - user = 0; //number of samples written - server = 0; // number of samples played - lserver = 0; // last number of samples played - luser = -sampling_rate; // last number of samples written - cnt = 0; - codecCtx = codec.initDecoder(); - System.gc(); - println("DEBUG: rtpStreamReceiver session launch"); - running = true; - AppCallerThread appCall = rtpSession.getAppCallerThrd(); - RTPReceiverThread recv = rtpSession.getRTPRecvThrd(); - DataFrame frame = null; - recv.init(); + if (Receiver.headset > 0 && Receiver.oRingtone != null) { + ToneGenerator tg2 = new ToneGenerator(AudioManager.STREAM_RING,(int)(ToneGenerator.MAX_VOLUME*2*org.sipdroid.sipua.ui.Settings.getEarGain())); + tg2.startTone(ToneGenerator.TONE_SUP_RINGTONE); + System.gc(); + tg2.stopTone(); + } else + System.gc(); while (running) { - recv.readPacketToBuffer(); - frame = appCall.getNextDataFrame(); - if (frame == null) - continue; - buffer = (frame.getPkt()[0]).getPayload(); - if (timeout != 0) { //on ecrit du blanc sur l'audiotrack - user += track.write(lin,0,REAL_BUFFER_SIZE); - user += track.write(lin,0,REAL_BUFFER_SIZE); + if (Receiver.call_state == UserAgent.UA_STATE_HOLD) { + tg.stopTone(); + track.pause(); + while (running && Receiver.call_state == UserAgent.UA_STATE_HOLD) { + try { + sleep(1000); + } catch (InterruptedException e1) { + } + } + track.play(); + System.gc(); + timeout = 1; + seq = 0; } - timeout = 0; - if (running) { - - //println("seq " + seq + " frame seq " + (frame.getPkt()[0]).getSeqNumber()); - if (seq == (frame.getPkt()[0]).getSeqNumber()) { - m++; - continue; + try { + rtp_socket.receive(rtp_packet); + if (timeout != 0) { + tg.stopTone(); + track.pause(); + user += track.write(lin2,0,BUFFER_SIZE); + user += track.write(lin2,0,BUFFER_SIZE); + track.play(); + cnt += 2*BUFFER_SIZE; + empty(); + } + timeout = 0; + } catch (IOException e) { + if (timeout == 0 && nodata) { + tg.startTone(ToneGenerator.TONE_SUP_RINGTONE); + } + rtp_socket.getDatagramSocket().disconnect(); + if (++timeout > 22) { + Receiver.engine(Receiver.mContext).rejectcall(); + break; } + } + if (running && timeout == 0) { + gseq = rtp_packet.getSequenceNumber(); + if (seq == gseq) { + m++; + continue; + } + + server = track.getPlaybackHeadPosition(); + headroom = user-server; + + if (headroom > 1500) + cnt += len; + else + cnt = 0; + + if (lserver == server) + cnt2++; + else + cnt2 = 0; - codec.decode(codecCtx, buffer, 12, codec_frame_size, lin, 0); - len = frame_size; - - if (speakermode == AudioManager.MODE_NORMAL) - calc(lin,0,len); - - server = track.getPlaybackHeadPosition(); // on récupère la position actuel de la tete de lecture - headroom = user-server; // on recalcule la différence entre la position de la tete de lecture et ce qu'on a écrit sur la piste - //println("headroom " + headroom + " user " + user + " server " + server); - if (headroom < 250 * codec_divider) { // si le headroom est trop petit, il faut rattraper le retard en écrivant du blanc/répétant ce qu'il y a à ecrire - todo = 625 * codec_divider - headroom; - //println("insert "+todo); - android.util.Log.d("RECV", "insert"); + if (cnt <= 500 || cnt2 >= 2 || headroom - 875 < len) { + switch (rtp_packet.getPayloadType()) { + case 0: + len = rtp_packet.getPayloadLength(); + G711.ulaw2linear(buffer, lin, len); + break; + case 8: + len = rtp_packet.getPayloadLength(); + G711.alaw2linear(buffer, lin, len); + break; + case 3: + for (i = 12; i < 45; i++) + buffer_gsm[i] = buffer[i]; + len = Codec.decode(buffer_gsm, lin, 0); + break; + } + + if (speakermode == AudioManager.MODE_NORMAL) + calc(lin,0,len); + } + + if (headroom < 250) { + todo = 875 - headroom; + println("insert "+todo); islate = true; - if (todo < len) - user += track.write(lin,0,todo); // on écrit le packet reçu tel quel - else - user += track.write(lin2,0,todo); // ecriture de blanc de taille 625 - headroom, avant l'écriture du packet - } else + user += track.write(lin2,0,todo); + } else islate = false; - if (headroom > 1000 * codec_divider) // si le headroom est trop grand, on calcule l'écart. - cnt += len; // on additione le nombre de sample ou il y a eu un headroom supérieur a 1000 - else - cnt = 0; - - if (lserver == server) // on compte le nombre de boucle que l'on a fait sans qu'aucun sample n'ai été joué. - cnt2++; - else - cnt2 = 0; - - if (cnt > 1000 * codec_divider && cnt2 < 2) { // si la position de la tete de lecture n'a pas bougé durant 2 tours et que le nombre de sample ou le headroom a été supérieur à 1000 est > 1000 - todo = headroom - 625 * codec_divider; - try { - //android.util.Log.d("RECV", "cut"); - sleep(20); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - user += track.write(lin,0,len); - m = 1; - seq = (frame.getPkt()[0]).getSeqNumber(); - DataFramePool.getInstance().returnFrame(frame); - //println("headroom " + headroom + " user " + user + " server " + server + " luser " + luser + " lserver " + lserver); - if (user >= luser + sampling_rate) { - /*if (am.getMode() != speakermode) { - am.setMode(speakermode); - switch (speakermode) { - case AudioManager.MODE_IN_CALL: - am.setStreamVolume(AudioManager.STREAM_RING,(int)( - am.getStreamMaxVolume(AudioManager.STREAM_RING)* - com.mbdsys.sfrdroid.ui.Settings.getEarGain()), 0); - track.setStereoVolume(AudioTrack.getMaxVolume()* - com.mbdsys.sfrdroid.ui.Settings.getEarGain() - ,AudioTrack.getMaxVolume()* - com.mbdsys.sfrdroid.ui.Settings.getEarGain()); - //running = false; - case AudioManager.MODE_NORMAL: - track.setStereoVolume(AudioTrack.getMaxVolume(),AudioTrack.getMaxVolume()); - //running = false; - } - }*/ - luser = user; - } - lserver = server; - System.arraycopy(lin, 0, lin2, 0, REAL_BUFFER_SIZE); + if (cnt > 500 && cnt2 < 2) { + todo = headroom - 875; + println("cut "+todo); + if (todo < len) + user += track.write(lin,todo,len-todo); + } else + user += track.write(lin,0,len); + + if (seq != 0) { + getseq = gseq&0xff; + expseq = ++seq&0xff; + if (m == RtpStreamSender.m) vm = m; + gap = (getseq - expseq) & 0xff; + if (gap > 0) { + if (gap > 100) gap = 1; + loss += gap; + lost += gap; + good += gap - 1; + } else { + if (m < vm) + loss++; + if (islate) + late++; + } + good++; + if (good > 100) { + good *= 0.99; + lost *= 0.99; + loss *= 0.99; + late *= 0.99; + } + } + m = 1; + seq = gseq; + + if (user >= luser + 8000 && Receiver.call_state == UserAgent.UA_STATE_INCALL) { + if (luser == -8000 || am.getMode() != speakermode) { + saveVolume(); + setMode(speakermode); + restoreVolume(); + } + luser = user; + } + lserver = server; } } track.stop(); - ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_RING,ToneGenerator.MAX_VOLUME/4*3); + saveVolume(); + setStreamVolume(AudioManager.STREAM_MUSIC,oldvol,0); + restoreSettings(); + setStreamVolume(AudioManager.STREAM_MUSIC,oldvol,0); + tg.stopTone(); + tg = new ToneGenerator(AudioManager.STREAM_RING,ToneGenerator.MAX_VOLUME/4*3); tg.startTone(ToneGenerator.TONE_PROP_PROMPT); try { - Thread.sleep(500); + sleep(500); } catch (InterruptedException e) { } tg.stopTone(); - rtpSession = null; - track = null; - codec.cleanDecoder(codecCtx); - codec = null; - println("rtp receiver terminated"); + + rtp_socket.close(); + rtp_socket = null; + + if (DEBUG) + println("rtp receiver terminated"); } /** Debug output */ - static int i = 0; private static void println(String str) { - System.out.println("RtpStreamReceiver "+ i++ +": " + str); + if (!Sipdroid.release) System.out.println("RtpStreamReceiver: " + str); } public static int byte2int(byte b) { // return (b>=0)? b : -((b^0xFF)+1); @@ -362,23 +488,4 @@ public static int byte2int(byte b1, byte b2) { return (((b1 + 0x100) % 0x100) << 8) + (b2 + 0x100) % 0x100; } - - @Override - public int frameSize(int payloadType) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void receiveData(DataFrame frame, Participant participant) { - // TODO Auto-generated method stub - - } - - @Override - public void userEvent(int type, Participant[] participant) { - // TODO Auto-generated method stub - - } - }