android_media_AudioSystem.cpp revision 24fc2fb1c541e954b83fd31ea9f786a5e9b45501
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* //device/libs/android_runtime/android_media_AudioSystem.cpp 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2006, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define LOG_TAG "AudioSystem" 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "utils/Log.h" 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdio.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <unistd.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <fcntl.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <math.h> 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "jni.h" 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "JNIHelp.h" 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "android_runtime/AndroidRuntime.h" 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/AudioSystem.h> 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/AudioTrack.h> 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3324fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin#include <hardware/audio.h> 3424fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin#include <hardware/audio_policy.h> 3524fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace android; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kastenstatic const char* const kClassPathName = "android/media/AudioSystem"; 41ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum AudioError { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kAudioStatusOk = 0, 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kAudioStatusError = 1, 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kAudioStatusMediaServerDied = 100 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic int check_AudioSystem_Command(status_t status) 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (status == NO_ERROR) { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return kAudioStatusOk; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return kAudioStatusError; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic int 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_AudioSystem_muteMicrophone(JNIEnv *env, jobject thiz, jboolean on) 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return check_AudioSystem_Command(AudioSystem::muteMicrophone(on)); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_AudioSystem_isMicrophoneMuted(JNIEnv *env, jobject thiz) 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool state = false; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioSystem::isMicrophoneMuted(&state); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return state; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 7225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurentandroid_media_AudioSystem_isStreamActive(JNIEnv *env, jobject thiz, jint stream, jint inPastMs) 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool state = false; 7525101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent AudioSystem::isStreamActive(stream, &state, inPastMs); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return state; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 79a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 80a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setParameters(JNIEnv *env, jobject thiz, jstring keyValuePairs) 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 82a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const jchar* c_keyValuePairs = env->GetStringCritical(keyValuePairs, 0); 83a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent String8 c_keyValuePairs8; 84a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (keyValuePairs) { 85a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_keyValuePairs8 = String8(c_keyValuePairs, env->GetStringLength(keyValuePairs)); 86a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringCritical(keyValuePairs, c_keyValuePairs); 87a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 88a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int status = check_AudioSystem_Command(AudioSystem::setParameters(0, c_keyValuePairs8)); 89a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return status; 90a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 91a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 92a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic jstring 93a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getParameters(JNIEnv *env, jobject thiz, jstring keys) 94a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 95a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const jchar* c_keys = env->GetStringCritical(keys, 0); 96a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent String8 c_keys8; 97a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (keys) { 98a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_keys8 = String8(c_keys, env->GetStringLength(keys)); 99a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringCritical(keys, c_keys); 100a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 101a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return env->NewStringUTF(AudioSystem::getParameters(0, c_keys8).string()); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 104ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kastenstatic void 105ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kastenandroid_media_AudioSystem_error_callback(status_t err) 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JNIEnv *env = AndroidRuntime::getJNIEnv(); 1080e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent if (env == NULL) { 1090e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent return; 1100e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent } 1110e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent 112ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten jclass clazz = env->FindClass(kClassPathName); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int error; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (err) { 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEAD_OBJECT: 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusMediaServerDied; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case NO_ERROR: 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusOk; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusError; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->CallStaticVoidMethod(clazz, env->GetStaticMethodID(clazz, "errorCallbackFromNative","(I)V"), error); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 131a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 132a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jint state, jstring device_address) 133a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 134a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const char *c_address = env->GetStringUTFChars(device_address, NULL); 13524fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin int status = check_AudioSystem_Command(AudioSystem::setDeviceConnectionState(static_cast <audio_devices_t>(device), 13624fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin static_cast <audio_policy_dev_state_t>(state), 137a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_address)); 138a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringUTFChars(device_address, c_address); 139a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return status; 140a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 141a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 142a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 143a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jstring device_address) 144a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 145a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const char *c_address = env->GetStringUTFChars(device_address, NULL); 14624fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin int state = static_cast <int>(AudioSystem::getDeviceConnectionState(static_cast <audio_devices_t>(device), 147a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_address)); 148a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringUTFChars(device_address, c_address); 149a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return state; 150a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 151a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 152a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 153a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setPhoneState(JNIEnv *env, jobject thiz, jint state) 154a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 155a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setPhoneState(state)); 156a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 157a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 158a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 159a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setRingerMode(JNIEnv *env, jobject thiz, jint mode, jint mask) 160a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 161a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setRingerMode(mode, mask)); 162a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 163a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 164a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 165a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setForceUse(JNIEnv *env, jobject thiz, jint usage, jint config) 166a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 16724fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin return check_AudioSystem_Command(AudioSystem::setForceUse(static_cast <audio_policy_force_use_t>(usage), 16824fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin static_cast <audio_policy_forced_cfg_t>(config))); 169a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 170a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 171a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 172a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getForceUse(JNIEnv *env, jobject thiz, jint usage) 173a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 17424fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin return static_cast <int>(AudioSystem::getForceUse(static_cast <audio_policy_force_use_t>(usage))); 175a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 176a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 177a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 178a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_initStreamVolume(JNIEnv *env, jobject thiz, jint stream, jint indexMin, jint indexMax) 179a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 18024fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin return check_AudioSystem_Command(AudioSystem::initStreamVolume(static_cast <audio_stream_type_t>(stream), 181a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent indexMin, 182a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent indexMax)); 183a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 184a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 185a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 186a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream, jint index) 187a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 18824fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin return check_AudioSystem_Command(AudioSystem::setStreamVolumeIndex(static_cast <audio_stream_type_t>(stream), index)); 189a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 190a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 191a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 192a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream) 193a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 194a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int index; 19524fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin if (AudioSystem::getStreamVolumeIndex(static_cast <audio_stream_type_t>(stream), &index) != NO_ERROR) { 196a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent index = -1; 197a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 198a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return index; 199a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 200a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 2018b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kastenstatic jint 2028b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kastenandroid_media_AudioSystem_getDevicesForStream(JNIEnv *env, jobject thiz, jint stream) 2038b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten{ 20424fc2fb1c541e954b83fd31ea9f786a5e9b45501Dima Zavin return (jint) AudioSystem::getDevicesForStream(static_cast <audio_stream_type_t>(stream)); 2058b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten} 2068b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gMethods[] = { 210a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setParameters", "(Ljava/lang/String;)I", (void *)android_media_AudioSystem_setParameters}, 211a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getParameters", "(Ljava/lang/String;)Ljava/lang/String;", (void *)android_media_AudioSystem_getParameters}, 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"muteMicrophone", "(Z)I", (void *)android_media_AudioSystem_muteMicrophone}, 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"isMicrophoneMuted", "()Z", (void *)android_media_AudioSystem_isMicrophoneMuted}, 21425101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent {"isStreamActive", "(II)Z", (void *)android_media_AudioSystem_isStreamActive}, 215a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setDeviceConnectionState", "(IILjava/lang/String;)I", (void *)android_media_AudioSystem_setDeviceConnectionState}, 216a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getDeviceConnectionState", "(ILjava/lang/String;)I", (void *)android_media_AudioSystem_getDeviceConnectionState}, 217a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setPhoneState", "(I)I", (void *)android_media_AudioSystem_setPhoneState}, 218a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setRingerMode", "(II)I", (void *)android_media_AudioSystem_setRingerMode}, 219a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setForceUse", "(II)I", (void *)android_media_AudioSystem_setForceUse}, 220a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getForceUse", "(I)I", (void *)android_media_AudioSystem_getForceUse}, 221a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"initStreamVolume", "(III)I", (void *)android_media_AudioSystem_initStreamVolume}, 222a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setStreamVolumeIndex","(II)I", (void *)android_media_AudioSystem_setStreamVolumeIndex}, 2238b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten {"getStreamVolumeIndex","(I)I", (void *)android_media_AudioSystem_getStreamVolumeIndex}, 2248b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten {"getDevicesForStream", "(I)I", (void *)android_media_AudioSystem_getDevicesForStream}, 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_media_AudioSystem(JNIEnv *env) 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioSystem::setErrorCallback(android_media_AudioSystem_error_callback); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return AndroidRuntime::registerNativeMethods(env, 232ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten kClassPathName, gMethods, NELEM(gMethods)); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 234