android_media_AudioSystem.cpp revision ed0079ddddd4070f3369b13b274222da2e69f4b9
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 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace android; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kastenstatic const char* const kClassPathName = "android/media/AudioSystem"; 38ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum AudioError { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kAudioStatusOk = 0, 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kAudioStatusError = 1, 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kAudioStatusMediaServerDied = 100 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic int check_AudioSystem_Command(status_t status) 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (status == NO_ERROR) { 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return kAudioStatusOk; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return kAudioStatusError; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic int 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_AudioSystem_muteMicrophone(JNIEnv *env, jobject thiz, jboolean on) 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return check_AudioSystem_Command(AudioSystem::muteMicrophone(on)); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_AudioSystem_isMicrophoneMuted(JNIEnv *env, jobject thiz) 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool state = false; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioSystem::isMicrophoneMuted(&state); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return state; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 6925101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurentandroid_media_AudioSystem_isStreamActive(JNIEnv *env, jobject thiz, jint stream, jint inPastMs) 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool state = false; 7225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent AudioSystem::isStreamActive(stream, &state, inPastMs); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return state; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 76a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 77a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setParameters(JNIEnv *env, jobject thiz, jstring keyValuePairs) 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 79a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const jchar* c_keyValuePairs = env->GetStringCritical(keyValuePairs, 0); 80a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent String8 c_keyValuePairs8; 81a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (keyValuePairs) { 82a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_keyValuePairs8 = String8(c_keyValuePairs, env->GetStringLength(keyValuePairs)); 83a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringCritical(keyValuePairs, c_keyValuePairs); 84a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 85a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int status = check_AudioSystem_Command(AudioSystem::setParameters(0, c_keyValuePairs8)); 86a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return status; 87a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 88a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 89a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic jstring 90a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getParameters(JNIEnv *env, jobject thiz, jstring keys) 91a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 92a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const jchar* c_keys = env->GetStringCritical(keys, 0); 93a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent String8 c_keys8; 94a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (keys) { 95a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_keys8 = String8(c_keys, env->GetStringLength(keys)); 96a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringCritical(keys, c_keys); 97a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 98a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return env->NewStringUTF(AudioSystem::getParameters(0, c_keys8).string()); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 101ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kastenstatic void 102ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kastenandroid_media_AudioSystem_error_callback(status_t err) 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JNIEnv *env = AndroidRuntime::getJNIEnv(); 1050e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent if (env == NULL) { 1060e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent return; 1070e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent } 1080e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent 109ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten jclass clazz = env->FindClass(kClassPathName); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int error; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (err) { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEAD_OBJECT: 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusMediaServerDied; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case NO_ERROR: 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusOk; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusError; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->CallStaticVoidMethod(clazz, env->GetStaticMethodID(clazz, "errorCallbackFromNative","(I)V"), error); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 128a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 129a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jint state, jstring device_address) 130a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 131a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const char *c_address = env->GetStringUTFChars(device_address, NULL); 132a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int status = check_AudioSystem_Command(AudioSystem::setDeviceConnectionState(static_cast <AudioSystem::audio_devices>(device), 133a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent static_cast <AudioSystem::device_connection_state>(state), 134a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_address)); 135a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringUTFChars(device_address, c_address); 136a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return status; 137a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 138a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 139a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 140a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jstring device_address) 141a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 142a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const char *c_address = env->GetStringUTFChars(device_address, NULL); 143a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int state = static_cast <int>(AudioSystem::getDeviceConnectionState(static_cast <AudioSystem::audio_devices>(device), 144a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_address)); 145a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringUTFChars(device_address, c_address); 146a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return state; 147a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 148a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 149a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 150a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setPhoneState(JNIEnv *env, jobject thiz, jint state) 151a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 152a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setPhoneState(state)); 153a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 154a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 155a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 156a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setRingerMode(JNIEnv *env, jobject thiz, jint mode, jint mask) 157a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 158a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setRingerMode(mode, mask)); 159a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 160a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 161a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 162a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setForceUse(JNIEnv *env, jobject thiz, jint usage, jint config) 163a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 164a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setForceUse(static_cast <AudioSystem::force_use>(usage), 165a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent static_cast <AudioSystem::forced_config>(config))); 166a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 167a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 168a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 169a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getForceUse(JNIEnv *env, jobject thiz, jint usage) 170a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 171a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return static_cast <int>(AudioSystem::getForceUse(static_cast <AudioSystem::force_use>(usage))); 172a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 173a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 174a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 175a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_initStreamVolume(JNIEnv *env, jobject thiz, jint stream, jint indexMin, jint indexMax) 176a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 177a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::initStreamVolume(static_cast <AudioSystem::stream_type>(stream), 178a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent indexMin, 179a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent indexMax)); 180a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 181a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 182a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 183a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream, jint index) 184a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 185a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setStreamVolumeIndex(static_cast <AudioSystem::stream_type>(stream), index)); 186a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 187a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 188a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 189a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream) 190a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 191a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int index; 192a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (AudioSystem::getStreamVolumeIndex(static_cast <AudioSystem::stream_type>(stream), &index) != NO_ERROR) { 193a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent index = -1; 194a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 195a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return index; 196a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 197a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 1988b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kastenstatic jint 1998b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kastenandroid_media_AudioSystem_getDevicesForStream(JNIEnv *env, jobject thiz, jint stream) 2008b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten{ 2018b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten return (jint) AudioSystem::getDevicesForStream(static_cast <AudioSystem::stream_type>(stream)); 2028b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten} 2038b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gMethods[] = { 207a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setParameters", "(Ljava/lang/String;)I", (void *)android_media_AudioSystem_setParameters}, 208a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getParameters", "(Ljava/lang/String;)Ljava/lang/String;", (void *)android_media_AudioSystem_getParameters}, 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"muteMicrophone", "(Z)I", (void *)android_media_AudioSystem_muteMicrophone}, 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"isMicrophoneMuted", "()Z", (void *)android_media_AudioSystem_isMicrophoneMuted}, 21125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent {"isStreamActive", "(II)Z", (void *)android_media_AudioSystem_isStreamActive}, 212a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setDeviceConnectionState", "(IILjava/lang/String;)I", (void *)android_media_AudioSystem_setDeviceConnectionState}, 213a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getDeviceConnectionState", "(ILjava/lang/String;)I", (void *)android_media_AudioSystem_getDeviceConnectionState}, 214a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setPhoneState", "(I)I", (void *)android_media_AudioSystem_setPhoneState}, 215a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setRingerMode", "(II)I", (void *)android_media_AudioSystem_setRingerMode}, 216a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setForceUse", "(II)I", (void *)android_media_AudioSystem_setForceUse}, 217a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getForceUse", "(I)I", (void *)android_media_AudioSystem_getForceUse}, 218a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"initStreamVolume", "(III)I", (void *)android_media_AudioSystem_initStreamVolume}, 219a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setStreamVolumeIndex","(II)I", (void *)android_media_AudioSystem_setStreamVolumeIndex}, 2208b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten {"getStreamVolumeIndex","(I)I", (void *)android_media_AudioSystem_getStreamVolumeIndex}, 2218b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten {"getDevicesForStream", "(I)I", (void *)android_media_AudioSystem_getDevicesForStream}, 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_media_AudioSystem(JNIEnv *env) 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioSystem::setErrorCallback(android_media_AudioSystem_error_callback); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return AndroidRuntime::registerNativeMethods(env, 229ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten kClassPathName, gMethods, NELEM(gMethods)); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 231