// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.media.videoanalyzer.edge.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;

/** Class representing the video's rate control. */
@Fluent
public final class RateControl {
    /*
     * the maximum output bitrate in kbps.
     */
    @JsonProperty(value = "bitRateLimit")
    private Float bitRateLimit;

    /*
     * Interval at which images are encoded and transmitted.
     */
    @JsonProperty(value = "encodingInterval")
    private Float encodingInterval;

    /*
     * Maximum output framerate in fps.
     */
    @JsonProperty(value = "frameRateLimit")
    private Float frameRateLimit;

    /*
     * A value of true indicates that frame rate is a fixed value rather than
     * an upper limit, and that the video encoder shall prioritize frame rate
     * over all other adaptable configuration values such as bitrate.
     */
    @JsonProperty(value = "guaranteedFrameRate")
    private Boolean guaranteedFrameRate;

    /**
     * Get the bitRateLimit property: the maximum output bitrate in kbps.
     *
     * @return the bitRateLimit value.
     */
    public Float getBitRateLimit() {
        return this.bitRateLimit;
    }

    /**
     * Set the bitRateLimit property: the maximum output bitrate in kbps.
     *
     * @param bitRateLimit the bitRateLimit value to set.
     * @return the RateControl object itself.
     */
    public RateControl setBitRateLimit(Float bitRateLimit) {
        this.bitRateLimit = bitRateLimit;
        return this;
    }

    /**
     * Get the encodingInterval property: Interval at which images are encoded and transmitted.
     *
     * @return the encodingInterval value.
     */
    public Float getEncodingInterval() {
        return this.encodingInterval;
    }

    /**
     * Set the encodingInterval property: Interval at which images are encoded and transmitted.
     *
     * @param encodingInterval the encodingInterval value to set.
     * @return the RateControl object itself.
     */
    public RateControl setEncodingInterval(Float encodingInterval) {
        this.encodingInterval = encodingInterval;
        return this;
    }

    /**
     * Get the frameRateLimit property: Maximum output framerate in fps.
     *
     * @return the frameRateLimit value.
     */
    public Float getFrameRateLimit() {
        return this.frameRateLimit;
    }

    /**
     * Set the frameRateLimit property: Maximum output framerate in fps.
     *
     * @param frameRateLimit the frameRateLimit value to set.
     * @return the RateControl object itself.
     */
    public RateControl setFrameRateLimit(Float frameRateLimit) {
        this.frameRateLimit = frameRateLimit;
        return this;
    }

    /**
     * Get the guaranteedFrameRate property: A value of true indicates that frame rate is a fixed value rather than an
     * upper limit, and that the video encoder shall prioritize frame rate over all other adaptable configuration values
     * such as bitrate.
     *
     * @return the guaranteedFrameRate value.
     */
    public Boolean isGuaranteedFrameRate() {
        return this.guaranteedFrameRate;
    }

    /**
     * Set the guaranteedFrameRate property: A value of true indicates that frame rate is a fixed value rather than an
     * upper limit, and that the video encoder shall prioritize frame rate over all other adaptable configuration values
     * such as bitrate.
     *
     * @param guaranteedFrameRate the guaranteedFrameRate value to set.
     * @return the RateControl object itself.
     */
    public RateControl setGuaranteedFrameRate(Boolean guaranteedFrameRate) {
        this.guaranteedFrameRate = guaranteedFrameRate;
        return this;
    }
}
