123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia/*
223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Copyright 2017, The Android Open Source Project
323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia *
423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Licensed under the Apache License, Version 2.0 (the "License");
523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * you may not use this file except in compliance with the License.
623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * You may obtain a copy of the License at
723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia *
823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia *     http://www.apache.org/licenses/LICENSE-2.0
923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia *
1023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Unless required by applicable law or agreed to in writing, software
1123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * distributed under the License is distributed on an "AS IS" BASIS,
1223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * See the License for the specific language governing permissions and
1423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * limitations under the License.
1523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */
1623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
1723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia#ifndef _ANDROID_MEDIA_BUFFERING_PARAMS_H_
1823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia#define _ANDROID_MEDIA_BUFFERING_PARAMS_H_
1923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
2023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia#include <media/BufferingSettings.h>
2123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
2223dfee521a7782bf901344beec6f94614e0b02b8Wei Jianamespace android {
2323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
2423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia// This entire class is inline
2523dfee521a7782bf901344beec6f94614e0b02b8Wei Jiastruct BufferingParams {
2623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    BufferingSettings settings;
2723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
2823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    struct fields_t {
2923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jclass      clazz;
3023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jmethodID   constructID;
3123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
3249ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia        jfieldID    initial_mark_ms;
3349ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia        jfieldID    resume_playback_mark_ms;
3423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
3523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        void init(JNIEnv *env) {
3623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            jclass lclazz = env->FindClass("android/media/BufferingParams");
3723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            if (lclazz == NULL) {
3823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia                return;
3923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            }
4023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
4123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            clazz = (jclass)env->NewGlobalRef(lclazz);
4223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            if (clazz == NULL) {
4323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia                return;
4423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            }
4523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
4623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            constructID = env->GetMethodID(clazz, "<init>", "()V");
4723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
4849ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia            initial_mark_ms = env->GetFieldID(clazz, "mInitialMarkMs", "I");
4949ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia            resume_playback_mark_ms = env->GetFieldID(clazz, "mResumePlaybackMarkMs", "I");
5023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
5123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->DeleteLocalRef(lclazz);
5223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        }
5323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
5423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        void exit(JNIEnv *env) {
5523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->DeleteGlobalRef(clazz);
5623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            clazz = NULL;
5723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        }
5823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    };
5923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
6023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    void fillFromJobject(JNIEnv *env, const fields_t& fields, jobject params) {
6149ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia        settings.mInitialMarkMs =
6249ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia            env->GetIntField(params, fields.initial_mark_ms);
6349ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia        settings.mResumePlaybackMarkMs =
6449ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia            env->GetIntField(params, fields.resume_playback_mark_ms);
6523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    }
6623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
6723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    jobject asJobject(JNIEnv *env, const fields_t& fields) {
6823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jobject params = env->NewObject(fields.clazz, fields.constructID);
6923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        if (params == NULL) {
7023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            return NULL;
7123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        }
7249ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia        env->SetIntField(params, fields.initial_mark_ms, (jint)settings.mInitialMarkMs);
7349ca7252e4c34b67d7ded26ea3397b76f6f4aa72Wei Jia        env->SetIntField(params, fields.resume_playback_mark_ms, (jint)settings.mResumePlaybackMarkMs);
7423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
7523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        return params;
7623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    }
7723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia};
7823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
7923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia}  // namespace android
8023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
8123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia#endif  // _ANDROID_MEDIA_BUFFERING_PARAMS_H_
82