android_media_AudioSystem.cpp revision 0e7a4d9edcee63c6b770db9b6fe792abad5d7b53
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(); 1020e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent if (env == NULL) { 1030e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent return; 1040e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent } 1050e7a4d9edcee63c6b770db9b6fe792abad5d7b53Eric Laurent 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jclass clazz = env->FindClass("android/media/AudioSystem"); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int error; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (err) { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEAD_OBJECT: 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusMediaServerDied; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case NO_ERROR: 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusOk; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project error = kAudioStatusError; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->CallStaticVoidMethod(clazz, env->GetStaticMethodID(clazz, "errorCallbackFromNative","(I)V"), error); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 125a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 126a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jint state, jstring device_address) 127a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 128a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const char *c_address = env->GetStringUTFChars(device_address, NULL); 129a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int status = check_AudioSystem_Command(AudioSystem::setDeviceConnectionState(static_cast <AudioSystem::audio_devices>(device), 130a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent static_cast <AudioSystem::device_connection_state>(state), 131a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_address)); 132a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringUTFChars(device_address, c_address); 133a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return status; 134a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 135a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 136a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 137a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jstring device_address) 138a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 139a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent const char *c_address = env->GetStringUTFChars(device_address, NULL); 140a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int state = static_cast <int>(AudioSystem::getDeviceConnectionState(static_cast <AudioSystem::audio_devices>(device), 141a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent c_address)); 142a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent env->ReleaseStringUTFChars(device_address, c_address); 143a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return state; 144a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 145a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 146a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 147a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setPhoneState(JNIEnv *env, jobject thiz, jint state) 148a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 149a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setPhoneState(state)); 150a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 151a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 152a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 153a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setRingerMode(JNIEnv *env, jobject thiz, jint mode, jint mask) 154a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 155a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setRingerMode(mode, mask)); 156a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 157a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 158a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 159a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setForceUse(JNIEnv *env, jobject thiz, jint usage, jint config) 160a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 161a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setForceUse(static_cast <AudioSystem::force_use>(usage), 162a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent static_cast <AudioSystem::forced_config>(config))); 163a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 164a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 165a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 166a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getForceUse(JNIEnv *env, jobject thiz, jint usage) 167a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 168a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return static_cast <int>(AudioSystem::getForceUse(static_cast <AudioSystem::force_use>(usage))); 169a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 170a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 171a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 172a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_initStreamVolume(JNIEnv *env, jobject thiz, jint stream, jint indexMin, jint indexMax) 173a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 174a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::initStreamVolume(static_cast <AudioSystem::stream_type>(stream), 175a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent indexMin, 176a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent indexMax)); 177a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 178a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 179a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 180a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_setStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream, jint index) 181a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 182a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return check_AudioSystem_Command(AudioSystem::setStreamVolumeIndex(static_cast <AudioSystem::stream_type>(stream), index)); 183a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 184a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 185a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentstatic int 186a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurentandroid_media_AudioSystem_getStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream) 187a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent{ 188a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int index; 189a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (AudioSystem::getStreamVolumeIndex(static_cast <AudioSystem::stream_type>(stream), &index) != NO_ERROR) { 190a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent index = -1; 191a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 192a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return index; 193a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent} 194a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gMethods[] = { 198a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setParameters", "(Ljava/lang/String;)I", (void *)android_media_AudioSystem_setParameters}, 199a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getParameters", "(Ljava/lang/String;)Ljava/lang/String;", (void *)android_media_AudioSystem_getParameters}, 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"muteMicrophone", "(Z)I", (void *)android_media_AudioSystem_muteMicrophone}, 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"isMicrophoneMuted", "()Z", (void *)android_media_AudioSystem_isMicrophoneMuted}, 20223f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurent {"isStreamActive", "(I)Z", (void *)android_media_AudioSystem_isStreamActive}, 203a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setDeviceConnectionState", "(IILjava/lang/String;)I", (void *)android_media_AudioSystem_setDeviceConnectionState}, 204a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getDeviceConnectionState", "(ILjava/lang/String;)I", (void *)android_media_AudioSystem_getDeviceConnectionState}, 205a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setPhoneState", "(I)I", (void *)android_media_AudioSystem_setPhoneState}, 206a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setRingerMode", "(II)I", (void *)android_media_AudioSystem_setRingerMode}, 207a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setForceUse", "(II)I", (void *)android_media_AudioSystem_setForceUse}, 208a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getForceUse", "(I)I", (void *)android_media_AudioSystem_getForceUse}, 209a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"initStreamVolume", "(III)I", (void *)android_media_AudioSystem_initStreamVolume}, 210a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"setStreamVolumeIndex","(II)I", (void *)android_media_AudioSystem_setStreamVolumeIndex}, 211a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent {"getStreamVolumeIndex","(I)I", (void *)android_media_AudioSystem_getStreamVolumeIndex} 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst char* const kClassPathName = "android/media/AudioSystem"; 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_media_AudioSystem(JNIEnv *env) 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioSystem::setErrorCallback(android_media_AudioSystem_error_callback); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return AndroidRuntime::registerNativeMethods(env, 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android/media/AudioSystem", gMethods, NELEM(gMethods)); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 223