// Copyright 2017 The Fuchsia 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 SRC_MEDIA_AUDIO_AUDIO_CORE_MIXER_CONSTANTS_H_
#define SRC_MEDIA_AUDIO_AUDIO_CORE_MIXER_CONSTANTS_H_

#include <stdint.h>

namespace media::audio {

constexpr int32_t kMaxInt24In32 = std::numeric_limits<int32_t>::max() & ~0x0FF;
constexpr int32_t kMinInt24In32 = std::numeric_limits<int32_t>::min();

constexpr int32_t kFloatToInt8 = -std::numeric_limits<int8_t>::min();
constexpr int32_t kFloatToInt16 = -std::numeric_limits<int16_t>::min();
constexpr int64_t kFloatToInt24In32 = -static_cast<int64_t>(kMinInt24In32);

constexpr int32_t kOffsetInt8ToUint8 =
    std::numeric_limits<uint8_t>::min() - std::numeric_limits<int8_t>::min();

constexpr float kInt8ToFloat = 1.0f / kFloatToInt8;
constexpr float kInt16ToFloat = 1.0f / kFloatToInt16;
constexpr double kInt24In32ToFloat = 1.0 / kFloatToInt24In32;

// The number of fractional bits used when expressing timestamps (in frame
// units) as fixed point integers.  Ultimately, this determines the resolution
// that a source of PCM frames may be sampled at; there are 2^frac_bits
// positions between audio frames that the source stream may be sampled at.
//
// Using 64-bit signed timestamps means that we have 50 bits of whole frame
// units to work with.  At 192KHz, this allows for ~186.3 years of usable range
// before rollover when starting from a frame counter of 0.
//
// With 13 bits of fractional position, a mix job's interpolation precision is
// only +/-61 ppm. Across multiple jobs we stay in sync, but for any single mix,
// this is our granularity. As an example, when resampling a 48 kHz audio
// packet, the "clicks on the dial" of our actual resampling rates are multiples
// of 6 Hz. Again, we do correct any positional error at mix job boundaries.
//
// This also affects our interpolation accuracy: because fractional position has
// a potential error of 2^-13, the worst-case error for interpolated values is
// [pos_err * max_intersample_delta]. This means full-scale very high-frequency
// signals are only guaranteed bit-for-bit accurate in the top 13 bits.
// TODO(mpuryear): MTWN-86 Consider even more fractional position precision.
constexpr uint32_t kPtsFractionalBits = 13;
// Used in places where PTS must be an integral number of frames.
constexpr uint32_t kPtsFractionalMask = (1 << kPtsFractionalBits) - 1;

// Compile time constant guaranteed to never be used as a valid generation ID
// (by the various things which use generation IDs to track state changes).
constexpr uint32_t kInvalidGenerationId = 0;

}  // namespace media::audio

#endif  // SRC_MEDIA_AUDIO_AUDIO_CORE_MIXER_CONSTANTS_H_
