123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /*
- * Copyright 2015, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef _ANDROID_MEDIA_PLAYBACK_PARAMS_H_
- #define _ANDROID_MEDIA_PLAYBACK_PARAMS_H_
- #include <media/AudioResamplerPublic.h>
- namespace android {
- // This entire class is inline as it is used from both core and media
- struct PlaybackParams {
- AudioPlaybackRate audioRate;
- bool speedSet;
- bool pitchSet;
- bool audioFallbackModeSet;
- bool audioStretchModeSet;
- struct fields_t {
- jclass clazz;
- jmethodID constructID;
- jfieldID speed;
- jfieldID pitch;
- jfieldID audio_fallback_mode;
- jfieldID audio_stretch_mode;
- jfieldID set;
- jint set_speed;
- jint set_pitch;
- jint set_audio_fallback_mode;
- jint set_audio_stretch_mode;
- void init(JNIEnv *env) {
- jclass lclazz = env->FindClass("android/media/PlaybackParams");
- if (lclazz == NULL) {
- return;
- }
- clazz = (jclass)env->NewGlobalRef(lclazz);
- if (clazz == NULL) {
- return;
- }
- constructID = env->GetMethodID(clazz, "<init>", "()V");
- speed = env->GetFieldID(clazz, "mSpeed", "F");
- pitch = env->GetFieldID(clazz, "mPitch", "F");
- audio_fallback_mode = env->GetFieldID(clazz, "mAudioFallbackMode", "I");
- audio_stretch_mode = env->GetFieldID(clazz, "mAudioStretchMode", "I");
- set = env->GetFieldID(clazz, "mSet", "I");
- set_speed =
- env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "SET_SPEED", "I"));
- set_pitch =
- env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "SET_PITCH", "I"));
- set_audio_fallback_mode = env->GetStaticIntField(
- clazz, env->GetStaticFieldID(clazz, "SET_AUDIO_FALLBACK_MODE", "I"));
- set_audio_stretch_mode = env->GetStaticIntField(
- clazz, env->GetStaticFieldID(clazz, "SET_AUDIO_STRETCH_MODE", "I"));
- env->DeleteLocalRef(lclazz);
- }
- void exit(JNIEnv *env) {
- env->DeleteGlobalRef(clazz);
- clazz = NULL;
- }
- };
- void fillFromJobject(JNIEnv *env, const fields_t& fields, jobject params) {
- audioRate.mSpeed = env->GetFloatField(params, fields.speed);
- audioRate.mPitch = env->GetFloatField(params, fields.pitch);
- audioRate.mFallbackMode =
- (AudioTimestretchFallbackMode)env->GetIntField(params, fields.audio_fallback_mode);
- audioRate.mStretchMode =
- (AudioTimestretchStretchMode)env->GetIntField(params, fields.audio_stretch_mode);
- int set = env->GetIntField(params, fields.set);
- speedSet = set & fields.set_speed;
- pitchSet = set & fields.set_pitch;
- audioFallbackModeSet = set & fields.set_audio_fallback_mode;
- audioStretchModeSet = set & fields.set_audio_stretch_mode;
- }
- jobject asJobject(JNIEnv *env, const fields_t& fields) {
- jobject params = env->NewObject(fields.clazz, fields.constructID);
- if (params == NULL) {
- return NULL;
- }
- env->SetFloatField(params, fields.speed, (jfloat)audioRate.mSpeed);
- env->SetFloatField(params, fields.pitch, (jfloat)audioRate.mPitch);
- env->SetIntField(params, fields.audio_fallback_mode, (jint)audioRate.mFallbackMode);
- env->SetIntField(params, fields.audio_stretch_mode, (jint)audioRate.mStretchMode);
- env->SetIntField(
- params, fields.set,
- (speedSet ? fields.set_speed : 0)
- | (pitchSet ? fields.set_pitch : 0)
- | (audioFallbackModeSet ? fields.set_audio_fallback_mode : 0)
- | (audioStretchModeSet ? fields.set_audio_stretch_mode : 0));
- return params;
- }
- };
- } // namespace android
- #endif // _ANDROID_MEDIA_PLAYBACK_PARAMS_H_
|