diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java index 5ec10391ec..ff638e8eb8 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java @@ -504,11 +504,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/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java index 6fd88d043b..4078e3eeb4 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/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