src/org/sipdroid/media/RtpStreamSender.java
author Nikita Kozlov <nikita@elyzion.net>
Wed, 06 Jun 2012 23:24:12 +0200
changeset 1005 a2cad81f348b
parent 836 2f2f5e24ac6a
permissions -rw-r--r--
fix some bugs + update jingle code in asmack
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
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    22
package org.sipdroid.media;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    23
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    24
import java.io.IOException;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    25
import java.io.InputStream;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    26
import java.net.InetAddress;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    27
import java.util.Random;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    28
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    29
import org.sipdroid.net.RtpPacket;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    30
import org.sipdroid.net.RtpSocket;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    31
import org.sipdroid.net.SipdroidSocket;
1005
a2cad81f348b fix some bugs + update jingle code in asmack
Nikita Kozlov <nikita@elyzion.net>
parents: 836
diff changeset
    32
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
    33
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    34
import android.content.Context;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    35
import android.media.AudioFormat;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    36
import android.media.AudioManager;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    37
import android.media.AudioRecord;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    38
import android.media.MediaRecorder;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    39
import android.preference.PreferenceManager;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    40
import android.telephony.TelephonyManager;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    41
1005
a2cad81f348b fix some bugs + update jingle code in asmack
Nikita Kozlov <nikita@elyzion.net>
parents: 836
diff changeset
    42
import com.beem.project.beem.ui.Call;
a2cad81f348b fix some bugs + update jingle code in asmack
Nikita Kozlov <nikita@elyzion.net>
parents: 836
diff changeset
    43
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    44
/**
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    45
 * RtpStreamSender is a generic stream sender. It takes an InputStream and sends
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    46
 * it through RTP.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    47
 */
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
    48
