Methods Summary |
---|
private static native void | GsmAmrEncoderCleanup(long gae)
|
private static native void | GsmAmrEncoderDelete(long gae)
|
private static native int | GsmAmrEncoderEncode(long gae, byte[] pcm, int pcmOffset, byte[] amr, int amrOffset)
|
private static native void | GsmAmrEncoderInitialize(long gae)
|
private static native long | GsmAmrEncoderNew()
|
public void | close()
try {
if (mInputStream != null) mInputStream.close();
} finally {
mInputStream = null;
try {
if (mGae != 0) GsmAmrEncoderCleanup(mGae);
} finally {
try {
if (mGae != 0) GsmAmrEncoderDelete(mGae);
} finally {
mGae = 0;
}
}
}
|
protected void | finalize()
if (mGae != 0) {
close();
throw new IllegalStateException("someone forgot to close AmrInputStream");
}
|
public int | read()
int rtn = read(mOneByte, 0, 1);
return rtn == 1 ? (0xff & mOneByte[0]) : -1;
|
public int | read(byte[] b)
return read(b, 0, b.length);
|
public int | read(byte[] b, int offset, int length)
if (mGae == 0) throw new IllegalStateException("not open");
// local buffer of amr encoded audio empty
if (mBufOut >= mBufIn) {
// reset the buffer
mBufOut = 0;
mBufIn = 0;
// fetch a 20 msec frame of pcm
for (int i = 0; i < SAMPLES_PER_FRAME * 2; ) {
int n = mInputStream.read(mBuf, i, SAMPLES_PER_FRAME * 2 - i);
if (n == -1) return -1;
i += n;
}
// encode it
mBufIn = GsmAmrEncoderEncode(mGae, mBuf, 0, mBuf, 0);
}
// return encoded audio to user
if (length > mBufIn - mBufOut) length = mBufIn - mBufOut;
System.arraycopy(mBuf, mBufOut, b, offset, length);
mBufOut += length;
return length;
|