android_media_AudioSystem.cpp revision 539719a7af34be96743a4f408aedf6437f441bbf
15e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala/* 25e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** 35e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** Copyright 2006, The Android Open Source Project 45e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** 55e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** Licensed under the Apache License, Version 2.0 (the "License"); 65e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** you may not use this file except in compliance with the License. 75e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** You may obtain a copy of the License at 85e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** 95e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** http://www.apache.org/licenses/LICENSE-2.0 105e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** 115e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** Unless required by applicable law or agreed to in writing, software 125e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** distributed under the License is distributed on an "AS IS" BASIS, 135e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** See the License for the specific language governing permissions and 155e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala** limitations under the License. 165e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala*/ 175e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 185e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala#define LOG_TAG "AudioSystem" 195e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala#include <utils/Log.h> 205e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 215e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala#include <jni.h> 225e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala#include <JNIHelp.h> 237b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include <android_runtime/AndroidRuntime.h> 247b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala 255e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala#include <media/AudioSystem.h> 265e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 275e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala#include <system/audio.h> 285e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala#include <system/audio_policy.h> 295e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 305e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala// ---------------------------------------------------------------------------- 315e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 325e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalausing namespace android; 335e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 345e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic const char* const kClassPathName = "android/media/AudioSystem"; 355e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 365e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaenum AudioError { 375e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala kAudioStatusOk = 0, 38ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala kAudioStatusError = 1, 39ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala kAudioStatusMediaServerDied = 100 40ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala}; 41a858ea0495c887621a2fd9c0afc13780deccb597Igor Murashkin 42ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvalastatic int check_AudioSystem_Command(status_t status) 43ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala{ 445e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala if (status == NO_ERROR) { 455e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return kAudioStatusOk; 465e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala } else { 475e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return kAudioStatusError; 48f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 495e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 505e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 515e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic int 525e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_muteMicrophone(JNIEnv *env, jobject thiz, jboolean on) 535e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 545e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return check_AudioSystem_Command(AudioSystem::muteMicrophone(on)); 555e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 565e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 57a858ea0495c887621a2fd9c0afc13780deccb597Igor Murashkinstatic jboolean 585e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_isMicrophoneMuted(JNIEnv *env, jobject thiz) 595e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 605e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala bool state = false; 615e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala AudioSystem::isMicrophoneMuted(&state); 62f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return state; 63f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 64ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala 65ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvalastatic jboolean 66f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalaandroid_media_AudioSystem_isStreamActive(JNIEnv *env, jobject thiz, jint stream, jint inPastMs) 67f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 68ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala bool state = false; 69ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala AudioSystem::isStreamActive((audio_stream_type_t) stream, &state, inPastMs); 70ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala return state; 71ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala} 72ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala 73ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvalastatic jboolean 74f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalaandroid_media_AudioSystem_isStreamActiveRemotely(JNIEnv *env, jobject thiz, jint stream, 75f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala jint inPastMs) 76f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 77f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool state = false; 78f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala AudioSystem::isStreamActiveRemotely((audio_stream_type_t) stream, &state, inPastMs); 79f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return state; 80f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 81f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 8244f120fa169cb3131ec853c638ea9c88a9b33b97Igor Murashkinstatic jboolean 83b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun Heandroid_media_AudioSystem_isSourceActive(JNIEnv *env, jobject thiz, jint source) 84f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 85f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool state = false; 86f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala AudioSystem::isSourceActive((audio_source_t) source, &state); 87f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return state; 88f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 89377b2ec9a2885f9b6405b07ba900a9e3f4349c38Kévin PETIT 90f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatic int 91f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalaandroid_media_AudioSystem_setParameters(JNIEnv *env, jobject thiz, jstring keyValuePairs) 92f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 93f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala const jchar* c_keyValuePairs = env->GetStringCritical(keyValuePairs, 0); 94f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 c_keyValuePairs8; 95f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (keyValuePairs) { 96f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala c_keyValuePairs8 = String8(c_keyValuePairs, env->GetStringLength(keyValuePairs)); 97f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala env->ReleaseStringCritical(keyValuePairs, c_keyValuePairs); 98f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 99f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int status = check_AudioSystem_Command(AudioSystem::setParameters(0, c_keyValuePairs8)); 1005e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return status; 1015e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 1025e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 1035e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic jstring 1045e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getParameters(JNIEnv *env, jobject thiz, jstring keys) 1055e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 1065e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala const jchar* c_keys = env->GetStringCritical(keys, 0); 1075e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala String8 c_keys8; 1085e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala if (keys) { 1095e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala c_keys8 = String8(c_keys, env->GetStringLength(keys)); 1105e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala env->ReleaseStringCritical(keys, c_keys); 1115e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala } 1125e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return env->NewStringUTF(AudioSystem::getParameters(0, c_keys8).string()); 1135e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 1145e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 1155e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic void 1165e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_error_callback(status_t err) 1175e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 1185e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala JNIEnv *env = AndroidRuntime::getJNIEnv(); 1195e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala if (env == NULL) { 1205e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return; 12144cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin } 1225e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 1235e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala jclass clazz = env->FindClass(kClassPathName); 1245e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 125fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin int error; 126fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin 127fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin switch (err) { 128fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin case DEAD_OBJECT: 129fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin error = kAudioStatusMediaServerDied; 130fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin break; 131fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin case NO_ERROR: 132fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin error = kAudioStatusOk; 133fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin break; 134fcf5fea2ac99e6359998078d09fd7e21269dca4aIgor Murashkin default: 1355e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala error = kAudioStatusError; 1365e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala break; 1375e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala } 1385e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 1395e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala env->CallStaticVoidMethod(clazz, env->GetStaticMethodID(clazz, "errorCallbackFromNative","(I)V"), error); 1405e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 1415e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 142c03792041b9dd6f7f54abd6c82bd6c755a336cd8Eino-Ville Talvalastatic int 1435e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_setDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jint state, jstring device_address) 1445e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 1455e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala const char *c_address = env->GetStringUTFChars(device_address, NULL); 1465e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala int status = check_AudioSystem_Command(AudioSystem::setDeviceConnectionState(static_cast <audio_devices_t>(device), 1475e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala static_cast <audio_policy_dev_state_t>(state), 1485e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala c_address)); 1495e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala env->ReleaseStringUTFChars(device_address, c_address); 1505e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return status; 1515e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 1525e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 1535e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic int 1545e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jstring device_address) 1555e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 1565e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala const char *c_address = env->GetStringUTFChars(device_address, NULL); 1575e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala int state = static_cast <int>(AudioSystem::getDeviceConnectionState(static_cast <audio_devices_t>(device), 1585e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala c_address)); 1595e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala env->ReleaseStringUTFChars(device_address, c_address); 1605e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return state; 1615e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 1625e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 1635e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic int 1645e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_setPhoneState(JNIEnv *env, jobject thiz, jint state) 1655e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 1665e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return check_AudioSystem_Command(AudioSystem::setPhoneState((audio_mode_t) state)); 1675e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 1685e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 1695e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic int 1705e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_setForceUse(JNIEnv *env, jobject thiz, jint usage, jint config) 1715e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 1725e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return check_AudioSystem_Command(AudioSystem::setForceUse(static_cast <audio_policy_force_use_t>(usage), 1735e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala static_cast <audio_policy_forced_cfg_t>(config))); 1745e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 1755e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 1765e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic int 1775e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getForceUse(JNIEnv *env, jobject thiz, jint usage) 1785e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 1795e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return static_cast <int>(AudioSystem::getForceUse(static_cast <audio_policy_force_use_t>(usage))); 1805e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 1815e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 1825e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic int 1835e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_initStreamVolume(JNIEnv *env, jobject thiz, jint stream, jint indexMin, jint indexMax) 1845e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 1855e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return check_AudioSystem_Command(AudioSystem::initStreamVolume(static_cast <audio_stream_type_t>(stream), 1865e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala indexMin, 18744cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin indexMax)); 1885e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 1895e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 19044cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkinstatic int 1915e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_setStreamVolumeIndex(JNIEnv *env, 1925e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala jobject thiz, 1935e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala jint stream, 1945e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala jint index, 1955e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala jint device) 1965e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 1975e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return check_AudioSystem_Command( 1985e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala AudioSystem::setStreamVolumeIndex(static_cast <audio_stream_type_t>(stream), 1995e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala index, 2005e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala (audio_devices_t)device)); 2015e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2025e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2035e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic int 2045e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getStreamVolumeIndex(JNIEnv *env, 2055e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala jobject thiz, 2065e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala jint stream, 20744cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin jint device) 20844cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin{ 2095e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala int index; 2105e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala if (AudioSystem::getStreamVolumeIndex(static_cast <audio_stream_type_t>(stream), 2115e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala &index, 2125e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala (audio_devices_t)device) 2135e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala != NO_ERROR) { 2145e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala index = -1; 21544cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin } 2165e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return index; 2175e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2185e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2195e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic int 2205e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_setMasterVolume(JNIEnv *env, jobject thiz, jfloat value) 2215e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 2225e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return check_AudioSystem_Command(AudioSystem::setMasterVolume(value)); 2235e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2245e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2255e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic jfloat 2265e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getMasterVolume(JNIEnv *env, jobject thiz) 2275e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 2285e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala float value; 2295e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala if (AudioSystem::getMasterVolume(&value) != NO_ERROR) { 2305e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala value = -1.0; 2315e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala } 2325e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return value; 2335e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2345e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2355e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic int 2365e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_setMasterMute(JNIEnv *env, jobject thiz, jboolean mute) 237c03792041b9dd6f7f54abd6c82bd6c755a336cd8Eino-Ville Talvala{ 238c03792041b9dd6f7f54abd6c82bd6c755a336cd8Eino-Ville Talvala return check_AudioSystem_Command(AudioSystem::setMasterMute(mute)); 2395e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2405e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2415e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic jfloat 2425e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getMasterMute(JNIEnv *env, jobject thiz) 2435e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 2445e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala bool mute; 2455e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala if (AudioSystem::getMasterMute(&mute) != NO_ERROR) { 2465e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala mute = false; 2475e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala } 2485e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return mute; 2495e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2505e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2515e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic jint 2525e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getDevicesForStream(JNIEnv *env, jobject thiz, jint stream) 2535e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 2545e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return (jint) AudioSystem::getDevicesForStream(static_cast <audio_stream_type_t>(stream)); 2555e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2565e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2575e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic jint 2585e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getPrimaryOutputSamplingRate(JNIEnv *env, jobject clazz) 2595e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 2605e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return (jint) AudioSystem::getPrimaryOutputSamplingRate(); 2615e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2625e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2635e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic jint 2645e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getPrimaryOutputFrameCount(JNIEnv *env, jobject clazz) 2655e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 2665e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return (jint) AudioSystem::getPrimaryOutputFrameCount(); 2675e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2685e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2695e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic jint 2705e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_getOutputLatency(JNIEnv *env, jobject clazz, jint stream) 2715e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 2725e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala uint32_t afLatency; 2735e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala if (AudioSystem::getOutputLatency(&afLatency, static_cast <audio_stream_type_t>(stream)) 2745e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala != NO_ERROR) { 2755e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala afLatency = -1; 2765e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala } 2775e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return (jint) afLatency; 2785e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2795e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2805e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic jint 2815e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaandroid_media_AudioSystem_setLowRamDevice(JNIEnv *env, jobject clazz, jboolean isLowRamDevice) 2825e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 2835e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return (jint) AudioSystem::setLowRamDevice((bool) isLowRamDevice); 2845e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 2855e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2865e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala// ---------------------------------------------------------------------------- 2875e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 2885e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalastatic JNINativeMethod gMethods[] = { 2895e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"setParameters", "(Ljava/lang/String;)I", (void *)android_media_AudioSystem_setParameters}, 2905e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getParameters", "(Ljava/lang/String;)Ljava/lang/String;", (void *)android_media_AudioSystem_getParameters}, 2915e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"muteMicrophone", "(Z)I", (void *)android_media_AudioSystem_muteMicrophone}, 2925e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"isMicrophoneMuted", "()Z", (void *)android_media_AudioSystem_isMicrophoneMuted}, 2935e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"isStreamActive", "(II)Z", (void *)android_media_AudioSystem_isStreamActive}, 2945e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"isStreamActiveRemotely","(II)Z", (void *)android_media_AudioSystem_isStreamActiveRemotely}, 2955e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"isSourceActive", "(I)Z", (void *)android_media_AudioSystem_isSourceActive}, 2965e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"setDeviceConnectionState", "(IILjava/lang/String;)I", (void *)android_media_AudioSystem_setDeviceConnectionState}, 2975e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getDeviceConnectionState", "(ILjava/lang/String;)I", (void *)android_media_AudioSystem_getDeviceConnectionState}, 2985e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"setPhoneState", "(I)I", (void *)android_media_AudioSystem_setPhoneState}, 2995e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"setForceUse", "(II)I", (void *)android_media_AudioSystem_setForceUse}, 3005e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getForceUse", "(I)I", (void *)android_media_AudioSystem_getForceUse}, 3015e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"initStreamVolume", "(III)I", (void *)android_media_AudioSystem_initStreamVolume}, 3025e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"setStreamVolumeIndex","(III)I", (void *)android_media_AudioSystem_setStreamVolumeIndex}, 3035e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getStreamVolumeIndex","(II)I", (void *)android_media_AudioSystem_getStreamVolumeIndex}, 3045e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"setMasterVolume", "(F)I", (void *)android_media_AudioSystem_setMasterVolume}, 3055e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getMasterVolume", "()F", (void *)android_media_AudioSystem_getMasterVolume}, 3065e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"setMasterMute", "(Z)I", (void *)android_media_AudioSystem_setMasterMute}, 3075e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getMasterMute", "()Z", (void *)android_media_AudioSystem_getMasterMute}, 3085e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getDevicesForStream", "(I)I", (void *)android_media_AudioSystem_getDevicesForStream}, 3095e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getPrimaryOutputSamplingRate", "()I", (void *)android_media_AudioSystem_getPrimaryOutputSamplingRate}, 3105e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getPrimaryOutputFrameCount", "()I", (void *)android_media_AudioSystem_getPrimaryOutputFrameCount}, 3115e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"getOutputLatency", "(I)I", (void *)android_media_AudioSystem_getOutputLatency}, 3125e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala {"setLowRamDevice", "(Z)I", (void *)android_media_AudioSystem_setLowRamDevice}, 3135e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala}; 3145e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 3155e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvalaint register_android_media_AudioSystem(JNIEnv *env) 3165e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala{ 3175e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala AudioSystem::setErrorCallback(android_media_AudioSystem_error_callback); 3185e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala 3195e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala return AndroidRuntime::registerNativeMethods(env, 3205e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala kClassPathName, gMethods, NELEM(gMethods)); 3215e08d60617fc63c2e41f9069ff89f5c00db2617dEino-Ville Talvala} 3221ce7c34e67c2cf58dd88c31f36f4bd62e375f7f0Eino-Ville Talvala