/******************************************************************************
* *
* Copyright (c) 1999-2003 Wimba S.A., All Rights Reserved. *
* *
* COPYRIGHT: *
* This software is the property of Wimba S.A. *
* This software is redistributed under the Xiph.org variant of *
* the BSD license. *
* Redistribution and use in source and binary forms, with or without *
* modification, are permitted provided that the following conditions *
* are met: *
* - Redistributions of source code must retain the above copyright *
* notice, this list of conditions and the following disclaimer. *
* - Redistributions in binary form must reproduce the above copyright *
* notice, this list of conditions and the following disclaimer in the *
* documentation and/or other materials provided with the distribution. *
* - Neither the name of Wimba, the Xiph.org Foundation nor the names of *
* its contributors may be used to endorse or promote products derived *
* from this software without specific prior written permission. *
* *
* WARRANTIES: *
* This software is made available by the authors in the hope *
* that it will be useful, but without any warranty. *
* Wimba S.A. is not liable for any consequence related to the *
* use of the provided software. *
* *
* Class: Inband.java *
* *
* Author: Marc GIMPEL *
* *
* Date: 14th July 2003 *
* *
******************************************************************************/
/* $Id: Inband.java,v 1.2 2004/10/21 16:21:57 mgimpel Exp $ */
package org.xiph.speex;
import java.io.StreamCorruptedException;
/**
* Speex in-band and User in-band controls.
*
* @author Marc Gimpel, Wimba S.A. (mgimpel@horizonwimba.com)
* @version $Revision: 1.2 $
*/
public class Inband
{
private Stereo stereo;
/**
* Constructor.
* @param stereo
*/
public Inband (final Stereo stereo)
{
this.stereo = stereo;
}
/**
* Speex in-band request (submode=14).
* @param bits - Speex bits buffer.
* @throws StreamCorruptedException If stream seems corrupted.
*/
public void speexInbandRequest(final Bits bits)
throws StreamCorruptedException
{
int code = bits.unpack(4);
switch (code) {
case 0: // asks the decoder to set perceptual enhancment off (0) or on (1)
bits.advance(1);
break;
case 1: // asks (if 1) the encoder to be less "aggressive" due to high packet loss
bits.advance(1);
break;
case 2: // asks the encoder to switch to mode N
bits.advance(4);
break;
case 3: // asks the encoder to switch to mode N for low-band
bits.advance(4);
break;
case 4: // asks the encoder to switch to mode N for high-band
bits.advance(4);
break;
case 5: // asks the encoder to switch to quality N for VBR
bits.advance(4);
break;
case 6: // request acknowledgement (0=no, 1=all, 2=only for inband data)
bits.advance(4);
break;
case 7: // asks the encoder to set CBR(0), VAD(1), DTX(3), VBR(5), VBR+DTX(7)
bits.advance(4);
break;
case 8: // transmit (8-bit) character to the other end
bits.advance(8);
break;
case 9: // intensity stereo information
// setup the stereo decoder; to skip: tmp = bits.unpack(8); break;
stereo.init(bits); // read 8 bits
break;
case 10: // announce maximum bit-rate acceptable (N in byets/second)
bits.advance(16);
break;
case 11: // reserved
bits.advance(16);
break;
case 12: // Acknowledge receiving packet N
bits.advance(32);
break;
case 13: // reserved
bits.advance(32);
break;
case 14: // reserved
bits.advance(64);
break;
case 15: // reserved
bits.advance(64);
break;
default:
}
}
/**
* User in-band request (submode=13).
* @param bits - Speex bits buffer.
* @throws StreamCorruptedException If stream seems corrupted.
*/
public void userInbandRequest(final Bits bits)
throws StreamCorruptedException
{
int req_size = bits.unpack(4);
bits.advance(5+8*req_size);
}
}