12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // Copyright 2021 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.
- #include "media/formats/mp4/dts.h"
- #include "base/logging.h"
- #include "media/base/bit_reader.h"
- #include "media/formats/mp4/rcheck.h"
- namespace media {
- namespace mp4 {
- DTS::DTS() = default;
- DTS::DTS(const DTS& other) = default;
- DTS::~DTS() = default;
- bool DTS::Parse(const std::vector<uint8_t>& data, MediaLog* media_log) {
- if (data.empty())
- return false;
- if (data.size() < (32 * 3 + 8 + 2 + 8) / 8)
- return false;
- // Parse ddts box using reader.
- BitReader reader(&data[0], data.size());
- // Parse Sample frequency
- RCHECK(reader.ReadBits(32, &dts_sampling_frequency_));
- // Parse Max Bitrate
- RCHECK(reader.ReadBits(32, &max_bitrate_));
- // Parse Avg Bitrate
- RCHECK(reader.ReadBits(32, &avg_bitrate_));
- // Parse PCM Sample Depth
- RCHECK(reader.ReadBits(8, &pcm_sample_depth_));
- // Parse Frame Duration
- uint8_t frame_duration_code = 0;
- RCHECK(reader.ReadBits(2, &frame_duration_code));
- switch (frame_duration_code) {
- case 0:
- frame_duration_ = 512;
- break;
- case 1:
- frame_duration_ = 1024;
- break;
- case 2:
- frame_duration_ = 2048;
- break;
- case 3:
- frame_duration_ = 4096;
- break;
- default:
- frame_duration_ = 0;
- break;
- }
- LogDtsParameters();
- return true;
- }
- int DTS::GetFrameDuration() const {
- return frame_duration_;
- }
- uint32_t DTS::GetDtsSamplingFrequency() const {
- return dts_sampling_frequency_;
- }
- uint32_t DTS::GetMaxBitrate() const {
- return max_bitrate_;
- }
- uint32_t DTS::GetAvgBitrate() const {
- return avg_bitrate_;
- }
- uint8_t DTS::GetPcmSampleDepth() const {
- return pcm_sample_depth_;
- }
- void DTS::LogDtsParameters() {
- DVLOG(3) << "dts_sampling_freq " << dts_sampling_frequency_ << "max_bitrate "
- << max_bitrate_ << "avg_bitrate " << avg_bitrate_
- << "pcm_sample_depth " << static_cast<int>(pcm_sample_depth_)
- << "frame_duration " << frame_duration_;
- }
- } // namespace mp4
- } // namespace media
|