nandi/jolt-nativepublic Fork 0
2ab40bf193b6a39bc8d1397cc36d17572bbf59cd
Commits
Clone
git clone https://git.rickub.com/nandi/jolt-native.git
git clone ssh://git@rickub.com/nandi/jolt-native.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

audio_manager.rs · 53 lines · 1.9 KBRust Blame HistoryRaw
Lift freeq's AV media plane out of sleek 90f8b89 nandi 20d ago1use super::{
2 utils::{
3 get_context, get_property, get_system_property, get_system_service, with_attached, JNIEnv,
4 JObject, JResult,
5 },
6 AudioManager, Context,
7};
8
9impl AudioManager {
10 /// Get the frames per buffer using Android Java API
11 pub fn get_frames_per_buffer() -> Result<i32, String> {
12 let context = get_context();
13
14 with_attached(context, |env, context| get_frames_per_buffer(env, &context))
15 .map_err(|error| error.to_string())
16 }
17
18 /// Get the AAudio mixer burst count from system property
19 pub fn get_mixer_bursts() -> Result<i32, String> {
20 let context = get_context();
21
22 with_attached(context, |env, _context| get_mixer_bursts(env))
23 .map_err(|error| error.to_string())
24 }
25}
26
27fn get_frames_per_buffer<'j>(env: &mut JNIEnv<'j>, context: &JObject<'j>) -> JResult<i32> {
28 let audio_manager = get_system_service(env, context, Context::AUDIO_SERVICE)?;
29
30 let frames_per_buffer = get_property(
31 env,
32 &audio_manager,
33 AudioManager::PROPERTY_OUTPUT_FRAMES_PER_BUFFER,
34 )?;
35
36 let frames_per_buffer_string = String::from(env.get_string(&frames_per_buffer)?);
37
38 // TODO: Use jni::errors::Error::ParseFailed instead of jni::errors::Error::JniCall once jni > v0.21.1 is released
39 frames_per_buffer_string
40 .parse::<i32>()
41 .map_err(|_| jni::errors::Error::JniCall(jni::errors::JniError::Unknown))
42}
43
44fn get_mixer_bursts<'j>(env: &mut JNIEnv<'j>) -> JResult<i32> {
45 let mixer_bursts = get_system_property(env, "aaudio.mixer_bursts", "2")?;
46
47 let mixer_bursts_string = String::from(env.get_string(&mixer_bursts)?);
48
49 // TODO: Use jni::errors::Error::ParseFailed instead of jni::errors::Error::JniCall once jni > v0.21.1 is released
50 mixer_bursts_string
51 .parse::<i32>()
52 .map_err(|_| jni::errors::Error::JniCall(jni::errors::JniError::Unknown))
53}