| // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MEDIA_FORMATS_WEBM_OPUS_PACKET_BUILDER_H_ |
| #define MEDIA_FORMATS_WEBM_OPUS_PACKET_BUILDER_H_ |
| |
| #include <stdint.h> |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "base/macros.h" |
| |
| namespace media { |
| |
| // From Opus RFC. See https://tools.ietf.org/html/rfc6716#page-14 |
| enum OpusConstants { |
| kNumPossibleOpusConfigs = 32, |
| kMinOpusPacketFrameCount = 1, |
| kMaxOpusPacketFrameCount = 48 |
| }; |
| |
| class OpusPacket { |
| public: |
| OpusPacket(uint8_t config, uint8_t frame_count, bool is_VBR); |
| |
| OpusPacket(const OpusPacket&) = delete; |
| OpusPacket& operator=(const OpusPacket&) = delete; |
| |
| ~OpusPacket(); |
| |
| const uint8_t* data() const; |
| int size() const; |
| double duration_ms() const; |
| |
| private: |
| std::vector<uint8_t> data_; |
| double duration_ms_; |
| }; |
| |
| // Builds an exhaustive collection of Opus packet configurations. |
| std::vector<std::unique_ptr<OpusPacket>> BuildAllOpusPackets(); |
| |
| } // namespace media |
| |
| #endif // MEDIA_FORMATS_WEBM_OPUS_PACKET_BUILDER_H_ |