chromium/media/formats/mp4/ac3_constants.h

// Copyright 2024 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_AC3_CONSTANTS_H_
#define MEDIA_FORMATS_MP4_AC3_CONSTANTS_H_

#include <stdint.h>

#include "media/base/channel_layout.h"
#include "media/base/media_export.h"

namespace media {

// Please refer to ETSI TS 102 366 V1.4.1
//     https://www.etsi.org/deliver/etsi_ts/102300_102399/102366/01.03.01_60/ts_102366v010301p.pdf
// for more details.
//
// F.6.2.13 chan_loc - 9bit - Table F.6.1 - chan_loc field bit assignments.
//
// The chan_loc field indicates channel locations (beyond the standard 5.1
// channels) that are carried by dependent substreams associated with an
// independent substream.
enum EC3DependentSubstreamChannelLocation {
  LC_RC = 1,     // Lc/Rc pair
  LRS_RRS = 2,   // Lrs/Rrs pair
  CS = 4,        // Cs
  TS = 8,        // Ts
  LSD_RSD = 16,  // Lsd/Rsd pair
  LW_RW = 32,    // Lw/Rw pair
  LVH_RVH = 64,  // Lvh/Rvh pair
  CVH = 128,     // Cvh
  LFE2 = 256,    // LFE2
};

// F.4.2.6 lfeon - Low frequency effects channel on - 1 bit
//
// Size of the lfeon field, used to determine if the lfe (sub woofer)
// channel exists or not.
MEDIA_EXPORT inline constexpr uint8_t kAC3LFESize = 2;

// 4.4.2.3 acmod - Audio coding mode - 3 bits.
//
// Size of the acmod field, used to indicates which of the main service
// channels are in use, ranging from 3/2 to 1/0
MEDIA_EXPORT inline constexpr uint8_t kAC3AudioCodingModeSize = 8;

// Conversion table of channel layout, the first dimension is lfeon and the
// second dimension is acmod.
//
// Taking the 5.1 channel layout as an example, it contains a LFE channel, so
// lfeon = 1, and the remaining five channels are: L, C, R, Ls, Rs with acmod =
// 7, so kAC3AudioCodingModeTable[1][7] = CHANNEL_LAYOUT_5_1.
MEDIA_EXPORT extern const ChannelLayout
    kAC3AudioCodingModeTable[kAC3LFESize][kAC3AudioCodingModeSize];

}  // namespace media

#endif  // MEDIA_FORMATS_MP4_AC3_CONSTANTS_H_