Java Code Examples for com.google.android.exoplayer2.C#PcmEncoding

The following examples show how to use com.google.android.exoplayer2.C#PcmEncoding . 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: WavUtil.java    From Telegram-FOSS with GNU General Public License v2.0 6 votes vote down vote up
/** 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 2
Source File: FfmpegAudioRenderer.java    From Telegram with GNU General Public License v2.0 6 votes vote down vote up
@Override
public Format getOutputFormat() {
  Assertions.checkNotNull(decoder);
  int channelCount = decoder.getChannelCount();
  int sampleRate = decoder.getSampleRate();
  @C.PcmEncoding int encoding = decoder.getEncoding();
  return Format.createAudioSampleFormat(
      /* id= */ null,
      MimeTypes.AUDIO_RAW,
      /* codecs= */ null,
      Format.NO_VALUE,
      Format.NO_VALUE,
      channelCount,
      sampleRate,
      encoding,
      Collections.emptyList(),
      /* drmInitData= */ null,
      /* selectionFlags= */ 0,
      /* language= */ null);
}
 
Example 3
Source File: WavUtil.java    From MediaSDK with Apache License 2.0 6 votes vote down vote up
/** 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: WavUtil.java    From Telegram-FOSS with GNU General Public License v2.0 6 votes vote down vote up
/** 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 5
Source File: Util.java    From TelePlus-Android with GNU General Public License v2.0 6 votes vote down vote up
/**
 * 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: Util.java    From TelePlus-Android with GNU General Public License v2.0 6 votes vote down vote up
/**
 * 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 7
Source File: ResamplingAudioProcessor.java    From Telegram with GNU General Public License v2.0 5 votes vote down vote up
@Override
public boolean configure(int sampleRateHz, int channelCount, @C.PcmEncoding int encoding)
    throws UnhandledFormatException {
  if (encoding != C.ENCODING_PCM_8BIT && encoding != C.ENCODING_PCM_16BIT
      && encoding != C.ENCODING_PCM_24BIT && encoding != C.ENCODING_PCM_32BIT) {
    throw new UnhandledFormatException(sampleRateHz, channelCount, encoding);
  }
  return setInputFormat(sampleRateHz, channelCount, encoding);
}
 
Example 8
Source File: TeeAudioProcessor.java    From MediaSDK with Apache License 2.0 5 votes vote down vote up
@Override
public void flush(int sampleRateHz, int channelCount, @C.PcmEncoding int encoding) {
  try {
    reset();
  } catch (IOException e) {
    Log.e(TAG, "Error resetting", e);
  }
  this.sampleRateHz = sampleRateHz;
  this.channelCount = channelCount;
  this.encoding = encoding;
}
 
Example 9
Source File: FfmpegLibrary.java    From Telegram-FOSS with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Returns whether the underlying library supports the specified MIME type.
 *
 * @param mimeType The MIME type to check.
 * @param encoding The PCM encoding for raw audio.
 */
public static boolean supportsFormat(String mimeType, @C.PcmEncoding int encoding) {
  String codecName = getCodecName(mimeType, encoding);
  if (codecName == null) {
    return false;
  }
  if (!ffmpegHasDecoder(codecName)) {
    Log.w(TAG, "No " + codecName + " decoder available. Check the FFmpeg build configuration.");
    return false;
  }
  return true;
}
 
Example 10
Source File: SilenceSkippingAudioProcessor.java    From Telegram with GNU General Public License v2.0 5 votes vote down vote up
@Override
public boolean configure(int sampleRateHz, int channelCount, @C.PcmEncoding int encoding)
    throws UnhandledFormatException {
  if (encoding != C.ENCODING_PCM_16BIT) {
    throw new UnhandledFormatException(sampleRateHz, channelCount, encoding);
  }
  bytesPerFrame = channelCount * 2;
  return setInputFormat(sampleRateHz, channelCount, encoding);
}
 
Example 11
Source File: WavHeader.java    From Telegram-FOSS with GNU General Public License v2.0 4 votes vote down vote up
/** Returns the PCM encoding. **/
public @C.PcmEncoding int getEncoding() {
  return encoding;
}
 
