ThrottledSource.h revision bd9c9a80fd487b3e83861c32b388eac146f8a299
1c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber/* 2c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * Copyright (C) 2010 The Android Open Source Project 3c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * 4c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * you may not use this file except in compliance with the License. 6c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * You may obtain a copy of the License at 7c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * 8c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * 10c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * Unless required by applicable law or agreed to in writing, software 11c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * See the License for the specific language governing permissions and 14c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber * limitations under the License. 15c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber */ 16c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 17c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber#ifndef THROTTLED_SOURCE_H_ 18c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 19c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber#define THROTTLED_SOURCE_H_ 20c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 21c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber#include <media/stagefright/DataSource.h> 22c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber#include <utils/threads.h> 23c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 24c282e3eee921453fc9188705b4879d6289b71f9cAndreas Hubernamespace android { 25c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 26c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huberstruct ThrottledSource : public DataSource { 27c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber ThrottledSource( 28c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber const sp<DataSource> &source, 29c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber int32_t bandwidthLimitBytesPerSecond); 30c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 31c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber virtual status_t initCheck() const; 32c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 33c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong virtual ssize_t readAt(off64_t offset, void *data, size_t size); 34c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 35c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong virtual status_t getSize(off64_t *size); 36c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber virtual uint32_t flags(); 37c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 38bd9c9a80fd487b3e83861c32b388eac146f8a299Andreas Huber virtual String8 getMIMEType() const { 39bd9c9a80fd487b3e83861c32b388eac146f8a299Andreas Huber return mSource->getMIMEType(); 40bd9c9a80fd487b3e83861c32b388eac146f8a299Andreas Huber } 41bd9c9a80fd487b3e83861c32b388eac146f8a299Andreas Huber 42bd9c9a80fd487b3e83861c32b388eac146f8a299Andreas Huber 43c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huberprivate: 44c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber Mutex mLock; 45c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 46c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber sp<DataSource> mSource; 47c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber int32_t mBandwidthLimitBytesPerSecond; 48c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber int64_t mStartTimeUs; 49c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber size_t mTotalTransferred; 50c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 51c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber ThrottledSource(const ThrottledSource &); 52c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber ThrottledSource &operator=(const ThrottledSource &); 53c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber}; 54c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 55c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber} // namespace android 56c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber 57c282e3eee921453fc9188705b4879d6289b71f9cAndreas Huber#endif // THROTTLED_SOURCE_H_ 58