use different voice-message-quality depending on the media-quality setting

This commit is contained in:
B. Petersen
2019-05-15 01:29:26 +02:00
parent be73649703
commit 2e494948e5
2 changed files with 9 additions and 6 deletions
@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.audio;
import android.annotation.TargetApi;
import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaCodec;
@@ -10,6 +11,7 @@ import android.media.MediaRecorder;
import android.os.Build;
import android.util.Log;
import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.util.Util;
import java.io.IOException;
@@ -24,7 +26,8 @@ public class AudioCodec {
private static final int SAMPLE_RATE = 44100;
private static final int SAMPLE_RATE_INDEX = 4;
private static final int CHANNELS = 1;
private static final int BIT_RATE = 24000;
private static final int BIT_RATE_BALANCED = 32000;
private static final int BIT_RATE_WORSE = 24000;
private final int bufferSize;
private final MediaCodec mediaCodec;
@@ -33,10 +36,10 @@ public class AudioCodec {
private boolean running = true;
private boolean finished = false;
public AudioCodec() throws IOException {
public AudioCodec(Context context) throws IOException {
this.bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
this.audioRecord = createAudioRecord(this.bufferSize);
this.mediaCodec = createMediaCodec(this.bufferSize);
this.mediaCodec = createMediaCodec(context, this.bufferSize);
this.mediaCodec.start();
@@ -173,7 +176,7 @@ public class AudioCodec {
AudioFormat.ENCODING_PCM_16BIT, bufferSize * 10);
}
private MediaCodec createMediaCodec(int bufferSize) throws IOException {
private MediaCodec createMediaCodec(Context context, int bufferSize) throws IOException {
MediaCodec mediaCodec = MediaCodec.createEncoderByType("audio/mp4a-latm");
MediaFormat mediaFormat = new MediaFormat();
@@ -181,7 +184,7 @@ public class AudioCodec {
mediaFormat.setInteger(MediaFormat.KEY_SAMPLE_RATE, SAMPLE_RATE);
mediaFormat.setInteger(MediaFormat.KEY_CHANNEL_COUNT, CHANNELS);
mediaFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, bufferSize);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, Prefs.isHardCompressionEnabled(context)? BIT_RATE_WORSE : BIT_RATE_BALANCED);
mediaFormat.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
try {
@@ -51,7 +51,7 @@ public class AudioRecorder {
captureUri = blobProvider.create(context, new ParcelFileDescriptor.AutoCloseInputStream(fds[0]),
MediaUtil.AUDIO_AAC, null, null);
audioCodec = new AudioCodec();
audioCodec = new AudioCodec(context);
audioCodec.start(new ParcelFileDescriptor.AutoCloseOutputStream(fds[1]));
} catch (IOException e) {