Example 12
Source File: AudioProcessor.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
public UnhandledFormatException(
    int sampleRateHz, int channelCount, @C.PcmEncoding int encoding) {
  super("Unhandled format: " + sampleRateHz + " Hz, " + channelCount + " channels in encoding "
      + encoding);
}
 
Example 13
Source File: WavHeader.java    From MediaSDK with Apache License 2.0 4 votes vote down vote up
/** Returns the PCM encoding. **/
public @C.PcmEncoding int getEncoding() {
  return encoding;
}
 
Example 14
Source File: WavHeaderReader.java    From TelePlus-Android with GNU General Public License v2.0 4 votes vote down vote up
/**
 * 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 15
Source File: WavHeader.java    From TelePlus-Android with GNU General Public License v2.0 4 votes vote down vote up
/** Returns the PCM encoding. **/
public @C.PcmEncoding int getEncoding() {
  return encoding;
}
 
Example 16
Source File: Util.java    From TelePlus-Android with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Returns whether {@code encoding} is high resolution (> 16-bit) integer PCM.
 *
 * @param encoding The encoding of the audio data.
 * @return Whether the encoding is high resolution integer PCM.
 */
public static boolean isEncodingHighResolutionIntegerPcm(@C.PcmEncoding int encoding) {
  return encoding == C.ENCODING_PCM_24BIT || encoding == C.ENCODING_PCM_32BIT;
}
 
Example 17
Source File: AudioProcessor.java    From Telegram with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Configures the processor to process input audio with the specified format. After calling this
 * method, call {@link #isActive()} to determine whether the audio processor is active.
 *
 * <p>If the audio processor is active after configuration, call {@link #getOutputSampleRateHz()},
 * {@link #getOutputChannelCount()} and {@link #getOutputEncoding()} to get its new output format.
 *
 * <p>If this method returns {@code true}, it is necessary to {@link #flush()} the processor
 * before queueing more data, but you can (optionally) first drain output in the previous
 * configuration by calling {@link #queueEndOfStream()} and {@link #getOutput()}. If this method
 * returns {@code false}, it is safe to queue new input immediately.
 *
 * @param sampleRateHz The sample rate of input audio in Hz.
 * @param channelCount The number of interleaved channels in input audio.
 * @param encoding The encoding of input audio.
 * @return Whether the processor must be {@link #flush() flushed} before queueing more input.
 * @throws UnhandledFormatException Thrown if the specified format can't be handled as input.
 */
boolean configure(int sampleRateHz, int channelCount, @C.PcmEncoding int encoding)
    throws UnhandledFormatException;
 
Example 18
Source File: Util.java    From Telegram-FOSS with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Returns whether {@code encoding} is high resolution (&gt; 16-bit) integer PCM.
 *
 * @param encoding The encoding of the audio data.
 * @return Whether the encoding is high resolution integer PCM.
 */
public static boolean isEncodingHighResolutionIntegerPcm(@C.PcmEncoding int encoding) {
  return encoding == C.ENCODING_PCM_24BIT || encoding == C.ENCODING_PCM_32BIT;
}
 
Example 19
Source File: Util.java    From MediaSDK with Apache License 2.0 2 votes vote down vote up
/**
 * Returns whether {@code encoding} is high resolution (&gt; 16-bit) integer PCM.
 *
 * @param encoding The encoding of the audio data.
 * @return Whether the encoding is high resolution integer PCM.
 */
public static boolean isEncodingHighResolutionIntegerPcm(@C.PcmEncoding int encoding) {
  return encoding == C.ENCODING_PCM_24BIT || encoding == C.ENCODING_PCM_32BIT;
}
 
Example 20
Source File: FfmpegLibrary.java    From TelePlus-Android with GNU General Public License v2.0 2 votes vote down vote up
/**
 * Returns whether the underlying library supports the specified MIME type.
 *
 * @param mimeType The MIME type to check.
 * @param encoding The PCM encoding for raw audio.
 */
public static boolean supportsFormat(String mimeType, @C.PcmEncoding int encoding) {
  String codecName = getCodecName(mimeType, encoding);
  return codecName != null && ffmpegHasDecoder(codecName);
}