92 lines
3.4 KiB
C++
92 lines
3.4 KiB
C++
/*
|
|
* 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
|