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