Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_SNDSYS_CONVERT_H__
00020 #define __CS_SNDSYS_CONVERT_H__
00021
00032 #define CS_SOUND_ELEMENT_MAX_CHANNELS 8
00033
00056 #define CS_SOUND_INTERNAL_FREQUENCY_DIVISOR 1024
00057
00058 namespace CS
00059 {
00060 namespace SndSys
00061 {
00101 class CS_CRYSTALSPACE_EXPORT PCMSampleConverter
00102 {
00103 public:
00105 PCMSampleConverter(int source_channels, int source_bitspersample,
00106 int source_frequency, bool swap16=false);
00107 ~PCMSampleConverter();
00108
00121 int GetRequiredOutputBufferMultiple(int dest_channels,
00122 int dest_bitspersample, int dest_frequency);
00123
00124
00135 int ConvertBuffer(const void *source, size_t source_len, void *dest,
00136 int dest_channels, int dest_bitspersample, int dest_frequency);
00137
00152 void SetSourceProperties(int source_channels, int source_bitspersample,
00153 int source_frequency);
00154
00155 protected:
00156 bool ReadFullSample8(const void **source, size_t *source_len,
00157 int *sample_buffer);
00158 bool ReadFullSample16(const void **source, size_t *source_len,
00159 int *sample_buffer);
00160 bool ReadFullSample(const void **source, size_t *source_len,
00161 int *sample_buffer);
00162 int WriteSample8(int *sample_buffer, void **dest, int dest_channels);
00163 int WriteSample16(int *sample_buffer, void **dest, int dest_channels);
00164 int WriteSample(int *sample_buffer, void **dest, int dest_channels,
00165 int dest_bitspersample);
00166 size_t AdvanceSourceSamples(const void **source, size_t *source_len,
00167 size_t samples_to_advance, int *sample_buffer);
00168
00169 protected:
00170 int last_sample[CS_SOUND_ELEMENT_MAX_CHANNELS];
00171 int position_offset;
00172 int src_channels,src_bytes,src_frequency;
00173 bool swap_16;
00174 };
00175
00176 }
00177 }
00178
00179 #endif // __CS_SNDSYS_CONVERT_H__