diff --git a/sdk/android/src/java/org/webrtc/BaseBitrateAdjuster.java b/sdk/android/src/java/org/webrtc/BaseBitrateAdjuster.java index ca9ebb52a8..19cf5ea38a 100644 --- a/sdk/android/src/java/org/webrtc/BaseBitrateAdjuster.java +++ b/sdk/android/src/java/org/webrtc/BaseBitrateAdjuster.java @@ -32,7 +32,7 @@ class BaseBitrateAdjuster implements BitrateAdjuster { } @Override - public int getAdjustedFramerate() { + public int getCodecConfigFramerate() { return targetFps; } } diff --git a/sdk/android/src/java/org/webrtc/BitrateAdjuster.java b/sdk/android/src/java/org/webrtc/BitrateAdjuster.java index 044a43a1eb..854ef067e5 100644 --- a/sdk/android/src/java/org/webrtc/BitrateAdjuster.java +++ b/sdk/android/src/java/org/webrtc/BitrateAdjuster.java @@ -26,6 +26,6 @@ interface BitrateAdjuster { /** Gets the current bitrate. */ int getAdjustedBitrateBps(); - /** Gets the current framerate. */ - int getAdjustedFramerate(); + /** Gets the framerate for initial codec configuration. */ + int getCodecConfigFramerate(); } diff --git a/sdk/android/src/java/org/webrtc/DynamicBitrateAdjuster.java b/sdk/android/src/java/org/webrtc/DynamicBitrateAdjuster.java index 742cfad7b6..1f970bbbbd 100644 --- a/sdk/android/src/java/org/webrtc/DynamicBitrateAdjuster.java +++ b/sdk/android/src/java/org/webrtc/DynamicBitrateAdjuster.java @@ -86,10 +86,13 @@ class DynamicBitrateAdjuster extends BaseBitrateAdjuster { timeSinceLastAdjustmentMs = 0; } + private double getBitrateAdjustmentScale() { + return Math.pow(BITRATE_ADJUSTMENT_MAX_SCALE, + (double) bitrateAdjustmentScaleExp / BITRATE_ADJUSTMENT_STEPS); + } + @Override public int getAdjustedBitrateBps() { - return (int) (targetBitrateBps - * Math.pow(BITRATE_ADJUSTMENT_MAX_SCALE, - (double) bitrateAdjustmentScaleExp / BITRATE_ADJUSTMENT_STEPS)); + return (int) (targetBitrateBps * getBitrateAdjustmentScale()); } } diff --git a/sdk/android/src/java/org/webrtc/FramerateBitrateAdjuster.java b/sdk/android/src/java/org/webrtc/FramerateBitrateAdjuster.java index a0a0664bf6..b9d1af66c0 100644 --- a/sdk/android/src/java/org/webrtc/FramerateBitrateAdjuster.java +++ b/sdk/android/src/java/org/webrtc/FramerateBitrateAdjuster.java @@ -25,6 +25,11 @@ class FramerateBitrateAdjuster extends BaseBitrateAdjuster { } super.setTargets(targetBitrateBps, targetFps); - this.targetBitrateBps *= INITIAL_FPS / this.targetFps; + this.targetBitrateBps = this.targetBitrateBps * INITIAL_FPS / this.targetFps; + } + + @Override + public int getCodecConfigFramerate() { + return INITIAL_FPS; } } diff --git a/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java b/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java index 7a05f37791..9b895cc993 100644 --- a/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java +++ b/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java @@ -17,7 +17,6 @@ import android.media.MediaCodecInfo; import android.media.MediaFormat; import android.opengl.GLES20; import android.os.Bundle; -import javax.annotation.Nullable; import android.view.Surface; import java.io.IOException; import java.nio.ByteBuffer; @@ -26,6 +25,7 @@ import java.util.Map; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; +import javax.annotation.Nullable; import org.webrtc.ThreadUtils.ThreadChecker; /** Android hardware video encoder. */ @@ -186,7 +186,7 @@ class HardwareVideoEncoder implements VideoEncoder { format.setInteger(MediaFormat.KEY_BIT_RATE, adjustedBitrate); format.setInteger(KEY_BITRATE_MODE, VIDEO_ControlRateConstant); format.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat); - format.setInteger(MediaFormat.KEY_FRAME_RATE, bitrateAdjuster.getAdjustedFramerate()); + format.setInteger(MediaFormat.KEY_FRAME_RATE, bitrateAdjuster.getCodecConfigFramerate()); format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, keyFrameIntervalSec); if (codecType == VideoCodecType.H264) { String profileLevelId = params.get(VideoCodecInfo.H264_FMTP_PROFILE_LEVEL_ID);