|  | // 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_ |