// Copyright 2016 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_BASE_AUDIO_SAMPLE_TYPES_H_ #define MEDIA_BASE_AUDIO_SAMPLE_TYPES_H_ #include <algorithm> #include <cmath> #include <cstdint> #include <limits> #include <type_traits> // To specify different sample formats, we provide a class for each sample // format that knows certain things about it, such as the C++ data type used // to store sample values, min and max values, as well as how to convert to // and from floating point formats. Each class must satisfy a concept we call // "SampleTypeTraits", which requires that the following publics are provided: // * A type |ValueType| specifying the C++ type for storing sample values // * A static constant kMinValue which specifies the minimum sample value // * A static constant kMaxValue which specifies the maximum sample value // * A static constant kZeroPointValue which specifies the sample value // representing an amplitude of zero // * A static method ConvertFromFloat() that takes a float sample value and // converts it to the corresponding ValueType // * A static method ConvertFromDouble() that takes a double sample value and // converts it to the corresponding ValueType // * A static method ConvertToFloat() that takes a ValueType sample value and // converts it to the corresponding float value // * A static method ConvertToDouble() that takes a ValueType sample value and // converts it to the corresponding double value namespace media { // For float or double. // See also the aliases for commonly used types at the bottom of this file. template <typename SampleType> class FloatSampleTypeTraits { … }; // Similar to above, but does not apply clipping. template <typename SampleType> class FloatSampleTypeTraitsNoClip { … }; // For uint8_t, int16_t, int32_t... // See also the aliases for commonly used types at the bottom of this file. template <typename SampleType> class FixedSampleTypeTraits { … }; // Aliases for commonly used sample formats. Float32SampleTypeTraits; Float32SampleTypeTraitsNoClip; Float64SampleTypeTraits; UnsignedInt8SampleTypeTraits; SignedInt16SampleTypeTraits; SignedInt32SampleTypeTraits; } // namespace media #endif // MEDIA_BASE_AUDIO_SAMPLE_TYPES_H_