src/jlibrtp/RtcpPktPSFB.java
author Da Risk <darisk972@gmail.com>
Tue, 14 Apr 2009 16:56:20 +0200
changeset 105 c6e4728ac9f7
parent 13 e684f11070d5
permissions -rw-r--r--
Passage sous cupcake :) Peu de modification de code, il faut juste creer des fichier aidl pour les classes parcelables. Sinon les fichier de build.xml ont ete completement modifiés, j'ai remplacé par les nouveaux. (il doit y avoir un manque de precision dans le fichier build.properties)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     1
/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     2
 * Java RTP Library (jlibrtp)
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     3
 * Copyright (C) 2006 Arne Kepp
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     4
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     5
 * This library is free software; you can redistribute it and/or
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     6
 * modify it under the terms of the GNU Lesser General Public
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     7
 * License as published by the Free Software Foundation; either
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     8
 * version 2.1 of the License, or (at your option) any later version.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     9
 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    10
 * This library is distributed in the hope that it will be useful,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    13
 * Lesser General Public License for more details.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    14
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    15
 * You should have received a copy of the GNU Lesser General Public
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    16
 * License along with this library; if not, write to the Free Software
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    18
 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    19
package jlibrtp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    20
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    21
/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    22
 * RTCP packets for Payload-Specific Feedback Messages 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    23
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    24
 * @author Arne Kepp
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    25
 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    26
