blob: 37d8114052b8ad4bf2072889d715821115086a0f [file] [log] [blame]
Eric Laurent7c31847e2018-11-29 14:33:56 -08001/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "core_jni_helpers.h"
18#include "android_media_AudioErrors.h"
19#include "media/AudioEffect.h"
20
21using namespace android;
22
23static jclass gAudioEffectDescriptorClass;
24static jmethodID gAudioEffectDescriptorCstor;
25
26namespace android {
27
28jclass audioEffectDescriptorClass() {
29 return gAudioEffectDescriptorClass;
30}
31
32jint convertAudioEffectDescriptorFromNative(JNIEnv* env, jobject* jDescriptor,
33 const effect_descriptor_t* nDescriptor)
34{
35 jstring jType;
36 jstring jUuid;
37 jstring jConnect;
38 jstring jName;
39 jstring jImplementor;
40 char str[EFFECT_STRING_LEN_MAX];
41
Eric Laurent7afef8a2020-01-23 10:51:01 -080042 switch (nDescriptor->flags & EFFECT_FLAG_TYPE_MASK) {
43 case EFFECT_FLAG_TYPE_AUXILIARY:
44 jConnect = env->NewStringUTF("Auxiliary");
45 break;
46 case EFFECT_FLAG_TYPE_INSERT:
47 jConnect = env->NewStringUTF("Insert");
48 break;
49 case EFFECT_FLAG_TYPE_PRE_PROC:
50 jConnect = env->NewStringUTF("Pre Processing");
51 break;
52 case EFFECT_FLAG_TYPE_POST_PROC:
53 jConnect = env->NewStringUTF("Post Processing");
54 break;
55 default:
56 return (jint)AUDIO_JAVA_BAD_VALUE;
Eric Laurent7c31847e2018-11-29 14:33:56 -080057 }
58
59 AudioEffect::guidToString(&nDescriptor->type, str, EFFECT_STRING_LEN_MAX);
60 jType = env->NewStringUTF(str);
61
62 AudioEffect::guidToString(&nDescriptor->uuid, str, EFFECT_STRING_LEN_MAX);
63 jUuid = env->NewStringUTF(str);
64
65 jName = env->NewStringUTF(nDescriptor->name);
66 jImplementor = env->NewStringUTF(nDescriptor->implementor);
67
68 *jDescriptor = env->NewObject(gAudioEffectDescriptorClass,
69 gAudioEffectDescriptorCstor,
70 jType,
71 jUuid,
72 jConnect,
73 jName,
74 jImplementor);
75 env->DeleteLocalRef(jType);
76 env->DeleteLocalRef(jUuid);
77 env->DeleteLocalRef(jConnect);
78 env->DeleteLocalRef(jName);
79 env->DeleteLocalRef(jImplementor);
80
81 return (jint) AUDIO_JAVA_SUCCESS;
82}
83
84void convertAudioEffectDescriptorVectorFromNative(JNIEnv *env, jobjectArray *jDescriptors,
85 const std::vector<effect_descriptor_t>& nDescriptors)
86{
87 jobjectArray temp = env->NewObjectArray(nDescriptors.size(),
88 audioEffectDescriptorClass(), NULL);
89 size_t actualSize = 0;
90 for (size_t i = 0; i < nDescriptors.size(); i++) {
91 jobject jdesc;
92 if (convertAudioEffectDescriptorFromNative(env,
93 &jdesc,
94 &nDescriptors[i])
95 != AUDIO_JAVA_SUCCESS) {
96 continue;
97 }
98
99 env->SetObjectArrayElement(temp, actualSize++, jdesc);
100 env->DeleteLocalRef(jdesc);
101 }
102
103 *jDescriptors = env->NewObjectArray(actualSize, audioEffectDescriptorClass(), NULL);
104 for (size_t i = 0; i < actualSize; i++) {
105 env->SetObjectArrayElement(*jDescriptors,
106 i,
107 env->GetObjectArrayElement(temp, i));
108 }
109 env->DeleteLocalRef(temp);
110}
111
112}; // namespace android
113
114int register_android_media_AudioEffectDescriptor(JNIEnv* env) {
115 jclass audioEffectDescriptorClass =
116 FindClassOrDie(env, "android/media/audiofx/AudioEffect$Descriptor");
117 gAudioEffectDescriptorClass =
118 MakeGlobalRefOrDie(env, audioEffectDescriptorClass);
119 gAudioEffectDescriptorCstor =
120 GetMethodIDOrDie(env,
121 audioEffectDescriptorClass,
122 "<init>",
123 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
124
125 env->DeleteLocalRef(audioEffectDescriptorClass);
126 return 0;
127}