| /* |
| * 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. |
| */ |
| |
| #include "android_media_SyncParams.h" |
| |
| #include <nativehelper/JNIHelp.h> |
| |
| namespace android { |
| |
| void SyncParams::fields_t::init(JNIEnv *env) { |
| jclass lclazz = env->FindClass("android/media/SyncParams"); |
| if (lclazz == NULL) { |
| return; |
| } |
| |
| clazz = (jclass)env->NewGlobalRef(lclazz); |
| if (clazz == NULL) { |
| return; |
| } |
| |
| constructID = env->GetMethodID(clazz, "<init>", "()V"); |
| |
| sync_source = env->GetFieldID(clazz, "mSyncSource", "I"); |
| audio_adjust_mode = env->GetFieldID(clazz, "mAudioAdjustMode", "I"); |
| tolerance = env->GetFieldID(clazz, "mTolerance", "F"); |
| frame_rate = env->GetFieldID(clazz, "mFrameRate", "F"); |
| set = env->GetFieldID(clazz, "mSet", "I"); |
| |
| set_sync_source = |
| env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "SET_SYNC_SOURCE", "I")); |
| set_audio_adjust_mode = env->GetStaticIntField( |
| clazz, env->GetStaticFieldID(clazz, "SET_AUDIO_ADJUST_MODE", "I")); |
| set_tolerance = |
| env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "SET_TOLERANCE", "I")); |
| set_frame_rate = |
| env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "SET_FRAME_RATE", "I")); |
| |
| env->DeleteLocalRef(lclazz); |
| } |
| |
| void SyncParams::fields_t::exit(JNIEnv *env) { |
| env->DeleteGlobalRef(clazz); |
| clazz = NULL; |
| } |
| |
| void SyncParams::fillFromJobject(JNIEnv *env, const fields_t& fields, jobject params) { |
| sync.mSource = (AVSyncSource)env->GetIntField(params, fields.sync_source); |
| sync.mAudioAdjustMode = (AVSyncAudioAdjustMode)env->GetIntField(params, fields.audio_adjust_mode); |
| sync.mTolerance = env->GetFloatField(params, fields.tolerance); |
| frameRate = env->GetFloatField(params, fields.frame_rate); |
| int set = env->GetIntField(params, fields.set); |
| |
| syncSourceSet = set & fields.set_sync_source; |
| audioAdjustModeSet = set & fields.set_audio_adjust_mode; |
| toleranceSet = set & fields.set_tolerance; |
| frameRateSet = set & fields.set_frame_rate; |
| } |
| |
| jobject SyncParams::asJobject(JNIEnv *env, const fields_t& fields) { |
| jobject params = env->NewObject(fields.clazz, fields.constructID); |
| if (params == NULL) { |
| return NULL; |
| } |
| env->SetIntField(params, fields.sync_source, (jint)sync.mSource); |
| env->SetIntField(params, fields.audio_adjust_mode, (jint)sync.mAudioAdjustMode); |
| env->SetFloatField(params, fields.tolerance, (jfloat)sync.mTolerance); |
| env->SetFloatField(params, fields.frame_rate, (jfloat)frameRate); |
| env->SetIntField( |
| params, fields.set, |
| (syncSourceSet ? fields.set_sync_source : 0) |
| | (audioAdjustModeSet ? fields.set_audio_adjust_mode : 0) |
| | (toleranceSet ? fields.set_tolerance : 0) |
| | (frameRateSet ? fields.set_frame_rate : 0)); |
| |
| return params; |
| } |
| |
| } // namespace android |