src/org/sipdroid/media/RtpStreamReceiver.java
author nikita@nikita-laptop
Sat, 23 Jan 2010 22:19:43 +0100
changeset 834 e8d6255306f8
parent 830 c8b4ace735ea
child 835 4e40f3481f23
permissions -rw-r--r--
Sipdroid Basic
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     1
/*
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     2
 * Copyright (C) 2009 The Sipdroid Open Source Project
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     3
 * Copyright (C) 2005 Luca Veltri - University of Parma - Italy
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     4
 * 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     5
 * This file is part of Sipdroid (http://www.sipdroid.org)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     6
 * 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     7
 * Sipdroid is free software; you can redistribute it and/or modify
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     8
 * it under the terms of the GNU General Public License as published by
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     9
 * the Free Software Foundation; either version 3 of the License, or
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    10
 * (at your option) any later version.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    11
 * 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    12
 * This source code is distributed in the hope that it will be useful,
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    15
 * GNU General Public License for more details.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    16
 * 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    18
 * along with this source code; if not, write to the Free Software
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    19
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    20
 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    21
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    22
package src.org.sipdroid.media;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    23
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    24
import java.io.IOException;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    25
import java.net.SocketException;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    26
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    27
import org.sipdroid.sipua.UserAgent;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    28
import org.sipdroid.sipua.ui.Receiver;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    29
import org.sipdroid.sipua.ui.Sipdroid;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    30
import org.sipdroid.pjlib.Codec;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    31
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    32
import src.org.sipdroid.net.RtpPacket;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    33
import src.org.sipdroid.net.RtpSocket;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    34
import src.org.sipdroid.net.SipdroidSocket;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    35
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    36
import android.content.ContentResolver;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    37
import android.content.Context;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    38
import android.content.SharedPreferences.Editor;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    39
import android.media.AudioFormat;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    40
import android.media.AudioManager;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    41
import android.media.AudioTrack;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    42
import android.media.ToneGenerator;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    43
import android.os.PowerManager;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    44
import android.preference.PreferenceManager;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    45
import android.provider.Settings;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    46
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    47
/**
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    48
 * RtpStreamReceiver is a generic stream receiver. It receives packets from RTP
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    49
 * and writes them into an OutputStream.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    50
 */
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    51
public class RtpStreamReceiver extends Thread {
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    52
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    53
	/** Whether working in debug mode. */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    54
	public static boolean DEBUG = true;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    55
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    56
	/** Payload type */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    57
	int p_type;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    58
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    59
	/** Size of the read buffer */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    60
	public static final int BUFFER_SIZE = 1024;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    61
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    62
	/** Maximum blocking time, spent waiting for reading new bytes [milliseconds] */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    63
	public static final int SO_TIMEOUT = 200;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    64
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    65
	/** The RtpSocket */
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    66
	RtpSocket rtp_socket = null;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    67
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    68
	/** Whether it is running */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    69
	boolean running;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    70
	AudioManager am;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    71
	ContentResolver cr;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    72
	public static int speakermode;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    73
	
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    74
	/**
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    75
	 * Constructs a RtpStreamReceiver.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    76
	 * 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    77
	 * @param output_stream
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    78
	 *            the stream sink
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    79
	 * @param socket
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    80
	 *            the local receiver SipdroidSocket
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    81
	 */
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    82
	public RtpStreamReceiver(SipdroidSocket socket, int payload_type) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    83
		init(socket);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    84
		p_type = payload_type;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    85
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    86
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    87
	/** Inits the RtpStreamReceiver */
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    88
	private void init(SipdroidSocket socket) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    89
		if (socket != null)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    90
			rtp_socket = new RtpSocket(socket);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    91
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    92
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    93
	/** Whether is running */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    94
	public boolean isRunning() {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    95
		return running;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    96
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    97
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    98
	/** Stops running */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    99
	public void halt() {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   100
		running = false;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   101
	}
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   102
	
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   103
	public int speaker(int mode) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   104
		int old = speakermode;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   105
		
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   106
		if (Receiver.headset > 0 && mode == AudioManager.MODE_NORMAL)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   107
			return old;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   108
		saveVolume();
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   109
		setMode(speakermode = mode);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   110
		restoreVolume();
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   111
		return old;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   112
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   113
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   114
	double smin = 200,s;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   115
	public static int nearend;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   116
	
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   117
	void calc(short[] lin,int off,int len) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   118
		int i,j;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   119
		double sm = 30000,r;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   120
		
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   121
		for (i = 0; i < len; i += 5) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   122
			j = lin[i+off];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   123
			s = 0.03*Math.abs(j) + 0.97*s;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   124
			if (s < sm) sm = s;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   125
			if (s > smin) nearend = 3000/5;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   126
			else if (nearend > 0) nearend--;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   127
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   128
		for (i = 0; i < len; i++) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   129
			j = lin[i+off];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   130
			if (j > 6550)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   131
				lin[i+off] = 6550*5;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   132
			else if (j < -6550)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   133
				lin[i+off] = -6550*5;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   134
			else
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   135
				lin[i+off] = (short)(j*5);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   136
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   137
		r = (double)len/100000;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   138
		smin = sm*r + smin*(1-r);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   139
	}
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   140
	
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   141
	static void setStreamVolume(final int stream,final int vol,final int flags) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   142
        (new Thread() {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   143
			public void run() {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   144
				AudioManager am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   145
				am.setStreamVolume(stream, vol, flags);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   146
				if (stream == AudioManager.STREAM_MUSIC) restored = true;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   147
			}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   148
        }).start();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   149
	}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   150
	
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   151
	static boolean restored;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   152
	
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   153
	void restoreVolume() {
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   154
		switch (am.getMode()) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   155
		case AudioManager.MODE_IN_CALL:
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   156
				setStreamVolume(AudioManager.STREAM_RING,(int)(
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   157
						am.getStreamMaxVolume(AudioManager.STREAM_RING)*
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   158
						org.sipdroid.sipua.ui.Settings.getEarGain()), 0);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   159
				track.setStereoVolume(AudioTrack.getMaxVolume()*
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   160
						org.sipdroid.sipua.ui.Settings.getEarGain()
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   161
						,AudioTrack.getMaxVolume()*
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   162
						org.sipdroid.sipua.ui.Settings.getEarGain());
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   163
				break;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   164
		case AudioManager.MODE_NORMAL:
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   165
				track.setStereoVolume(AudioTrack.getMaxVolume(),AudioTrack.getMaxVolume());
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   166
				break;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   167
		}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   168
		setStreamVolume(AudioManager.STREAM_MUSIC,
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   169
				PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("volume"+speakermode, 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   170
				am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)*
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   171
				(speakermode == AudioManager.MODE_NORMAL?4:3)/4
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   172
				),0);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   173
	}
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   174
	
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   175
	void saveVolume() {
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   176
		if (restored) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   177
			Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   178
			edit.putInt("volume"+speakermode,am.getStreamVolume(AudioManager.STREAM_MUSIC));
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   179
			edit.commit();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   180
		}
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   181
	}
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   182
	
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   183
	void saveSettings() {
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   184
		if (!PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getBoolean("oldvalid",false)) {
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   185
			int oldvibrate = am.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   186
			int oldvibrate2 = am.getVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION);
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   187
			if (!PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).contains("oldvibrate2"))
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   188
				oldvibrate2 = AudioManager.VIBRATE_SETTING_ON;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   189
			int oldpolicy = android.provider.Settings.System.getInt(cr, android.provider.Settings.System.WIFI_SLEEP_POLICY, 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   190
					Settings.System.WIFI_SLEEP_POLICY_DEFAULT);
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   191
			Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit();
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   192
			edit.putInt("oldvibrate", oldvibrate);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   193
			edit.putInt("oldvibrate2", oldvibrate2);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   194
			edit.putInt("oldpolicy", oldpolicy);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   195
			edit.putInt("oldring",am.getStreamVolume(AudioManager.STREAM_RING));
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   196
			edit.putBoolean("oldvalid", true);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   197
			edit.commit();
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   198
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   199
	}
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   200
	
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   201
	public static void setMode(int mode) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   202
		Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   203
		edit.putBoolean("setmode", mode != AudioManager.MODE_NORMAL);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   204
		edit.commit();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   205
		AudioManager am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   206
		am.setMode(mode);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   207
	}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   208
	
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   209
	public static void restoreMode() {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   210
		if (PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getBoolean("setmode",true)) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   211
			if (Receiver.pstn_state == null || Receiver.pstn_state.equals("IDLE"))
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   212
				setMode(AudioManager.MODE_NORMAL);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   213
			else {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   214
				Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   215
				edit.putBoolean("setmode", false);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   216
				edit.commit();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   217
			}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   218
		}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   219
	}
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   220
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   221
	public static void restoreSettings() {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   222
		if (PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getBoolean("oldvalid",true)) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   223
			AudioManager am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   224
	        ContentResolver cr = Receiver.mContext.getContentResolver();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   225
			int oldvibrate = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("oldvibrate",0);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   226
			int oldvibrate2 = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("oldvibrate2",0);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   227
			int oldpolicy = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("oldpolicy",0);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   228
			am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,oldvibrate);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   229
			am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,oldvibrate2);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   230
			Settings.System.putInt(cr, Settings.System.WIFI_SLEEP_POLICY, oldpolicy);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   231
			setStreamVolume(AudioManager.STREAM_RING, PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getInt("oldring",0), 0);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   232
			Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   233
			edit.putBoolean("oldvalid", false);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   234
			edit.commit();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   235
			PowerManager pm = (PowerManager) Receiver.mContext.getSystemService(Context.POWER_SERVICE);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   236
			PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK |
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   237
					PowerManager.ACQUIRE_CAUSES_WAKEUP, "Sipdroid.RtpStreamReceiver");
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   238
			wl.acquire(1000);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   239
		}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   240
		restoreMode();
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   241
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   242
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   243
	public static float good, late, lost, loss;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   244
	public static int timeout;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   245
	
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   246
	void empty() {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   247
		try {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   248
			rtp_socket.getDatagramSocket().setSoTimeout(1);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   249
			for (;;)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   250
				rtp_socket.receive(rtp_packet);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   251
		} catch (SocketException e2) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   252
			if (!Sipdroid.release) e2.printStackTrace();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   253
		} catch (IOException e) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   254
		}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   255
		try {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   256
			rtp_socket.getDatagramSocket().setSoTimeout(1000);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   257
		} catch (SocketException e2) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   258
			if (!Sipdroid.release) e2.printStackTrace();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   259
		}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   260
	}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   261
	
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   262
	RtpPacket rtp_packet;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   263
	AudioTrack track;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   264
	
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   265
	/** Runs it in a new Thread. */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   266
	public void run() {
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   267
		boolean nodata = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).getBoolean("nodata",false);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   268
		
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   269
		if (rtp_socket == null) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   270
			if (DEBUG)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   271
				println("ERROR: RTP socket is null");
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   272
			return;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   273
		}
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   274
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   275
		byte[] buffer = new byte[BUFFER_SIZE+12];
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   276
		byte[] buffer_gsm = new byte[33+12];
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   277
		int i;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   278
		rtp_packet = new RtpPacket(buffer, 0);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   279
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   280
		if (DEBUG)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   281
			println("Reading blocks of max " + buffer.length + " bytes");
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   282
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   283
		running = true;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   284
		speakermode = Receiver.docked > 0?AudioManager.MODE_NORMAL:AudioManager.MODE_IN_CALL;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   285
		restored = false;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   286
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   287
		android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_AUDIO);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   288
		am = (AudioManager) Receiver.mContext.getSystemService(Context.AUDIO_SERVICE);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   289
        cr = Receiver.mContext.getContentResolver();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   290
		saveSettings();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   291
		Settings.System.putInt(cr, Settings.System.WIFI_SLEEP_POLICY,Settings.System.WIFI_SLEEP_POLICY_NEVER);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   292
		am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   293
		am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   294
		int oldvol = am.getStreamVolume(AudioManager.STREAM_MUSIC);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   295
		track = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   296
				BUFFER_SIZE*2*2, AudioTrack.MODE_STREAM);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   297
		short lin[] = new short[BUFFER_SIZE];
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   298
		short lin2[] = new short[BUFFER_SIZE];
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   299
		int user, server, lserver, luser, cnt, todo, headroom, len = 0, seq = 0, cnt2 = 0, m = 1,
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   300
			expseq, getseq, vm = 1, gap, gseq;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   301
		timeout = 1;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   302
		boolean islate;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   303
		user = 0;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   304
		lserver = 0;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   305
		luser = -8000;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   306
		cnt = 0;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   307
		switch (p_type) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   308
		case 3:
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   309
			Codec.init();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   310
			break;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   311
		case 0:
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   312
		case 8:
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   313
			G711.init();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   314
			break;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   315
		}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   316
		ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_MUSIC,(int)(ToneGenerator.MAX_VOLUME*2*org.sipdroid.sipua.ui.Settings.getEarGain()));
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   317
		track.play();
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   318
		if (Receiver.headset > 0 && Receiver.oRingtone != null) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   319
			ToneGenerator tg2 = new ToneGenerator(AudioManager.STREAM_RING,(int)(ToneGenerator.MAX_VOLUME*2*org.sipdroid.sipua.ui.Settings.getEarGain()));
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   320
			tg2.startTone(ToneGenerator.TONE_SUP_RINGTONE);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   321
			System.gc();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   322
			tg2.stopTone();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   323
		} else
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   324
			System.gc();
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   325
		while (running) {
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   326
			if (Receiver.call_state == UserAgent.UA_STATE_HOLD) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   327
				tg.stopTone();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   328
				track.pause();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   329
				while (running && Receiver.call_state == UserAgent.UA_STATE_HOLD) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   330
					try {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   331
						sleep(1000);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   332
					} catch (InterruptedException e1) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   333
					}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   334
				}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   335
				track.play();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   336
				System.gc();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   337
				timeout = 1;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   338
				seq = 0;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   339
			}
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   340
			try {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   341
				rtp_socket.receive(rtp_packet);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   342
				if (timeout != 0) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   343
					tg.stopTone();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   344
					track.pause();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   345
					user += track.write(lin2,0,BUFFER_SIZE);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   346
					user += track.write(lin2,0,BUFFER_SIZE);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   347
					track.play();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   348
					cnt += 2*BUFFER_SIZE;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   349
					empty();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   350
				}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   351
				timeout = 0;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   352
			} catch (IOException e) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   353
				if (timeout == 0 && nodata) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   354
					tg.startTone(ToneGenerator.TONE_SUP_RINGTONE);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   355
				}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   356
				rtp_socket.getDatagramSocket().disconnect();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   357
				if (++timeout > 22) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   358
					Receiver.engine(Receiver.mContext).rejectcall();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   359
					break;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   360
				}
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   361
			}
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   362
			if (running && timeout == 0) {		
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   363
				 gseq = rtp_packet.getSequenceNumber();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   364
				 if (seq == gseq) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   365
					 m++;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   366
					 continue;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   367
				 }
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   368
				 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   369
				 server = track.getPlaybackHeadPosition();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   370
				 headroom = user-server;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   371
				 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   372
				 if (headroom > 1500)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   373
					 cnt += len;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   374
				 else
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   375
					 cnt = 0;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   376
				 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   377
				 if (lserver == server)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   378
					 cnt2++;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   379
				 else
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   380
					 cnt2 = 0;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   381
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   382
				 if (cnt <= 500 || cnt2 >= 2 || headroom - 875 < len) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   383
					 switch (rtp_packet.getPayloadType()) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   384
					 case 0:
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   385
						 len = rtp_packet.getPayloadLength();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   386
						 G711.ulaw2linear(buffer, lin, len);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   387
						 break;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   388
					 case 8:
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   389
						 len = rtp_packet.getPayloadLength();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   390
						 G711.alaw2linear(buffer, lin, len);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   391
						 break;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   392
					 case 3:
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   393
						 for (i = 12; i < 45; i++)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   394
							 buffer_gsm[i] = buffer[i];
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   395
						 len = Codec.decode(buffer_gsm, lin, 0);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   396
						 break;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   397
					 }
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   398
					 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   399
		 			 if (speakermode == AudioManager.MODE_NORMAL)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   400
		 				 calc(lin,0,len);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   401
				 }
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   402
				 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   403
	 			 if (headroom < 250) { 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   404
					todo = 875 - headroom;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   405
					println("insert "+todo);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   406
					islate = true;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   407
					user += track.write(lin2,0,todo);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   408
				 } else
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   409
					islate = false;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   410
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   411
				 if (cnt > 500 && cnt2 < 2) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   412
					 todo = headroom - 875;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   413
					 println("cut "+todo);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   414
					 if (todo < len)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   415
						 user += track.write(lin,todo,len-todo);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   416
				 } else
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   417
					 user += track.write(lin,0,len);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   418
				 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   419
				 if (seq != 0) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   420
					 getseq = gseq&0xff;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   421
					 expseq = ++seq&0xff;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   422
					 if (m == RtpStreamSender.m) vm = m;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   423
					 gap = (getseq - expseq) & 0xff;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   424
					 if (gap > 0) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   425
						 if (gap > 100) gap = 1;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   426
						 loss += gap;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   427
						 lost += gap;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   428
						 good += gap - 1;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   429
					 } else {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   430
						 if (m < vm)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   431
							 loss++;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   432
						 if (islate)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   433
							 late++;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   434
					 }
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   435
					 good++;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   436
					 if (good > 100) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   437
						 good *= 0.99;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   438
						 lost *= 0.99;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   439
						 loss *= 0.99;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   440
						 late *= 0.99;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   441
					 }
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   442
				 }
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   443
				 m = 1;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   444
				 seq = gseq;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   445
				 
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   446
				 if (user >= luser + 8000 && Receiver.call_state == UserAgent.UA_STATE_INCALL) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   447
					 if (luser == -8000 || am.getMode() != speakermode) {
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   448
						 saveVolume();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   449
						 setMode(speakermode);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   450
						 restoreVolume();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   451
					 }
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   452
					 luser = user;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   453
				 }
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   454
				 lserver = server;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   455
			}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   456
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   457
		track.stop();
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   458
		saveVolume();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   459
		setStreamVolume(AudioManager.STREAM_MUSIC,oldvol,0);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   460
		restoreSettings();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   461
		setStreamVolume(AudioManager.STREAM_MUSIC,oldvol,0);
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   462
		tg.stopTone();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   463
		tg = new ToneGenerator(AudioManager.STREAM_RING,ToneGenerator.MAX_VOLUME/4*3);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   464
		tg.startTone(ToneGenerator.TONE_PROP_PROMPT);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   465
		try {
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   466
			sleep(500);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   467
		} catch (InterruptedException e) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   468
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   469
		tg.stopTone();
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   470
		
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   471
		rtp_socket.close();
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   472
		rtp_socket = null;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   473
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   474
		if (DEBUG)
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   475
			println("rtp receiver terminated");
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   476
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   477
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   478
	/** Debug output */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   479
	private static void println(String str) {
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   480
		if (!Sipdroid.release) System.out.println("RtpStreamReceiver: " + str);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   481
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   482
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   483
	public static int byte2int(byte b) { // return (b>=0)? b : -((b^0xFF)+1);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   484
		// return (b>=0)? b : b+0x100;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   485
		return (b + 0x100) % 0x100;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   486
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   487
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   488
	public static int byte2int(byte b1, byte b2) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   489
		return (((b1 + 0x100) % 0x100) << 8) + (b2 + 0x100) % 0x100;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   490
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   491
}