Java Code Examples for com.google.android.exoplayer2.C#ENCODING_INVALID
The following examples show how to use
com.google.android.exoplayer2.C#ENCODING_INVALID .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: MediaCodecAudioRenderer.java From Telegram-FOSS with GNU General Public License v2.0 | 6 votes |
/** * Returns the {@link C.Encoding} constant to use for passthrough of the given format, or {@link * C#ENCODING_INVALID} if passthrough is not possible. */ @C.Encoding protected int getPassthroughEncoding(int channelCount, String mimeType) { if (MimeTypes.AUDIO_E_AC3_JOC.equals(mimeType)) { if (audioSink.supportsOutput(channelCount, C.ENCODING_E_AC3_JOC)) { return MimeTypes.getEncoding(MimeTypes.AUDIO_E_AC3_JOC); } // E-AC3 receivers can decode JOC streams, but in 2-D rather than 3-D, so try to fall back. mimeType = MimeTypes.AUDIO_E_AC3; } @C.Encoding int encoding = MimeTypes.getEncoding(mimeType); if (audioSink.supportsOutput(channelCount, encoding)) { return encoding; } else { return C.ENCODING_INVALID; } }
Example 2
Source File: WavUtil.java From Telegram-FOSS with GNU General Public License v2.0 | 6 votes |
/** Returns the WAVE type value for the given {@code encoding}. */ public static int getTypeForEncoding(@C.PcmEncoding int encoding) { switch (encoding) { case C.ENCODING_PCM_8BIT: case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_24BIT: case C.ENCODING_PCM_32BIT: return TYPE_PCM; case C.ENCODING_PCM_A_LAW: return TYPE_A_LAW; case C.ENCODING_PCM_MU_LAW: return TYPE_MU_LAW; case C.ENCODING_PCM_FLOAT: return TYPE_FLOAT; case C.ENCODING_INVALID: case Format.NO_VALUE: default: throw new IllegalArgumentException(); } }
Example 3
Source File: WavUtil.java From MediaSDK with Apache License 2.0 | 6 votes |
/** Returns the PCM encoding for the given WAVE {@code type} value. */ public static @C.PcmEncoding int getEncodingForType(int type, int bitsPerSample) { switch (type) { case TYPE_PCM: case TYPE_WAVE_FORMAT_EXTENSIBLE: return Util.getPcmEncoding(bitsPerSample); case TYPE_FLOAT: return bitsPerSample == 32 ? C.ENCODING_PCM_FLOAT : C.ENCODING_INVALID; case TYPE_A_LAW: return C.ENCODING_PCM_A_LAW; case TYPE_MU_LAW: return C.ENCODING_PCM_MU_LAW; default: return C.ENCODING_INVALID; } }
Example 4
Source File: Util.java From TelePlus-Android with GNU General Public License v2.0 | 6 votes |
/** * Converts a sample bit depth to a corresponding PCM encoding constant. * * @param bitDepth The bit depth. Supported values are 8, 16, 24 and 32. * @return The corresponding encoding. One of {@link C#ENCODING_PCM_8BIT}, * {@link C#ENCODING_PCM_16BIT}, {@link C#ENCODING_PCM_24BIT} and * {@link C#ENCODING_PCM_32BIT}. If the bit depth is unsupported then * {@link C#ENCODING_INVALID} is returned. */ @C.PcmEncoding public static int getPcmEncoding(int bitDepth) { switch (bitDepth) { case 8: return C.ENCODING_PCM_8BIT; case 16: return C.ENCODING_PCM_16BIT; case 24: return C.ENCODING_PCM_24BIT; case 32: return C.ENCODING_PCM_32BIT; default: return C.ENCODING_INVALID; } }
Example 5
Source File: Util.java From TelePlus-Android with GNU General Public License v2.0 | 6 votes |
/** * Returns the frame size for audio with {@code channelCount} channels in the specified encoding. * * @param pcmEncoding The encoding of the audio data. * @param channelCount The channel count. * @return The size of one audio frame in bytes. */ public static int getPcmFrameSize(@C.PcmEncoding int pcmEncoding, int channelCount) { switch (pcmEncoding) { case C.ENCODING_PCM_8BIT: return channelCount; case C.ENCODING_PCM_16BIT: return channelCount * 2; case C.ENCODING_PCM_24BIT: return channelCount * 3; case C.ENCODING_PCM_32BIT: case C.ENCODING_PCM_FLOAT: return channelCount * 4; case C.ENCODING_INVALID: case Format.NO_VALUE: default: throw new IllegalArgumentException(); } }
Example 6
Source File: WavUtil.java From Telegram with GNU General Public License v2.0 | 6 votes |
/** Returns the PCM encoding for the given WAVE {@code type} value. */ public static @C.PcmEncoding int getEncodingForType(int type, int bitsPerSample) { switch (type) { case TYPE_PCM: case TYPE_WAVE_FORMAT_EXTENSIBLE: return Util.getPcmEncoding(bitsPerSample); case TYPE_FLOAT: return bitsPerSample == 32 ? C.ENCODING_PCM_FLOAT : C.ENCODING_INVALID; case TYPE_A_LAW: return C.ENCODING_PCM_A_LAW; case TYPE_MU_LAW: return C.ENCODING_PCM_MU_LAW; default: return C.ENCODING_INVALID; } }
Example 7
Source File: ResamplingAudioProcessor.java From TelePlus-Android with GNU General Public License v2.0 | 5 votes |
@Override public void reset() { flush(); sampleRateHz = Format.NO_VALUE; channelCount = Format.NO_VALUE; encoding = C.ENCODING_INVALID; buffer = EMPTY_BUFFER; }
Example 8
Source File: FloatResamplingAudioProcessor.java From TelePlus-Android with GNU General Public License v2.0 | 5 votes |
@Override public void reset() { flush(); sampleRateHz = Format.NO_VALUE; channelCount = Format.NO_VALUE; sourceEncoding = C.ENCODING_INVALID; buffer = EMPTY_BUFFER; }
Example 9
Source File: ResamplingAudioProcessor.java From TelePlus-Android with GNU General Public License v2.0 | 5 votes |
/** Creates a new audio processor that converts audio data to {@link C#ENCODING_PCM_16BIT}. */ public ResamplingAudioProcessor() { sampleRateHz = Format.NO_VALUE; channelCount = Format.NO_VALUE; encoding = C.ENCODING_INVALID; buffer = EMPTY_BUFFER; outputBuffer = EMPTY_BUFFER; }
Example 10
Source File: ResamplingAudioProcessor.java From TelePlus-Android with GNU General Public License v2.0 | 5 votes |
/** Creates a new audio processor that converts audio data to {@link C#ENCODING_PCM_16BIT}. */ public ResamplingAudioProcessor() { sampleRateHz = Format.NO_VALUE; channelCount = Format.NO_VALUE; encoding = C.ENCODING_INVALID; buffer = EMPTY_BUFFER; outputBuffer = EMPTY_BUFFER; }
Example 11
Source File: ResamplingAudioProcessor.java From K-Sonic with MIT License | 5 votes |
/** * Creates a new audio processor that converts audio data to {@link C#ENCODING_PCM_16BIT}. */ public ResamplingAudioProcessor() { sampleRateHz = Format.NO_VALUE; channelCount = Format.NO_VALUE; encoding = C.ENCODING_INVALID; buffer = EMPTY_BUFFER; outputBuffer = EMPTY_BUFFER; }
Example 12
Source File: WavHeaderReader.java From TelePlus-Android with GNU General Public License v2.0 | 4 votes |
/** * Peeks and returns a {@code WavHeader}. * * @param input Input stream to peek the WAV header from. * @throws ParserException If the input file is an incorrect RIFF WAV. * @throws IOException If peeking from the input fails. * @throws InterruptedException If interrupted while peeking from input. * @return A new {@code WavHeader} peeked from {@code input}, or null if the input is not a * supported WAV format. */ public static WavHeader peek(ExtractorInput input) throws IOException, InterruptedException { Assertions.checkNotNull(input); // Allocate a scratch buffer large enough to store the format chunk. ParsableByteArray scratch = new ParsableByteArray(16); // Attempt to read the RIFF chunk. ChunkHeader chunkHeader = ChunkHeader.peek(input, scratch); if (chunkHeader.id != Util.getIntegerCodeForString("RIFF")) { return null; } input.peekFully(scratch.data, 0, 4); scratch.setPosition(0); int riffFormat = scratch.readInt(); if (riffFormat != Util.getIntegerCodeForString("WAVE")) { Log.e(TAG, "Unsupported RIFF format: " + riffFormat); return null; } // Skip chunks until we find the format chunk. chunkHeader = ChunkHeader.peek(input, scratch); while (chunkHeader.id != Util.getIntegerCodeForString("fmt ")) { input.advancePeekPosition((int) chunkHeader.size); chunkHeader = ChunkHeader.peek(input, scratch); } Assertions.checkState(chunkHeader.size >= 16); input.peekFully(scratch.data, 0, 16); scratch.setPosition(0); int type = scratch.readLittleEndianUnsignedShort(); int numChannels = scratch.readLittleEndianUnsignedShort(); int sampleRateHz = scratch.readLittleEndianUnsignedIntToInt(); int averageBytesPerSecond = scratch.readLittleEndianUnsignedIntToInt(); int blockAlignment = scratch.readLittleEndianUnsignedShort(); int bitsPerSample = scratch.readLittleEndianUnsignedShort(); int expectedBlockAlignment = numChannels * bitsPerSample / 8; if (blockAlignment != expectedBlockAlignment) { throw new ParserException("Expected block alignment: " + expectedBlockAlignment + "; got: " + blockAlignment); } @C.PcmEncoding int encoding; switch (type) { case TYPE_PCM: case TYPE_WAVE_FORMAT_EXTENSIBLE: encoding = Util.getPcmEncoding(bitsPerSample); break; case TYPE_FLOAT: encoding = bitsPerSample == 32 ? C.ENCODING_PCM_FLOAT : C.ENCODING_INVALID; break; case TYPE_A_LAW: encoding = C.ENCODING_PCM_A_LAW; break; case TYPE_MU_LAW: encoding = C.ENCODING_PCM_MU_LAW; break; default: Log.e(TAG, "Unsupported WAV format type: " + type); return null; } if (encoding == C.ENCODING_INVALID) { Log.e(TAG, "Unsupported WAV bit depth " + bitsPerSample + " for type " + type); return null; } // If present, skip extensionSize, validBitsPerSample, channelMask, subFormatGuid, ... input.advancePeekPosition((int) chunkHeader.size - 16); return new WavHeader(numChannels, sampleRateHz, averageBytesPerSecond, blockAlignment, bitsPerSample, encoding); }
Example 13
Source File: ResamplingAudioProcessor.java From TelePlus-Android with GNU General Public License v2.0 | 4 votes |
@Override public void queueInput(ByteBuffer inputBuffer) { // Prepare the output buffer. int position = inputBuffer.position(); int limit = inputBuffer.limit(); int size = limit - position; int resampledSize; switch (encoding) { case C.ENCODING_PCM_8BIT: resampledSize = size * 2; break; case C.ENCODING_PCM_24BIT: resampledSize = (size / 3) * 2; break; case C.ENCODING_PCM_32BIT: resampledSize = size / 2; break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_INVALID: case Format.NO_VALUE: default: throw new IllegalStateException(); } if (buffer.capacity() < resampledSize) { buffer = ByteBuffer.allocateDirect(resampledSize).order(ByteOrder.nativeOrder()); } else { buffer.clear(); } // Resample the little endian input and update the input/output buffers. switch (encoding) { case C.ENCODING_PCM_8BIT: // 8->16 bit resampling. Shift each byte from [0, 256) to [-128, 128) and scale up. for (int i = position; i < limit; i++) { buffer.put((byte) 0); buffer.put((byte) ((inputBuffer.get(i) & 0xFF) - 128)); } break; case C.ENCODING_PCM_24BIT: // 24->16 bit resampling. Drop the least significant byte. for (int i = position; i < limit; i += 3) { buffer.put(inputBuffer.get(i + 1)); buffer.put(inputBuffer.get(i + 2)); } break; case C.ENCODING_PCM_32BIT: // 32->16 bit resampling. Drop the two least significant bytes. for (int i = position; i < limit; i += 4) { buffer.put(inputBuffer.get(i + 2)); buffer.put(inputBuffer.get(i + 3)); } break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_INVALID: case Format.NO_VALUE: default: // Never happens. throw new IllegalStateException(); } inputBuffer.position(inputBuffer.limit()); buffer.flip(); outputBuffer = buffer; }
Example 14
Source File: ResamplingAudioProcessor.java From K-Sonic with MIT License | 4 votes |
@Override public boolean isActive() { return encoding != C.ENCODING_INVALID && encoding != C.ENCODING_PCM_16BIT; }
Example 15
Source File: ResamplingAudioProcessor.java From Telegram with GNU General Public License v2.0 | 4 votes |
@Override public void queueInput(ByteBuffer inputBuffer) { // Prepare the output buffer. int position = inputBuffer.position(); int limit = inputBuffer.limit(); int size = limit - position; int resampledSize; switch (encoding) { case C.ENCODING_PCM_8BIT: resampledSize = size * 2; break; case C.ENCODING_PCM_24BIT: resampledSize = (size / 3) * 2; break; case C.ENCODING_PCM_32BIT: resampledSize = size / 2; break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_PCM_A_LAW: case C.ENCODING_PCM_MU_LAW: case C.ENCODING_INVALID: case Format.NO_VALUE: default: throw new IllegalStateException(); } // Resample the little endian input and update the input/output buffers. ByteBuffer buffer = replaceOutputBuffer(resampledSize); switch (encoding) { case C.ENCODING_PCM_8BIT: // 8->16 bit resampling. Shift each byte from [0, 256) to [-128, 128) and scale up. for (int i = position; i < limit; i++) { buffer.put((byte) 0); buffer.put((byte) ((inputBuffer.get(i) & 0xFF) - 128)); } break; case C.ENCODING_PCM_24BIT: // 24->16 bit resampling. Drop the least significant byte. for (int i = position; i < limit; i += 3) { buffer.put(inputBuffer.get(i + 1)); buffer.put(inputBuffer.get(i + 2)); } break; case C.ENCODING_PCM_32BIT: // 32->16 bit resampling. Drop the two least significant bytes. for (int i = position; i < limit; i += 4) { buffer.put(inputBuffer.get(i + 2)); buffer.put(inputBuffer.get(i + 3)); } break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_PCM_A_LAW: case C.ENCODING_PCM_MU_LAW: case C.ENCODING_INVALID: case Format.NO_VALUE: default: // Never happens. throw new IllegalStateException(); } inputBuffer.position(inputBuffer.limit()); buffer.flip(); }
Example 16
Source File: ResamplingAudioProcessor.java From MediaSDK with Apache License 2.0 | 4 votes |
@Override public void queueInput(ByteBuffer inputBuffer) { // Prepare the output buffer. int position = inputBuffer.position(); int limit = inputBuffer.limit(); int size = limit - position; int resampledSize; switch (inputAudioFormat.encoding) { case C.ENCODING_PCM_8BIT: resampledSize = size * 2; break; case C.ENCODING_PCM_24BIT: resampledSize = (size / 3) * 2; break; case C.ENCODING_PCM_32BIT: resampledSize = size / 2; break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_PCM_A_LAW: case C.ENCODING_PCM_MU_LAW: case C.ENCODING_INVALID: case Format.NO_VALUE: default: throw new IllegalStateException(); } // Resample the little endian input and update the input/output buffers. ByteBuffer buffer = replaceOutputBuffer(resampledSize); switch (inputAudioFormat.encoding) { case C.ENCODING_PCM_8BIT: // 8->16 bit resampling. Shift each byte from [0, 256) to [-128, 128) and scale up. for (int i = position; i < limit; i++) { buffer.put((byte) 0); buffer.put((byte) ((inputBuffer.get(i) & 0xFF) - 128)); } break; case C.ENCODING_PCM_24BIT: // 24->16 bit resampling. Drop the least significant byte. for (int i = position; i < limit; i += 3) { buffer.put(inputBuffer.get(i + 1)); buffer.put(inputBuffer.get(i + 2)); } break; case C.ENCODING_PCM_32BIT: // 32->16 bit resampling. Drop the two least significant bytes. for (int i = position; i < limit; i += 4) { buffer.put(inputBuffer.get(i + 2)); buffer.put(inputBuffer.get(i + 3)); } break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_PCM_A_LAW: case C.ENCODING_PCM_MU_LAW: case C.ENCODING_INVALID: case Format.NO_VALUE: default: // Never happens. throw new IllegalStateException(); } inputBuffer.position(inputBuffer.limit()); buffer.flip(); }
Example 17
Source File: ResamplingAudioProcessor.java From K-Sonic with MIT License | 4 votes |
@Override public void queueInput(ByteBuffer inputBuffer) { // Prepare the output buffer. int position = inputBuffer.position(); int limit = inputBuffer.limit(); int size = limit - position; int resampledSize; switch (encoding) { case C.ENCODING_PCM_8BIT: resampledSize = size * 2; break; case C.ENCODING_PCM_24BIT: resampledSize = (size / 3) * 2; break; case C.ENCODING_PCM_32BIT: resampledSize = size / 2; break; case C.ENCODING_PCM_16BIT: case C.ENCODING_INVALID: case Format.NO_VALUE: default: throw new IllegalStateException(); } if (buffer.capacity() < resampledSize) { buffer = ByteBuffer.allocateDirect(resampledSize).order(ByteOrder.nativeOrder()); } else { buffer.clear(); } // Resample the little endian input and update the input/output buffers. switch (encoding) { case C.ENCODING_PCM_8BIT: // 8->16 bit resampling. Shift each byte from [0, 256) to [-128, 128) and scale up. for (int i = position; i < limit; i++) { buffer.put((byte) 0); buffer.put((byte) ((inputBuffer.get(i) & 0xFF) - 128)); } break; case C.ENCODING_PCM_24BIT: // 24->16 bit resampling. Drop the least significant byte. for (int i = position; i < limit; i += 3) { buffer.put(inputBuffer.get(i + 1)); buffer.put(inputBuffer.get(i + 2)); } break; case C.ENCODING_PCM_32BIT: // 32->16 bit resampling. Drop the two least significant bytes. for (int i = position; i < limit; i += 4) { buffer.put(inputBuffer.get(i + 2)); buffer.put(inputBuffer.get(i + 3)); } break; case C.ENCODING_PCM_16BIT: case C.ENCODING_INVALID: case Format.NO_VALUE: default: // Never happens. throw new IllegalStateException(); } inputBuffer.position(inputBuffer.limit()); buffer.flip(); outputBuffer = buffer; }
Example 18
Source File: ResamplingAudioProcessor.java From Telegram-FOSS with GNU General Public License v2.0 | 4 votes |
@Override public void queueInput(ByteBuffer inputBuffer) { // Prepare the output buffer. int position = inputBuffer.position(); int limit = inputBuffer.limit(); int size = limit - position; int resampledSize; switch (encoding) { case C.ENCODING_PCM_8BIT: resampledSize = size * 2; break; case C.ENCODING_PCM_24BIT: resampledSize = (size / 3) * 2; break; case C.ENCODING_PCM_32BIT: resampledSize = size / 2; break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_PCM_A_LAW: case C.ENCODING_PCM_MU_LAW: case C.ENCODING_INVALID: case Format.NO_VALUE: default: throw new IllegalStateException(); } // Resample the little endian input and update the input/output buffers. ByteBuffer buffer = replaceOutputBuffer(resampledSize); switch (encoding) { case C.ENCODING_PCM_8BIT: // 8->16 bit resampling. Shift each byte from [0, 256) to [-128, 128) and scale up. for (int i = position; i < limit; i++) { buffer.put((byte) 0); buffer.put((byte) ((inputBuffer.get(i) & 0xFF) - 128)); } break; case C.ENCODING_PCM_24BIT: // 24->16 bit resampling. Drop the least significant byte. for (int i = position; i < limit; i += 3) { buffer.put(inputBuffer.get(i + 1)); buffer.put(inputBuffer.get(i + 2)); } break; case C.ENCODING_PCM_32BIT: // 32->16 bit resampling. Drop the two least significant bytes. for (int i = position; i < limit; i += 4) { buffer.put(inputBuffer.get(i + 2)); buffer.put(inputBuffer.get(i + 3)); } break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_PCM_A_LAW: case C.ENCODING_PCM_MU_LAW: case C.ENCODING_INVALID: case Format.NO_VALUE: default: // Never happens. throw new IllegalStateException(); } inputBuffer.position(inputBuffer.limit()); buffer.flip(); }
Example 19
Source File: WavHeaderReader.java From K-Sonic with MIT License | 4 votes |
/** * Peeks and returns a {@code WavHeader}. * * @param input Input stream to peek the WAV header from. * @throws ParserException If the input file is an incorrect RIFF WAV. * @throws IOException If peeking from the input fails. * @throws InterruptedException If interrupted while peeking from input. * @return A new {@code WavHeader} peeked from {@code input}, or null if the input is not a * supported WAV format. */ public static WavHeader peek(ExtractorInput input) throws IOException, InterruptedException { Assertions.checkNotNull(input); // Allocate a scratch buffer large enough to store the format chunk. ParsableByteArray scratch = new ParsableByteArray(16); // Attempt to read the RIFF chunk. ChunkHeader chunkHeader = ChunkHeader.peek(input, scratch); if (chunkHeader.id != Util.getIntegerCodeForString("RIFF")) { return null; } input.peekFully(scratch.data, 0, 4); scratch.setPosition(0); int riffFormat = scratch.readInt(); if (riffFormat != Util.getIntegerCodeForString("WAVE")) { Log.e(TAG, "Unsupported RIFF format: " + riffFormat); return null; } // Skip chunks until we find the format chunk. chunkHeader = ChunkHeader.peek(input, scratch); while (chunkHeader.id != Util.getIntegerCodeForString("fmt ")) { input.advancePeekPosition((int) chunkHeader.size); chunkHeader = ChunkHeader.peek(input, scratch); } Assertions.checkState(chunkHeader.size >= 16); input.peekFully(scratch.data, 0, 16); scratch.setPosition(0); int type = scratch.readLittleEndianUnsignedShort(); int numChannels = scratch.readLittleEndianUnsignedShort(); int sampleRateHz = scratch.readLittleEndianUnsignedIntToInt(); int averageBytesPerSecond = scratch.readLittleEndianUnsignedIntToInt(); int blockAlignment = scratch.readLittleEndianUnsignedShort(); int bitsPerSample = scratch.readLittleEndianUnsignedShort(); int expectedBlockAlignment = numChannels * bitsPerSample / 8; if (blockAlignment != expectedBlockAlignment) { throw new ParserException("Expected block alignment: " + expectedBlockAlignment + "; got: " + blockAlignment); } @C.PcmEncoding int encoding = Util.getPcmEncoding(bitsPerSample); if (encoding == C.ENCODING_INVALID) { Log.e(TAG, "Unsupported WAV bit depth: " + bitsPerSample); return null; } if (type != TYPE_PCM && type != TYPE_WAVE_FORMAT_EXTENSIBLE) { Log.e(TAG, "Unsupported WAV format type: " + type); return null; } // If present, skip extensionSize, validBitsPerSample, channelMask, subFormatGuid, ... input.advancePeekPosition((int) chunkHeader.size - 16); return new WavHeader(numChannels, sampleRateHz, averageBytesPerSecond, blockAlignment, bitsPerSample, encoding); }
Example 20
Source File: ResamplingAudioProcessor.java From TelePlus-Android with GNU General Public License v2.0 | 4 votes |
@Override public void queueInput(ByteBuffer inputBuffer) { // Prepare the output buffer. int position = inputBuffer.position(); int limit = inputBuffer.limit(); int size = limit - position; int resampledSize; switch (encoding) { case C.ENCODING_PCM_8BIT: resampledSize = size * 2; break; case C.ENCODING_PCM_24BIT: resampledSize = (size / 3) * 2; break; case C.ENCODING_PCM_32BIT: resampledSize = size / 2; break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_INVALID: case Format.NO_VALUE: default: throw new IllegalStateException(); } if (buffer.capacity() < resampledSize) { buffer = ByteBuffer.allocateDirect(resampledSize).order(ByteOrder.nativeOrder()); } else { buffer.clear(); } // Resample the little endian input and update the input/output buffers. switch (encoding) { case C.ENCODING_PCM_8BIT: // 8->16 bit resampling. Shift each byte from [0, 256) to [-128, 128) and scale up. for (int i = position; i < limit; i++) { buffer.put((byte) 0); buffer.put((byte) ((inputBuffer.get(i) & 0xFF) - 128)); } break; case C.ENCODING_PCM_24BIT: // 24->16 bit resampling. Drop the least significant byte. for (int i = position; i < limit; i += 3) { buffer.put(inputBuffer.get(i + 1)); buffer.put(inputBuffer.get(i + 2)); } break; case C.ENCODING_PCM_32BIT: // 32->16 bit resampling. Drop the two least significant bytes. for (int i = position; i < limit; i += 4) { buffer.put(inputBuffer.get(i + 2)); buffer.put(inputBuffer.get(i + 3)); } break; case C.ENCODING_PCM_16BIT: case C.ENCODING_PCM_FLOAT: case C.ENCODING_INVALID: case Format.NO_VALUE: default: // Never happens. throw new IllegalStateException(); } inputBuffer.position(inputBuffer.limit()); buffer.flip(); outputBuffer = buffer; }