|
AudRecordLib
|
Implements the SSE sample conversion functions and the other non template conversion related functions. This file has the stack checking switch (/GS) turned off, as for some reason VS wants to include one in all the SSE functions, none of which use any stack space. More...
#include "stdafx.h"#include "convert.h"#include <boost/function.hpp>#include <boost/bind.hpp>#include <mmreg.h>Namespaces | |
| namespace | detail |
| namespace | detail::SSE |
Defines | |
| #define | X_TO_Y_CHANNEL_Z_HELPER(X, Y, Z) |
| #define | DEFINE_DETERMINE_PCM_CHANNEL_X_HELPER(X) |
| #define | DEFINE_DETERMINE_FLOAT_CHANNEL_X_HELPER(X) |
Functions | |
| FORCEINLINE void | detail::SSE::StoreConvertedSamples (short *pDstSamples, const __m128 &samples) |
| FORCEINLINE void | detail::SSE::StoreConvertedSamples (long *pDstSamples, const __m128 &samples) |
| FORCEINLINE __m128i | detail::SSE::LongShortToShorts (__m128 &samples) |
| FORCEINLINE void | detail::SSE::StoreConvertedSamples (short *&pDstSamples, __m128 samples[4]) |
| FORCEINLINE void | detail::SSE::StoreConvertedSamples (long *&pDstSamples, __m128 samples[4]) |
| FORCEINLINE void | detail::SSE::Get16ConvertedSamples (const float *&pSrcSamples, __m128 samplePacks[4], const __m128 &scaleFactors) |
| DWORD | detail::ConvertCopy (LPCVOID pSrcArray, DWORD numFrames, PVOID pDstArray, WORD sampleSize, WORD numChannels) |
| detail::DEFINE_DETERMINE_PCM_CHANNEL_X_HELPER (Up) | |
| detail::DEFINE_DETERMINE_PCM_CHANNEL_X_HELPER (Down) | |
| detail::DEFINE_DETERMINE_PCM_CHANNEL_X_HELPER (Equal) | |
| detail::DEFINE_DETERMINE_FLOAT_CHANNEL_X_HELPER (Up) | |
| detail::DEFINE_DETERMINE_FLOAT_CHANNEL_X_HELPER (Down) | |
| detail::DEFINE_DETERMINE_FLOAT_CHANNEL_X_HELPER (Equal) | |
| void | DetermineSampleConverter (const tWAVEFORMATEX &inp, const tWAVEFORMATEX &out, ConverterFnPtr &converter) |
Implements the SSE sample conversion functions and the other non template conversion related functions. This file has the stack checking switch (/GS) turned off, as for some reason VS wants to include one in all the SSE functions, none of which use any stack space.
| #define DEFINE_DETERMINE_FLOAT_CHANNEL_X_HELPER | ( | X | ) |
static void DetermineFloatChannel##X##Helper(const WAVEFORMATEX& inp, const WAVEFORMATEX& out, ConverterFnPtr& converter) \ { \ ASSERT(inp.wBitsPerSample == 32); \ if(out.wBitsPerSample == 32) \ { \ X_TO_Y_CHANNEL_Z_HELPER(float, long, X); \ } \ else if(out.wBitsPerSample == 16) \ { \ X_TO_Y_CHANNEL_Z_HELPER(float, short, X); \ } \ else \ { \ ASSERT(out.wBitsPerSample == 8); \ X_TO_Y_CHANNEL_Z_HELPER(float, char, X); \ } \ }
Defines the implementation of the determination function for float->integer conversions. X is the channel conversion type, (either Up, Down, or Equal). This parameter is passed unchanged to X_TO_Y_CHANNEL_Z_HELPER as the Z parameter.
| #define DEFINE_DETERMINE_PCM_CHANNEL_X_HELPER | ( | X | ) |
Defines the implementation of the determination function for integer->integer conversions. X is the channel conversion type, (either Up, Down, or Equal). This parameter is passed unchanged to X_TO_Y_CHANNEL_Z_HELPER as the Z parameter.
| #define X_TO_Y_CHANNEL_Z_HELPER | ( | X, | |
| Y, | |||
| Z | |||
| ) |
converter = boost::bind( \
&detail::ConvertChannel##Z##<X, Y>, \
_1, \
_2, \
_3, \
inp.nChannels, \
out.nChannels \
);
Defines a three argument function object to assign as the sample conversion function. X and Y are the source and destination C++ sample types respectively. Z can be Up, Down, or Equal to select the desired channel conversion function from source to dest
| void DetermineSampleConverter | ( | const tWAVEFORMATEX & | inp, |
| const tWAVEFORMATEX & | out, | ||
| ConverterFnPtr & | converter | ||
| ) |
Determines the correct function that'll convert between the sample types
Picks a suitable function and template parameters that'll change samples from the input wave format to the output wave format.
| inp | The input wave format, that from the audio mixing device | |
| out | The output wave format, that to feed to the codec | |
| [out] | converter | On output, the function object that'll call the actual Convert* function when called |
1.7.5.1