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
3223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jfieldID    initial_buffering_mode;
3323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jfieldID    rebuffering_mode;
3423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jfieldID    initial_watermark_ms;
3523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jfieldID    initial_watermark_kb;
3623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jfieldID    rebuffering_watermark_low_ms;
3723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jfieldID    rebuffering_watermark_high_ms;
3823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jfieldID    rebuffering_watermark_low_kb;
3923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jfieldID    rebuffering_watermark_high_kb;
4023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
4123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        void init(JNIEnv *env) {
4223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            jclass lclazz = env->FindClass("android/media/BufferingParams");
4323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            if (lclazz == NULL) {
4423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia                return;
4523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            }
4623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
4723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            clazz = (jclass)env->NewGlobalRef(lclazz);
4823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            if (clazz == NULL) {
4923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia                return;
5023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            }
5123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
5223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            constructID = env->GetMethodID(clazz, "<init>", "()V");
5323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
5423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            initial_buffering_mode = env->GetFieldID(clazz, "mInitialBufferingMode", "I");
5523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            rebuffering_mode = env->GetFieldID(clazz, "mRebufferingMode", "I");
5623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            initial_watermark_ms = env->GetFieldID(clazz, "mInitialWatermarkMs", "I");
5723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            initial_watermark_kb = env->GetFieldID(clazz, "mInitialWatermarkKB", "I");
5823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            rebuffering_watermark_low_ms = env->GetFieldID(clazz, "mRebufferingWatermarkLowMs", "I");
5923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            rebuffering_watermark_high_ms = env->GetFieldID(clazz, "mRebufferingWatermarkHighMs", "I");
6023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            rebuffering_watermark_low_kb = env->GetFieldID(clazz, "mRebufferingWatermarkLowKB", "I");
6123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            rebuffering_watermark_high_kb = env->GetFieldID(clazz, "mRebufferingWatermarkHighKB", "I");
6223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
6323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->DeleteLocalRef(lclazz);
6423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        }
6523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
6623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        void exit(JNIEnv *env) {
6723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->DeleteGlobalRef(clazz);
6823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            clazz = NULL;
6923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        }
7023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    };
7123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
7223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    void fillFromJobject(JNIEnv *env, const fields_t& fields, jobject params) {
7323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        settings.mInitialBufferingMode =
7423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            (BufferingMode)env->GetIntField(params, fields.initial_buffering_mode);
7523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        settings.mRebufferingMode =
7623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            (BufferingMode)env->GetIntField(params, fields.rebuffering_mode);
7723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        settings.mInitialWatermarkMs =
7823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->GetIntField(params, fields.initial_watermark_ms);
7923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        settings.mInitialWatermarkKB =
8023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->GetIntField(params, fields.initial_watermark_kb);
8123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        settings.mRebufferingWatermarkLowMs =
8223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->GetIntField(params, fields.rebuffering_watermark_low_ms);
8323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        settings.mRebufferingWatermarkHighMs =
8423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->GetIntField(params, fields.rebuffering_watermark_high_ms);
8523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        settings.mRebufferingWatermarkLowKB =
8623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->GetIntField(params, fields.rebuffering_watermark_low_kb);
8723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        settings.mRebufferingWatermarkHighKB =
8823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            env->GetIntField(params, fields.rebuffering_watermark_high_kb);
8923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    }
9023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
9123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    jobject asJobject(JNIEnv *env, const fields_t& fields) {
9223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        jobject params = env->NewObject(fields.clazz, fields.constructID);
9323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        if (params == NULL) {
9423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia            return NULL;
9523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        }
9623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        env->SetIntField(params, fields.initial_buffering_mode, (jint)settings.mInitialBufferingMode);
9723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        env->SetIntField(params, fields.rebuffering_mode, (jint)settings.mRebufferingMode);
9823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        env->SetIntField(params, fields.initial_watermark_ms, (jint)settings.mInitialWatermarkMs);
9923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        env->SetIntField(params, fields.initial_watermark_kb, (jint)settings.mInitialWatermarkKB);
10023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        env->SetIntField(params, fields.rebuffering_watermark_low_ms, (jint)settings.mRebufferingWatermarkLowMs);
10123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        env->SetIntField(params, fields.rebuffering_watermark_high_ms, (jint)settings.mRebufferingWatermarkHighMs);
10223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        env->SetIntField(params, fields.rebuffering_watermark_low_kb, (jint)settings.mRebufferingWatermarkLowKB);
10323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        env->SetIntField(params, fields.rebuffering_watermark_high_kb, (jint)settings.mRebufferingWatermarkHighKB);
10423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
10523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia        return params;
10623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia    }
10723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia};
10823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
10923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia}  // namespace android
11023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia
11123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia#endif  // _ANDROID_MEDIA_BUFFERING_PARAMS_H_
112