1c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar/* 2c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * Copyright 2015, The Android Open Source Project 3c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * 4c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * Licensed under the Apache License, Version 2.0 (the "License"); 5c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * you may not use this file except in compliance with the License. 6c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * You may obtain a copy of the License at 7c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * 8c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * http://www.apache.org/licenses/LICENSE-2.0 9c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * 10c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * Unless required by applicable law or agreed to in writing, software 11c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * distributed under the License is distributed on an "AS IS" BASIS, 12c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * See the License for the specific language governing permissions and 14c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar * limitations under the License. 15c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar */ 16c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 172d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia#include "android_media_SyncParams.h" 18c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 19c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar#include "JNIHelp.h" 20c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 21c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnarnamespace android { 22c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 232d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jiavoid SyncParams::fields_t::init(JNIEnv *env) { 242d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia jclass lclazz = env->FindClass("android/media/SyncParams"); 25c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar if (lclazz == NULL) { 26c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar return; 27c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar } 28c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 29c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar clazz = (jclass)env->NewGlobalRef(lclazz); 30c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar if (clazz == NULL) { 31c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar return; 32c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar } 33c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 34c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar constructID = env->GetMethodID(clazz, "<init>", "()V"); 35c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 36c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar sync_source = env->GetFieldID(clazz, "mSyncSource", "I"); 37c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar audio_adjust_mode = env->GetFieldID(clazz, "mAudioAdjustMode", "I"); 38c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar tolerance = env->GetFieldID(clazz, "mTolerance", "F"); 39c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar frame_rate = env->GetFieldID(clazz, "mFrameRate", "F"); 40c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar set = env->GetFieldID(clazz, "mSet", "I"); 41c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 42c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar set_sync_source = 43c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "SET_SYNC_SOURCE", "I")); 44c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar set_audio_adjust_mode = env->GetStaticIntField( 45c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar clazz, env->GetStaticFieldID(clazz, "SET_AUDIO_ADJUST_MODE", "I")); 46c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar set_tolerance = 47c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "SET_TOLERANCE", "I")); 48c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar set_frame_rate = 49c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "SET_FRAME_RATE", "I")); 50c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 51c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar env->DeleteLocalRef(lclazz); 52c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar} 53c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 542d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jiavoid SyncParams::fields_t::exit(JNIEnv *env) { 55c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar env->DeleteGlobalRef(clazz); 56c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar clazz = NULL; 57c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar} 58c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 592d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jiavoid SyncParams::fillFromJobject(JNIEnv *env, const fields_t& fields, jobject params) { 602d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia sync.mSource = (AVSyncSource)env->GetIntField(params, fields.sync_source); 612d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia sync.mAudioAdjustMode = (AVSyncAudioAdjustMode)env->GetIntField(params, fields.audio_adjust_mode); 622d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia sync.mTolerance = env->GetFloatField(params, fields.tolerance); 632d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia frameRate = env->GetFloatField(params, fields.frame_rate); 642d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia int set = env->GetIntField(params, fields.set); 65c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 66c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar syncSourceSet = set & fields.set_sync_source; 67c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar audioAdjustModeSet = set & fields.set_audio_adjust_mode; 68c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar toleranceSet = set & fields.set_tolerance; 69c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar frameRateSet = set & fields.set_frame_rate; 70c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar} 71c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 722d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jiajobject SyncParams::asJobject(JNIEnv *env, const fields_t& fields) { 732d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia jobject params = env->NewObject(fields.clazz, fields.constructID); 742d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia if (params == NULL) { 75c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar return NULL; 76c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar } 772d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia env->SetIntField(params, fields.sync_source, (jint)sync.mSource); 782d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia env->SetIntField(params, fields.audio_adjust_mode, (jint)sync.mAudioAdjustMode); 792d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia env->SetFloatField(params, fields.tolerance, (jfloat)sync.mTolerance); 802d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia env->SetFloatField(params, fields.frame_rate, (jfloat)frameRate); 81c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar env->SetIntField( 822d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia params, fields.set, 83c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar (syncSourceSet ? fields.set_sync_source : 0) 84c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar | (audioAdjustModeSet ? fields.set_audio_adjust_mode : 0) 85c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar | (toleranceSet ? fields.set_tolerance : 0) 86c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar | (frameRateSet ? fields.set_frame_rate : 0)); 87c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 882d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia return params; 89c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar} 90c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar 91c98f58efd147c574faa4a4f9956b5ab95e3027a5Lajos Molnar} // namespace android 92