Пример #1
0
uint32_t
FormatParser::Parse(ByteReader& aReader)
{
  while (aReader.CanRead8() && !mFmtChunk.ParseNext(aReader.ReadU8())) { }

  if (mFmtChunk.IsValid()) {
    return FMT_CHUNK_MIN_SIZE;
  }

  return 0;
}
Пример #2
0
uint32_t
RIFFParser::Parse(ByteReader& aReader)
{
  while (aReader.CanRead8() && !mRiffHeader.ParseNext(aReader.ReadU8())) { }

  if (mRiffHeader.IsValid()) {
    return RIFF_CHUNK_SIZE;
  }

  return 0;
}
Пример #3
0
uint32_t
HeaderParser::Parse(ByteReader& aReader)
{
  while (aReader.CanRead8() && !mHeader.ParseNext(aReader.ReadU8())) { }

  if (mHeader.IsValid()) {
    return CHUNK_HEAD_SIZE;
  }

  return 0;
}
Пример #4
0
bool
WaveDataDecoder::DoDecode(MediaRawData* aSample)
{
  size_t aLength = aSample->Size();
  ByteReader aReader = ByteReader(aSample->Data(), aLength);
  int64_t aOffset = aSample->mOffset;
  uint64_t aTstampUsecs = aSample->mTime;

  int32_t frames = aLength * 8 / mInfo.mBitDepth / mInfo.mChannels;

  auto buffer = MakeUnique<AudioDataValue[]>(frames * mInfo.mChannels);
  for (int i = 0; i < frames; ++i) {
    for (unsigned int j = 0; j < mInfo.mChannels; ++j) {
      if (mInfo.mBitDepth == 8) {
        uint8_t v = aReader.ReadU8();
        buffer[i * mInfo.mChannels + j] =
            UInt8bitToAudioSample<AudioDataValue>(v);
      } else if (mInfo.mBitDepth == 16) {
        int16_t v = aReader.ReadLE16();
        buffer[i * mInfo.mChannels + j] =
            IntegerToAudioSample<AudioDataValue>(v);
      } else if (mInfo.mBitDepth == 24) {
        int32_t v = aReader.ReadLE24();
        buffer[i * mInfo.mChannels + j] =
            Int24bitToAudioSample<AudioDataValue>(v);
      }
    }
  }

  aReader.DiscardRemaining();

  int64_t duration = frames / mInfo.mRate;

  mCallback->Output(new AudioData(aOffset,
                                  aTstampUsecs,
                                  duration,
                                  frames,
                                  Move(buffer),
                                  mInfo.mChannels,
                                  mInfo.mRate));
  mFrames += frames;

  return true;
}