blob: 4192813ab2b0b6c3cb956f9066b0cc05f0300230 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_FORMATS_MP4_DTSX_H_
#define MEDIA_FORMATS_MP4_DTSX_H_
#include <stdint.h>
#include <vector>
#include "media/base/media_export.h"
#include "media/base/media_log.h"
namespace media {
namespace mp4 {
enum class DtsxChannelMask : uint32_t {
C = 0x00000001,
L = 0x00000002,
R = 0x00000004,
LS = 0x00000008,
RS = 0x00000010,
LFE1 = 0x00000020,
CS = 0x00000040,
LSR = 0x00000080,
RSR = 0x00000100,
LSS = 0x00000200,
RSS = 0x00000400,
LC = 0x00000800,
RC = 0x00001000,
LH = 0x00002000,
CH = 0x00004000,
RH = 0x00008000,
LFE2 = 0x00010000,
LW = 0x00020000,
RW = 0x00040000,
OH = 0x00080000,
LHS = 0x00100000,
RHS = 0x00200000,
CHR = 0x00400000,
LHR = 0x00800000,
RHR = 0x01000000,
CB = 0x02000000,
LB = 0x04000000,
RB = 0x08000000,
LTF = 0x10000000,
RTF = 0x20000000,
LTR = 0x40000000,
RTR = 0x80000000
};
// This class parses the DTSX information from decoder specific information
// embedded in the udts box in an ISO BMFF file.
// Please refer to SCTE DVS 243-4 Part 4 Table 12 - DTS-UHD Specific Box for
// more details.
class MEDIA_EXPORT DTSX {
public:
DTSX();
DTSX(const DTSX& other);
~DTSX();
// Parse the DTSX config from the udts box.
bool Parse(const std::vector<uint8_t>& data, MediaLog* media_log);
uint8_t GetDecoderProfileCode() const;
int GetFrameDuration() const;
int GetMaxPayload() const;
int GetNumPresentations() const;
uint32_t GetChannelMask() const;
int GetSamplingFrequency() const;
private:
// Logs the parameters of a DTSX stream to DVLOG level 3.
void LogDtsxParameters();
// Indicates the DTS-UHD decoder profile required to decode this stream
uint8_t decoder_profile_code_ = 0;
// Frame duration in samples.
// Relative to BaseSamplingFrequency.
int frame_duration_ = 0;
// Indicates the maximum size of the audio payload.
// Maxpayload is not the size of the largest audio frame in the presentation,
// but rather a "not to exceed" value for buffer configuration and digital
// audio interface purposes, and is inclusive of all required preambles,
// headers, burst spacing, etc.
int max_payload_ = 0;
// The num of audio presentations encoded within DTS-UHD elementary stream.
int num_presentations_ = 0;
// A bit mask that indicates the channel layout encoded in the default
// resentation
// of the DTS-UHD bitstream.
uint32_t channel_mask_ = 0;
// The sampling frequency of the audio samples stored in the bitstream.
// Calucalated by multiplying the BaseSamplingFrequency by SampleRateMod.
int sampling_frequency_ = 0;
};
} // namespace mp4
} // namespace media
#endif // MEDIA_FORMATS_MP4_DTSX_H_