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