diff options
Diffstat (limited to 'intern/audaspace/intern/AUD_ChannelMapperReader.h')
-rw-r--r-- | intern/audaspace/intern/AUD_ChannelMapperReader.h | 64 |
1 files changed, 58 insertions, 6 deletions
diff --git a/intern/audaspace/intern/AUD_ChannelMapperReader.h b/intern/audaspace/intern/AUD_ChannelMapperReader.h index 091ed06db15..af16f2ff49d 100644 --- a/intern/audaspace/intern/AUD_ChannelMapperReader.h +++ b/intern/audaspace/intern/AUD_ChannelMapperReader.h @@ -43,44 +43,96 @@ class AUD_ChannelMapperReader : public AUD_EffectReader { private: /** - * The sound output buffer. + * The sound reading buffer. */ AUD_Buffer m_buffer; /** * The output specification. */ - AUD_Specs m_specs; + AUD_Channels m_target_channels; /** * The channel count of the reader. */ - int m_rch; + AUD_Channels m_source_channels; /** * The mapping specification. */ - float **m_mapping; + float* m_mapping; + + /** + * The size of the mapping. + */ + int m_map_size; + + /** + * The mono source angle. + */ + float m_mono_angle; + + static const AUD_Channel MONO_MAP[]; + static const AUD_Channel STEREO_MAP[]; + static const AUD_Channel STEREO_LFE_MAP[]; + static const AUD_Channel SURROUND4_MAP[]; + static const AUD_Channel SURROUND5_MAP[]; + static const AUD_Channel SURROUND51_MAP[]; + static const AUD_Channel SURROUND61_MAP[]; + static const AUD_Channel SURROUND71_MAP[]; + static const AUD_Channel* CHANNEL_MAPS[]; + + static const float MONO_ANGLES[]; + static const float STEREO_ANGLES[]; + static const float STEREO_LFE_ANGLES[]; + static const float SURROUND4_ANGLES[]; + static const float SURROUND5_ANGLES[]; + static const float SURROUND51_ANGLES[]; + static const float SURROUND61_ANGLES[]; + static const float SURROUND71_ANGLES[]; + static const float* CHANNEL_ANGLES[]; // hide copy constructor and operator= AUD_ChannelMapperReader(const AUD_ChannelMapperReader&); AUD_ChannelMapperReader& operator=(const AUD_ChannelMapperReader&); + /** + * Calculates the mapping matrix. + */ + void calculateMapping(); + + /** + * Calculates the distance between two angles. + */ + float angleDistance(float alpha, float beta); + public: /** * Creates a channel mapper reader. * \param reader The reader to map. * \param mapping The mapping specification as two dimensional float array. */ - AUD_ChannelMapperReader(AUD_IReader* reader, float **mapping); + AUD_ChannelMapperReader(AUD_Reference<AUD_IReader> reader, AUD_Channels channels); /** * Destroys the reader. */ ~AUD_ChannelMapperReader(); + /** + * Sets the requested channel output count. + * \param channels The channel output count. + */ + void setChannels(AUD_Channels channels); + + /** + * Sets the angle for mono sources. + * \param angle The angle for mono sources. + */ + void setMonoAngle(float angle); + virtual AUD_Specs getSpecs() const; - virtual void read(int & length, sample_t* & buffer); + virtual void read(int& length, bool& eos, sample_t* buffer); }; #endif //AUD_CHANNELMAPPERREADER |