blob: 24c51f5f00d497d49a48b96b1a89543f0bdda308 [file] [log] [blame]
Wei Jia23dfee52017-01-16 10:18:15 -08001/*
2 * Copyright 2017, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef _ANDROID_MEDIA_BUFFERING_PARAMS_H_
18#define _ANDROID_MEDIA_BUFFERING_PARAMS_H_
19
20#include <media/BufferingSettings.h>
21
22namespace android {
23
24// This entire class is inline
25struct BufferingParams {
26 BufferingSettings settings;
27
28 struct fields_t {
29 jclass clazz;
30 jmethodID constructID;
31
32 jfieldID initial_buffering_mode;
33 jfieldID rebuffering_mode;
34 jfieldID initial_watermark_ms;
35 jfieldID initial_watermark_kb;
36 jfieldID rebuffering_watermark_low_ms;
37 jfieldID rebuffering_watermark_high_ms;
38 jfieldID rebuffering_watermark_low_kb;
39 jfieldID rebuffering_watermark_high_kb;
40
41 void init(JNIEnv *env) {
42 jclass lclazz = env->FindClass("android/media/BufferingParams");
43 if (lclazz == NULL) {
44 return;
45 }
46
47 clazz = (jclass)env->NewGlobalRef(lclazz);
48 if (clazz == NULL) {
49 return;
50 }
51
52 constructID = env->GetMethodID(clazz, "<init>", "()V");
53
54 initial_buffering_mode = env->GetFieldID(clazz, "mInitialBufferingMode", "I");
55 rebuffering_mode = env->GetFieldID(clazz, "mRebufferingMode", "I");
56 initial_watermark_ms = env->GetFieldID(clazz, "mInitialWatermarkMs", "I");
57 initial_watermark_kb = env->GetFieldID(clazz, "mInitialWatermarkKB", "I");
58 rebuffering_watermark_low_ms = env->GetFieldID(clazz, "mRebufferingWatermarkLowMs", "I");
59 rebuffering_watermark_high_ms = env->GetFieldID(clazz, "mRebufferingWatermarkHighMs", "I");
60 rebuffering_watermark_low_kb = env->GetFieldID(clazz, "mRebufferingWatermarkLowKB", "I");
61 rebuffering_watermark_high_kb = env->GetFieldID(clazz, "mRebufferingWatermarkHighKB", "I");
62
63 env->DeleteLocalRef(lclazz);
64 }
65
66 void exit(JNIEnv *env) {
67 env->DeleteGlobalRef(clazz);
68 clazz = NULL;
69 }
70 };
71
72 void fillFromJobject(JNIEnv *env, const fields_t& fields, jobject params) {
73 settings.mInitialBufferingMode =
74 (BufferingMode)env->GetIntField(params, fields.initial_buffering_mode);
75 settings.mRebufferingMode =
76 (BufferingMode)env->GetIntField(params, fields.rebuffering_mode);
77 settings.mInitialWatermarkMs =
78 env->GetIntField(params, fields.initial_watermark_ms);
79 settings.mInitialWatermarkKB =
80 env->GetIntField(params, fields.initial_watermark_kb);
81 settings.mRebufferingWatermarkLowMs =
82 env->GetIntField(params, fields.rebuffering_watermark_low_ms);
83 settings.mRebufferingWatermarkHighMs =
84 env->GetIntField(params, fields.rebuffering_watermark_high_ms);
85 settings.mRebufferingWatermarkLowKB =
86 env->GetIntField(params, fields.rebuffering_watermark_low_kb);
87 settings.mRebufferingWatermarkHighKB =
88 env->GetIntField(params, fields.rebuffering_watermark_high_kb);
89 }
90
91 jobject asJobject(JNIEnv *env, const fields_t& fields) {
92 jobject params = env->NewObject(fields.clazz, fields.constructID);
93 if (params == NULL) {
94 return NULL;
95 }
96 env->SetIntField(params, fields.initial_buffering_mode, (jint)settings.mInitialBufferingMode);
97 env->SetIntField(params, fields.rebuffering_mode, (jint)settings.mRebufferingMode);
98 env->SetIntField(params, fields.initial_watermark_ms, (jint)settings.mInitialWatermarkMs);
99 env->SetIntField(params, fields.initial_watermark_kb, (jint)settings.mInitialWatermarkKB);
100 env->SetIntField(params, fields.rebuffering_watermark_low_ms, (jint)settings.mRebufferingWatermarkLowMs);
101 env->SetIntField(params, fields.rebuffering_watermark_high_ms, (jint)settings.mRebufferingWatermarkHighMs);
102 env->SetIntField(params, fields.rebuffering_watermark_low_kb, (jint)settings.mRebufferingWatermarkLowKB);
103 env->SetIntField(params, fields.rebuffering_watermark_high_kb, (jint)settings.mRebufferingWatermarkHighKB);
104
105 return params;
106 }
107};
108
109} // namespace android
110
111#endif // _ANDROID_MEDIA_BUFFERING_PARAMS_H_