|
libpsynth 0.2.1
|
00001 00012 /* 00013 * Copyright (C) 2010 Juan Pedro Bolivar Puente 00014 * 00015 * This file is part of Psychosynh. 00016 * 00017 * Psychosynh is free software: you can redistribute it and/or modify 00018 * it under the terms of the GNU General Public License as published by 00019 * the Free Software Foundation, either version 3 of the License, or 00020 * (at your option) any later version. 00021 * 00022 * Psychosynh is distributed in the hope that it will be useful, 00023 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00024 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00025 * GNU General Public License for more details. 00026 * 00027 * You should have received a copy of the GNU General Public License 00028 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00029 * 00030 */ 00031 00032 /* 00033 * Copyright 2005-2007 Adobe Systems Incorporated 00034 * 00035 * Use, modification and distribution are subject to the Boost 00036 * Software License, Version 1.0. (See accompanying file 00037 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). 00038 */ 00039 00040 #ifndef PSYNTH_SOUND_TYPEDEFS_H 00041 #define PSYNTH_SOUND_TYPEDEFS_H 00042 00043 #include <boost/cstdint.hpp> 00044 #include <memory> 00045 00046 #include <psynth/base/compat.hpp> 00047 #include <psynth/sound/mono.hpp> 00048 #include <psynth/sound/stereo.hpp> 00049 #include <psynth/sound/quad.hpp> 00050 #include <psynth/sound/surround.hpp> 00051 #include <psynth/sound/device_n.hpp> 00052 00053 // CS = 'bgr' LAYOUT='bgr_layout_t' 00054 #define PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS_INTERNAL(T,CS,LAYOUT) \ 00055 template <typename, typename> struct frame; \ 00056 template <typename, typename> struct planar_frame_reference; \ 00057 template <typename, typename> struct planar_frame_iterator; \ 00058 template <typename> class memory_based_step_iterator; \ 00059 template <typename> class buffer_range; \ 00060 template <typename, bool, typename> class buffer; \ 00061 template <typename> class ring_buffer_range; \ 00062 template <typename> class ring_buffer; \ 00063 typedef frame<bits##T, LAYOUT > CS##T##_frame; \ 00064 typedef const frame<bits##T, LAYOUT > CS##T##c_frame; \ 00065 typedef frame<bits##T, LAYOUT >& CS##T##_ref; \ 00066 typedef const frame<bits##T, LAYOUT >& CS##T##c_ref; \ 00067 typedef CS##T##_frame* CS##T##_ptr; \ 00068 typedef CS##T##c_frame* CS##T##c_ptr; \ 00069 typedef memory_based_step_iterator<CS##T##_ptr> \ 00070 CS##T##_step_ptr; \ 00071 typedef memory_based_step_iterator<CS##T##c_ptr> \ 00072 CS##T##c_step_ptr; \ 00073 typedef buffer_range<CS##T##_ptr> CS##T##_range; \ 00074 typedef buffer_range<CS##T##c_ptr> CS##T##c_range; \ 00075 typedef buffer_range<CS##T##_step_ptr> CS##T##_step_range; \ 00076 typedef buffer_range<CS##T##c_step_ptr> CS##T##c_step_range; \ 00077 typedef buffer<CS##T##_frame,false,std::allocator<unsigned char> > \ 00078 CS##T##_buffer; \ 00079 typedef ring_buffer_range<CS##T##_range> CS##T##_ring_range; \ 00080 typedef ring_buffer_range<CS##T##c_range> CS##T##c_ring_range; \ 00081 typedef ring_buffer<CS##T##_buffer> CS##T##_ring_buffer; 00082 00083 // CS = 'bgr' CS_FULL = 'rgb' LAYOUT='bgr_layout' 00084 #define PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(T,CS,CS_FULL,LAYOUT) \ 00085 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS_INTERNAL(T,CS,LAYOUT) \ 00086 typedef planar_frame_reference<bits##T&,CS_FULL > \ 00087 CS##T##_planar_ref; \ 00088 typedef planar_frame_reference<const bits##T&,CS_FULL > \ 00089 CS##T##c_planar_ref; \ 00090 typedef planar_frame_iterator<bits##T*,CS_FULL > \ 00091 CS##T##_planar_ptr; \ 00092 typedef planar_frame_iterator<const bits##T*,CS_FULL > \ 00093 CS##T##c_planar_ptr; \ 00094 typedef memory_based_step_iterator<CS##T##_planar_ptr> \ 00095 CS##T##_planar_step_ptr; \ 00096 typedef memory_based_step_iterator<CS##T##c_planar_ptr> \ 00097 CS##T##c_planar_step_ptr; \ 00098 typedef buffer_range<CS##T##_planar_ptr> \ 00099 CS##T##_planar_range; \ 00100 typedef buffer_range<CS##T##c_planar_ptr> \ 00101 CS##T##c_planar_range; \ 00102 typedef buffer_range<CS##T##_planar_step_ptr> \ 00103 CS##T##_planar_step_range; \ 00104 typedef buffer_range<CS##T##c_planar_step_ptr> \ 00105 CS##T##c_planar_step_range; \ 00106 typedef buffer<CS##T##_frame,true,std::allocator<unsigned char> > \ 00107 CS##T##_planar_buffer; \ 00108 typedef ring_buffer_range<CS##T##_planar_range> CS##T##_planar_ring_range; \ 00109 typedef ring_buffer_range<CS##T##c_planar_range> CS##T##c_planar_ring_range; \ 00110 typedef ring_buffer<CS##T##_planar_buffer> CS##T##_planar_ring_buffer; 00111 00112 00113 #define PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(T,CS) \ 00114 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS_INTERNAL(T,CS,CS##_layout) 00115 00116 #define PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(T,CS) \ 00117 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(T,CS,CS##_space,CS##_layout) 00118 00119 namespace psynth 00120 { 00121 namespace sound 00122 { 00123 00124 // forward declarations 00125 template <typename B, typename Mn, typename Mx, typename Zx> 00126 struct scoped_sample_value; 00127 00128 struct float_zero; 00129 struct float_one; 00130 typedef scoped_sample_value< 00131 float, float_zero, float_one, float_half> bits32f; 00132 typedef scoped_sample_value< 00133 float, float_minus_one, float_one, float_zero> bits32sf; 00134 typedef uint8_t bits8; 00135 typedef uint16_t bits16; 00136 typedef uint32_t bits32; 00137 typedef int8_t bits8s; 00138 typedef int16_t bits16s; 00139 typedef int32_t bits32s; 00140 00141 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8, mono) 00142 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s, mono) 00143 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16, mono) 00144 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s, mono) 00145 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32, mono) 00146 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s, mono) 00147 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f, mono) 00148 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, mono) 00149 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8, stereo) 00150 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s, stereo) 00151 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16, stereo) 00152 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s, stereo) 00153 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32, stereo) 00154 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s, stereo) 00155 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f, stereo) 00156 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, stereo) 00157 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8, rlstereo) 00158 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s, rlstereo) 00159 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16, rlstereo) 00160 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s, rlstereo) 00161 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32 , rlstereo) 00162 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s, rlstereo) 00163 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f, rlstereo) 00164 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, rlstereo) 00165 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8, quad) 00166 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s, quad) 00167 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16, quad) 00168 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s, quad) 00169 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32, quad) 00170 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s, quad) 00171 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f, quad) 00172 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, quad) 00173 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8, surround) 00174 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(8s, surround) 00175 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16, surround) 00176 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(16s, surround) 00177 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32 , surround) 00178 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32s, surround) 00179 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32f, surround) 00180 PSYNTH_SOUND_DEFINE_BASE_TYPEDEFS(32sf, surround) 00181 00182 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8, stereo) 00183 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8s, stereo) 00184 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16, stereo) 00185 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16s, stereo) 00186 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32 , stereo) 00187 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32s, stereo) 00188 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32f, stereo) 00189 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32sf, stereo) 00190 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8, quad) 00191 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8s, quad) 00192 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16, quad) 00193 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16s, quad) 00194 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32 , quad) 00195 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32s, quad) 00196 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32f, quad) 00197 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32sf, quad) 00198 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8, surround) 00199 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(8s, surround) 00200 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16, surround) 00201 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(16s, surround) 00202 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32 , surround) 00203 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32s, surround) 00204 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32f, surround) 00205 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS(32sf, surround) 00206 00207 00208 template <int N> struct devicen_space; 00209 template <int N> struct devicen_layout; 00210 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8, dev2n, devicen_space<2>, devicen_layout<2>) 00211 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, dev2n, devicen_space<2>, devicen_layout<2>) 00212 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16, dev2n, devicen_space<2>, devicen_layout<2>) 00213 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, dev2n, devicen_space<2>, devicen_layout<2>) 00214 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32 , dev2n, devicen_space<2>, devicen_layout<2>) 00215 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, dev2n, devicen_space<2>, devicen_layout<2>) 00216 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, dev2n, devicen_space<2>, devicen_layout<2>) 00217 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32sf, dev2n, devicen_space<2>, devicen_layout<2>) 00218 00219 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8, dev3n, devicen_space<3>, devicen_layout<3>) 00220 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, dev3n, devicen_space<3>, devicen_layout<3>) 00221 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16, dev3n, devicen_space<3>, devicen_layout<3>) 00222 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, dev3n, devicen_space<3>, devicen_layout<3>) 00223 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32 , dev3n, devicen_space<3>, devicen_layout<3>) 00224 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, dev3n, devicen_space<3>, devicen_layout<3>) 00225 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, dev3n, devicen_space<3>, devicen_layout<3>) 00226 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32sf, dev3n, devicen_space<3>, devicen_layout<3>) 00227 00228 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8, dev4n, devicen_space<4>, devicen_layout<4>) 00229 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, dev4n, devicen_space<4>, devicen_layout<4>) 00230 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16, dev4n, devicen_space<4>, devicen_layout<4>) 00231 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, dev4n, devicen_space<4>, devicen_layout<4>) 00232 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32 , dev4n, devicen_space<4>, devicen_layout<4>) 00233 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, dev4n, devicen_space<4>, devicen_layout<4>) 00234 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, dev4n, devicen_space<4>, devicen_layout<4>) 00235 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32sf, dev4n, devicen_space<4>, devicen_layout<4>) 00236 00237 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8, dev5n, devicen_space<5>, devicen_layout<5>) 00238 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(8s, dev5n, devicen_space<5>, devicen_layout<5>) 00239 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16, dev5n, devicen_space<5>, devicen_layout<5>) 00240 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(16s, dev5n, devicen_space<5>, devicen_layout<5>) 00241 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32 , dev5n, devicen_space<5>, devicen_layout<5>) 00242 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32s, dev5n, devicen_space<5>, devicen_layout<5>) 00243 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32f, dev5n, devicen_space<5>, devicen_layout<5>) 00244 PSYNTH_SOUND_DEFINE_ALL_TYPEDEFS_INTERNAL(32sf, dev5n, devicen_space<5>, devicen_layout<5>) 00245 00246 } /* namespace sound */ 00247 } /* namespace psynth */ 00248 00249 #endif /* PSYNTH_SOUND_TYPEDEFS */
1.7.4