android_media_AudioSystem.cpp revision 23f25cda0c73f8eb878844dea32fb0bd419edca2
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 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum AudioError { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kAudioStatusOk = 0, 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kAudioStatusError = 1, 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kAudioStatusMediaServerDied = 100 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic int check_AudioSystem_Command(status_t status) 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (status == NO_ERROR) { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return kAudioStatusOk; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return kAudioStatusError; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic int 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_AudioSystem_muteMicrophone(JNIEnv *env, jobject thiz, jboolean on) 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return check_AudioSystem_Command(AudioSystem::muteMicrophone(on)); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_AudioSystem_isMicrophoneMuted(JNIEnv *env, jobject thiz) 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool state = false; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioSystem::isMicrophoneMuted(&state); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return state; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 6723f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurentandroid_media_AudioSystem_isStreamActive(JNIEnv *env, jobject thiz, jint stream) 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool state = false; 7023f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurent AudioSystem::isStreamActive(stream, &state); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return state; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 74a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 75a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setParameters(JNIEnv *env, jobject thiz, jstring keyValuePairs) 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 77a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const jchar* c_keyValuePairs = env->GetStringCritical(keyValuePairs, 0); 78a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent String8 c_keyValuePairs8; 79a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (keyValuePairs) { 80a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_keyValuePairs8 = String8(c_keyValuePairs, env->GetStringLength(keyValuePairs)); 81a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringCritical(keyValuePairs, c_keyValuePairs); 82a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 83a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int status = check_AudioSystem_Command(AudioSystem::setParameters(0, c_keyValuePairs8)); 84a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return status; 85a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 86a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 87a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic jstring 88a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getParameters(JNIEnv *env, jobject thiz, jstring keys) 89a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 90a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const jchar* c_keys = env->GetStringCritical(keys, 0); 91a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent String8 c_keys8; 92a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (keys) { 93a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_keys8 = String8(c_keys, env->GetStringLength(keys)); 94a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringCritical(keys, c_keys); 95a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 96a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return env->NewStringUTF(AudioSystem::getParameters(0, c_keys8).string()); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid android_media_AudioSystem_error_callback(status_t err) 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JNIEnv *env = AndroidRuntime::getJNIEnv(); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jclass clazz = env->FindClass("android/media/AudioSystem"); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int error; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (err) { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEAD_OBJECT: 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusMediaServerDied; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case NO_ERROR: 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusOk; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusError; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->CallStaticVoidMethod(clazz, env->GetStaticMethodID(clazz, "errorCallbackFromNative","(I)V"), error); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 121a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 122a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jint state, jstring device_address) 123a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 124a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const char *c_address = env->GetStringUTFChars(device_address, NULL); 125a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int status = check_AudioSystem_Command(AudioSystem::setDeviceConnectionState(static_cast <AudioSystem::audio_devices>(device), 126a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent static_cast <AudioSystem::device_connection_state>(state), 127a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_address)); 128a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringUTFChars(device_address, c_address); 129a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return status; 130a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 131a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 132a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 133a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jstring device_address) 134a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 135a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const char *c_address = env->GetStringUTFChars(device_address, NULL); 136a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int state = static_cast <int>(AudioSystem::getDeviceConnectionState(static_cast <AudioSystem::audio_devices>(device), 137a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_address)); 138a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringUTFChars(device_address, c_address); 139a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return state; 140a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 141a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 142a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 143a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setPhoneState(JNIEnv *env, jobject thiz, jint state) 144a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 145a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setPhoneState(state)); 146a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 147a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 148a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 149a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setRingerMode(JNIEnv *env, jobject thiz, jint mode, jint mask) 150a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 151a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setRingerMode(mode, mask)); 152a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 153a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 154a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 155a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setForceUse(JNIEnv *env, jobject thiz, jint usage, jint config) 156a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 157a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setForceUse(static_cast <AudioSystem::force_use>(usage), 158a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent static_cast <AudioSystem::forced_config>(config))); 159a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 160a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 161a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 162a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getForceUse(JNIEnv *env, jobject thiz, jint usage) 163a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 164a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return static_cast <int>(AudioSystem::getForceUse(static_cast <AudioSystem::force_use>(usage))); 165a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 166a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 167a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 168a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_initStreamVolume(JNIEnv *env, jobject thiz, jint stream, jint indexMin, jint indexMax) 169a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 170a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::initStreamVolume(static_cast <AudioSystem::stream_type>(stream), 171a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent indexMin, 172a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent indexMax)); 173a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 174a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 175a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 176a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream, jint index) 177a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 178a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setStreamVolumeIndex(static_cast <AudioSystem::stream_type>(stream), index)); 179a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 180a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 181a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 182a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream) 183a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 184a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int index; 185a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (AudioSystem::getStreamVolumeIndex(static_cast <AudioSystem::stream_type>(stream), &index) != NO_ERROR) { 186a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent index = -1; 187a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 188a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return index; 189a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 190a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gMethods[] = { 194a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setParameters", "(Ljava/lang/String;)I", (void *)android_media_AudioSystem_setParameters}, 195a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getParameters", "(Ljava/lang/String;)Ljava/lang/String;", (void *)android_media_AudioSystem_getParameters}, 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"muteMicrophone", "(Z)I", (void *)android_media_AudioSystem_muteMicrophone}, 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"isMicrophoneMuted", "()Z", (void *)android_media_AudioSystem_isMicrophoneMuted}, 19823f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurent {"isStreamActive", "(I)Z", (void *)android_media_AudioSystem_isStreamActive}, 199a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setDeviceConnectionState", "(IILjava/lang/String;)I", (void *)android_media_AudioSystem_setDeviceConnectionState}, 200a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getDeviceConnectionState", "(ILjava/lang/String;)I", (void *)android_media_AudioSystem_getDeviceConnectionState}, 201a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setPhoneState", "(I)I", (void *)android_media_AudioSystem_setPhoneState}, 202a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setRingerMode", "(II)I", (void *)android_media_AudioSystem_setRingerMode}, 203a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setForceUse", "(II)I", (void *)android_media_AudioSystem_setForceUse}, 204a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getForceUse", "(I)I", (void *)android_media_AudioSystem_getForceUse}, 205a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"initStreamVolume", "(III)I", (void *)android_media_AudioSystem_initStreamVolume}, 206a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setStreamVolumeIndex","(II)I", (void *)android_media_AudioSystem_setStreamVolumeIndex}, 207a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getStreamVolumeIndex","(I)I", (void *)android_media_AudioSystem_getStreamVolumeIndex} 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst char* const kClassPathName = "android/media/AudioSystem"; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_media_AudioSystem(JNIEnv *env) 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioSystem::setErrorCallback(android_media_AudioSystem_error_callback); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return AndroidRuntime::registerNativeMethods(env, 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android/media/AudioSystem", gMethods, NELEM(gMethods)); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 219