Constant bitrate video encoding.
This commit is contained in:
parent
4f96cb7439
commit
f247fd78c6
1 changed files with 15 additions and 10 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Signal Messenger, LLC
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
package org.thoughtcrime.securesms.video.videoconverter;
|
package org.thoughtcrime.securesms.video.videoconverter;
|
||||||
|
|
||||||
import android.media.MediaCodec;
|
import android.media.MediaCodec;
|
||||||
|
@ -21,7 +26,6 @@ import org.thoughtcrime.securesms.video.videoconverter.utils.Preconditions;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
import kotlin.Pair;
|
import kotlin.Pair;
|
||||||
|
@ -157,6 +161,7 @@ final class VideoTrackConverter {
|
||||||
// configure() call to throw an unhelpful exception.
|
// configure() call to throw an unhelpful exception.
|
||||||
outputVideoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
|
outputVideoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
|
||||||
outputVideoFormat.setInteger(MediaFormat.KEY_BIT_RATE, videoBitrate);
|
outputVideoFormat.setInteger(MediaFormat.KEY_BIT_RATE, videoBitrate);
|
||||||
|
outputVideoFormat.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR);
|
||||||
outputVideoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, OUTPUT_VIDEO_FRAME_RATE);
|
outputVideoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, OUTPUT_VIDEO_FRAME_RATE);
|
||||||
outputVideoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, OUTPUT_VIDEO_IFRAME_INTERVAL);
|
outputVideoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, OUTPUT_VIDEO_IFRAME_INTERVAL);
|
||||||
if (Build.VERSION.SDK_INT >= 31 && isHdr(inputVideoFormat)) {
|
if (Build.VERSION.SDK_INT >= 31 && isHdr(inputVideoFormat)) {
|
||||||
|
@ -476,15 +481,15 @@ final class VideoTrackConverter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
shader =
|
shader =
|
||||||
"#extension GL_OES_EGL_image_external : require\n" +
|
"#extension GL_OES_EGL_image_external : require\n" +
|
||||||
"precision mediump float;\n" + // highp here doesn't seem to matter
|
"precision mediump float;\n" + // highp here doesn't seem to matter
|
||||||
"varying vec2 vTextureCoord;\n" +
|
"varying vec2 vTextureCoord;\n" +
|
||||||
"uniform samplerExternalOES sTexture;\n" +
|
"uniform samplerExternalOES sTexture;\n" +
|
||||||
"void main() {\n" +
|
"void main() {\n" +
|
||||||
" gl_FragColor = (texture2D(sTexture, vTextureCoord)\n" +
|
" gl_FragColor = (texture2D(sTexture, vTextureCoord)\n" +
|
||||||
colorLoop.toString() +
|
colorLoop +
|
||||||
" ) / " + sum + ";\n" +
|
" ) / " + sum + ";\n" +
|
||||||
"}\n";
|
"}\n";
|
||||||
}
|
}
|
||||||
Log.i(TAG, shader);
|
Log.i(TAG, shader);
|
||||||
return shader;
|
return shader;
|
||||||
|
|
Loading…
Add table
Reference in a new issue