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