tmp
[blender.git] / extern / audaspace / include / respec / Specification.h
1 /*******************************************************************************
2  * Copyright 2009-2016 Jörg Müller
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16
17 #pragma once
18
19 /**
20  * @file Specification.h
21  * @ingroup respec
22  * Defines all important macros and basic data structures for stream format descriptions.
23  */
24
25 #include "Audaspace.h"
26
27 /// The size of a format in bytes.
28 #define AUD_FORMAT_SIZE(format) (format & 0x0F)
29 /// The size of a sample in the specified device format in bytes.
30 #define AUD_DEVICE_SAMPLE_SIZE(specs) (specs.channels * (specs.format & 0x0F))
31 /// The size of a sample in the specified format in bytes.
32 #define AUD_SAMPLE_SIZE(specs) (specs.channels * sizeof(sample_t))
33
34 /// Compares two audio data specifications.
35 #define AUD_COMPARE_SPECS(s1, s2) ((s1.rate == s2.rate) && (s1.channels == s2.channels))
36
37 /// Returns the bit for a channel mask.
38 #define AUD_CHANNEL_BIT(channel) (0x01 << channel)
39
40 AUD_NAMESPACE_BEGIN
41
42 /**
43  * The format of a sample.
44  * The last 4 bit save the byte count of the format.
45  */
46 enum SampleFormat
47 {
48         FORMAT_INVALID = 0x00,          /// Invalid sample format.
49         FORMAT_U8      = 0x01,          /// 1 byte unsigned byte.
50         FORMAT_S16     = 0x12,          /// 2 byte signed integer.
51         FORMAT_S24     = 0x13,          /// 3 byte signed integer.
52         FORMAT_S32     = 0x14,          /// 4 byte signed integer.
53         FORMAT_FLOAT32 = 0x24,          /// 4 byte float.
54         FORMAT_FLOAT64 = 0x28           /// 8 byte float.
55 };
56
57 /// The channel count.
58 enum Channels
59 {
60         CHANNELS_INVALID    = 0,        /// Invalid channel count.
61         CHANNELS_MONO       = 1,        /// Mono.
62         CHANNELS_STEREO     = 2,        /// Stereo.
63         CHANNELS_STEREO_LFE = 3,        /// Stereo with LFE channel.
64         CHANNELS_SURROUND4  = 4,        /// 4 channel surround sound.
65         CHANNELS_SURROUND5  = 5,        /// 5 channel surround sound.
66         CHANNELS_SURROUND51 = 6,        /// 5.1 surround sound.
67         CHANNELS_SURROUND61 = 7,        /// 6.1 surround sound.
68         CHANNELS_SURROUND71 = 8 /// 7.1 surround sound.
69 };
70
71 /// The channel names.
72 enum Channel
73 {
74         CHANNEL_FRONT_LEFT = 0,
75         CHANNEL_FRONT_RIGHT,
76         CHANNEL_FRONT_CENTER,
77         CHANNEL_LFE,
78         CHANNEL_REAR_LEFT,
79         CHANNEL_REAR_RIGHT,
80         CHANNEL_REAR_CENTER,
81         CHANNEL_SIDE_LEFT,
82         CHANNEL_SIDE_RIGHT,
83         CHANNEL_MAX
84 };
85
86 /**
87  * The sample rate tells how many samples are played back within one second.
88  * Some exotic formats may use other sample rates than provided here.
89  */
90 enum DefaultSampleRate
91 {
92         RATE_INVALID = 0,                       /// Invalid sample rate.
93         RATE_8000    = 8000,            /// 8000 Hz.
94         RATE_16000   = 16000,           /// 16000 Hz.
95         RATE_11025   = 11025,           /// 11025 Hz.
96         RATE_22050   = 22050,           /// 22050 Hz.
97         RATE_32000   = 32000,           /// 32000 Hz.
98         RATE_44100   = 44100,           /// 44100 Hz.
99         RATE_48000   = 48000,           /// 48000 Hz.
100         RATE_88200   = 88200,           /// 88200 Hz.
101         RATE_96000   = 96000,           /// 96000 Hz.
102         RATE_192000  = 192000           /// 192000 Hz.
103 };
104
105 /// Sample rate type.
106 typedef double SampleRate;
107
108 /// Specification of a sound source.
109 struct Specs
110 {
111         /// Sample rate in Hz.
112         SampleRate rate;
113
114         /// Channel count.
115         Channels channels;
116 };
117
118 /// Specification of a sound device.
119 struct DeviceSpecs
120 {
121         /// Sample format.
122         SampleFormat format;
123
124         union
125         {
126                 struct
127                 {
128                         /// Sample rate in Hz.
129                         SampleRate rate;
130
131                         /// Channel count.
132                         Channels channels;
133                 };
134                 Specs specs;
135         };
136 };
137
138 AUD_NAMESPACE_END