public class RtpStreamSender extends Thread {
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    49
    /** Whether working in debug mode. */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    50
    public static boolean DEBUG = true;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    51
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    52
    /** The RtpSocket */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    53
    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
    54
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    55
    /** Payload type */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    56
    int p_type;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    57
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    58
    /** Number of frame per second */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    59
    long frame_rate;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    60
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    61
    /** Number of bytes per frame */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    62
    int frame_size;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    63
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    64
    /**
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    65
     * Whether it works synchronously with a local clock, or it it acts as slave
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    66
     * of the InputStream
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    67
     */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    68
    boolean do_sync = true;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    69
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    70
    /**
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    71
     * Synchronization correction value, in milliseconds. It accellarates the
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    72
     * sending rate respect to the nominal value, in order to compensate program
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    73
     * latencies.
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    74
     */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    75
    int sync_adj = 0;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    76
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    77
    /** Whether it is running */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    78
    boolean running = false;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    79
    boolean muted = false;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    80
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    81
    /**
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    82
     * Constructs a RtpStreamSender.
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    83
     * 
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    84
     * @param input_stream
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    85
     *            the stream to be sent
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    86
     * @param do_sync
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    87
     *            whether time synchronization must be performed by the
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    88
     *            RtpStreamSender, or it is performed by the InputStream (e.g.
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    89
     *            the system audio input)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    90
     * @param payload_type
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    91
     *            the payload type
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    92
     * @param frame_rate
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    93
     *            the frame rate, i.e. the number of frames that should be sent
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    94
     *            per second; it is used to calculate the nominal packet time
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    95
     *            and,in case of do_sync==true, the next departure time
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    96
     * @param frame_size
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    97
     *            the size of the payload
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    98
     * @param src_socket
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
    99
     *            the socket used to send the RTP packet
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   100
     * @param dest_addr
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   101
     *            the destination address
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   102
     * @param dest_port
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   103
     *            the destination port
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   104
     */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   105
    public RtpStreamSender(boolean do_sync,
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   106
	int payload_type, long frame_rate, int frame_size,
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   107
	SipdroidSocket src_socket, String dest_addr, int dest_port) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   108
	init(do_sync, payload_type, frame_rate, frame_size,
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   109
	    src_socket, dest_addr, dest_port);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   110
    }
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   111
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   112
    /** Inits the RtpStreamSender */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   113
    private void init(boolean do_sync,
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   114
	int payload_type, long frame_rate, int frame_size,
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   115
	SipdroidSocket src_socket, String dest_addr,
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   116
	int dest_port) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   117
	this.p_type = payload_type;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   118
	this.frame_rate = frame_rate;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   119
	this.frame_size = frame_size;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   120
	this.do_sync = do_sync;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   121
	try {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   122
	    rtp_socket = new RtpSocket(src_socket, InetAddress
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   123
		.getByName(dest_addr), dest_port);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   124
	} catch (Exception e) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   125
	    e.printStackTrace();
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   126
	}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   127
    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   128
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   129
    /** Sets the synchronization adjustment time (in milliseconds). */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   130
    public void setSyncAdj(int millisecs) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   131
	sync_adj = millisecs;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   132
    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   133
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   134
    /** Whether is running */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   135
    public boolean isRunning() {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   136
	return running;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   137
    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   138
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   139
    public boolean mute() {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   140
	return muted = !muted;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   141
    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   142
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   143
    public static int delay = 0;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   144
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   145
    /** Stops running */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   146
    public void halt() {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   147
	running = false;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   148
    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   149
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   150
    Random random;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   151
    double smin = 200,s;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   152
    int nearend;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   153
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   154
    void calc(short[] lin,int off,int len) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   155
	int i,j;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   156
	double sm = 30000,r;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   157
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   158
	for (i = 0; i < len; i += 5) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   159
	    j = lin[i+off];
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   160
	    s = 0.03*Math.abs(j) + 0.97*s;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   161
	    if (s < sm) sm = s;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   162
	    if (s > smin) nearend = 3000/5;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   163
	    else if (nearend > 0) nearend--;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   164
	}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   165
	for (i = 0; i < len; i++) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   166
	    j = lin[i+off];
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   167
	    if (j > 6550)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   168
		lin[i+off] = 6550*5;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   169
	    else if (j < -6550)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   170
		lin[i+off] = -6550*5;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   171
	    else
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   172
		lin[i+off] = (short)(j*5);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   173
	}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   174
	r = (double)len/100000;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   175
	smin = sm*r + smin*(1-r);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   176
    }
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   177
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   178
    void calc1(short[] lin,int off,int len) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   179
	int i,j;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   180
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   181
	for (i = 0; i < len; i++) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   182
	    j = lin[i+off];
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   183
	    lin[i+off] = (short)(j>>1);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   184
	}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   185
    }
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   186
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   187
    void calc5(short[] lin,int off,int len) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   188
	int i,j;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   189
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   190
	for (i = 0; i < len; i++) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   191
	    j = lin[i+off];
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   192
	    if (j > 16350)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   193
		lin[i+off] = 16350<<1;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   194
	    else if (j < -16350)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   195
		lin[i+off] = -16350<<1;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   196
	    else
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   197
		lin[i+off] = (short)(j<<1);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   198
	}
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   199
    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   200
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   201
    void calc10(short[] lin,int off,int len) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   202
	int i,j;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   203
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   204
	for (i = 0; i < len; i++) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   205
	    j = lin[i+off];
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   206
	    if (j > 8150)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   207
		lin[i+off] = 8150<<2;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   208
	    else if (j < -8150)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   209
		lin[i+off] = -8150<<2;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   210
	    else
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   211
		lin[i+off] = (short)(j<<2);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   212
	}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   213
    }
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   214
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   215
    void noise(short[] lin,int off,int len,double power) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   216
	int i,r = (int)(power*2);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   217
	short ran;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   218
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   219
	if (r == 0) r = 1;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   220
	for (i = 0; i < len; i += 4) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   221
	    ran = (short)(random.nextInt(r*2)-r);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   222
	    lin[i+off] = ran;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   223
	    lin[i+off+1] = ran;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   224
	    lin[i+off+2] = ran;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   225
	    lin[i+off+3] = ran;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   226
	}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   227
    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   228
    public static float getMicGain() {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   229
	if (Call.headset > 0)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   230
	    return Float.valueOf(PreferenceManager.getDefaultSharedPreferences(Call.mContext).getString("hmicgain", "1.0"));
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   231
	return Float.valueOf(PreferenceManager.getDefaultSharedPreferences(Call.mContext).getString("micgain", "0.25"));
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   232
    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   233
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   234
    /** Runs it in a new Thread. */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   235
    public void run() {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   236
	if (rtp_socket == null)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   237
	    return;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   238
	byte[] buffer = new byte[frame_size + 12];
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   239
	RtpPacket rtp_packet = new RtpPacket(buffer, 0);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   240
	rtp_packet.setPayloadType(p_type);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   241
	int seqn = 0;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   242
	long time = 0;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   243
	double p = 0;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   244
	TelephonyManager tm = (TelephonyManager) Call.mContext.getSystemService(Context.TELEPHONY_SERVICE);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   245
	boolean improve = PreferenceManager.getDefaultSharedPreferences(Call.mContext).getBoolean("improve",false);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   246
	boolean useGSM = !PreferenceManager.getDefaultSharedPreferences(Call.mContext).getString("compression","edge").equals("never");
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   247
	int micgain = (int)(getMicGain()*10);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   248
	running = true;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   249
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   250
	if (DEBUG)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   251
	    println("Reading blocks of " + buffer.length + " bytes");
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   252
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   253
	android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   254
	AudioRecord record = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, 
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   255
	    AudioRecord.getMinBufferSize(8000, 
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   256
		AudioFormat.CHANNEL_CONFIGURATION_MONO, 
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   257
		AudioFormat.ENCODING_PCM_16BIT)*3/2);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   258
	short[] lin = new short[frame_size*11];
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   259
	int num,ring = 0;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   260
	random = new Random();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   261
	InputStream alerting = null;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   262
	try {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   263
	    alerting = Call.mContext.getAssets().open("alerting");
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   264
	} catch (IOException e2) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   265
	    e2.printStackTrace();
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   266
	}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   267
	switch (p_type) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   268
	    case 3:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   269
		Codec.init();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   270
		break;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   271
	    case 0:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   272
	    case 8:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   273
		G711.init();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   274
		break;
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   275
	}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   276
	record.startRecording();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   277
	while (running) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   278
	    if (muted || Call.call_state == Call.UA_STATE_HOLD) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   279
		record.stop();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   280
		while (running && (muted || Call.call_state == Call.UA_STATE_HOLD)) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   281
		    try {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   282
			sleep(1000);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   283
		    } catch (InterruptedException e1) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   284
			e1.printStackTrace();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   285
		    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   286
		}
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   287
		record.startRecording();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   288
	    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   289
	    num = record.read(lin,(ring+delay)%(frame_size*11),frame_size);
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   290
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   291
	    if (RtpStreamReceiver.speakermode == AudioManager.MODE_NORMAL) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   292
		calc(lin,(ring+delay)%(frame_size*11),num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   293
		if (RtpStreamReceiver.nearend != 0)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   294
		    noise(lin,(ring+delay)%(frame_size*11),num,p);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   295
		else if (RtpStreamReceiver.nearend == 0)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   296
		    p = 0.9*p + 0.1*s;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   297
	    } else switch (micgain) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   298
		case 1:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   299
		    calc1(lin,(ring+delay)%(frame_size*11),num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   300
		    break;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   301
		case 5:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   302
		    calc5(lin,(ring+delay)%(frame_size*11),num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   303
		    break;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   304
		case 10:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   305
		    calc10(lin,(ring+delay)%(frame_size*11),num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   306
		    break;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   307
	    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   308
	    if (Call.call_state != Call.UA_STATE_INCALL && alerting != null) {
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   309
		try {
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   310
		    if (alerting.available() < num)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   311
			alerting.reset();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   312
		    alerting.read(buffer,12,num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   313
		} catch (IOException e) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   314
		    e.printStackTrace();
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   315
		}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   316
		switch (p_type) {// have to add ulaw case?
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   317
		    case 3:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   318
			G711.alaw2linear(buffer, lin, num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   319
			num = Codec.encode(lin, 0, buffer, num);
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   320
			break;
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   321
		    case 0:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   322
			G711.alaw2linear(buffer, lin, num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   323
			G711.linear2ulaw(lin, 0, buffer, num);
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   324
			break;
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   325
		}
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   326
	    } else {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   327
		switch (p_type) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   328
		    case 3:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   329
			num = Codec.encode(lin, ring%(frame_size*11), buffer, num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   330
			break;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   331
		    case 0:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   332
			G711.linear2ulaw(lin, ring%(frame_size*11), buffer, num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   333
			break;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   334
		    case 8:
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   335
			G711.linear2alaw(lin, ring%(frame_size*11), buffer, num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   336
			break;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   337
		}
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   338
	    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   339
	    ring += frame_size;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   340
	    rtp_packet.setSequenceNumber(seqn++);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   341
	    rtp_packet.setTimestamp(time);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   342
	    rtp_packet.setPayloadLength(num);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   343
	    try {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   344
		rtp_socket.send(rtp_packet);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   345
	    } catch (IOException e) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   346
		e.printStackTrace();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   347
	    }
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   348
	    time += frame_size;
836
2f2f5e24ac6a Voip MAJ
nikita@nikita-laptop
parents: 835
diff changeset
   349
	    /*if (useGSM && p_type == 8 && !BeemConnectivity.isWifi(Call.mContext) && tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_EDGE) {
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   350
		rtp_packet.setPayloadType(p_type = 3);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   351
		if (frame_size == 1024) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   352
		    frame_size = 960;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   353
		    ring = 0;
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   354
		}
836
2f2f5e24ac6a Voip MAJ
nikita@nikita-laptop
parents: 835
diff changeset
   355
	    }*/
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   356
	}
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   357
	record.stop();
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   358
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   359
	rtp_socket.close();
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   360
	rtp_socket = null;
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   361
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   362
	if (DEBUG)
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   363
	    println("rtp sender terminated");
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   364
    }
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   365
835
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   366
    /** Debug output */
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   367
    private static void println(String str) {
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   368
	System.out.println("RtpStreamSender: " + str);
4e40f3481f23 new sipdroid
nikita@nikita-laptop
parents: 834
diff changeset
   369
    }
834
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   370
e8d6255306f8 Sipdroid Basic
nikita@nikita-laptop
parents: 830
diff changeset
   371
}