diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java index 8f273e81d8..e1d4c159f3 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java @@ -502,11 +502,24 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory { && allowedMimeTypes.contains(mimeType); } - /** Computes the video bit rate using the Kush Gauge. */ + /** + * Computes the video bit rate using the Kush Gauge. + * + *

{@code kushGaugeBitrate = height * width * frameRate * 0.07 * motionFactor}. + * + *

Motion factors: + * + *

+ */ private static int getSuggestedBitrate(int width, int height, float frameRate) { // TODO(b/210591626) Implement bitrate estimation. - // 1080p30 -> 6.2Mbps, 720p30 -> 2.7Mbps. - return (int) (width * height * frameRate * 0.1); + // Assume medium motion factor. + // 1080p60 -> 16.6Mbps, 720p30 -> 3.7Mbps. + return (int) (width * height * frameRate * 0.07 * 2); } @RequiresNonNull("#1.sampleMimeType") diff --git a/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactoryTest.java b/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactoryTest.java index c7d239d2a7..249c231639 100644 --- a/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactoryTest.java +++ b/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactoryTest.java @@ -74,8 +74,8 @@ public class DefaultEncoderFactoryTest { assertThat(actualVideoFormat.sampleMimeType).isEqualTo(MimeTypes.VIDEO_H264); assertThat(actualVideoFormat.width).isEqualTo(1920); assertThat(actualVideoFormat.height).isEqualTo(1080); - // 1920 * 1080 * 30 * 0.1 - assertThat(actualVideoFormat.averageBitrate).isEqualTo(6_220_800); + // 1920 * 1080 * 30 * 0.07 * 2. + assertThat(actualVideoFormat.averageBitrate).isEqualTo(8_709_120); } @Test @@ -92,8 +92,8 @@ public class DefaultEncoderFactoryTest { assertThat(actualVideoFormat.sampleMimeType).isEqualTo(MimeTypes.VIDEO_H264); assertThat(actualVideoFormat.width).isEqualTo(1920); assertThat(actualVideoFormat.height).isEqualTo(1080); - // 1920 * 1080 * 30 * 0.1 - assertThat(actualVideoFormat.averageBitrate).isEqualTo(6_220_800); + // 1920 * 1080 * 30 * 0.07 * 2. + assertThat(actualVideoFormat.averageBitrate).isEqualTo(8_709_120); } @Test