1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/* 2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Copyright 2016 The Android Open Source Project 3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Licensed under the Apache License, Version 2.0 (the "License"); 5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * you may not use this file except in compliance with the License. 6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * You may obtain a copy of the License at 7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * http://www.apache.org/licenses/LICENSE-2.0 9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Unless required by applicable law or agreed to in writing, software 11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * distributed under the License is distributed on an "AS IS" BASIS, 12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * See the License for the specific language governing permissions and 14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * limitations under the License. 15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */ 16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef ANDROID_BUFFERING_SETTINGS_H 18e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define ANDROID_BUFFERING_SETTINGS_H 19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <binder/Parcelable.h> 21e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 22e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android { 23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum BufferingMode : int { 25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Do not support buffering. 26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman BUFFERING_MODE_NONE = 0, 27e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Support only time based buffering. 28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman BUFFERING_MODE_TIME_ONLY = 1, 29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Support only size based buffering. 30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman BUFFERING_MODE_SIZE_ONLY = 2, 31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Support both time and size based buffering, time based calculation precedes size based. 32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Size based calculation will be used only when time information is not available for 33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // the stream. 34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman BUFFERING_MODE_TIME_THEN_SIZE = 3, 35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Number of modes. 36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman BUFFERING_MODE_COUNT = 4, 37e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 38e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 39e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct BufferingSettings : public Parcelable { 40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static const int kNoWatermark = -1; 41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static bool IsValidBufferingMode(int mode); 43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static bool IsTimeBasedBufferingMode(int mode); 44e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static bool IsSizeBasedBufferingMode(int mode); 45e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman BufferingMode mInitialBufferingMode; // for prepare 47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman BufferingMode mRebufferingMode; // for playback 48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mInitialWatermarkMs; // time based 50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mInitialWatermarkKB; // size based 51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // When cached data is below this mark, playback will be paused for buffering 53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // till data reach |mRebufferingWatermarkHighMs| or end of stream. 54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mRebufferingWatermarkLowMs; 55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // When cached data is above this mark, buffering will be paused. 56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mRebufferingWatermarkHighMs; 57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // When cached data is below this mark, playback will be paused for buffering 59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // till data reach |mRebufferingWatermarkHighKB| or end of stream. 60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mRebufferingWatermarkLowKB; 61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // When cached data is above this mark, buffering will be paused. 62e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mRebufferingWatermarkHighKB; 63e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 64e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman BufferingSettings(); 65e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 66e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t writeToParcel(Parcel* parcel) const override; 67e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t readFromParcel(const Parcel* parcel) override; 68e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 69e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman String8 toString() const; 70e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 71e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 72e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman} // namespace android 73e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 74e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// --------------------------------------------------------------------------- 75e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 76e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif // ANDROID_BUFFERING_SETTINGS_H 77