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