Commit aaf469ce by Drew Hill

code review changes and fix for discontinuity

parent 821ea0e5
...@@ -168,8 +168,8 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -168,8 +168,8 @@ public final class DefaultAudioSink implements AudioSink {
private final ChannelMappingAudioProcessor channelMappingAudioProcessor; private final ChannelMappingAudioProcessor channelMappingAudioProcessor;
private final TrimmingAudioProcessor trimmingAudioProcessor; private final TrimmingAudioProcessor trimmingAudioProcessor;
private final SonicAudioProcessor sonicAudioProcessor; private final SonicAudioProcessor sonicAudioProcessor;
private final AudioProcessor[] availableAudioProcessors; private final AudioProcessor[] toIntPcmAvailableAudioProcessors;
private final AudioProcessor[] hiResAvailableAudioProcessors; private final AudioProcessor[] toFloatPcmAvailableAudioProcessors;
private final ConditionVariable releasingConditionVariable; private final ConditionVariable releasingConditionVariable;
private final long[] playheadOffsets; private final long[] playheadOffsets;
private final AudioTrackUtil audioTrackUtil; private final AudioTrackUtil audioTrackUtil;
...@@ -189,6 +189,7 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -189,6 +189,7 @@ public final class DefaultAudioSink implements AudioSink {
private @C.Encoding int outputEncoding; private @C.Encoding int outputEncoding;
private AudioAttributes audioAttributes; private AudioAttributes audioAttributes;
private boolean processingEnabled; private boolean processingEnabled;
private boolean canApplyPlaybackParams;
private int bufferSize; private int bufferSize;
private long bufferSizeUs; private long bufferSizeUs;
...@@ -280,14 +281,14 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -280,14 +281,14 @@ public final class DefaultAudioSink implements AudioSink {
channelMappingAudioProcessor = new ChannelMappingAudioProcessor(); channelMappingAudioProcessor = new ChannelMappingAudioProcessor();
trimmingAudioProcessor = new TrimmingAudioProcessor(); trimmingAudioProcessor = new TrimmingAudioProcessor();
sonicAudioProcessor = new SonicAudioProcessor(); sonicAudioProcessor = new SonicAudioProcessor();
availableAudioProcessors = new AudioProcessor[4 + audioProcessors.length]; toIntPcmAvailableAudioProcessors = new AudioProcessor[4 + audioProcessors.length];
availableAudioProcessors[0] = new ResamplingAudioProcessor(); toIntPcmAvailableAudioProcessors[0] = new ResamplingAudioProcessor();
availableAudioProcessors[1] = channelMappingAudioProcessor; toIntPcmAvailableAudioProcessors[1] = channelMappingAudioProcessor;
availableAudioProcessors[2] = trimmingAudioProcessor; toIntPcmAvailableAudioProcessors[2] = trimmingAudioProcessor;
System.arraycopy(audioProcessors, 0, availableAudioProcessors, 3, audioProcessors.length); System.arraycopy(audioProcessors, 0, toIntPcmAvailableAudioProcessors, 3, audioProcessors.length);
availableAudioProcessors[3 + audioProcessors.length] = sonicAudioProcessor; toIntPcmAvailableAudioProcessors[3 + audioProcessors.length] = sonicAudioProcessor;
hiResAvailableAudioProcessors = new AudioProcessor[1]; toFloatPcmAvailableAudioProcessors = new AudioProcessor[1];
hiResAvailableAudioProcessors[0] = new FloatResamplingAudioProcessor(); toFloatPcmAvailableAudioProcessors[0] = new FloatResamplingAudioProcessor();
playheadOffsets = new long[MAX_PLAYHEAD_OFFSET_COUNT]; playheadOffsets = new long[MAX_PLAYHEAD_OFFSET_COUNT];
volume = 1.0f; volume = 1.0f;
startMediaTimeState = START_NOT_SET; startMediaTimeState = START_NOT_SET;
...@@ -368,17 +369,17 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -368,17 +369,17 @@ public final class DefaultAudioSink implements AudioSink {
shouldUpResPCMAudio = canConvertHiResPcmToFloat && shouldUpResPCMAudio = canConvertHiResPcmToFloat &&
(inputEncoding == C.ENCODING_PCM_24BIT || inputEncoding == C.ENCODING_PCM_32BIT); (inputEncoding == C.ENCODING_PCM_24BIT || inputEncoding == C.ENCODING_PCM_32BIT);
if (isInputPcm) { if (isInputPcm) {
pcmFrameSize = Util.getPcmFrameSize(shouldUpResPCMAudio pcmFrameSize = Util.getPcmFrameSize(inputEncoding, channelCount);
? C.ENCODING_PCM_FLOAT : inputEncoding, channelCount);
} }
@C.Encoding int encoding = inputEncoding; @C.Encoding int encoding = inputEncoding;
boolean processingEnabled = isInputPcm && inputEncoding != C.ENCODING_PCM_FLOAT; boolean processingEnabled = isInputPcm && inputEncoding != C.ENCODING_PCM_FLOAT;
canApplyPlaybackParams = processingEnabled && !shouldUpResPCMAudio;
if (processingEnabled) { if (processingEnabled) {
AudioProcessor[] activeAudioProcessors = shouldUpResPCMAudio ? AudioProcessor[] availableAudioProcessors = shouldUpResPCMAudio ?
hiResAvailableAudioProcessors : availableAudioProcessors; toFloatPcmAvailableAudioProcessors : toIntPcmAvailableAudioProcessors;
trimmingAudioProcessor.setTrimSampleCount(trimStartSamples, trimEndSamples); trimmingAudioProcessor.setTrimSampleCount(trimStartSamples, trimEndSamples);
channelMappingAudioProcessor.setChannelMap(outputChannels); channelMappingAudioProcessor.setChannelMap(outputChannels);
for (AudioProcessor audioProcessor : activeAudioProcessors) { for (AudioProcessor audioProcessor : availableAudioProcessors) {
try { try {
flush |= audioProcessor.configure(sampleRate, channelCount, encoding); flush |= audioProcessor.configure(sampleRate, channelCount, encoding);
} catch (AudioProcessor.UnhandledFormatException e) { } catch (AudioProcessor.UnhandledFormatException e) {
...@@ -488,9 +489,9 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -488,9 +489,9 @@ public final class DefaultAudioSink implements AudioSink {
private void resetAudioProcessors() { private void resetAudioProcessors() {
ArrayList<AudioProcessor> newAudioProcessors = new ArrayList<>(); ArrayList<AudioProcessor> newAudioProcessors = new ArrayList<>();
AudioProcessor[] activeAudioProcessors = shouldUpResPCMAudio ? AudioProcessor[] availableAudioProcessors = shouldUpResPCMAudio ?
hiResAvailableAudioProcessors : availableAudioProcessors; toFloatPcmAvailableAudioProcessors : toIntPcmAvailableAudioProcessors;
for (AudioProcessor audioProcessor : activeAudioProcessors) { for (AudioProcessor audioProcessor : availableAudioProcessors) {
if (audioProcessor.isActive()) { if (audioProcessor.isActive()) {
newAudioProcessors.add(audioProcessor); newAudioProcessors.add(audioProcessor);
} else { } else {
...@@ -838,7 +839,7 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -838,7 +839,7 @@ public final class DefaultAudioSink implements AudioSink {
@Override @Override
public PlaybackParameters setPlaybackParameters(PlaybackParameters playbackParameters) { public PlaybackParameters setPlaybackParameters(PlaybackParameters playbackParameters) {
if (isInitialized() && !processingEnabled) { if (isInitialized() && !canApplyPlaybackParams) {
// The playback parameters are always the default if processing is disabled. // The playback parameters are always the default if processing is disabled.
this.playbackParameters = PlaybackParameters.DEFAULT; this.playbackParameters = PlaybackParameters.DEFAULT;
return this.playbackParameters; return this.playbackParameters;
...@@ -994,10 +995,10 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -994,10 +995,10 @@ public final class DefaultAudioSink implements AudioSink {
public void release() { public void release() {
reset(); reset();
releaseKeepSessionIdAudioTrack(); releaseKeepSessionIdAudioTrack();
for (AudioProcessor audioProcessor : availableAudioProcessors) { for (AudioProcessor audioProcessor : toIntPcmAvailableAudioProcessors) {
audioProcessor.reset(); audioProcessor.reset();
} }
for (AudioProcessor audioProcessor : hiResAvailableAudioProcessors) { for (AudioProcessor audioProcessor : toFloatPcmAvailableAudioProcessors) {
audioProcessor.reset(); audioProcessor.reset();
} }
audioSessionId = C.AUDIO_SESSION_ID_UNSET; audioSessionId = C.AUDIO_SESSION_ID_UNSET;
......
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.audio; package com.google.android.exoplayer2.audio;
...@@ -173,10 +188,7 @@ import java.nio.ByteOrder; ...@@ -173,10 +188,7 @@ import java.nio.ByteOrder;
int bits = Float.floatToIntBits(convVal); int bits = Float.floatToIntBits(convVal);
if (bits == 0x7fc00000) if (bits == 0x7fc00000)
bits = Float.floatToIntBits((float) 0.0); bits = Float.floatToIntBits((float) 0.0);
buffer.put((byte) (bits & 0xff)); buffer.putInt(bits);
buffer.put((byte) ((bits >> 8) & 0xff));
buffer.put((byte) ((bits >> 16) & 0xff));
buffer.put((byte) ((bits >> 24) & 0xff));
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment