137b2b389139ed638831e49708c947863eef631efRonghua Wu/*
237b2b389139ed638831e49708c947863eef631efRonghua Wu * Copyright (C) 2015 The Android Open Source Project
337b2b389139ed638831e49708c947863eef631efRonghua Wu *
437b2b389139ed638831e49708c947863eef631efRonghua Wu * Licensed under the Apache License, Version 2.0 (the "License");
537b2b389139ed638831e49708c947863eef631efRonghua Wu * you may not use this file except in compliance with the License.
637b2b389139ed638831e49708c947863eef631efRonghua Wu * You may obtain a copy of the License at
737b2b389139ed638831e49708c947863eef631efRonghua Wu *
837b2b389139ed638831e49708c947863eef631efRonghua Wu *      http://www.apache.org/licenses/LICENSE-2.0
937b2b389139ed638831e49708c947863eef631efRonghua Wu *
1037b2b389139ed638831e49708c947863eef631efRonghua Wu * Unless required by applicable law or agreed to in writing, software
1137b2b389139ed638831e49708c947863eef631efRonghua Wu * distributed under the License is distributed on an "AS IS" BASIS,
1237b2b389139ed638831e49708c947863eef631efRonghua Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1337b2b389139ed638831e49708c947863eef631efRonghua Wu * See the License for the specific language governing permissions and
1437b2b389139ed638831e49708c947863eef631efRonghua Wu * limitations under the License.
1537b2b389139ed638831e49708c947863eef631efRonghua Wu */
1637b2b389139ed638831e49708c947863eef631efRonghua Wu
1737b2b389139ed638831e49708c947863eef631efRonghua Wu#ifndef FRAME_DROPPER_H_
1837b2b389139ed638831e49708c947863eef631efRonghua Wu
1937b2b389139ed638831e49708c947863eef631efRonghua Wu#define FRAME_DROPPER_H_
2037b2b389139ed638831e49708c947863eef631efRonghua Wu
2137b2b389139ed638831e49708c947863eef631efRonghua Wu#include <utils/Errors.h>
2237b2b389139ed638831e49708c947863eef631efRonghua Wu#include <utils/RefBase.h>
2337b2b389139ed638831e49708c947863eef631efRonghua Wu
2437b2b389139ed638831e49708c947863eef631efRonghua Wu#include <media/stagefright/foundation/ABase.h>
2537b2b389139ed638831e49708c947863eef631efRonghua Wu
2637b2b389139ed638831e49708c947863eef631efRonghua Wunamespace android {
2737b2b389139ed638831e49708c947863eef631efRonghua Wu
2837b2b389139ed638831e49708c947863eef631efRonghua Wustruct FrameDropper : public RefBase {
2937b2b389139ed638831e49708c947863eef631efRonghua Wu    // No frames will be dropped until a valid max frame rate is set.
3037b2b389139ed638831e49708c947863eef631efRonghua Wu    FrameDropper();
3137b2b389139ed638831e49708c947863eef631efRonghua Wu
3237b2b389139ed638831e49708c947863eef631efRonghua Wu    // maxFrameRate required to be positive.
3337b2b389139ed638831e49708c947863eef631efRonghua Wu    status_t setMaxFrameRate(float maxFrameRate);
3437b2b389139ed638831e49708c947863eef631efRonghua Wu
3537b2b389139ed638831e49708c947863eef631efRonghua Wu    // Returns false if max frame rate has not been set via setMaxFrameRate.
3637b2b389139ed638831e49708c947863eef631efRonghua Wu    bool shouldDrop(int64_t timeUs);
3737b2b389139ed638831e49708c947863eef631efRonghua Wu
3837b2b389139ed638831e49708c947863eef631efRonghua Wuprotected:
3937b2b389139ed638831e49708c947863eef631efRonghua Wu    virtual ~FrameDropper();
4037b2b389139ed638831e49708c947863eef631efRonghua Wu
4137b2b389139ed638831e49708c947863eef631efRonghua Wuprivate:
4237b2b389139ed638831e49708c947863eef631efRonghua Wu    int64_t mDesiredMinTimeUs;
4337b2b389139ed638831e49708c947863eef631efRonghua Wu    int64_t mMinIntervalUs;
4437b2b389139ed638831e49708c947863eef631efRonghua Wu
4537b2b389139ed638831e49708c947863eef631efRonghua Wu    DISALLOW_EVIL_CONSTRUCTORS(FrameDropper);
4637b2b389139ed638831e49708c947863eef631efRonghua Wu};
4737b2b389139ed638831e49708c947863eef631efRonghua Wu
4837b2b389139ed638831e49708c947863eef631efRonghua Wu}  // namespace android
4937b2b389139ed638831e49708c947863eef631efRonghua Wu
5037b2b389139ed638831e49708c947863eef631efRonghua Wu#endif  // FRAME_DROPPER_H_
51