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 Jiapackage android.media; 1823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 1923dfee521a7782bf901344beec6f94614e0b02b8Wei Jiaimport android.annotation.IntDef; 2023dfee521a7782bf901344beec6f94614e0b02b8Wei Jiaimport android.os.Parcel; 2123dfee521a7782bf901344beec6f94614e0b02b8Wei Jiaimport android.os.Parcelable; 2223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 2323dfee521a7782bf901344beec6f94614e0b02b8Wei Jiaimport java.lang.annotation.Retention; 2423dfee521a7782bf901344beec6f94614e0b02b8Wei Jiaimport java.lang.annotation.RetentionPolicy; 2523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 2623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia/** 2723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Structure for source buffering management params. 2823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * 2923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Used by {@link MediaPlayer#getDefaultBufferingParams()}, 3023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link MediaPlayer#getBufferingParams()} and 3123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link MediaPlayer#setBufferingParams(BufferingParams)} 3223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * to control source buffering behavior. 3323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * 3423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <p>There are two stages of source buffering in {@link MediaPlayer}: initial buffering 3523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * (when {@link MediaPlayer} is being prepared) and rebuffering (when {@link MediaPlayer} 3623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * is playing back source). {@link BufferingParams} includes mode and corresponding 3723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * watermarks for each stage of source buffering. The watermarks could be either size 3823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * based (in milliseconds), or time based (in kilobytes) or both, depending on the mode. 3923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * 4023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <p>There are 4 buffering modes: {@link #BUFFERING_MODE_NONE}, 4123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link #BUFFERING_MODE_TIME_ONLY}, {@link #BUFFERING_MODE_SIZE_ONLY} and 4223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link #BUFFERING_MODE_TIME_THEN_SIZE}. 4323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link MediaPlayer} source component has default buffering modes which can be queried 4423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * by calling {@link MediaPlayer#getDefaultBufferingParams()}. 4523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Users should always use those default modes or their downsized version when trying to 4623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * change buffering params. For example, {@link #BUFFERING_MODE_TIME_THEN_SIZE} can be 4723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * downsized to {@link #BUFFERING_MODE_NONE}, {@link #BUFFERING_MODE_TIME_ONLY} or 4823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link #BUFFERING_MODE_SIZE_ONLY}. But {@link #BUFFERING_MODE_TIME_ONLY} can not be 4923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * downsized to {@link #BUFFERING_MODE_SIZE_ONLY}. 5023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <ul> 5123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <li><strong>initial buffering stage:</strong> has one watermark which is used when 5223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link MediaPlayer} is being prepared. When cached data amount exceeds this watermark, 5323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link MediaPlayer} is prepared.</li> 5423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <li><strong>rebuffering stage:</strong> has two watermarks, low and high, which are 5523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * used when {@link MediaPlayer} is playing back content. 5623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <ul> 5723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <li> When cached data amount exceeds high watermark, {@link MediaPlayer} will pause 5823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * buffering. Buffering will resume when cache runs below some limit which could be low 5923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * watermark or some intermediate value decided by the source component.</li> 6023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <li> When cached data amount runs below low watermark, {@link MediaPlayer} will paused 6123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * playback. Playback will resume when cached data amount exceeds high watermark 6223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * or reaches end of stream.</li> 6323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * </ul> 6423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * </ul> 6523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <p>Users should use {@link Builder} to change {@link BufferingParams}. 66f3d93a0f69190737bfca907321c6170a490cdfdbWei Jia * @hide 6723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 6823dfee521a7782bf901344beec6f94614e0b02b8Wei Jiapublic final class BufferingParams implements Parcelable { 6923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 7023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * This mode indicates that source buffering is not supported. 7123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 7223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public static final int BUFFERING_MODE_NONE = 0; 7323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 7423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * This mode indicates that only time based source buffering is supported. This means 7523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * the watermark(s) are time based. 7623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 7723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public static final int BUFFERING_MODE_TIME_ONLY = 1; 7823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 7923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * This mode indicates that only size based source buffering is supported. This means 8023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * the watermark(s) are size based. 8123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 8223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public static final int BUFFERING_MODE_SIZE_ONLY = 2; 8323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 8423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * This mode indicates that both time and size based source buffering are supported, 8523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * and time based calculation precedes size based. Size based calculation will be used 8623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * only when time information is not available from the source. 8723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 8823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public static final int BUFFERING_MODE_TIME_THEN_SIZE = 3; 8923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 9023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** @hide */ 9123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia @IntDef( 9223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia value = { 9323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia BUFFERING_MODE_NONE, 9423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia BUFFERING_MODE_TIME_ONLY, 9523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia BUFFERING_MODE_SIZE_ONLY, 9623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia BUFFERING_MODE_TIME_THEN_SIZE, 9723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 9823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia ) 9923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia @Retention(RetentionPolicy.SOURCE) 10023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public @interface BufferingMode {} 10123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 10223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private static final int BUFFERING_NO_WATERMARK = -1; 10323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 10423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia // params 10523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mInitialBufferingMode = BUFFERING_MODE_NONE; 10623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingMode = BUFFERING_MODE_NONE; 10723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 10823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mInitialWatermarkMs = BUFFERING_NO_WATERMARK; 10923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mInitialWatermarkKB = BUFFERING_NO_WATERMARK; 11023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 11123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingWatermarkLowMs = BUFFERING_NO_WATERMARK; 11223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingWatermarkHighMs = BUFFERING_NO_WATERMARK; 11323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingWatermarkLowKB = BUFFERING_NO_WATERMARK; 11423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingWatermarkHighKB = BUFFERING_NO_WATERMARK; 11523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 11623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private BufferingParams() { 11723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 11823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 11923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 12023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Return the initial buffering mode used when {@link MediaPlayer} is being prepared. 12123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return one of the values that can be set in {@link Builder#setInitialBufferingMode(int)} 12223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 12323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public int getInitialBufferingMode() { 12423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return mInitialBufferingMode; 12523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 12623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 12723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 12823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Return the rebuffering mode used when {@link MediaPlayer} is playing back source. 12923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return one of the values that can be set in {@link Builder#setRebufferingMode(int)} 13023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 13123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public int getRebufferingMode() { 13223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return mRebufferingMode; 13323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 13423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 13523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 13623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Return the time based initial buffering watermark in milliseconds. 13723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * It is meaningful only when initial buffering mode obatined from 13823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link #getInitialBufferingMode()} is time based. 13923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return time based initial buffering watermark in milliseconds 14023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 14123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public int getInitialBufferingWatermarkMs() { 14223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return mInitialWatermarkMs; 14323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 14423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 14523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 14623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Return the size based initial buffering watermark in kilobytes. 14723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * It is meaningful only when initial buffering mode obatined from 14823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link #getInitialBufferingMode()} is size based. 14923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return size based initial buffering watermark in kilobytes 15023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 15123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public int getInitialBufferingWatermarkKB() { 15223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return mInitialWatermarkKB; 15323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 15423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 15523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 15623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Return the time based low watermark in milliseconds for rebuffering. 15723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * It is meaningful only when rebuffering mode obatined from 15823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link #getRebufferingMode()} is time based. 15923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return time based low watermark for rebuffering in milliseconds 16023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 16123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public int getRebufferingWatermarkLowMs() { 16223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return mRebufferingWatermarkLowMs; 16323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 16423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 16523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 16623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Return the time based high watermark in milliseconds for rebuffering. 16723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * It is meaningful only when rebuffering mode obatined from 16823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link #getRebufferingMode()} is time based. 16923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return time based high watermark for rebuffering in milliseconds 17023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 17123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public int getRebufferingWatermarkHighMs() { 17223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return mRebufferingWatermarkHighMs; 17323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 17423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 17523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 17623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Return the size based low watermark in kilobytes for rebuffering. 17723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * It is meaningful only when rebuffering mode obatined from 17823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link #getRebufferingMode()} is size based. 17923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return size based low watermark for rebuffering in kilobytes 18023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 18123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public int getRebufferingWatermarkLowKB() { 18223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return mRebufferingWatermarkLowKB; 18323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 18423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 18523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 18623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Return the size based high watermark in kilobytes for rebuffering. 18723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * It is meaningful only when rebuffering mode obatined from 18823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link #getRebufferingMode()} is size based. 18923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return size based high watermark for rebuffering in kilobytes 19023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 19123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public int getRebufferingWatermarkHighKB() { 19223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return mRebufferingWatermarkHighKB; 19323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 19423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 19523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 19623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Builder class for {@link BufferingParams} objects. 19723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <p> Here is an example where <code>Builder</code> is used to define the 19823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link BufferingParams} to be used by a {@link MediaPlayer} instance: 19923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * 20023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * <pre class="prettyprint"> 20123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * BufferingParams myParams = mediaplayer.getDefaultBufferingParams(); 20223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * myParams = new BufferingParams.Builder(myParams) 20323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * .setInitialBufferingWatermarkMs(10000) 20423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * .build(); 20523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * mediaplayer.setBufferingParams(myParams); 20623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * </pre> 20723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 20823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public static class Builder { 20923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mInitialBufferingMode = BUFFERING_MODE_NONE; 21023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingMode = BUFFERING_MODE_NONE; 21123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 21223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mInitialWatermarkMs = BUFFERING_NO_WATERMARK; 21323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mInitialWatermarkKB = BUFFERING_NO_WATERMARK; 21423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 21523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingWatermarkLowMs = BUFFERING_NO_WATERMARK; 21623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingWatermarkHighMs = BUFFERING_NO_WATERMARK; 21723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingWatermarkLowKB = BUFFERING_NO_WATERMARK; 21823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private int mRebufferingWatermarkHighKB = BUFFERING_NO_WATERMARK; 21923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 22023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 22123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Constructs a new Builder with the defaults. 22223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * By default, both initial buffering mode and rebuffering mode are 22323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link BufferingParams#BUFFERING_MODE_NONE}, and all watermarks are -1. 22423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 22523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder() { 22623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 22723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 22823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 22923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Constructs a new Builder from a given {@link BufferingParams} instance 23023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param bp the {@link BufferingParams} object whose data will be reused 23123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * in the new Builder. 23223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 23323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder(BufferingParams bp) { 23423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mInitialBufferingMode = bp.mInitialBufferingMode; 23523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingMode = bp.mRebufferingMode; 23623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 23723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mInitialWatermarkMs = bp.mInitialWatermarkMs; 23823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mInitialWatermarkKB = bp.mInitialWatermarkKB; 23923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 24023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkLowMs = bp.mRebufferingWatermarkLowMs; 24123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkHighMs = bp.mRebufferingWatermarkHighMs; 24223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkLowKB = bp.mRebufferingWatermarkLowKB; 24323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkHighKB = bp.mRebufferingWatermarkHighKB; 24423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 24523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 24623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 24723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Combines all of the fields that have been set and return a new 24823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link BufferingParams} object. <code>IllegalStateException</code> will be 24923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * thrown if there is conflict between fields. 25023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return a new {@link BufferingParams} object 25123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 25223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public BufferingParams build() { 25323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia if (isTimeBasedMode(mRebufferingMode) 25423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia && mRebufferingWatermarkLowMs > mRebufferingWatermarkHighMs) { 25523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia throw new IllegalStateException("Illegal watermark:" 25623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia + mRebufferingWatermarkLowMs + " : " + mRebufferingWatermarkHighMs); 25723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 25823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia if (isSizeBasedMode(mRebufferingMode) 25923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia && mRebufferingWatermarkLowKB > mRebufferingWatermarkHighKB) { 26023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia throw new IllegalStateException("Illegal watermark:" 26123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia + mRebufferingWatermarkLowKB + " : " + mRebufferingWatermarkHighKB); 26223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 26323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 26423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia BufferingParams bp = new BufferingParams(); 26523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia bp.mInitialBufferingMode = mInitialBufferingMode; 26623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia bp.mRebufferingMode = mRebufferingMode; 26723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 26823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia bp.mInitialWatermarkMs = mInitialWatermarkMs; 26923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia bp.mInitialWatermarkKB = mInitialWatermarkKB; 27023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 27123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia bp.mRebufferingWatermarkLowMs = mRebufferingWatermarkLowMs; 27223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia bp.mRebufferingWatermarkHighMs = mRebufferingWatermarkHighMs; 27323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia bp.mRebufferingWatermarkLowKB = mRebufferingWatermarkLowKB; 27423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia bp.mRebufferingWatermarkHighKB = mRebufferingWatermarkHighKB; 27523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return bp; 27623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 27723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 27823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private boolean isTimeBasedMode(int mode) { 27923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return (mode == BUFFERING_MODE_TIME_ONLY || mode == BUFFERING_MODE_TIME_THEN_SIZE); 28023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 28123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 28223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private boolean isSizeBasedMode(int mode) { 28323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return (mode == BUFFERING_MODE_SIZE_ONLY || mode == BUFFERING_MODE_TIME_THEN_SIZE); 28423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 28523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 28623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 28723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the initial buffering mode. 28823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param mode one of {@link BufferingParams#BUFFERING_MODE_NONE}, 28923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link BufferingParams#BUFFERING_MODE_TIME_ONLY}, 29023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link BufferingParams#BUFFERING_MODE_SIZE_ONLY}, 29123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link BufferingParams#BUFFERING_MODE_TIME_THEN_SIZE}, 29223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 29323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 29423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setInitialBufferingMode(@BufferingMode int mode) { 29523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia switch (mode) { 29623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia case BUFFERING_MODE_NONE: 29723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia case BUFFERING_MODE_TIME_ONLY: 29823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia case BUFFERING_MODE_SIZE_ONLY: 29923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia case BUFFERING_MODE_TIME_THEN_SIZE: 30023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mInitialBufferingMode = mode; 30123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia break; 30223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia default: 30323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia throw new IllegalArgumentException("Illegal buffering mode " + mode); 30423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 30523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 30623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 30723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 30823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 30923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the rebuffering mode. 31023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param mode one of {@link BufferingParams#BUFFERING_MODE_NONE}, 31123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link BufferingParams#BUFFERING_MODE_TIME_ONLY}, 31223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link BufferingParams#BUFFERING_MODE_SIZE_ONLY}, 31323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * {@link BufferingParams#BUFFERING_MODE_TIME_THEN_SIZE}, 31423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 31523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 31623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setRebufferingMode(@BufferingMode int mode) { 31723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia switch (mode) { 31823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia case BUFFERING_MODE_NONE: 31923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia case BUFFERING_MODE_TIME_ONLY: 32023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia case BUFFERING_MODE_SIZE_ONLY: 32123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia case BUFFERING_MODE_TIME_THEN_SIZE: 32223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingMode = mode; 32323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia break; 32423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia default: 32523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia throw new IllegalArgumentException("Illegal buffering mode " + mode); 32623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 32723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 32823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 32923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 33023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 33123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the time based watermark in milliseconds for initial buffering. 33223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param watermarkMs time based watermark in milliseconds 33323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 33423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 33523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setInitialBufferingWatermarkMs(int watermarkMs) { 33623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mInitialWatermarkMs = watermarkMs; 33723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 33823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 33923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 34023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 34123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the size based watermark in kilobytes for initial buffering. 34223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param watermarkKB size based watermark in kilobytes 34323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 34423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 34523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setInitialBufferingWatermarkKB(int watermarkKB) { 34623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mInitialWatermarkKB = watermarkKB; 34723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 34823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 34923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 35023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 35123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the time based low watermark in milliseconds for rebuffering. 35223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param watermarkMs time based low watermark in milliseconds 35323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 35423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 35523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setRebufferingWatermarkLowMs(int watermarkMs) { 35623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkLowMs = watermarkMs; 35723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 35823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 35923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 36023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 36123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the time based high watermark in milliseconds for rebuffering. 36223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param watermarkMs time based high watermark in milliseconds 36323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 36423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 36523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setRebufferingWatermarkHighMs(int watermarkMs) { 36623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkHighMs = watermarkMs; 36723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 36823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 36923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 37023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 37123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the size based low watermark in milliseconds for rebuffering. 37223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param watermarkKB size based low watermark in milliseconds 37323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 37423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 37523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setRebufferingWatermarkLowKB(int watermarkKB) { 37623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkLowKB = watermarkKB; 37723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 37823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 37923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 38023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 38123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the size based high watermark in milliseconds for rebuffering. 38223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param watermarkKB size based high watermark in milliseconds 38323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 38423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 38523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setRebufferingWatermarkHighKB(int watermarkKB) { 38623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkHighKB = watermarkKB; 38723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 38823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 38923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 39023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 39123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the time based low and high watermarks in milliseconds for rebuffering. 39223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param lowWatermarkMs time based low watermark in milliseconds 39323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param highWatermarkMs time based high watermark in milliseconds 39423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 39523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 39623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setRebufferingWatermarksMs(int lowWatermarkMs, int highWatermarkMs) { 39723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkLowMs = lowWatermarkMs; 39823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkHighMs = highWatermarkMs; 39923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 40023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 40123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 40223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia /** 40323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * Sets the size based low and high watermarks in kilobytes for rebuffering. 40423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param lowWatermarkKB size based low watermark in kilobytes 40523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @param highWatermarkKB size based high watermark in kilobytes 40623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia * @return the same Builder instance. 40723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia */ 40823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public Builder setRebufferingWatermarksKB(int lowWatermarkKB, int highWatermarkKB) { 40923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkLowKB = lowWatermarkKB; 41023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkHighKB = highWatermarkKB; 41123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return this; 41223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 41323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 41423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 41523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia private BufferingParams(Parcel in) { 41623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mInitialBufferingMode = in.readInt(); 41723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingMode = in.readInt(); 41823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 41923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mInitialWatermarkMs = in.readInt(); 42023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mInitialWatermarkKB = in.readInt(); 42123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 42223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkLowMs = in.readInt(); 42323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkHighMs = in.readInt(); 42423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkLowKB = in.readInt(); 42523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia mRebufferingWatermarkHighKB = in.readInt(); 42623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 42723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 42823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public static final Parcelable.Creator<BufferingParams> CREATOR = 42923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia new Parcelable.Creator<BufferingParams>() { 43023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia @Override 43123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public BufferingParams createFromParcel(Parcel in) { 43223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return new BufferingParams(in); 43323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 43423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 43523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia @Override 43623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public BufferingParams[] newArray(int size) { 43723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return new BufferingParams[size]; 43823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 43923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia }; 44023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 44123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 44223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia @Override 44323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public int describeContents() { 44423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia return 0; 44523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 44623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 44723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia @Override 44823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia public void writeToParcel(Parcel dest, int flags) { 44923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia dest.writeInt(mInitialBufferingMode); 45023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia dest.writeInt(mRebufferingMode); 45123dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 45223dfee521a7782bf901344beec6f94614e0b02b8Wei Jia dest.writeInt(mInitialWatermarkMs); 45323dfee521a7782bf901344beec6f94614e0b02b8Wei Jia dest.writeInt(mInitialWatermarkKB); 45423dfee521a7782bf901344beec6f94614e0b02b8Wei Jia 45523dfee521a7782bf901344beec6f94614e0b02b8Wei Jia dest.writeInt(mRebufferingWatermarkLowMs); 45623dfee521a7782bf901344beec6f94614e0b02b8Wei Jia dest.writeInt(mRebufferingWatermarkHighMs); 45723dfee521a7782bf901344beec6f94614e0b02b8Wei Jia dest.writeInt(mRebufferingWatermarkLowKB); 45823dfee521a7782bf901344beec6f94614e0b02b8Wei Jia dest.writeInt(mRebufferingWatermarkHighKB); 45923dfee521a7782bf901344beec6f94614e0b02b8Wei Jia } 46023dfee521a7782bf901344beec6f94614e0b02b8Wei Jia} 461