diff options
author | Chia-chi Yeh <chiachi@android.com> | 2010-07-07 15:23:47 +0800 |
---|---|---|
committer | Chia-chi Yeh <chiachi@android.com> | 2010-07-07 15:23:47 +0800 |
commit | 3e792835c3821efd4820634d88657ca639770207 (patch) | |
tree | 4acf8d4a4d2ca88853177c731d19c0a714a2df7d | |
parent | 76e4dcfcb20243c9caeaa02e2df4e32630f9b50e (diff) | |
download | android_external_nist-sip-3e792835c3821efd4820634d88657ca639770207.tar.gz android_external_nist-sip-3e792835c3821efd4820634d88657ca639770207.tar.bz2 android_external_nist-sip-3e792835c3821efd4820634d88657ca639770207.zip |
RTP: add Java AudioGroup.
Change-Id: Ieb988b9054cfca78ba617503985f84b8ef22a999
-rw-r--r-- | src/android/net/rtp/AudioGroup.java | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/android/net/rtp/AudioGroup.java b/src/android/net/rtp/AudioGroup.java new file mode 100644 index 0000000..bd17636 --- /dev/null +++ b/src/android/net/rtp/AudioGroup.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.rtp; + +import java.util.HashMap; +import java.util.Map; + +/** + */ +public class AudioGroup { + public static final int MODE_ON_HOLD = 0; + public static final int MODE_MUTED = 1; + public static final int MODE_NORMAL = 2; + public static final int MODE_EC_ENABLED = 3; + + private final Map<AudioStream, Integer> mStreams; + private int mMode = MODE_ON_HOLD; + + private int mNative; + static { + System.loadLibrary("rtp_jni"); + } + + public AudioGroup() { + mStreams = new HashMap<AudioStream, Integer>(); + } + + public int getMode() { + return mMode; + } + + public synchronized native void setMode(int mode); + + synchronized void add(AudioStream stream, AudioCodec codec, int codecType, int dtmfType) { + if (!mStreams.containsKey(stream)) { + try { + int id = add(stream.getMode(), stream.dup(), + stream.getRemoteAddress().getHostAddress(), stream.getRemotePort(), + codec.name, codec.sampleRate, codec.sampleCount, codecType, dtmfType); + mStreams.put(stream, id); + } catch (NullPointerException e) { + throw new IllegalStateException(e); + } + } + } + + private native int add(int mode, int socket, String remoteAddress, int remotePort, + String codecName, int sampleRate, int sampleCount, int codecType, int dtmfType); + + synchronized void remove(AudioStream stream) { + Integer id = mStreams.remove(stream); + if (id != null) { + remove(id); + } + } + + private native void remove(int id); + + /** + * Sends a DTMF digit to every {@link AudioStream} in this group. Currently + * only event {@code 0} to {@code 15} are supported. + * + * @throws IllegalArgumentException if the event is invalid. + */ + public native synchronized void sendDtmf(int event); + + public synchronized void reset() { + remove(-1); + } + + @Override + protected void finalize() throws Throwable { + reset(); + super.finalize(); + } +} |