public class RtcpPktPSFB extends RtcpPkt {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    27
	/** If this packet was for a different SSRC */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    28
	protected boolean notRelevant = false;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    29
	/** Parent RTP Session */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    30
	private RTPSession rtpSession;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    31
	/** SSRC we are sending feeback to */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    32
	protected long ssrcMediaSource = -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    33
	 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    34
	/** SLI macroblock (MB) address of the first lost macroblock number */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    35
	protected int[] sliFirst;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    36
	/** SLI number of lost macroblocks */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    37
	protected int[] sliNumber;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    38
	/** SLI six least significant bits of the codec-specific identifier */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    39
	protected int[] sliPictureId;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    40
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    41
	// Picture loss indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    42
	/** RPSI number of padded bits at end of bitString */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    43
	protected int rpsiPadding = -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    44
	/** RPSI payloadType RTP payload type */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    45
	protected int rpsiPayloadType = -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    46
	/** RPSI information as natively defined by the video codec */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    47
	protected byte[] rpsiBitString;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    48
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    49
	/** Application Layer Feedback Message */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    50
	protected byte[] alfBitString;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    51
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    52
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    53
	 * Generic constructor, then call make<something>
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    54
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    55
	 * @param ssrcPacketSender
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    56
	 * @param ssrcMediaSource
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    57
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    58
	protected RtcpPktPSFB(long ssrcPacketSender, long ssrcMediaSource) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    59
		super.ssrc = ssrcPacketSender;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    60
		this.ssrcMediaSource = ssrcMediaSource;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    61
		super.packetType = 206; //PSFB
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    62
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    63
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    64
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    65
	 * Make this packet a Picture loss indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    66
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    67
	protected void makePictureLossIndication() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    68
		super.itemCount = 1; //FMT
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    69
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    70
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    71
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    72
	 * Make this packet a Slice Loss Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    73
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    74
	 * @param sliFirst macroblock (MB) address of the first lost macroblock
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    75
	 * @param sliNumber number of lost macroblocks
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    76
	 * @param sliPictureId six least significant bits of the codec-specific identifier
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    77
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    78
	protected void makeSliceLossIndication(int[] sliFirst, int[] sliNumber, int[] sliPictureId) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    79
		super.itemCount = 2; //FMT
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    80
		this.sliFirst = sliFirst;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    81
		this.sliNumber = sliNumber;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    82
		this.sliPictureId = sliPictureId;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    83
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    84
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    85
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    86
	 * Make this packet a Reference Picture Selection Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    87
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    88
	 * @param bitPadding number of padded bits at end of bitString
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    89
	 * @param payloadType RTP payload type for codec
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    90
	 * @param bitString RPSI information as natively defined by the video codec
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    91
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    92
	protected void makeRefPictureSelIndic(int bitPadding, int payloadType, byte[] bitString) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    93
		super.itemCount = 3; //FMT
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    94
		this.rpsiPadding = bitPadding;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    95
		this.rpsiPayloadType = payloadType;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    96
		this.rpsiBitString = bitString;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    97
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    98
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    99
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   100
	 * Make this packet an Application specific feedback message
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   101
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   102
	 * @param bitString the original application message
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   103
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   104
	protected void makeAppLayerFeedback(byte[] bitString) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   105
		super.itemCount = 15; //FMT
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   106
		this.alfBitString = bitString; 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   107
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   108
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   109
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   110
	 * Constructor that parses a raw packet to retrieve information
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   111
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   112
	 * @param aRawPkt the raw packet to be parsed
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   113
	 * @param start the start of the packet, in bytes
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   114
	 * @param rtpSession the session on which the callback interface resides
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   115
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   116
	protected RtcpPktPSFB(byte[] aRawPkt, int start, RTPSession rtpSession) {		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   117
		if(RTPSession.rtpDebugLevel > 8) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   118
			System.out.println("  -> RtcpPktPSFB(byte[], int start)");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   119
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   120
		this.rtpSession = rtpSession;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   121
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   122
		rawPkt = aRawPkt;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   123
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   124
		if(! super.parseHeaders(start) || packetType != 206 || super.length < 2 ) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   125
			if(RTPSession.rtpDebugLevel > 2) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   126
				System.out.println(" <-> RtcpPktRTPFB.parseHeaders() etc. problem");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   127
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   128
			super.problem = -206;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   129
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   130
			//FMT = super.itemCount;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   131
			ssrcMediaSource = StaticProcs.bytesToUIntLong(aRawPkt,8+start);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   132
			
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   133
			if(ssrcMediaSource == rtpSession.ssrc) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   134
				super.ssrc = StaticProcs.bytesToUIntLong(aRawPkt,4+start);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   135
				
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   136
				switch(super.itemCount) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   137
				case 1: // Picture Loss Indication 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   138
					decPictureLossIndic();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   139
					break; 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   140
				case 2: // Slice Loss Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   141
					decSliceLossIndic(aRawPkt, start + 12); 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   142
					break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   143
				case 3: // Reference Picture Selection Indication 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   144
					decRefPictureSelIndic(aRawPkt, start + 12); 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   145
					break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   146
				case 15: // Application Layer Feedback Messages
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   147
					decAppLayerFB(aRawPkt, start + 12); 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   148
					break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   149
				default: 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   150
					System.out.println("!!!! RtcpPktPSFB(byte[], int start) unexpected FMT " + super.itemCount);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   151
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   152
			} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   153
				this.notRelevant = true;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   154
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   155
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   156
		if(RTPSession.rtpDebugLevel > 8) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   157
			System.out.println("  <- RtcpPktPSFB()");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   158
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   159
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   160
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   161
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   162
	 * Decode Picture Loss indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   163
	 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   164
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   165
	private void decPictureLossIndic() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   166
		if(this.rtpSession.rtcpAVPFIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   167
			this.rtpSession.rtcpAVPFIntf.PSFBPktPictureLossReceived(
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   168
					super.ssrc);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   169
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   170
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   171
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   172
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   173
	 * Decode Slice Loss Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   174
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   175
	 * @param aRawPkt
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   176
	 * @param start
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   177
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   178
	private void decSliceLossIndic(byte[] aRawPkt, int start) {	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   179
		// 13 bit off-boundary numbers? That's rather cruel
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   180
		//    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   181
		//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   182
		//   |            First        |        Number           | PictureID |
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   183
		//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   184
				
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   185
		int count = super.length - 2;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   186
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   187
		sliFirst = new int[count];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   188
		sliNumber = new int[count];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   189
		sliPictureId = new int[count];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   190
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   191
		// Loop over the FCI lines
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   192
		for(int i=0; i < count; i++) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   193
			sliFirst[i] = StaticProcs.bytesToUIntInt(aRawPkt, start) >> 3;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   194
			sliNumber[i] = (int) (StaticProcs.bytesToUIntInt(aRawPkt, start) & 0x0007FFC0) >> 6;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   195
			sliPictureId[i] = (StaticProcs.bytesToUIntInt(aRawPkt, start + 2) & 0x003F);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   196
			start += 4;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   197
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   198
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   199
		if(this.rtpSession.rtcpAVPFIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   200
			this.rtpSession.rtcpAVPFIntf.PSFBPktSliceLossIndic(
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   201
					super.ssrc,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   202
					sliFirst, sliNumber, sliPictureId);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   203
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   204
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   205
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   206
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   207
	 * Decode Reference Picture Selection Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   208
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   209
	 * @param aRawPkt
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   210
	 * @param start
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   211
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   212
	private void decRefPictureSelIndic(byte[] aRawPkt, int start) {	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   213
		//  0                   1                   2                   3
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   214
		//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   215
		// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   216
		// |      PB       |0| Payload Type|    Native RPSI bit string     |
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   217
		// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   218
		// |   defined per codec          ...                | Padding (0) |
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   219
		// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   220
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   221
		rpsiPadding = aRawPkt[start];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   222
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   223
		if(rpsiPadding  > 32) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   224
			System.out.println("!!!! RtcpPktPSFB.decRefPictureSelcIndic paddingBits: " 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   225
					+ rpsiPadding);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   226
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   227
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   228
		rpsiPayloadType = (int) rawPkt[start];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   229
		if(rpsiPayloadType < 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   230
			System.out.println("!!!! RtcpPktPSFB.decRefPictureSelcIndic 8th bit not zero: " 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   231
					+ rpsiPayloadType);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   232
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   233
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   234
		rpsiBitString = new byte[(super.length - 2)*4 - 2];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   235
		System.arraycopy(aRawPkt, start + 2, rpsiBitString, 0, rpsiBitString.length);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   236
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   237
		if(this.rtpSession.rtcpAVPFIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   238
			this.rtpSession.rtcpAVPFIntf.PSFBPktRefPictureSelIndic(
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   239
					super.ssrc,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   240
					rpsiPayloadType, rpsiBitString, rpsiPadding);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   241
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   242
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   243
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   244
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   245
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   246
	 * Decode Application specific feedback message
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   247
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   248
	 * @param aRawPkt
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   249
	 * @param start
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   250
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   251
	private void decAppLayerFB(byte[] aRawPkt, int start) {	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   252
		//Application Message (FCI): variable length
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   253
		int stringLength = (super.length - 2)*4;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   254
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   255
		alfBitString = new byte[stringLength];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   256
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   257
		System.arraycopy(aRawPkt, start, alfBitString, 0, stringLength);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   258
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   259
		if(this.rtpSession.rtcpAVPFIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   260
			this.rtpSession.rtcpAVPFIntf.PSFBPktAppLayerFBReceived(
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   261
					super.ssrc, alfBitString);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   262
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   263
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   264
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   265
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   266
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   267
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   268
	 * Encode a Slice Loss Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   269
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   270
	private void encSliceLossIndic() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   271
		byte[] firstBytes;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   272
		byte[] numbBytes;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   273
		byte[] picBytes;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   274
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   275
		int offset = 8;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   276
		// Loop over the FCI lines
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   277
		for(int i=0; i < sliFirst.length; i++) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   278
			offset = 8 + 8*i;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   279
			firstBytes = StaticProcs.uIntLongToByteWord(sliFirst[i] << 3);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   280
			numbBytes = StaticProcs.uIntLongToByteWord(sliNumber[i] << 2);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   281
			picBytes = StaticProcs.uIntIntToByteWord(sliPictureId[i]);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   282
			
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   283
			super.rawPkt[offset] = firstBytes[2];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   284
			super.rawPkt[offset+1] = (byte) (firstBytes[3] | numbBytes[2]);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   285
			super.rawPkt[offset+2] = numbBytes[3];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   286
			super.rawPkt[offset+3] = (byte) (numbBytes[3] | picBytes[1]);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   287
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   288
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   289
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   290
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   291
	 * Encode a Reference Picture Selection Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   292
	 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   293
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   294
	private void encRefPictureSelIndic() {	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   295
		byte[] someBytes;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   296
		someBytes = StaticProcs.uIntIntToByteWord(rpsiPadding);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   297
		super.rawPkt[8] = someBytes[1];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   298
		someBytes = StaticProcs.uIntIntToByteWord(rpsiPayloadType);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   299
		super.rawPkt[9] = someBytes[1];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   300
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   301
		System.arraycopy(rpsiBitString, 0, super.rawPkt, 10, rpsiBitString.length);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   302
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   303
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   304
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   305
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   306
	 * Encode Application Layer Feedback
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   307
	 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   308
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   309
	private void encAppLayerFB() {	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   310
		//Application Message (FCI): variable length
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   311
		System.arraycopy(alfBitString, 0, super.rawPkt, 8, alfBitString.length);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   312
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   313
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   314
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   315
	 * Get the FMT (Feedback Message Type)
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   316
	 * @return value stored in .itemcount, same field
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   317
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   318
	protected int getFMT() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   319
		return this.itemCount;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   320
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   321
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   322
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   323
	 * Encode the packet into a byte[], saved in .rawPkt
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   324
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   325
	 * CompRtcpPkt will call this automatically
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   326
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   327
	protected void encode() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   328
		switch(super.itemCount) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   329
		case 1: // Picture Loss Indication 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   330
			//Nothing to do really
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   331
			super.rawPkt = new byte[24];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   332
			break; 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   333
		case 2: // Slice Loss Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   334
			super.rawPkt = new byte[24 + 4*this.sliFirst.length];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   335
			encSliceLossIndic(); 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   336
			break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   337
		case 3: // Reference Picture Selection Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   338
			super.rawPkt = new byte[24 + 2 + this.rpsiBitString.length/4];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   339
			encRefPictureSelIndic();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   340
			break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   341
		case 15: // Application Layer Feedback Messages
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   342
			super.rawPkt = new byte[24 + this.alfBitString.length/4];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   343
			encAppLayerFB();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   344
			break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   345
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   346
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   347
		byte[] someBytes = StaticProcs.uIntLongToByteWord(super.ssrc);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   348
		System.arraycopy(someBytes, 0, super.rawPkt, 4, 4);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   349
		someBytes = StaticProcs.uIntLongToByteWord(this.ssrcMediaSource);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   350
		System.arraycopy(someBytes, 0, super.rawPkt, 8, 4);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   351
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   352
		writeHeaders();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   353
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   354
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   355
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   356
	 * Debug purposes only
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   357
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   358
	public void debugPrint() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   359
		System.out.println("->RtcpPktPSFB.debugPrint() ");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   360
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   361
		String str;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   362
		switch(super.itemCount) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   363
		case 1: // Picture Loss Indication 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   364
			System.out.println("  FMT: Picture Loss Indication");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   365
			break; 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   366
		case 2: // Slice Loss Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   367
			if(sliFirst != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   368
				str = "sliFirst[].length: " + sliFirst.length;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   369
			} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   370
				str = "sliFirst[] is null";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   371
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   372
			System.out.println("  FMT: Slice Loss Indication, " + str);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   373
			break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   374
		case 3: // Reference Picture Selection Indication
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   375
			if(rpsiBitString != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   376
				str = "rpsiBitString[].length: " + rpsiBitString.length;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   377
			} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   378
				str = "rpsiBitString[] is null";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   379
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   380
			System.out.println("  FMT: Reference Picture Selection Indication, " 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   381
					+ str + " payloadType: " + this.rpsiPayloadType);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   382
			break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   383
		case 15: // Application Layer Feedback Messages
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   384
			if(alfBitString != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   385
				str = "alfBitString[].length: " + alfBitString.length;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   386
			} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   387
				str = "alfBitString[] is null";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   388
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   389
			System.out.println("  FMT: Application Layer Feedback Messages, " + str);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   390
			break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   391
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   392
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   393
		System.out.println("<-RtcpPktPSFB.debugPrint() ");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   394
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   395
}