// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.media;

import androidx.annotation.IntDef;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

class BitrateAdjuster {
    @IntDef({Type.NO_ADJUSTMENT, Type.FRAMERATE_ADJUSTMENT})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Type {
        // No adjustment - video encoder has no known bitrate problem.
        int NO_ADJUSTMENT = 0;
        // Framerate based bitrate adjustment is required - HW encoder does not use frame
        // timestamps to calculate frame bitrate budget and instead is relying on initial
        // fps configuration assuming that all frames are coming at fixed initial frame rate.
        int FRAMERATE_ADJUSTMENT = 1;
    }

    private static final int FRAMERATE_ADJUSTMENT_BITRATE_ADJUSTMENT_FPS = 30;

    // Gets the adjusted bitrate according to the implementation's adjustment policy.
    public static int getTargetBitrate(@Type int type, int bps, int frameRate) {
        switch (type) {
            case Type.NO_ADJUSTMENT:
                return bps;
            case Type.FRAMERATE_ADJUSTMENT:
                return frameRate == 0
                        ? bps
                        : FRAMERATE_ADJUSTMENT_BITRATE_ADJUSTMENT_FPS * bps / frameRate;
        }
        return 0;
    }

    // Gets the initial frame rate of the media. The frameRateHint can be used as a default or a
    // constraint.
    public static int getInitialFrameRate(@Type int type, int frameRateHint) {
        switch (type) {
            case Type.NO_ADJUSTMENT:
                return Math.min(frameRateHint, 30); // 30 = MAXIMUM_INITIAL_FPS
            case Type.FRAMERATE_ADJUSTMENT:
                return FRAMERATE_ADJUSTMENT_BITRATE_ADJUSTMENT_FPS;
        }
        return 0;
    }
}
