mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-03-03 07:48:36 +00:00
Allow full disablement of StreamingTranscoder output size limit.
This commit is contained in:
committed by
Greyson Parrelli
parent
ac0812a6dd
commit
a36f31c2d0
@@ -7,6 +7,8 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import com.google.common.io.CountingOutputStream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.video.exceptions.VideoSizeException;
|
||||
import org.thoughtcrime.securesms.video.exceptions.VideoSourceException;
|
||||
@@ -91,7 +93,7 @@ public final class StreamingTranscoder {
|
||||
this.duration = getDuration(mediaMetadataRetriever);
|
||||
this.inputBitRate = VideoBitRateCalculator.bitRate(inSize, duration);
|
||||
this.targetQuality = new TranscodingQuality(videoBitrate, VideoConstants.AUDIO_BIT_RATE, 1.0, duration, shortEdge);
|
||||
this.upperSizeLimit = Long.MAX_VALUE;
|
||||
this.upperSizeLimit = 0L;
|
||||
|
||||
this.transcodeRequired = true;
|
||||
|
||||
@@ -126,17 +128,24 @@ public final class StreamingTranscoder {
|
||||
numberFormat.format(inSize / 1024),
|
||||
numberFormat.format(inputBitRate)));
|
||||
|
||||
if (fileSizeEstimate > upperSizeLimit) {
|
||||
final boolean sizeLimitEnabled = 0 < upperSizeLimit;
|
||||
|
||||
if (sizeLimitEnabled && upperSizeLimit < fileSizeEstimate) {
|
||||
throw new VideoSizeException("Size constraints could not be met!");
|
||||
}
|
||||
|
||||
final long startTime = System.currentTimeMillis();
|
||||
|
||||
final MediaConverter converter = new MediaConverter();
|
||||
final LimitedSizeOutputStream limitedSizeOutputStream = new LimitedSizeOutputStream(stream, upperSizeLimit);
|
||||
|
||||
converter.setInput(new MediaDataSourceMediaInput(dataSource));
|
||||
converter.setOutput(limitedSizeOutputStream);
|
||||
final CountingOutputStream outStream;
|
||||
if (sizeLimitEnabled) {
|
||||
outStream = new CountingOutputStream(new LimitedSizeOutputStream(stream, upperSizeLimit));
|
||||
} else {
|
||||
outStream = new CountingOutputStream(stream);
|
||||
}
|
||||
converter.setOutput(outStream);
|
||||
converter.setVideoResolution(targetQuality.getOutputResolution());
|
||||
converter.setVideoBitrate(targetQuality.getTargetVideoBitRate());
|
||||
converter.setAudioBitrate(targetQuality.getTargetAudioBitRate());
|
||||
@@ -157,7 +166,7 @@ public final class StreamingTranscoder {
|
||||
|
||||
converter.convert();
|
||||
|
||||
long outSize = limitedSizeOutputStream.written;
|
||||
long outSize = outStream.getCount();
|
||||
float encodeDurationSec = (System.currentTimeMillis() - startTime) / 1000f;
|
||||
|
||||
Log.i(TAG, String.format(Locale.US,
|
||||
@@ -174,7 +183,7 @@ public final class StreamingTranscoder {
|
||||
(outSize * 100d) / fileSizeEstimate,
|
||||
numberFormat.format(VideoBitRateCalculator.bitRate(outSize, duration))));
|
||||
|
||||
if (outSize > upperSizeLimit) {
|
||||
if (sizeLimitEnabled && outSize > upperSizeLimit) {
|
||||
throw new VideoSizeException("Size constraints could not be met!");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user