2
0

EncodedAudioStream.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #pragma once
  2. #include <string>
  3. #include <vector>
  4. #include "BellLogger.h"
  5. #include "ByteStream.h"
  6. #include "DecoderGlobals.h"
  7. #include "aacdec.h"
  8. #include "mp3dec.h"
  9. namespace bell {
  10. class EncodedAudioStream {
  11. public:
  12. EncodedAudioStream();
  13. ~EncodedAudioStream();
  14. // Codecs supported by this stream class
  15. enum class AudioCodec { AAC, MP3, OGG, NONE };
  16. void openWithStream(std::unique_ptr<bell::ByteStream> byteStream);
  17. size_t decodeFrame(uint8_t* dst);
  18. bool isReadable();
  19. private:
  20. std::shared_ptr<ByteStream> innerStream;
  21. std::vector<uint8_t> inputBuffer;
  22. std::vector<short> outputBuffer;
  23. std::string TAG = "EncryptedAudioStream";
  24. uint8_t* decodePtr = 0;
  25. int bytesInBuffer = 0;
  26. size_t offset = 0;
  27. size_t decodedSampleRate = 44100;
  28. AudioCodec codec = AudioCodec::NONE;
  29. void guessDataFormat();
  30. void readFully(uint8_t* dst, size_t nbytes);
  31. bool vectorStartsWith(std::vector<uint8_t>&, std::vector<uint8_t>&);
  32. std::vector<uint8_t> aacMagicBytes = {0xFF, 0xF1};
  33. std::vector<uint8_t> aacMagicBytes4 = {0xFF, 0xF9};
  34. std::vector<uint8_t> mp3MagicBytesUntagged = {0xFF, 0xFB};
  35. std::vector<uint8_t> mp3MagicBytesIdc = {0x49, 0x44, 0x33};
  36. AACFrameInfo aacFrameInfo;
  37. MP3FrameInfo mp3FrameInfo;
  38. size_t decodeFrameMp3(uint8_t* dst);
  39. size_t decodeFrameAAC(uint8_t* dst);
  40. };
  41. } // namespace bell