lvm: Format the code using clang-format
Also fixed few typos flagged by Lint
Bug: 129491957
Test: objdump before and after the patch
Change-Id: I52aa8a3ebbe3a0cfdae995a26a6cd51a16272e8a
diff --git a/media/libeffects/lvm/tests/Android.bp b/media/libeffects/lvm/tests/Android.bp
index aea7703..d026ab6 100644
--- a/media/libeffects/lvm/tests/Android.bp
+++ b/media/libeffects/lvm/tests/Android.bp
@@ -49,7 +49,7 @@
proprietary: true,
include_dirs: [
- "frameworks/av/media/libeffects/lvm/wrapper/Reverb"
+ "frameworks/av/media/libeffects/lvm/wrapper/Reverb",
],
header_libs: [
diff --git a/media/libeffects/lvm/tests/lvmtest.cpp b/media/libeffects/lvm/tests/lvmtest.cpp
index 59b27ad..a1520af 100644
--- a/media/libeffects/lvm/tests/lvmtest.cpp
+++ b/media/libeffects/lvm/tests/lvmtest.cpp
@@ -33,156 +33,149 @@
#define ALOGVV ALOGV
#else
#define ALOGVV(a...) \
- do { \
- } while (false)
+ do { \
+ } while (false)
#endif
-#define CHECK_ARG(cond) \
- { \
- if (!(cond)) { \
- ALOGE("\tLVM_ERROR : Invalid argument: " #cond); \
- return -EINVAL; \
- } \
- \
-}
+#define CHECK_ARG(cond) \
+ { \
+ if (!(cond)) { \
+ ALOGE("\tLVM_ERROR : Invalid argument: " #cond); \
+ return -EINVAL; \
+ } \
+ }
-#define LVM_ERROR_CHECK(LvmStatus, callingFunc, calledFunc) \
- { \
- if ((LvmStatus) == LVM_NULLADDRESS) { \
- ALOGE( \
- "\tLVM_ERROR : Parameter error - " \
- "null pointer returned by %s in %s\n\n\n\n", \
- callingFunc, calledFunc); \
- } \
- if ((LvmStatus) == LVM_ALIGNMENTERROR) { \
- ALOGE( \
- "\tLVM_ERROR : Parameter error - " \
- "bad alignment returned by %s in %s\n\n\n\n", \
- callingFunc, calledFunc); \
- } \
- if ((LvmStatus) == LVM_INVALIDNUMSAMPLES) { \
- ALOGE( \
- "\tLVM_ERROR : Parameter error - " \
- "bad number of samples returned by %s in %s\n\n\n\n", \
- callingFunc, calledFunc); \
- } \
- if ((LvmStatus) == LVM_OUTOFRANGE) { \
- ALOGE( \
- "\tLVM_ERROR : Parameter error - " \
- "out of range returned by %s in %s\n", \
- callingFunc, calledFunc); \
- } \
- }
+#define LVM_ERROR_CHECK(LvmStatus, callingFunc, calledFunc) \
+ { \
+ if ((LvmStatus) == LVM_NULLADDRESS) { \
+ ALOGE("\tLVM_ERROR : Parameter error - " \
+ "null pointer returned by %s in %s\n\n\n\n", \
+ callingFunc, calledFunc); \
+ } \
+ if ((LvmStatus) == LVM_ALIGNMENTERROR) { \
+ ALOGE("\tLVM_ERROR : Parameter error - " \
+ "bad alignment returned by %s in %s\n\n\n\n", \
+ callingFunc, calledFunc); \
+ } \
+ if ((LvmStatus) == LVM_INVALIDNUMSAMPLES) { \
+ ALOGE("\tLVM_ERROR : Parameter error - " \
+ "bad number of samples returned by %s in %s\n\n\n\n", \
+ callingFunc, calledFunc); \
+ } \
+ if ((LvmStatus) == LVM_OUTOFRANGE) { \
+ ALOGE("\tLVM_ERROR : Parameter error - " \
+ "out of range returned by %s in %s\n", \
+ callingFunc, calledFunc); \
+ } \
+ }
struct lvmConfigParams_t {
- int samplingFreq = 44100;
- int nrChannels = 2;
- int chMask = AUDIO_CHANNEL_OUT_STEREO;
- int vcBal = 0;
- int fChannels = 2;
- bool monoMode = false;
- int bassEffectLevel = 0;
- int eqPresetLevel = 0;
- int frameLength = 256;
- LVM_BE_Mode_en bassEnable = LVM_BE_OFF;
- LVM_TE_Mode_en trebleEnable = LVM_TE_OFF;
- LVM_EQNB_Mode_en eqEnable = LVM_EQNB_OFF;
- LVM_Mode_en csEnable = LVM_MODE_OFF;
+ int samplingFreq = 44100;
+ int nrChannels = 2;
+ int chMask = AUDIO_CHANNEL_OUT_STEREO;
+ int vcBal = 0;
+ int fChannels = 2;
+ bool monoMode = false;
+ int bassEffectLevel = 0;
+ int eqPresetLevel = 0;
+ int frameLength = 256;
+ LVM_BE_Mode_en bassEnable = LVM_BE_OFF;
+ LVM_TE_Mode_en trebleEnable = LVM_TE_OFF;
+ LVM_EQNB_Mode_en eqEnable = LVM_EQNB_OFF;
+ LVM_Mode_en csEnable = LVM_MODE_OFF;
};
constexpr audio_channel_mask_t lvmConfigChMask[] = {
- AUDIO_CHANNEL_OUT_MONO,
- AUDIO_CHANNEL_OUT_STEREO,
- AUDIO_CHANNEL_OUT_2POINT1,
- AUDIO_CHANNEL_OUT_2POINT0POINT2,
- AUDIO_CHANNEL_OUT_QUAD,
- AUDIO_CHANNEL_OUT_QUAD_BACK,
- AUDIO_CHANNEL_OUT_QUAD_SIDE,
- AUDIO_CHANNEL_OUT_SURROUND,
- (1 << 4) - 1,
- AUDIO_CHANNEL_OUT_2POINT1POINT2,
- AUDIO_CHANNEL_OUT_3POINT0POINT2,
- AUDIO_CHANNEL_OUT_PENTA,
- (1 << 5) - 1,
- AUDIO_CHANNEL_OUT_3POINT1POINT2,
- AUDIO_CHANNEL_OUT_5POINT1,
- AUDIO_CHANNEL_OUT_5POINT1_BACK,
- AUDIO_CHANNEL_OUT_5POINT1_SIDE,
- (1 << 6) - 1,
- AUDIO_CHANNEL_OUT_6POINT1,
- (1 << 7) - 1,
- AUDIO_CHANNEL_OUT_5POINT1POINT2,
- AUDIO_CHANNEL_OUT_7POINT1,
- (1 << 8) - 1,
+ AUDIO_CHANNEL_OUT_MONO,
+ AUDIO_CHANNEL_OUT_STEREO,
+ AUDIO_CHANNEL_OUT_2POINT1,
+ AUDIO_CHANNEL_OUT_2POINT0POINT2,
+ AUDIO_CHANNEL_OUT_QUAD,
+ AUDIO_CHANNEL_OUT_QUAD_BACK,
+ AUDIO_CHANNEL_OUT_QUAD_SIDE,
+ AUDIO_CHANNEL_OUT_SURROUND,
+ (1 << 4) - 1,
+ AUDIO_CHANNEL_OUT_2POINT1POINT2,
+ AUDIO_CHANNEL_OUT_3POINT0POINT2,
+ AUDIO_CHANNEL_OUT_PENTA,
+ (1 << 5) - 1,
+ AUDIO_CHANNEL_OUT_3POINT1POINT2,
+ AUDIO_CHANNEL_OUT_5POINT1,
+ AUDIO_CHANNEL_OUT_5POINT1_BACK,
+ AUDIO_CHANNEL_OUT_5POINT1_SIDE,
+ (1 << 6) - 1,
+ AUDIO_CHANNEL_OUT_6POINT1,
+ (1 << 7) - 1,
+ AUDIO_CHANNEL_OUT_5POINT1POINT2,
+ AUDIO_CHANNEL_OUT_7POINT1,
+ (1 << 8) - 1,
};
-
void printUsage() {
- printf("\nUsage: ");
- printf("\n <executable> -i:<input_file> -o:<out_file> [options]\n");
- printf("\nwhere, \n <inputfile> is the input file name");
- printf("\n on which LVM effects are applied");
- printf("\n <outputfile> processed output file");
- printf("\n and options are mentioned below");
- printf("\n");
- printf("\n -help (or) -h");
- printf("\n Prints this usage information");
- printf("\n");
- printf("\n -chMask:<channel_mask>\n");
- printf("\n 0 - AUDIO_CHANNEL_OUT_MONO");
- printf("\n 1 - AUDIO_CHANNEL_OUT_STEREO");
- printf("\n 2 - AUDIO_CHANNEL_OUT_2POINT1");
- printf("\n 3 - AUDIO_CHANNEL_OUT_2POINT0POINT2");
- printf("\n 4 - AUDIO_CHANNEL_OUT_QUAD");
- printf("\n 5 - AUDIO_CHANNEL_OUT_QUAD_BACK");
- printf("\n 6 - AUDIO_CHANNEL_OUT_QUAD_SIDE");
- printf("\n 7 - AUDIO_CHANNEL_OUT_SURROUND");
- printf("\n 8 - canonical channel index mask for 4 ch: (1 << 4) - 1");
- printf("\n 9 - AUDIO_CHANNEL_OUT_2POINT1POINT2");
- printf("\n 10 - AUDIO_CHANNEL_OUT_3POINT0POINT2");
- printf("\n 11 - AUDIO_CHANNEL_OUT_PENTA");
- printf("\n 12 - canonical channel index mask for 5 ch: (1 << 5) - 1");
- printf("\n 13 - AUDIO_CHANNEL_OUT_3POINT1POINT2");
- printf("\n 14 - AUDIO_CHANNEL_OUT_5POINT1");
- printf("\n 15 - AUDIO_CHANNEL_OUT_5POINT1_BACK");
- printf("\n 16 - AUDIO_CHANNEL_OUT_5POINT1_SIDE");
- printf("\n 17 - canonical channel index mask for 6 ch: (1 << 6) - 1");
- printf("\n 18 - AUDIO_CHANNEL_OUT_6POINT1");
- printf("\n 19 - canonical channel index mask for 7 ch: (1 << 7) - 1");
- printf("\n 20 - AUDIO_CHANNEL_OUT_5POINT1POINT2");
- printf("\n 21 - AUDIO_CHANNEL_OUT_7POINT1");
- printf("\n 22 - canonical channel index mask for 8 ch: (1 << 8) - 1");
- printf("\n default 0");
- printf("\n -vcBal:<Left Right Balance control in dB [-96 to 96 dB]>");
- printf("\n -ve values reduce Right channel while +ve value reduces Left channel");
- printf("\n default 0");
- printf("\n -fch:<file_channels> (1 through 8)\n\n");
- printf("\n -M");
- printf("\n Mono mode (force all input audio channels to be identical)");
- printf("\n -basslvl:<effect_level>");
- printf("\n A value that ranges between %d - %d default 0", LVM_BE_MIN_EFFECTLEVEL,
- LVM_BE_MAX_EFFECTLEVEL);
- printf("\n");
- printf("\n -eqPreset:<preset Value>");
- const size_t numPresetLvls = std::size(gEqualizerPresets);
- for (size_t i = 0; i < numPresetLvls; ++i) {
- printf("\n %zu - %s", i, gEqualizerPresets[i].name);
- }
- printf("\n default - 0");
- printf("\n -bE ");
- printf("\n Enable Dynamic Bass Enhancement");
- printf("\n");
- printf("\n -tE ");
- printf("\n Enable Treble Boost");
- printf("\n");
- printf("\n -csE ");
- printf("\n Enable Concert Surround");
- printf("\n");
- printf("\n -eqE ");
- printf("\n Enable Equalizer");
+ printf("\nUsage: ");
+ printf("\n <executable> -i:<input_file> -o:<out_file> [options]\n");
+ printf("\nwhere, \n <inputfile> is the input file name");
+ printf("\n on which LVM effects are applied");
+ printf("\n <outputfile> processed output file");
+ printf("\n and options are mentioned below");
+ printf("\n");
+ printf("\n -help (or) -h");
+ printf("\n Prints this usage information");
+ printf("\n");
+ printf("\n -chMask:<channel_mask>\n");
+ printf("\n 0 - AUDIO_CHANNEL_OUT_MONO");
+ printf("\n 1 - AUDIO_CHANNEL_OUT_STEREO");
+ printf("\n 2 - AUDIO_CHANNEL_OUT_2POINT1");
+ printf("\n 3 - AUDIO_CHANNEL_OUT_2POINT0POINT2");
+ printf("\n 4 - AUDIO_CHANNEL_OUT_QUAD");
+ printf("\n 5 - AUDIO_CHANNEL_OUT_QUAD_BACK");
+ printf("\n 6 - AUDIO_CHANNEL_OUT_QUAD_SIDE");
+ printf("\n 7 - AUDIO_CHANNEL_OUT_SURROUND");
+ printf("\n 8 - canonical channel index mask for 4 ch: (1 << 4) - 1");
+ printf("\n 9 - AUDIO_CHANNEL_OUT_2POINT1POINT2");
+ printf("\n 10 - AUDIO_CHANNEL_OUT_3POINT0POINT2");
+ printf("\n 11 - AUDIO_CHANNEL_OUT_PENTA");
+ printf("\n 12 - canonical channel index mask for 5 ch: (1 << 5) - 1");
+ printf("\n 13 - AUDIO_CHANNEL_OUT_3POINT1POINT2");
+ printf("\n 14 - AUDIO_CHANNEL_OUT_5POINT1");
+ printf("\n 15 - AUDIO_CHANNEL_OUT_5POINT1_BACK");
+ printf("\n 16 - AUDIO_CHANNEL_OUT_5POINT1_SIDE");
+ printf("\n 17 - canonical channel index mask for 6 ch: (1 << 6) - 1");
+ printf("\n 18 - AUDIO_CHANNEL_OUT_6POINT1");
+ printf("\n 19 - canonical channel index mask for 7 ch: (1 << 7) - 1");
+ printf("\n 20 - AUDIO_CHANNEL_OUT_5POINT1POINT2");
+ printf("\n 21 - AUDIO_CHANNEL_OUT_7POINT1");
+ printf("\n 22 - canonical channel index mask for 8 ch: (1 << 8) - 1");
+ printf("\n default 0");
+ printf("\n -vcBal:<Left Right Balance control in dB [-96 to 96 dB]>");
+ printf("\n -ve values reduce Right channel while +ve value reduces Left channel");
+ printf("\n default 0");
+ printf("\n -fch:<file_channels> (1 through 8)\n\n");
+ printf("\n -M");
+ printf("\n Mono mode (force all input audio channels to be identical)");
+ printf("\n -basslvl:<effect_level>");
+ printf("\n A value that ranges between %d - %d default 0", LVM_BE_MIN_EFFECTLEVEL,
+ LVM_BE_MAX_EFFECTLEVEL);
+ printf("\n");
+ printf("\n -eqPreset:<preset Value>");
+ const size_t numPresetLvls = std::size(gEqualizerPresets);
+ for (size_t i = 0; i < numPresetLvls; ++i) {
+ printf("\n %zu - %s", i, gEqualizerPresets[i].name);
+ }
+ printf("\n default - 0");
+ printf("\n -bE ");
+ printf("\n Enable Dynamic Bass Enhancement");
+ printf("\n");
+ printf("\n -tE ");
+ printf("\n Enable Treble Boost");
+ printf("\n");
+ printf("\n -csE ");
+ printf("\n Enable Concert Surround");
+ printf("\n");
+ printf("\n -eqE ");
+ printf("\n Enable Equalizer");
}
-
//----------------------------------------------------------------------------
// LvmBundle_init()
//----------------------------------------------------------------------------
@@ -196,528 +189,510 @@
//
//----------------------------------------------------------------------------
-int LvmBundle_init(struct EffectContext *pContext, LVM_ControlParams_t *params) {
- ALOGV("\tLvmBundle_init start");
+int LvmBundle_init(struct EffectContext* pContext, LVM_ControlParams_t* params) {
+ ALOGV("\tLvmBundle_init start");
- pContext->config.inputCfg.accessMode = EFFECT_BUFFER_ACCESS_READ;
- pContext->config.inputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
- pContext->config.inputCfg.format = EFFECT_BUFFER_FORMAT;
- pContext->config.inputCfg.samplingRate = 44100;
- pContext->config.inputCfg.bufferProvider.getBuffer = NULL;
- pContext->config.inputCfg.bufferProvider.releaseBuffer = NULL;
- pContext->config.inputCfg.bufferProvider.cookie = NULL;
- pContext->config.inputCfg.mask = EFFECT_CONFIG_ALL;
- pContext->config.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_ACCUMULATE;
- pContext->config.outputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
- pContext->config.outputCfg.format = EFFECT_BUFFER_FORMAT;
- pContext->config.outputCfg.samplingRate = 44100;
- pContext->config.outputCfg.bufferProvider.getBuffer = NULL;
- pContext->config.outputCfg.bufferProvider.releaseBuffer = NULL;
- pContext->config.outputCfg.bufferProvider.cookie = NULL;
- pContext->config.outputCfg.mask = EFFECT_CONFIG_ALL;
+ pContext->config.inputCfg.accessMode = EFFECT_BUFFER_ACCESS_READ;
+ pContext->config.inputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
+ pContext->config.inputCfg.format = EFFECT_BUFFER_FORMAT;
+ pContext->config.inputCfg.samplingRate = 44100;
+ pContext->config.inputCfg.bufferProvider.getBuffer = NULL;
+ pContext->config.inputCfg.bufferProvider.releaseBuffer = NULL;
+ pContext->config.inputCfg.bufferProvider.cookie = NULL;
+ pContext->config.inputCfg.mask = EFFECT_CONFIG_ALL;
+ pContext->config.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_ACCUMULATE;
+ pContext->config.outputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
+ pContext->config.outputCfg.format = EFFECT_BUFFER_FORMAT;
+ pContext->config.outputCfg.samplingRate = 44100;
+ pContext->config.outputCfg.bufferProvider.getBuffer = NULL;
+ pContext->config.outputCfg.bufferProvider.releaseBuffer = NULL;
+ pContext->config.outputCfg.bufferProvider.cookie = NULL;
+ pContext->config.outputCfg.mask = EFFECT_CONFIG_ALL;
- if (pContext->pBundledContext->hInstance != NULL) {
- ALOGV(
- "\tLvmBundle_init pContext->pBassBoost != NULL "
- "-> Calling pContext->pBassBoost->free()");
- LVM_DelInstanceHandle(&pContext->pBundledContext->hInstance);
+ if (pContext->pBundledContext->hInstance != NULL) {
+ ALOGV("\tLvmBundle_init pContext->pBassBoost != NULL "
+ "-> Calling pContext->pBassBoost->free()");
+ LVM_DelInstanceHandle(&pContext->pBundledContext->hInstance);
- ALOGV(
- "\tLvmBundle_init pContext->pBassBoost != NULL "
- "-> Called pContext->pBassBoost->free()");
- }
+ ALOGV("\tLvmBundle_init pContext->pBassBoost != NULL "
+ "-> Called pContext->pBassBoost->free()");
+ }
- LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */
- LVM_InstParams_t InstParams; /* Instance parameters */
- LVM_EQNB_BandDef_t BandDefs[MAX_NUM_BANDS]; /* Equaliser band definitions */
- LVM_HeadroomParams_t HeadroomParams; /* Headroom parameters */
- LVM_HeadroomBandDef_t HeadroomBandDef[LVM_HEADROOM_MAX_NBANDS];
+ LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */
+ LVM_InstParams_t InstParams; /* Instance parameters */
+ LVM_EQNB_BandDef_t BandDefs[MAX_NUM_BANDS]; /* Equaliser band definitions */
+ LVM_HeadroomParams_t HeadroomParams; /* Headroom parameters */
+ LVM_HeadroomBandDef_t HeadroomBandDef[LVM_HEADROOM_MAX_NBANDS];
- /* Set the capabilities */
- InstParams.BufferMode = LVM_UNMANAGED_BUFFERS;
- InstParams.MaxBlockSize = MAX_CALL_SIZE;
- InstParams.EQNB_NumBands = MAX_NUM_BANDS;
- InstParams.PSA_Included = LVM_PSA_ON;
+ /* Set the capabilities */
+ InstParams.BufferMode = LVM_UNMANAGED_BUFFERS;
+ InstParams.MaxBlockSize = MAX_CALL_SIZE;
+ InstParams.EQNB_NumBands = MAX_NUM_BANDS;
+ InstParams.PSA_Included = LVM_PSA_ON;
- LvmStatus = LVM_GetInstanceHandle(&pContext->pBundledContext->hInstance,
- &InstParams);
+ LvmStatus = LVM_GetInstanceHandle(&pContext->pBundledContext->hInstance, &InstParams);
- LVM_ERROR_CHECK(LvmStatus, "LVM_GetInstanceHandle", "LvmBundle_init");
- if (LvmStatus != LVM_SUCCESS) return -EINVAL;
+ LVM_ERROR_CHECK(LvmStatus, "LVM_GetInstanceHandle", "LvmBundle_init");
+ if (LvmStatus != LVM_SUCCESS) return -EINVAL;
- ALOGV(
- "\tLvmBundle_init CreateInstance Succesfully called "
- "LVM_GetInstanceHandle\n");
+ ALOGV("\tLvmBundle_init CreateInstance Successfully called "
+ "LVM_GetInstanceHandle\n");
- /* Set the initial process parameters */
- /* General parameters */
- params->OperatingMode = LVM_MODE_ON;
- params->SampleRate = LVM_FS_44100;
- params->SourceFormat = LVM_STEREO;
- params->ChMask = AUDIO_CHANNEL_OUT_STEREO;
- params->SpeakerType = LVM_HEADPHONES;
+ /* Set the initial process parameters */
+ /* General parameters */
+ params->OperatingMode = LVM_MODE_ON;
+ params->SampleRate = LVM_FS_44100;
+ params->SourceFormat = LVM_STEREO;
+ params->ChMask = AUDIO_CHANNEL_OUT_STEREO;
+ params->SpeakerType = LVM_HEADPHONES;
- pContext->pBundledContext->SampleRate = LVM_FS_44100;
+ pContext->pBundledContext->SampleRate = LVM_FS_44100;
- /* Concert Sound parameters */
- params->VirtualizerOperatingMode = LVM_MODE_OFF;
- params->VirtualizerType = LVM_CONCERTSOUND;
- params->VirtualizerReverbLevel = 100;
- params->CS_EffectLevel = LVM_CS_EFFECT_NONE;
+ /* Concert Sound parameters */
+ params->VirtualizerOperatingMode = LVM_MODE_OFF;
+ params->VirtualizerType = LVM_CONCERTSOUND;
+ params->VirtualizerReverbLevel = 100;
+ params->CS_EffectLevel = LVM_CS_EFFECT_NONE;
- /* N-Band Equaliser parameters */
- params->EQNB_OperatingMode = LVM_EQNB_ON;
- params->EQNB_NBands = FIVEBAND_NUMBANDS;
- params->pEQNB_BandDefinition = &BandDefs[0];
+ /* N-Band Equaliser parameters */
+ params->EQNB_OperatingMode = LVM_EQNB_ON;
+ params->EQNB_NBands = FIVEBAND_NUMBANDS;
+ params->pEQNB_BandDefinition = &BandDefs[0];
- for (int i = 0; i < FIVEBAND_NUMBANDS; i++) {
- BandDefs[i].Frequency = EQNB_5BandPresetsFrequencies[i];
- BandDefs[i].QFactor = EQNB_5BandPresetsQFactors[i];
- BandDefs[i].Gain = EQNB_5BandSoftPresets[i];
- }
+ for (int i = 0; i < FIVEBAND_NUMBANDS; i++) {
+ BandDefs[i].Frequency = EQNB_5BandPresetsFrequencies[i];
+ BandDefs[i].QFactor = EQNB_5BandPresetsQFactors[i];
+ BandDefs[i].Gain = EQNB_5BandSoftPresets[i];
+ }
- /* Volume Control parameters */
- params->VC_EffectLevel = 0;
- params->VC_Balance = 0;
+ /* Volume Control parameters */
+ params->VC_EffectLevel = 0;
+ params->VC_Balance = 0;
- /* Treble Enhancement parameters */
- params->TE_OperatingMode = LVM_TE_OFF;
- params->TE_EffectLevel = 0;
+ /* Treble Enhancement parameters */
+ params->TE_OperatingMode = LVM_TE_OFF;
+ params->TE_EffectLevel = 0;
- /* PSA Control parameters */
- params->PSA_Enable = LVM_PSA_OFF;
- params->PSA_PeakDecayRate = (LVM_PSA_DecaySpeed_en)0;
+ /* PSA Control parameters */
+ params->PSA_Enable = LVM_PSA_OFF;
+ params->PSA_PeakDecayRate = (LVM_PSA_DecaySpeed_en)0;
- /* Bass Enhancement parameters */
- params->BE_OperatingMode = LVM_BE_ON;
- params->BE_EffectLevel = 0;
- params->BE_CentreFreq = LVM_BE_CENTRE_90Hz;
- params->BE_HPF = LVM_BE_HPF_ON;
+ /* Bass Enhancement parameters */
+ params->BE_OperatingMode = LVM_BE_ON;
+ params->BE_EffectLevel = 0;
+ params->BE_CentreFreq = LVM_BE_CENTRE_90Hz;
+ params->BE_HPF = LVM_BE_HPF_ON;
- /* PSA Control parameters */
- params->PSA_Enable = LVM_PSA_OFF;
- params->PSA_PeakDecayRate = LVM_PSA_SPEED_MEDIUM;
+ /* PSA Control parameters */
+ params->PSA_Enable = LVM_PSA_OFF;
+ params->PSA_PeakDecayRate = LVM_PSA_SPEED_MEDIUM;
- /* TE Control parameters */
- params->TE_OperatingMode = LVM_TE_OFF;
- params->TE_EffectLevel = 0;
+ /* TE Control parameters */
+ params->TE_OperatingMode = LVM_TE_OFF;
+ params->TE_EffectLevel = 0;
- /* Activate the initial settings */
- LvmStatus =
- LVM_SetControlParameters(pContext->pBundledContext->hInstance, params);
+ /* Activate the initial settings */
+ LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, params);
- LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "LvmBundle_init");
- if (LvmStatus != LVM_SUCCESS) return -EINVAL;
+ LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "LvmBundle_init");
+ if (LvmStatus != LVM_SUCCESS) return -EINVAL;
- ALOGV(
- "\tLvmBundle_init CreateInstance Succesfully called "
- "LVM_SetControlParameters\n");
+ ALOGV("\tLvmBundle_init CreateInstance Successfully called "
+ "LVM_SetControlParameters\n");
- /* Set the headroom parameters */
- HeadroomBandDef[0].Limit_Low = 20;
- HeadroomBandDef[0].Limit_High = 4999;
- HeadroomBandDef[0].Headroom_Offset = 0;
- HeadroomBandDef[1].Limit_Low = 5000;
- HeadroomBandDef[1].Limit_High = 24000;
- HeadroomBandDef[1].Headroom_Offset = 0;
- HeadroomParams.pHeadroomDefinition = &HeadroomBandDef[0];
- HeadroomParams.Headroom_OperatingMode = LVM_HEADROOM_ON;
- HeadroomParams.NHeadroomBands = 2;
+ /* Set the headroom parameters */
+ HeadroomBandDef[0].Limit_Low = 20;
+ HeadroomBandDef[0].Limit_High = 4999;
+ HeadroomBandDef[0].Headroom_Offset = 0;
+ HeadroomBandDef[1].Limit_Low = 5000;
+ HeadroomBandDef[1].Limit_High = 24000;
+ HeadroomBandDef[1].Headroom_Offset = 0;
+ HeadroomParams.pHeadroomDefinition = &HeadroomBandDef[0];
+ HeadroomParams.Headroom_OperatingMode = LVM_HEADROOM_ON;
+ HeadroomParams.NHeadroomBands = 2;
- LvmStatus = LVM_SetHeadroomParams(pContext->pBundledContext->hInstance,
- &HeadroomParams);
+ LvmStatus = LVM_SetHeadroomParams(pContext->pBundledContext->hInstance, &HeadroomParams);
- LVM_ERROR_CHECK(LvmStatus, "LVM_SetHeadroomParams", "LvmBundle_init");
- if (LvmStatus != LVM_SUCCESS) return -EINVAL;
+ LVM_ERROR_CHECK(LvmStatus, "LVM_SetHeadroomParams", "LvmBundle_init");
+ if (LvmStatus != LVM_SUCCESS) return -EINVAL;
- ALOGV(
- "\tLvmBundle_init CreateInstance Succesfully called "
- "LVM_SetHeadroomParams\n");
- ALOGV("\tLvmBundle_init End");
- return 0;
+ ALOGV("\tLvmBundle_init CreateInstance Successfully called "
+ "LVM_SetHeadroomParams\n");
+ ALOGV("\tLvmBundle_init End");
+ return 0;
} /* end LvmBundle_init */
-int lvmCreate(struct EffectContext *pContext,
- lvmConfigParams_t *plvmConfigParams,
- LVM_ControlParams_t *params) {
- int ret = 0;
- pContext->pBundledContext = NULL;
- pContext->pBundledContext = (BundledEffectContext *)malloc(sizeof(struct BundledEffectContext));
- if (NULL == pContext->pBundledContext) {
- return -EINVAL;
- }
-
- pContext->pBundledContext->SessionNo = 0;
- pContext->pBundledContext->SessionId = 0;
- pContext->pBundledContext->hInstance = NULL;
- pContext->pBundledContext->bVolumeEnabled = LVM_FALSE;
- pContext->pBundledContext->bEqualizerEnabled = LVM_FALSE;
- pContext->pBundledContext->bBassEnabled = LVM_FALSE;
- pContext->pBundledContext->bBassTempDisabled = LVM_FALSE;
- pContext->pBundledContext->bVirtualizerEnabled = LVM_FALSE;
- pContext->pBundledContext->bVirtualizerTempDisabled = LVM_FALSE;
- pContext->pBundledContext->nOutputDevice = AUDIO_DEVICE_NONE;
- pContext->pBundledContext->nVirtualizerForcedDevice = AUDIO_DEVICE_NONE;
- pContext->pBundledContext->NumberEffectsEnabled = 0;
- pContext->pBundledContext->NumberEffectsCalled = 0;
- pContext->pBundledContext->firstVolume = LVM_TRUE;
- pContext->pBundledContext->volume = 0;
-
- /* Saved strength is used to return the exact strength that was used in the
- * set to the get
- * because we map the original strength range of 0:1000 to 1:15, and this will
- * avoid
- * quantisation like effect when returning
- */
- pContext->pBundledContext->BassStrengthSaved = 0;
- pContext->pBundledContext->VirtStrengthSaved = 0;
- pContext->pBundledContext->CurPreset = PRESET_CUSTOM;
- pContext->pBundledContext->levelSaved = 0;
- pContext->pBundledContext->bMuteEnabled = LVM_FALSE;
- pContext->pBundledContext->bStereoPositionEnabled = LVM_FALSE;
- pContext->pBundledContext->positionSaved = 0;
- pContext->pBundledContext->workBuffer = NULL;
- pContext->pBundledContext->frameCount = -1;
- pContext->pBundledContext->SamplesToExitCountVirt = 0;
- pContext->pBundledContext->SamplesToExitCountBb = 0;
- pContext->pBundledContext->SamplesToExitCountEq = 0;
- for (int i = 0; i < FIVEBAND_NUMBANDS; i++) {
- pContext->pBundledContext->bandGaindB[i] = EQNB_5BandSoftPresets[i];
- }
- pContext->config.inputCfg.channels = plvmConfigParams->nrChannels;
- ALOGV("\tEffectCreate - Calling LvmBundle_init");
- ret = LvmBundle_init(pContext, params);
-
- if (ret < 0) {
- ALOGE("\tLVM_ERROR : lvmCreate() Bundle init failed");
- return ret;
- }
- return 0;
-}
-
-int lvmControl(struct EffectContext *pContext,
- lvmConfigParams_t *plvmConfigParams,
- LVM_ControlParams_t *params) {
- LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */
-
- /* Set the initial process parameters */
- /* General parameters */
- params->OperatingMode = LVM_MODE_ON;
- params->SpeakerType = LVM_HEADPHONES;
-
- params->ChMask = plvmConfigParams->chMask;
- params->NrChannels = plvmConfigParams->nrChannels;
- if (params->NrChannels == 1) {
- params->SourceFormat = LVM_MONO;
- } else if (params->NrChannels == 2) {
- params->SourceFormat = LVM_STEREO;
- } else if (params->NrChannels > 2 && params->NrChannels <= 8) { // FCC_2 FCC_8
- params->SourceFormat = LVM_MULTICHANNEL;
- } else {
- return -EINVAL;
- }
-
- LVM_Fs_en sampleRate;
- switch (plvmConfigParams->samplingFreq) {
- case 8000:
- sampleRate = LVM_FS_8000;
- break;
- case 11025:
- sampleRate = LVM_FS_11025;
- break;
- case 12000:
- sampleRate = LVM_FS_12000;
- break;
- case 16000:
- sampleRate = LVM_FS_16000;
- break;
- case 22050:
- sampleRate = LVM_FS_22050;
- break;
- case 24000:
- sampleRate = LVM_FS_24000;
- break;
- case 32000:
- sampleRate = LVM_FS_32000;
- break;
- case 44100:
- sampleRate = LVM_FS_44100;
- break;
- case 48000:
- sampleRate = LVM_FS_48000;
- break;
- case 88200:
- sampleRate = LVM_FS_88200;
- break;
- case 96000:
- sampleRate = LVM_FS_96000;
- break;
- case 176400:
- sampleRate = LVM_FS_176400;
- break;
- case 192000:
- sampleRate = LVM_FS_192000;
- break;
- default:
- return -EINVAL;
- }
- params->SampleRate = sampleRate;
-
- /* Concert Sound parameters */
- params->VirtualizerOperatingMode = plvmConfigParams->csEnable;
- params->VirtualizerType = LVM_CONCERTSOUND;
- params->VirtualizerReverbLevel = 100;
- params->CS_EffectLevel = LVM_CS_EFFECT_NONE;
-
- /* N-Band Equaliser parameters */
- const int eqPresetLevel = plvmConfigParams->eqPresetLevel;
- LVM_EQNB_BandDef_t BandDefs[MAX_NUM_BANDS]; /* Equaliser band definitions */
- for (int i = 0; i < FIVEBAND_NUMBANDS; i++) {
- BandDefs[i].Frequency = EQNB_5BandPresetsFrequencies[i];
- BandDefs[i].QFactor = EQNB_5BandPresetsQFactors[i];
- BandDefs[i].Gain =
- EQNB_5BandSoftPresets[(FIVEBAND_NUMBANDS * eqPresetLevel) + i];
- }
- params->EQNB_OperatingMode = plvmConfigParams->eqEnable;
- // Caution: raw pointer to stack data, stored in instance by LVM_SetControlParameters.
- params->pEQNB_BandDefinition = &BandDefs[0];
-
- /* Volume Control parameters */
- params->VC_EffectLevel = 0;
- params->VC_Balance = plvmConfigParams->vcBal;
-
- /* Treble Enhancement parameters */
- params->TE_OperatingMode = plvmConfigParams->trebleEnable;
-
- /* PSA Control parameters */
- params->PSA_Enable = LVM_PSA_ON;
-
- /* Bass Enhancement parameters */
- params->BE_OperatingMode = plvmConfigParams->bassEnable;
-
- /* Activate the initial settings */
- LvmStatus =
- LVM_SetControlParameters(pContext->pBundledContext->hInstance, params);
-
- LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "LvmBundle_init");
- if (LvmStatus != LVM_SUCCESS) return -EINVAL;
-
- LvmStatus = LVM_ApplyNewSettings(pContext->pBundledContext->hInstance);
-
- if (LvmStatus != LVM_SUCCESS) return -EINVAL;
-
- return 0;
-}
-
-int lvmExecute(float *floatIn, float *floatOut, struct EffectContext *pContext,
- lvmConfigParams_t *plvmConfigParams) {
- const int frameLength = plvmConfigParams->frameLength;
- return
- LVM_Process(pContext->pBundledContext->hInstance, /* Instance handle */
- floatIn, /* Input buffer */
- floatOut, /* Output buffer */
- (LVM_UINT16)frameLength, /* Number of samples to read */
- 0); /* Audio Time */
-}
-
-int lvmMainProcess(EffectContext *pContext,
- LVM_ControlParams_t *pParams,
- lvmConfigParams_t *plvmConfigParams,
- FILE *finp,
- FILE *fout) {
- int errCode = lvmControl(pContext, plvmConfigParams, pParams);
- if (errCode) {
- ALOGE("Error: lvmControl returned with %d\n", errCode);
- return errCode;
- }
-
- const int channelCount = plvmConfigParams->nrChannels;
- const int frameLength = plvmConfigParams->frameLength;
- const int frameSize = channelCount * sizeof(float); // processing size
- const int ioChannelCount = plvmConfigParams->fChannels;
- const int ioFrameSize = ioChannelCount * sizeof(short); // file load size
- const int maxChannelCount = std::max(channelCount, ioChannelCount);
- /*
- * Mono input will be converted to 2 channels internally in the process call
- * by copying the same data into the second channel.
- * Hence when channelCount is 1, output buffer should be allocated for
- * 2 channels. The memAllocChCount takes care of allocation of sufficient
- * memory for the output buffer.
- */
- const int memAllocChCount = (channelCount == 1 ? 2 : channelCount);
-
- std::vector<short> in(frameLength * maxChannelCount);
- std::vector<short> out(frameLength * maxChannelCount);
- std::vector<float> floatIn(frameLength * channelCount);
- std::vector<float> floatOut(frameLength * memAllocChCount);
-
- int frameCounter = 0;
- while (fread(in.data(), ioFrameSize, frameLength, finp) == (size_t)frameLength) {
- if (ioChannelCount != channelCount) {
- adjust_channels(in.data(), ioChannelCount, in.data(), channelCount,
- sizeof(short), frameLength * ioFrameSize);
+int lvmCreate(struct EffectContext* pContext, lvmConfigParams_t* plvmConfigParams,
+ LVM_ControlParams_t* params) {
+ int ret = 0;
+ pContext->pBundledContext = NULL;
+ pContext->pBundledContext = (BundledEffectContext*)malloc(sizeof(struct BundledEffectContext));
+ if (NULL == pContext->pBundledContext) {
+ return -EINVAL;
}
- memcpy_to_float_from_i16(floatIn.data(), in.data(), frameLength * channelCount);
- // Mono mode will replicate the first channel to all other channels.
- // This ensures all audio channels are identical. This is useful for testing
- // Bass Boost, which extracts a mono signal for processing.
- if (plvmConfigParams->monoMode && channelCount > 1) {
- for (int i = 0; i < frameLength; ++i) {
- auto *fp = &floatIn[i * channelCount];
- std::fill(fp + 1, fp + channelCount, *fp); // replicate ch 0
+ pContext->pBundledContext->SessionNo = 0;
+ pContext->pBundledContext->SessionId = 0;
+ pContext->pBundledContext->hInstance = NULL;
+ pContext->pBundledContext->bVolumeEnabled = LVM_FALSE;
+ pContext->pBundledContext->bEqualizerEnabled = LVM_FALSE;
+ pContext->pBundledContext->bBassEnabled = LVM_FALSE;
+ pContext->pBundledContext->bBassTempDisabled = LVM_FALSE;
+ pContext->pBundledContext->bVirtualizerEnabled = LVM_FALSE;
+ pContext->pBundledContext->bVirtualizerTempDisabled = LVM_FALSE;
+ pContext->pBundledContext->nOutputDevice = AUDIO_DEVICE_NONE;
+ pContext->pBundledContext->nVirtualizerForcedDevice = AUDIO_DEVICE_NONE;
+ pContext->pBundledContext->NumberEffectsEnabled = 0;
+ pContext->pBundledContext->NumberEffectsCalled = 0;
+ pContext->pBundledContext->firstVolume = LVM_TRUE;
+ pContext->pBundledContext->volume = 0;
+
+ /* Saved strength is used to return the exact strength that was used in the
+ * set to the get
+ * because we map the original strength range of 0:1000 to 1:15, and this will
+ * avoid
+ * quantisation like effect when returning
+ */
+ pContext->pBundledContext->BassStrengthSaved = 0;
+ pContext->pBundledContext->VirtStrengthSaved = 0;
+ pContext->pBundledContext->CurPreset = PRESET_CUSTOM;
+ pContext->pBundledContext->levelSaved = 0;
+ pContext->pBundledContext->bMuteEnabled = LVM_FALSE;
+ pContext->pBundledContext->bStereoPositionEnabled = LVM_FALSE;
+ pContext->pBundledContext->positionSaved = 0;
+ pContext->pBundledContext->workBuffer = NULL;
+ pContext->pBundledContext->frameCount = -1;
+ pContext->pBundledContext->SamplesToExitCountVirt = 0;
+ pContext->pBundledContext->SamplesToExitCountBb = 0;
+ pContext->pBundledContext->SamplesToExitCountEq = 0;
+ for (int i = 0; i < FIVEBAND_NUMBANDS; i++) {
+ pContext->pBundledContext->bandGaindB[i] = EQNB_5BandSoftPresets[i];
+ }
+ pContext->config.inputCfg.channels = plvmConfigParams->nrChannels;
+ ALOGV("\tEffectCreate - Calling LvmBundle_init");
+ ret = LvmBundle_init(pContext, params);
+
+ if (ret < 0) {
+ ALOGE("\tLVM_ERROR : lvmCreate() Bundle init failed");
+ return ret;
+ }
+ return 0;
+}
+
+int lvmControl(struct EffectContext* pContext, lvmConfigParams_t* plvmConfigParams,
+ LVM_ControlParams_t* params) {
+ LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */
+
+ /* Set the initial process parameters */
+ /* General parameters */
+ params->OperatingMode = LVM_MODE_ON;
+ params->SpeakerType = LVM_HEADPHONES;
+
+ params->ChMask = plvmConfigParams->chMask;
+ params->NrChannels = plvmConfigParams->nrChannels;
+ if (params->NrChannels == 1) {
+ params->SourceFormat = LVM_MONO;
+ } else if (params->NrChannels == 2) {
+ params->SourceFormat = LVM_STEREO;
+ } else if (params->NrChannels > 2 && params->NrChannels <= 8) { // FCC_2 FCC_8
+ params->SourceFormat = LVM_MULTICHANNEL;
+ } else {
+ return -EINVAL;
+ }
+
+ LVM_Fs_en sampleRate;
+ switch (plvmConfigParams->samplingFreq) {
+ case 8000:
+ sampleRate = LVM_FS_8000;
+ break;
+ case 11025:
+ sampleRate = LVM_FS_11025;
+ break;
+ case 12000:
+ sampleRate = LVM_FS_12000;
+ break;
+ case 16000:
+ sampleRate = LVM_FS_16000;
+ break;
+ case 22050:
+ sampleRate = LVM_FS_22050;
+ break;
+ case 24000:
+ sampleRate = LVM_FS_24000;
+ break;
+ case 32000:
+ sampleRate = LVM_FS_32000;
+ break;
+ case 44100:
+ sampleRate = LVM_FS_44100;
+ break;
+ case 48000:
+ sampleRate = LVM_FS_48000;
+ break;
+ case 88200:
+ sampleRate = LVM_FS_88200;
+ break;
+ case 96000:
+ sampleRate = LVM_FS_96000;
+ break;
+ case 176400:
+ sampleRate = LVM_FS_176400;
+ break;
+ case 192000:
+ sampleRate = LVM_FS_192000;
+ break;
+ default:
+ return -EINVAL;
+ }
+ params->SampleRate = sampleRate;
+
+ /* Concert Sound parameters */
+ params->VirtualizerOperatingMode = plvmConfigParams->csEnable;
+ params->VirtualizerType = LVM_CONCERTSOUND;
+ params->VirtualizerReverbLevel = 100;
+ params->CS_EffectLevel = LVM_CS_EFFECT_NONE;
+
+ /* N-Band Equaliser parameters */
+ const int eqPresetLevel = plvmConfigParams->eqPresetLevel;
+ LVM_EQNB_BandDef_t BandDefs[MAX_NUM_BANDS]; /* Equaliser band definitions */
+ for (int i = 0; i < FIVEBAND_NUMBANDS; i++) {
+ BandDefs[i].Frequency = EQNB_5BandPresetsFrequencies[i];
+ BandDefs[i].QFactor = EQNB_5BandPresetsQFactors[i];
+ BandDefs[i].Gain = EQNB_5BandSoftPresets[(FIVEBAND_NUMBANDS * eqPresetLevel) + i];
+ }
+ params->EQNB_OperatingMode = plvmConfigParams->eqEnable;
+ // Caution: raw pointer to stack data, stored in instance by LVM_SetControlParameters.
+ params->pEQNB_BandDefinition = &BandDefs[0];
+
+ /* Volume Control parameters */
+ params->VC_EffectLevel = 0;
+ params->VC_Balance = plvmConfigParams->vcBal;
+
+ /* Treble Enhancement parameters */
+ params->TE_OperatingMode = plvmConfigParams->trebleEnable;
+
+ /* PSA Control parameters */
+ params->PSA_Enable = LVM_PSA_ON;
+
+ /* Bass Enhancement parameters */
+ params->BE_OperatingMode = plvmConfigParams->bassEnable;
+
+ /* Activate the initial settings */
+ LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, params);
+
+ LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "LvmBundle_init");
+ if (LvmStatus != LVM_SUCCESS) return -EINVAL;
+
+ LvmStatus = LVM_ApplyNewSettings(pContext->pBundledContext->hInstance);
+
+ if (LvmStatus != LVM_SUCCESS) return -EINVAL;
+
+ return 0;
+}
+
+int lvmExecute(float* floatIn, float* floatOut, struct EffectContext* pContext,
+ lvmConfigParams_t* plvmConfigParams) {
+ const int frameLength = plvmConfigParams->frameLength;
+ return LVM_Process(pContext->pBundledContext->hInstance, /* Instance handle */
+ floatIn, /* Input buffer */
+ floatOut, /* Output buffer */
+ (LVM_UINT16)frameLength, /* Number of samples to read */
+ 0); /* Audio Time */
+}
+
+int lvmMainProcess(EffectContext* pContext, LVM_ControlParams_t* pParams,
+ lvmConfigParams_t* plvmConfigParams, FILE* finp, FILE* fout) {
+ int errCode = lvmControl(pContext, plvmConfigParams, pParams);
+ if (errCode) {
+ ALOGE("Error: lvmControl returned with %d\n", errCode);
+ return errCode;
+ }
+
+ const int channelCount = plvmConfigParams->nrChannels;
+ const int frameLength = plvmConfigParams->frameLength;
+ const int frameSize = channelCount * sizeof(float); // processing size
+ const int ioChannelCount = plvmConfigParams->fChannels;
+ const int ioFrameSize = ioChannelCount * sizeof(short); // file load size
+ const int maxChannelCount = std::max(channelCount, ioChannelCount);
+ /*
+ * Mono input will be converted to 2 channels internally in the process call
+ * by copying the same data into the second channel.
+ * Hence when channelCount is 1, output buffer should be allocated for
+ * 2 channels. The memAllocChCount takes care of allocation of sufficient
+ * memory for the output buffer.
+ */
+ const int memAllocChCount = (channelCount == 1 ? 2 : channelCount);
+
+ std::vector<short> in(frameLength * maxChannelCount);
+ std::vector<short> out(frameLength * maxChannelCount);
+ std::vector<float> floatIn(frameLength * channelCount);
+ std::vector<float> floatOut(frameLength * memAllocChCount);
+
+ int frameCounter = 0;
+ while (fread(in.data(), ioFrameSize, frameLength, finp) == (size_t)frameLength) {
+ if (ioChannelCount != channelCount) {
+ adjust_channels(in.data(), ioChannelCount, in.data(), channelCount, sizeof(short),
+ frameLength * ioFrameSize);
+ }
+ memcpy_to_float_from_i16(floatIn.data(), in.data(), frameLength * channelCount);
+
+ // Mono mode will replicate the first channel to all other channels.
+ // This ensures all audio channels are identical. This is useful for testing
+ // Bass Boost, which extracts a mono signal for processing.
+ if (plvmConfigParams->monoMode && channelCount > 1) {
+ for (int i = 0; i < frameLength; ++i) {
+ auto* fp = &floatIn[i * channelCount];
+ std::fill(fp + 1, fp + channelCount, *fp); // replicate ch 0
+ }
+ }
+#ifndef BYPASS_EXEC
+ errCode = lvmExecute(floatIn.data(), floatOut.data(), pContext, plvmConfigParams);
+ if (errCode) {
+ printf("\nError: lvmExecute returned with %d\n", errCode);
+ return errCode;
+ }
+
+ (void)frameSize; // eliminate warning
+#else
+ memcpy(floatOut.data(), floatIn.data(), frameLength * frameSize);
+#endif
+ memcpy_to_i16_from_float(out.data(), floatOut.data(), frameLength * channelCount);
+ if (ioChannelCount != channelCount) {
+ adjust_channels(out.data(), channelCount, out.data(), ioChannelCount, sizeof(short),
+ frameLength * channelCount * sizeof(short));
+ }
+ (void)fwrite(out.data(), ioFrameSize, frameLength, fout);
+ frameCounter += frameLength;
+ }
+ printf("frameCounter: [%d]\n", frameCounter);
+ return 0;
+}
+
+int main(int argc, const char* argv[]) {
+ if (argc == 1) {
+ printUsage();
+ return -1;
+ }
+
+ lvmConfigParams_t lvmConfigParams{}; // default initialize
+ const char* infile = nullptr;
+ const char* outfile = nullptr;
+
+ for (int i = 1; i < argc; i++) {
+ printf("%s ", argv[i]);
+ if (!strncmp(argv[i], "-i:", 3)) {
+ infile = argv[i] + 3;
+ } else if (!strncmp(argv[i], "-o:", 3)) {
+ outfile = argv[i] + 3;
+ } else if (!strncmp(argv[i], "-fs:", 4)) {
+ const int samplingFreq = atoi(argv[i] + 4);
+ if (samplingFreq != 8000 && samplingFreq != 11025 && samplingFreq != 12000 &&
+ samplingFreq != 16000 && samplingFreq != 22050 && samplingFreq != 24000 &&
+ samplingFreq != 32000 && samplingFreq != 44100 && samplingFreq != 48000 &&
+ samplingFreq != 88200 && samplingFreq != 96000 && samplingFreq != 176400 &&
+ samplingFreq != 192000) {
+ printf("Error: Unsupported Sampling Frequency : %d\n", samplingFreq);
+ return -1;
+ }
+ lvmConfigParams.samplingFreq = samplingFreq;
+ } else if (!strncmp(argv[i], "-chMask:", 8)) {
+ const int chMaskConfigIdx = atoi(argv[i] + 8);
+ if (chMaskConfigIdx < 0 || (size_t)chMaskConfigIdx >= std::size(lvmConfigChMask)) {
+ ALOGE("\nError: Unsupported Channel Mask : %d\n", chMaskConfigIdx);
+ return -1;
+ }
+ const audio_channel_mask_t chMask = lvmConfigChMask[chMaskConfigIdx];
+ lvmConfigParams.chMask = chMask;
+ lvmConfigParams.nrChannels = audio_channel_count_from_out_mask(chMask);
+ } else if (!strncmp(argv[i], "-vcBal:", 7)) {
+ const int vcBalance = atoi(argv[i] + 7);
+ if (vcBalance > 96 || vcBalance < -96) {
+ ALOGE("\nError: Unsupported volume balance value: %d\n", vcBalance);
+ }
+ lvmConfigParams.vcBal = vcBalance;
+ } else if (!strncmp(argv[i], "-fch:", 5)) {
+ const int fChannels = atoi(argv[i] + 5);
+ if (fChannels > 8 || fChannels < 1) {
+ printf("Error: Unsupported number of file channels : %d\n", fChannels);
+ return -1;
+ }
+ lvmConfigParams.fChannels = fChannels;
+ } else if (!strcmp(argv[i], "-M")) {
+ lvmConfigParams.monoMode = true;
+ } else if (!strncmp(argv[i], "-basslvl:", 9)) {
+ const int bassEffectLevel = atoi(argv[i] + 9);
+ if (bassEffectLevel > LVM_BE_MAX_EFFECTLEVEL ||
+ bassEffectLevel < LVM_BE_MIN_EFFECTLEVEL) {
+ printf("Error: Unsupported Bass Effect Level : %d\n", bassEffectLevel);
+ printUsage();
+ return -1;
+ }
+ lvmConfigParams.bassEffectLevel = bassEffectLevel;
+ } else if (!strncmp(argv[i], "-eqPreset:", 10)) {
+ const int eqPresetLevel = atoi(argv[i] + 10);
+ const int numPresetLvls = std::size(gEqualizerPresets);
+ if (eqPresetLevel >= numPresetLvls || eqPresetLevel < 0) {
+ printf("Error: Unsupported Equalizer Preset : %d\n", eqPresetLevel);
+ printUsage();
+ return -1;
+ }
+ lvmConfigParams.eqPresetLevel = eqPresetLevel;
+ } else if (!strcmp(argv[i], "-bE")) {
+ lvmConfigParams.bassEnable = LVM_BE_ON;
+ } else if (!strcmp(argv[i], "-eqE")) {
+ lvmConfigParams.eqEnable = LVM_EQNB_ON;
+ } else if (!strcmp(argv[i], "-tE")) {
+ lvmConfigParams.trebleEnable = LVM_TE_ON;
+ } else if (!strcmp(argv[i], "-csE")) {
+ lvmConfigParams.csEnable = LVM_MODE_ON;
+ } else if (!strcmp(argv[i], "-h")) {
+ printUsage();
+ return 0;
}
}
-#ifndef BYPASS_EXEC
- errCode = lvmExecute(floatIn.data(), floatOut.data(), pContext, plvmConfigParams);
- if (errCode) {
- printf("\nError: lvmExecute returned with %d\n", errCode);
- return errCode;
- }
- (void)frameSize; // eliminate warning
-#else
- memcpy(floatOut.data(), floatIn.data(), frameLength * frameSize);
-#endif
- memcpy_to_i16_from_float(out.data(), floatOut.data(), frameLength * channelCount);
- if (ioChannelCount != channelCount) {
- adjust_channels(out.data(), channelCount, out.data(), ioChannelCount,
- sizeof(short), frameLength * channelCount * sizeof(short));
- }
- (void) fwrite(out.data(), ioFrameSize, frameLength, fout);
- frameCounter += frameLength;
- }
- printf("frameCounter: [%d]\n", frameCounter);
- return 0;
-}
-
-int main(int argc, const char *argv[]) {
- if (argc == 1) {
- printUsage();
- return -1;
- }
-
- lvmConfigParams_t lvmConfigParams{}; // default initialize
- const char *infile = nullptr;
- const char *outfile = nullptr;
-
- for (int i = 1; i < argc; i++) {
- printf("%s ", argv[i]);
- if (!strncmp(argv[i], "-i:", 3)) {
- infile = argv[i] + 3;
- } else if (!strncmp(argv[i], "-o:", 3)) {
- outfile = argv[i] + 3;
- } else if (!strncmp(argv[i], "-fs:", 4)) {
- const int samplingFreq = atoi(argv[i] + 4);
- if (samplingFreq != 8000 && samplingFreq != 11025 &&
- samplingFreq != 12000 && samplingFreq != 16000 &&
- samplingFreq != 22050 && samplingFreq != 24000 &&
- samplingFreq != 32000 && samplingFreq != 44100 &&
- samplingFreq != 48000 && samplingFreq != 88200 &&
- samplingFreq != 96000 && samplingFreq != 176400 &&
- samplingFreq != 192000) {
- printf("Error: Unsupported Sampling Frequency : %d\n", samplingFreq);
- return -1;
- }
- lvmConfigParams.samplingFreq = samplingFreq;
- } else if (!strncmp(argv[i], "-chMask:", 8)) {
- const int chMaskConfigIdx = atoi(argv[i] + 8);
- if (chMaskConfigIdx < 0 || (size_t)chMaskConfigIdx >= std::size(lvmConfigChMask)) {
- ALOGE("\nError: Unsupported Channel Mask : %d\n", chMaskConfigIdx);
- return -1;
- }
- const audio_channel_mask_t chMask = lvmConfigChMask[chMaskConfigIdx];
- lvmConfigParams.chMask = chMask;
- lvmConfigParams.nrChannels = audio_channel_count_from_out_mask(chMask);
- } else if (!strncmp(argv[i], "-vcBal:", 7)) {
- const int vcBalance = atoi(argv[i] + 7);
- if (vcBalance > 96 || vcBalance < -96) {
- ALOGE("\nError: Unsupported volume balance value: %d\n", vcBalance);
- }
- lvmConfigParams.vcBal = vcBalance;
- } else if (!strncmp(argv[i], "-fch:", 5)) {
- const int fChannels = atoi(argv[i] + 5);
- if (fChannels > 8 || fChannels < 1) {
- printf("Error: Unsupported number of file channels : %d\n", fChannels);
- return -1;
- }
- lvmConfigParams.fChannels = fChannels;
- } else if (!strcmp(argv[i],"-M")) {
- lvmConfigParams.monoMode = true;
- } else if (!strncmp(argv[i], "-basslvl:", 9)) {
- const int bassEffectLevel = atoi(argv[i] + 9);
- if (bassEffectLevel > LVM_BE_MAX_EFFECTLEVEL || bassEffectLevel < LVM_BE_MIN_EFFECTLEVEL) {
- printf("Error: Unsupported Bass Effect Level : %d\n",
- bassEffectLevel);
+ if (infile == nullptr || outfile == nullptr) {
+ printf("Error: missing input/output files\n");
printUsage();
return -1;
- }
- lvmConfigParams.bassEffectLevel = bassEffectLevel;
- } else if (!strncmp(argv[i], "-eqPreset:", 10)) {
- const int eqPresetLevel = atoi(argv[i] + 10);
- const int numPresetLvls = std::size(gEqualizerPresets);
- if (eqPresetLevel >= numPresetLvls || eqPresetLevel < 0) {
- printf("Error: Unsupported Equalizer Preset : %d\n", eqPresetLevel);
- printUsage();
- return -1;
- }
- lvmConfigParams.eqPresetLevel = eqPresetLevel;
- } else if (!strcmp(argv[i], "-bE")) {
- lvmConfigParams.bassEnable = LVM_BE_ON;
- } else if (!strcmp(argv[i], "-eqE")) {
- lvmConfigParams.eqEnable = LVM_EQNB_ON;
- } else if (!strcmp(argv[i], "-tE")) {
- lvmConfigParams.trebleEnable = LVM_TE_ON;
- } else if (!strcmp(argv[i], "-csE")) {
- lvmConfigParams.csEnable = LVM_MODE_ON;
- } else if (!strcmp(argv[i], "-h")) {
- printUsage();
- return 0;
}
- }
- if (infile == nullptr || outfile == nullptr) {
- printf("Error: missing input/output files\n");
- printUsage();
- return -1;
- }
+ FILE* finp = fopen(infile, "rb");
+ if (finp == nullptr) {
+ printf("Cannot open input file %s", infile);
+ return -1;
+ }
- FILE *finp = fopen(infile, "rb");
- if (finp == nullptr) {
- printf("Cannot open input file %s", infile);
- return -1;
- }
+ FILE* fout = fopen(outfile, "wb");
+ if (fout == nullptr) {
+ printf("Cannot open output file %s", outfile);
+ fclose(finp);
+ return -1;
+ }
- FILE *fout = fopen(outfile, "wb");
- if (fout == nullptr) {
- printf("Cannot open output file %s", outfile);
+ EffectContext context;
+ LVM_ControlParams_t params;
+ int errCode = lvmCreate(&context, &lvmConfigParams, ¶ms);
+ if (errCode == 0) {
+ errCode = lvmMainProcess(&context, ¶ms, &lvmConfigParams, finp, fout);
+ if (errCode != 0) {
+ printf("Error: lvmMainProcess returned with the error: %d", errCode);
+ }
+ } else {
+ printf("Error: lvmCreate returned with the error: %d", errCode);
+ }
fclose(finp);
- return -1;
- }
-
- EffectContext context;
- LVM_ControlParams_t params;
- int errCode = lvmCreate(&context, &lvmConfigParams, ¶ms);
- if (errCode == 0) {
- errCode = lvmMainProcess(&context, ¶ms, &lvmConfigParams, finp, fout);
- if (errCode != 0) {
- printf("Error: lvmMainProcess returned with the error: %d",errCode);
+ fclose(fout);
+ /* Free the allocated buffers */
+ if (context.pBundledContext != nullptr) {
+ if (context.pBundledContext->hInstance != nullptr) {
+ LVM_DelInstanceHandle(&context.pBundledContext->hInstance);
+ }
+ free(context.pBundledContext);
}
- } else {
- printf("Error: lvmCreate returned with the error: %d", errCode);
- }
- fclose(finp);
- fclose(fout);
- /* Free the allocated buffers */
- if (context.pBundledContext != nullptr) {
- if (context.pBundledContext->hInstance != nullptr) {
- LVM_DelInstanceHandle(&context.pBundledContext->hInstance);
- }
- free(context.pBundledContext);
- }
- if (errCode) {
- return -1;
- }
- return 0;
+ if (errCode) {
+ return -1;
+ }
+ return 0;
}
diff --git a/media/libeffects/lvm/tests/reverb_test.cpp b/media/libeffects/lvm/tests/reverb_test.cpp
index f403229..768f655 100644
--- a/media/libeffects/lvm/tests/reverb_test.cpp
+++ b/media/libeffects/lvm/tests/reverb_test.cpp
@@ -34,365 +34,363 @@
// Global Variables
enum ReverbParams {
- ARG_HELP = 1,
- ARG_INPUT,
- ARG_OUTPUT,
- ARG_FS,
- ARG_CH_MASK,
- ARG_PRESET,
- ARG_AUX,
- ARG_MONO_MODE,
- ARG_FILE_CH,
+ ARG_HELP = 1,
+ ARG_INPUT,
+ ARG_OUTPUT,
+ ARG_FS,
+ ARG_CH_MASK,
+ ARG_PRESET,
+ ARG_AUX,
+ ARG_MONO_MODE,
+ ARG_FILE_CH,
};
const effect_uuid_t kReverbUuids[] = {
- {0x172cdf00,
- 0xa3bc,
- 0x11df,
- 0xa72f,
- {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // preset-insert mode
- {0xf29a1400,
- 0xa3bb,
- 0x11df,
- 0x8ddc,
- {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // preset-aux mode
+ {0x172cdf00,
+ 0xa3bc,
+ 0x11df,
+ 0xa72f,
+ {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // preset-insert mode
+ {0xf29a1400,
+ 0xa3bb,
+ 0x11df,
+ 0x8ddc,
+ {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // preset-aux mode
};
// structures
struct reverbConfigParams_t {
- int fChannels = 2;
- int monoMode = false;
- int frameLength = 256;
- int preset = 0;
- int nrChannels = 2;
- int sampleRate = 48000;
- int auxiliary = 0;
- audio_channel_mask_t chMask = AUDIO_CHANNEL_OUT_STEREO;
+ int fChannels = 2;
+ int monoMode = false;
+ int frameLength = 256;
+ int preset = 0;
+ int nrChannels = 2;
+ int sampleRate = 48000;
+ int auxiliary = 0;
+ audio_channel_mask_t chMask = AUDIO_CHANNEL_OUT_STEREO;
};
constexpr audio_channel_mask_t kReverbConfigChMask[] = {
- AUDIO_CHANNEL_OUT_MONO,
- AUDIO_CHANNEL_OUT_STEREO,
- AUDIO_CHANNEL_OUT_2POINT1,
- AUDIO_CHANNEL_OUT_2POINT0POINT2,
- AUDIO_CHANNEL_OUT_QUAD,
- AUDIO_CHANNEL_OUT_QUAD_BACK,
- AUDIO_CHANNEL_OUT_QUAD_SIDE,
- AUDIO_CHANNEL_OUT_SURROUND,
- (1 << 4) - 1,
- AUDIO_CHANNEL_OUT_2POINT1POINT2,
- AUDIO_CHANNEL_OUT_3POINT0POINT2,
- AUDIO_CHANNEL_OUT_PENTA,
- (1 << 5) - 1,
- AUDIO_CHANNEL_OUT_3POINT1POINT2,
- AUDIO_CHANNEL_OUT_5POINT1,
- AUDIO_CHANNEL_OUT_5POINT1_BACK,
- AUDIO_CHANNEL_OUT_5POINT1_SIDE,
- (1 << 6) - 1,
- AUDIO_CHANNEL_OUT_6POINT1,
- (1 << 7) - 1,
- AUDIO_CHANNEL_OUT_5POINT1POINT2,
- AUDIO_CHANNEL_OUT_7POINT1,
- (1 << 8) - 1,
+ AUDIO_CHANNEL_OUT_MONO,
+ AUDIO_CHANNEL_OUT_STEREO,
+ AUDIO_CHANNEL_OUT_2POINT1,
+ AUDIO_CHANNEL_OUT_2POINT0POINT2,
+ AUDIO_CHANNEL_OUT_QUAD,
+ AUDIO_CHANNEL_OUT_QUAD_BACK,
+ AUDIO_CHANNEL_OUT_QUAD_SIDE,
+ AUDIO_CHANNEL_OUT_SURROUND,
+ (1 << 4) - 1,
+ AUDIO_CHANNEL_OUT_2POINT1POINT2,
+ AUDIO_CHANNEL_OUT_3POINT0POINT2,
+ AUDIO_CHANNEL_OUT_PENTA,
+ (1 << 5) - 1,
+ AUDIO_CHANNEL_OUT_3POINT1POINT2,
+ AUDIO_CHANNEL_OUT_5POINT1,
+ AUDIO_CHANNEL_OUT_5POINT1_BACK,
+ AUDIO_CHANNEL_OUT_5POINT1_SIDE,
+ (1 << 6) - 1,
+ AUDIO_CHANNEL_OUT_6POINT1,
+ (1 << 7) - 1,
+ AUDIO_CHANNEL_OUT_5POINT1POINT2,
+ AUDIO_CHANNEL_OUT_7POINT1,
+ (1 << 8) - 1,
};
constexpr int kReverbConfigChMaskCount = std::size(kReverbConfigChMask);
-int reverbCreateEffect(effect_handle_t *pEffectHandle, effect_config_t *pConfig, int sessionId,
+int reverbCreateEffect(effect_handle_t* pEffectHandle, effect_config_t* pConfig, int sessionId,
int ioId, int auxFlag) {
- if (int status = AUDIO_EFFECT_LIBRARY_INFO_SYM.create_effect(&kReverbUuids[auxFlag], sessionId,
- ioId, pEffectHandle);
- status != 0) {
- ALOGE("Reverb create returned an error = %d\n", status);
- return EXIT_FAILURE;
- }
- int reply = 0;
- uint32_t replySize = sizeof(reply);
- (**pEffectHandle)
- ->command(*pEffectHandle, EFFECT_CMD_SET_CONFIG, sizeof(effect_config_t), pConfig,
- &replySize, &reply);
- return reply;
+ if (int status = AUDIO_EFFECT_LIBRARY_INFO_SYM.create_effect(&kReverbUuids[auxFlag], sessionId,
+ ioId, pEffectHandle);
+ status != 0) {
+ ALOGE("Reverb create returned an error = %d\n", status);
+ return EXIT_FAILURE;
+ }
+ int reply = 0;
+ uint32_t replySize = sizeof(reply);
+ (**pEffectHandle)
+ ->command(*pEffectHandle, EFFECT_CMD_SET_CONFIG, sizeof(effect_config_t), pConfig,
+ &replySize, &reply);
+ return reply;
}
int reverbSetConfigParam(uint32_t paramType, uint32_t paramValue, effect_handle_t effectHandle) {
- int reply = 0;
- uint32_t replySize = sizeof(reply);
- uint32_t paramData[2] = {paramType, paramValue};
- effect_param_t *effectParam =
- (effect_param_t *)malloc(sizeof(*effectParam) + sizeof(paramData));
- memcpy(&effectParam->data[0], ¶mData[0], sizeof(paramData));
- effectParam->psize = sizeof(paramData[0]);
- effectParam->vsize = sizeof(paramData[1]);
- int status =
- (*effectHandle)
- ->command(effectHandle, EFFECT_CMD_SET_PARAM,
- sizeof(effect_param_t) + sizeof(paramData), effectParam, &replySize, &reply);
- free(effectParam);
- if (status != 0) {
- ALOGE("Reverb set config returned an error = %d\n", status);
- return status;
- }
- return reply;
+ int reply = 0;
+ uint32_t replySize = sizeof(reply);
+ uint32_t paramData[2] = {paramType, paramValue};
+ effect_param_t* effectParam = (effect_param_t*)malloc(sizeof(*effectParam) + sizeof(paramData));
+ memcpy(&effectParam->data[0], ¶mData[0], sizeof(paramData));
+ effectParam->psize = sizeof(paramData[0]);
+ effectParam->vsize = sizeof(paramData[1]);
+ int status = (*effectHandle)
+ ->command(effectHandle, EFFECT_CMD_SET_PARAM,
+ sizeof(effect_param_t) + sizeof(paramData), effectParam,
+ &replySize, &reply);
+ free(effectParam);
+ if (status != 0) {
+ ALOGE("Reverb set config returned an error = %d\n", status);
+ return status;
+ }
+ return reply;
}
void printUsage() {
- printf("\nUsage: ");
- printf("\n <executable> [options]\n");
- printf("\nwhere options are, ");
- printf("\n --input <inputfile>");
- printf("\n path to the input file");
- printf("\n --output <outputfile>");
- printf("\n path to the output file");
- printf("\n --help");
- printf("\n prints this usage information");
- printf("\n --chMask <channel_mask>\n");
- printf("\n 0 - AUDIO_CHANNEL_OUT_MONO");
- printf("\n 1 - AUDIO_CHANNEL_OUT_STEREO");
- printf("\n 2 - AUDIO_CHANNEL_OUT_2POINT1");
- printf("\n 3 - AUDIO_CHANNEL_OUT_2POINT0POINT2");
- printf("\n 4 - AUDIO_CHANNEL_OUT_QUAD");
- printf("\n 5 - AUDIO_CHANNEL_OUT_QUAD_BACK");
- printf("\n 6 - AUDIO_CHANNEL_OUT_QUAD_SIDE");
- printf("\n 7 - AUDIO_CHANNEL_OUT_SURROUND");
- printf("\n 8 - canonical channel index mask for 4 ch: (1 << 4) - 1");
- printf("\n 9 - AUDIO_CHANNEL_OUT_2POINT1POINT2");
- printf("\n 10 - AUDIO_CHANNEL_OUT_3POINT0POINT2");
- printf("\n 11 - AUDIO_CHANNEL_OUT_PENTA");
- printf("\n 12 - canonical channel index mask for 5 ch: (1 << 5) - 1");
- printf("\n 13 - AUDIO_CHANNEL_OUT_3POINT1POINT2");
- printf("\n 14 - AUDIO_CHANNEL_OUT_5POINT1");
- printf("\n 15 - AUDIO_CHANNEL_OUT_5POINT1_BACK");
- printf("\n 16 - AUDIO_CHANNEL_OUT_5POINT1_SIDE");
- printf("\n 17 - canonical channel index mask for 6 ch: (1 << 6) - 1");
- printf("\n 18 - AUDIO_CHANNEL_OUT_6POINT1");
- printf("\n 19 - canonical channel index mask for 7 ch: (1 << 7) - 1");
- printf("\n 20 - AUDIO_CHANNEL_OUT_5POINT1POINT2");
- printf("\n 21 - AUDIO_CHANNEL_OUT_7POINT1");
- printf("\n 22 - canonical channel index mask for 8 ch: (1 << 8) - 1");
- printf("\n default 0");
- printf("\n --fs <sampling_freq>");
- printf("\n Sampling frequency in Hz, default 48000.");
- printf("\n --preset <preset_value>");
- printf("\n 0 - None");
- printf("\n 1 - Small Room");
- printf("\n 2 - Medium Room");
- printf("\n 3 - Large Room");
- printf("\n 4 - Medium Hall");
- printf("\n 5 - Large Hall");
- printf("\n 6 - Plate");
- printf("\n default 0");
- printf("\n --fch <file_channels>");
- printf("\n number of channels in input file (1 through 8), default 1");
- printf("\n --M");
- printf("\n Mono mode (force all input audio channels to be identical)");
- printf("\n --aux <auxiliary_flag> ");
- printf("\n 0 - Insert Mode on");
- printf("\n 1 - auxiliary Mode on");
- printf("\n default 0");
- printf("\n");
+ printf("\nUsage: ");
+ printf("\n <executable> [options]\n");
+ printf("\nwhere options are, ");
+ printf("\n --input <inputfile>");
+ printf("\n path to the input file");
+ printf("\n --output <outputfile>");
+ printf("\n path to the output file");
+ printf("\n --help");
+ printf("\n prints this usage information");
+ printf("\n --chMask <channel_mask>\n");
+ printf("\n 0 - AUDIO_CHANNEL_OUT_MONO");
+ printf("\n 1 - AUDIO_CHANNEL_OUT_STEREO");
+ printf("\n 2 - AUDIO_CHANNEL_OUT_2POINT1");
+ printf("\n 3 - AUDIO_CHANNEL_OUT_2POINT0POINT2");
+ printf("\n 4 - AUDIO_CHANNEL_OUT_QUAD");
+ printf("\n 5 - AUDIO_CHANNEL_OUT_QUAD_BACK");
+ printf("\n 6 - AUDIO_CHANNEL_OUT_QUAD_SIDE");
+ printf("\n 7 - AUDIO_CHANNEL_OUT_SURROUND");
+ printf("\n 8 - canonical channel index mask for 4 ch: (1 << 4) - 1");
+ printf("\n 9 - AUDIO_CHANNEL_OUT_2POINT1POINT2");
+ printf("\n 10 - AUDIO_CHANNEL_OUT_3POINT0POINT2");
+ printf("\n 11 - AUDIO_CHANNEL_OUT_PENTA");
+ printf("\n 12 - canonical channel index mask for 5 ch: (1 << 5) - 1");
+ printf("\n 13 - AUDIO_CHANNEL_OUT_3POINT1POINT2");
+ printf("\n 14 - AUDIO_CHANNEL_OUT_5POINT1");
+ printf("\n 15 - AUDIO_CHANNEL_OUT_5POINT1_BACK");
+ printf("\n 16 - AUDIO_CHANNEL_OUT_5POINT1_SIDE");
+ printf("\n 17 - canonical channel index mask for 6 ch: (1 << 6) - 1");
+ printf("\n 18 - AUDIO_CHANNEL_OUT_6POINT1");
+ printf("\n 19 - canonical channel index mask for 7 ch: (1 << 7) - 1");
+ printf("\n 20 - AUDIO_CHANNEL_OUT_5POINT1POINT2");
+ printf("\n 21 - AUDIO_CHANNEL_OUT_7POINT1");
+ printf("\n 22 - canonical channel index mask for 8 ch: (1 << 8) - 1");
+ printf("\n default 0");
+ printf("\n --fs <sampling_freq>");
+ printf("\n Sampling frequency in Hz, default 48000.");
+ printf("\n --preset <preset_value>");
+ printf("\n 0 - None");
+ printf("\n 1 - Small Room");
+ printf("\n 2 - Medium Room");
+ printf("\n 3 - Large Room");
+ printf("\n 4 - Medium Hall");
+ printf("\n 5 - Large Hall");
+ printf("\n 6 - Plate");
+ printf("\n default 0");
+ printf("\n --fch <file_channels>");
+ printf("\n number of channels in input file (1 through 8), default 1");
+ printf("\n --M");
+ printf("\n Mono mode (force all input audio channels to be identical)");
+ printf("\n --aux <auxiliary_flag> ");
+ printf("\n 0 - Insert Mode on");
+ printf("\n 1 - auxiliary Mode on");
+ printf("\n default 0");
+ printf("\n");
}
-int main(int argc, const char *argv[]) {
- if (argc == 1) {
- printUsage();
- return EXIT_FAILURE;
- }
-
- reverbConfigParams_t revConfigParams{}; // default initialize
- const char *inputFile = nullptr;
- const char *outputFile = nullptr;
-
- const option long_opts[] = {
- {"help", no_argument, nullptr, ARG_HELP},
- {"input", required_argument, nullptr, ARG_INPUT},
- {"output", required_argument, nullptr, ARG_OUTPUT},
- {"fs", required_argument, nullptr, ARG_FS},
- {"chMask", required_argument, nullptr, ARG_CH_MASK},
- {"preset", required_argument, nullptr, ARG_PRESET},
- {"aux", required_argument, nullptr, ARG_AUX},
- {"M", no_argument, &revConfigParams.monoMode, true},
- {"fch", required_argument, nullptr, ARG_FILE_CH},
- {nullptr, 0, nullptr, 0},
- };
-
- while (true) {
- const int opt = getopt_long(argc, (char *const *)argv, "i:o:", long_opts, nullptr);
- if (opt == -1) {
- break;
- }
- switch (opt) {
- case ARG_HELP:
+int main(int argc, const char* argv[]) {
+ if (argc == 1) {
printUsage();
- return EXIT_SUCCESS;
- case ARG_INPUT: {
- inputFile = (char *)optarg;
- break;
- }
- case ARG_OUTPUT: {
- outputFile = (char *)optarg;
- break;
- }
- case ARG_FS: {
- revConfigParams.sampleRate = atoi(optarg);
- break;
- }
- case ARG_CH_MASK: {
- int chMaskIdx = atoi(optarg);
- if (chMaskIdx < 0 or chMaskIdx > kReverbConfigChMaskCount) {
- ALOGE("Channel Mask index not in correct range\n");
- printUsage();
- return EXIT_FAILURE;
+ return EXIT_FAILURE;
+ }
+
+ reverbConfigParams_t revConfigParams{}; // default initialize
+ const char* inputFile = nullptr;
+ const char* outputFile = nullptr;
+
+ const option long_opts[] = {
+ {"help", no_argument, nullptr, ARG_HELP},
+ {"input", required_argument, nullptr, ARG_INPUT},
+ {"output", required_argument, nullptr, ARG_OUTPUT},
+ {"fs", required_argument, nullptr, ARG_FS},
+ {"chMask", required_argument, nullptr, ARG_CH_MASK},
+ {"preset", required_argument, nullptr, ARG_PRESET},
+ {"aux", required_argument, nullptr, ARG_AUX},
+ {"M", no_argument, &revConfigParams.monoMode, true},
+ {"fch", required_argument, nullptr, ARG_FILE_CH},
+ {nullptr, 0, nullptr, 0},
+ };
+
+ while (true) {
+ const int opt = getopt_long(argc, (char* const*)argv, "i:o:", long_opts, nullptr);
+ if (opt == -1) {
+ break;
}
- revConfigParams.chMask = kReverbConfigChMask[chMaskIdx];
- break;
- }
- case ARG_PRESET: {
- revConfigParams.preset = atoi(optarg);
- break;
- }
- case ARG_AUX: {
- revConfigParams.auxiliary = atoi(optarg);
- break;
- }
- case ARG_MONO_MODE: {
- break;
- }
- case ARG_FILE_CH: {
- revConfigParams.fChannels = atoi(optarg);
- break;
- }
- default:
- break;
- }
- }
-
- if (inputFile == nullptr) {
- ALOGE("Error: missing input files\n");
- printUsage();
- return EXIT_FAILURE;
- }
- std::unique_ptr<FILE, decltype(&fclose)> inputFp(fopen(inputFile, "rb"), &fclose);
-
- if (inputFp == nullptr) {
- ALOGE("Cannot open input file %s\n", inputFile);
- return EXIT_FAILURE;
- }
-
- if (outputFile == nullptr) {
- ALOGE("Error: missing output files\n");
- printUsage();
- return EXIT_FAILURE;
- }
- std::unique_ptr<FILE, decltype(&fclose)> outputFp(fopen(outputFile, "wb"), &fclose);
-
- if (outputFp == nullptr) {
- ALOGE("Cannot open output file %s\n", outputFile);
- return EXIT_FAILURE;
- }
-
- int32_t sessionId = 1;
- int32_t ioId = 1;
- effect_handle_t effectHandle = nullptr;
- effect_config_t config;
- config.inputCfg.samplingRate = config.outputCfg.samplingRate = revConfigParams.sampleRate;
- config.inputCfg.channels = config.outputCfg.channels = revConfigParams.chMask;
- config.inputCfg.format = config.outputCfg.format = AUDIO_FORMAT_PCM_FLOAT;
- if (AUDIO_CHANNEL_OUT_MONO == revConfigParams.chMask) {
- config.outputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
- }
- if (int status =
- reverbCreateEffect(&effectHandle, &config, sessionId, ioId, revConfigParams.auxiliary);
- status != 0) {
- ALOGE("Create effect call returned error %i", status);
- return EXIT_FAILURE;
- }
-
- int reply = 0;
- uint32_t replySize = sizeof(reply);
- (*effectHandle)->command(effectHandle, EFFECT_CMD_ENABLE, 0, nullptr, &replySize, &reply);
- if (reply != 0) {
- ALOGE("Command enable call returned error %d\n", reply);
- return EXIT_FAILURE;
- }
-
- if (int status = reverbSetConfigParam(REVERB_PARAM_PRESET, (uint32_t)revConfigParams.preset,
- effectHandle);
- status != 0) {
- ALOGE("Invalid reverb preset. Error %d\n", status);
- return EXIT_FAILURE;
- }
-
- revConfigParams.nrChannels = audio_channel_count_from_out_mask(revConfigParams.chMask);
- const int channelCount = revConfigParams.nrChannels;
- const int frameLength = revConfigParams.frameLength;
-#ifdef BYPASS_EXEC
- const int frameSize = (int)channelCount * sizeof(float);
-#endif
- const int ioChannelCount = revConfigParams.fChannels;
- const int ioFrameSize = ioChannelCount * sizeof(short);
- const int maxChannelCount = std::max(channelCount, ioChannelCount);
- /*
- * Mono input will be converted to 2 channels internally in the process call
- * by copying the same data into the second channel.
- * Hence when channelCount is 1, output buffer should be allocated for
- * 2 channels. The outChannelCount takes care of allocation of sufficient
- * memory for the output buffer.
- */
- const int outChannelCount = (channelCount == 1 ? 2 : channelCount);
-
- std::vector<short> in(frameLength * maxChannelCount);
- std::vector<short> out(frameLength * maxChannelCount);
- std::vector<float> floatIn(frameLength * channelCount);
- std::vector<float> floatOut(frameLength * outChannelCount);
-
- int frameCounter = 0;
-
- while (fread(in.data(), ioFrameSize, frameLength, inputFp.get()) == (size_t)frameLength) {
- if (ioChannelCount != channelCount) {
- adjust_channels(in.data(), ioChannelCount, in.data(), channelCount, sizeof(short),
- frameLength * ioFrameSize);
- }
- memcpy_to_float_from_i16(floatIn.data(), in.data(), frameLength * channelCount);
-
- // Mono mode will replicate the first channel to all other channels.
- // This ensures all audio channels are identical. This is useful for testing
- // Bass Boost, which extracts a mono signal for processing.
- if (revConfigParams.monoMode && channelCount > 1) {
- for (int i = 0; i < frameLength; ++i) {
- auto *fp = &floatIn[i * channelCount];
- std::fill(fp + 1, fp + channelCount, *fp); // replicate ch 0
- }
+ switch (opt) {
+ case ARG_HELP:
+ printUsage();
+ return EXIT_SUCCESS;
+ case ARG_INPUT: {
+ inputFile = (char*)optarg;
+ break;
+ }
+ case ARG_OUTPUT: {
+ outputFile = (char*)optarg;
+ break;
+ }
+ case ARG_FS: {
+ revConfigParams.sampleRate = atoi(optarg);
+ break;
+ }
+ case ARG_CH_MASK: {
+ int chMaskIdx = atoi(optarg);
+ if (chMaskIdx < 0 or chMaskIdx > kReverbConfigChMaskCount) {
+ ALOGE("Channel Mask index not in correct range\n");
+ printUsage();
+ return EXIT_FAILURE;
+ }
+ revConfigParams.chMask = kReverbConfigChMask[chMaskIdx];
+ break;
+ }
+ case ARG_PRESET: {
+ revConfigParams.preset = atoi(optarg);
+ break;
+ }
+ case ARG_AUX: {
+ revConfigParams.auxiliary = atoi(optarg);
+ break;
+ }
+ case ARG_MONO_MODE: {
+ break;
+ }
+ case ARG_FILE_CH: {
+ revConfigParams.fChannels = atoi(optarg);
+ break;
+ }
+ default:
+ break;
+ }
}
- audio_buffer_t inputBuffer, outputBuffer;
- inputBuffer.frameCount = outputBuffer.frameCount = frameLength;
- inputBuffer.f32 = floatIn.data();
- outputBuffer.f32 = floatOut.data();
-#ifndef BYPASS_EXEC
- if (int status = (*effectHandle)->process(effectHandle, &inputBuffer, &outputBuffer);
+ if (inputFile == nullptr) {
+ ALOGE("Error: missing input files\n");
+ printUsage();
+ return EXIT_FAILURE;
+ }
+ std::unique_ptr<FILE, decltype(&fclose)> inputFp(fopen(inputFile, "rb"), &fclose);
+
+ if (inputFp == nullptr) {
+ ALOGE("Cannot open input file %s\n", inputFile);
+ return EXIT_FAILURE;
+ }
+
+ if (outputFile == nullptr) {
+ ALOGE("Error: missing output files\n");
+ printUsage();
+ return EXIT_FAILURE;
+ }
+ std::unique_ptr<FILE, decltype(&fclose)> outputFp(fopen(outputFile, "wb"), &fclose);
+
+ if (outputFp == nullptr) {
+ ALOGE("Cannot open output file %s\n", outputFile);
+ return EXIT_FAILURE;
+ }
+
+ int32_t sessionId = 1;
+ int32_t ioId = 1;
+ effect_handle_t effectHandle = nullptr;
+ effect_config_t config;
+ config.inputCfg.samplingRate = config.outputCfg.samplingRate = revConfigParams.sampleRate;
+ config.inputCfg.channels = config.outputCfg.channels = revConfigParams.chMask;
+ config.inputCfg.format = config.outputCfg.format = AUDIO_FORMAT_PCM_FLOAT;
+ if (AUDIO_CHANNEL_OUT_MONO == revConfigParams.chMask) {
+ config.outputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
+ }
+ if (int status = reverbCreateEffect(&effectHandle, &config, sessionId, ioId,
+ revConfigParams.auxiliary);
status != 0) {
- ALOGE("\nError: Process returned with error %d\n", status);
- return EXIT_FAILURE;
+ ALOGE("Create effect call returned error %i", status);
+ return EXIT_FAILURE;
}
-#else
- memcpy(floatOut.data(), floatIn.data(), frameLength * frameSize);
+
+ int reply = 0;
+ uint32_t replySize = sizeof(reply);
+ (*effectHandle)->command(effectHandle, EFFECT_CMD_ENABLE, 0, nullptr, &replySize, &reply);
+ if (reply != 0) {
+ ALOGE("Command enable call returned error %d\n", reply);
+ return EXIT_FAILURE;
+ }
+
+ if (int status = reverbSetConfigParam(REVERB_PARAM_PRESET, (uint32_t)revConfigParams.preset,
+ effectHandle);
+ status != 0) {
+ ALOGE("Invalid reverb preset. Error %d\n", status);
+ return EXIT_FAILURE;
+ }
+
+ revConfigParams.nrChannels = audio_channel_count_from_out_mask(revConfigParams.chMask);
+ const int channelCount = revConfigParams.nrChannels;
+ const int frameLength = revConfigParams.frameLength;
+#ifdef BYPASS_EXEC
+ const int frameSize = (int)channelCount * sizeof(float);
#endif
- memcpy_to_i16_from_float(out.data(), floatOut.data(), frameLength * outChannelCount);
+ const int ioChannelCount = revConfigParams.fChannels;
+ const int ioFrameSize = ioChannelCount * sizeof(short);
+ const int maxChannelCount = std::max(channelCount, ioChannelCount);
+ /*
+ * Mono input will be converted to 2 channels internally in the process call
+ * by copying the same data into the second channel.
+ * Hence when channelCount is 1, output buffer should be allocated for
+ * 2 channels. The outChannelCount takes care of allocation of sufficient
+ * memory for the output buffer.
+ */
+ const int outChannelCount = (channelCount == 1 ? 2 : channelCount);
- if (ioChannelCount != outChannelCount) {
- adjust_channels(out.data(), outChannelCount, out.data(), ioChannelCount, sizeof(short),
- frameLength * outChannelCount * sizeof(short));
+ std::vector<short> in(frameLength * maxChannelCount);
+ std::vector<short> out(frameLength * maxChannelCount);
+ std::vector<float> floatIn(frameLength * channelCount);
+ std::vector<float> floatOut(frameLength * outChannelCount);
+
+ int frameCounter = 0;
+
+ while (fread(in.data(), ioFrameSize, frameLength, inputFp.get()) == (size_t)frameLength) {
+ if (ioChannelCount != channelCount) {
+ adjust_channels(in.data(), ioChannelCount, in.data(), channelCount, sizeof(short),
+ frameLength * ioFrameSize);
+ }
+ memcpy_to_float_from_i16(floatIn.data(), in.data(), frameLength * channelCount);
+
+ // Mono mode will replicate the first channel to all other channels.
+ // This ensures all audio channels are identical. This is useful for testing
+ // Bass Boost, which extracts a mono signal for processing.
+ if (revConfigParams.monoMode && channelCount > 1) {
+ for (int i = 0; i < frameLength; ++i) {
+ auto* fp = &floatIn[i * channelCount];
+ std::fill(fp + 1, fp + channelCount, *fp); // replicate ch 0
+ }
+ }
+
+ audio_buffer_t inputBuffer, outputBuffer;
+ inputBuffer.frameCount = outputBuffer.frameCount = frameLength;
+ inputBuffer.f32 = floatIn.data();
+ outputBuffer.f32 = floatOut.data();
+#ifndef BYPASS_EXEC
+ if (int status = (*effectHandle)->process(effectHandle, &inputBuffer, &outputBuffer);
+ status != 0) {
+ ALOGE("\nError: Process returned with error %d\n", status);
+ return EXIT_FAILURE;
+ }
+#else
+ memcpy(floatOut.data(), floatIn.data(), frameLength * frameSize);
+#endif
+ memcpy_to_i16_from_float(out.data(), floatOut.data(), frameLength * outChannelCount);
+
+ if (ioChannelCount != outChannelCount) {
+ adjust_channels(out.data(), outChannelCount, out.data(), ioChannelCount, sizeof(short),
+ frameLength * outChannelCount * sizeof(short));
+ }
+ (void)fwrite(out.data(), ioFrameSize, frameLength, outputFp.get());
+ frameCounter += frameLength;
}
- (void)fwrite(out.data(), ioFrameSize, frameLength, outputFp.get());
- frameCounter += frameLength;
- }
- if (int status = AUDIO_EFFECT_LIBRARY_INFO_SYM.release_effect(effectHandle);
- status != 0) {
- ALOGE("Audio Preprocessing release returned an error = %d\n", status);
- return EXIT_FAILURE;
- }
- printf("frameCounter: [%d]\n", frameCounter);
+ if (int status = AUDIO_EFFECT_LIBRARY_INFO_SYM.release_effect(effectHandle); status != 0) {
+ ALOGE("Audio Preprocessing release returned an error = %d\n", status);
+ return EXIT_FAILURE;
+ }
+ printf("frameCounter: [%d]\n", frameCounter);
- return EXIT_SUCCESS;
+ return EXIT_SUCCESS;
}
diff --git a/media/libeffects/lvm/tests/snr.cpp b/media/libeffects/lvm/tests/snr.cpp
index 885994c..0fef334 100644
--- a/media/libeffects/lvm/tests/snr.cpp
+++ b/media/libeffects/lvm/tests/snr.cpp
@@ -22,84 +22,83 @@
#include <vector>
template <typename T, typename A = float>
-std::pair<A, A> getSignalNoise(FILE *finp, FILE *fref) {
- constexpr size_t framesize = 256;
- std::vector<T> in(framesize);
- std::vector<T> ref(framesize);
- A signal{};
- A noise{};
+std::pair<A, A> getSignalNoise(FILE* finp, FILE* fref) {
+ constexpr size_t framesize = 256;
+ std::vector<T> in(framesize);
+ std::vector<T> ref(framesize);
+ A signal{};
+ A noise{};
- for (;;) {
- size_t read_samples_in = fread(&in[0], sizeof(T), framesize, finp);
- const size_t read_samples_ref = fread(&ref[0], sizeof(T), framesize, fref);
- if (read_samples_in != read_samples_ref) {
- printf("file sizes do not match (last %zu %zu)", read_samples_in, read_samples_ref);
- read_samples_in = std::min(read_samples_in, read_samples_ref);
+ for (;;) {
+ size_t read_samples_in = fread(&in[0], sizeof(T), framesize, finp);
+ const size_t read_samples_ref = fread(&ref[0], sizeof(T), framesize, fref);
+ if (read_samples_in != read_samples_ref) {
+ printf("file sizes do not match (last %zu %zu)", read_samples_in, read_samples_ref);
+ read_samples_in = std::min(read_samples_in, read_samples_ref);
+ }
+ if (read_samples_in == 0) {
+ return {signal, noise};
+ }
+ for (size_t i = 0; i < read_samples_in; ++i) {
+ const A value(ref[i]);
+ const A diff(A(in[i]) - value);
+ signal += value * value;
+ noise += diff * diff;
+ }
}
- if (read_samples_in == 0) {
- return { signal, noise };
- }
- for (size_t i = 0; i < read_samples_in; ++i) {
- const A value(ref[i]);
- const A diff(A(in[i]) - value);
- signal += value * value;
- noise += diff * diff;
- }
- }
}
void printUsage() {
- printf("\nUsage: ");
- printf("\n snr <ref_file> <test_file> [options]\n");
- printf("\nwhere, \n <ref_file> is the reference file name");
- printf("\n on which will be taken as pure signal");
- printf("\n <test_file> is test file for snr calculation");
- printf("\n and options are mentioned below");
- printf("\n");
- printf("\n -pcm_format:<pcm format of input files>");
- printf("\n 0 - 16 bit pcm");
- printf("\n 1 - 32 bit float");
- printf("\n default 0");
- printf("\n -thr:<threshold value>");
- printf("\n default - negative infinity\n\n");
+ printf("\nUsage: ");
+ printf("\n snr <ref_file> <test_file> [options]\n");
+ printf("\nwhere, \n <ref_file> is the reference file name");
+ printf("\n on which will be taken as pure signal");
+ printf("\n <test_file> is test file for snr calculation");
+ printf("\n and options are mentioned below");
+ printf("\n");
+ printf("\n -pcm_format:<pcm format of input files>");
+ printf("\n 0 - 16 bit pcm");
+ printf("\n 1 - 32 bit float");
+ printf("\n default 0");
+ printf("\n -thr:<threshold value>");
+ printf("\n default - negative infinity\n\n");
}
-int main(int argc, const char *argv[]) {
- if (argc < 3) {
- printUsage();
- return -1;
- }
- int pcm_format = 0;
- float thr = - std::numeric_limits<float>::infinity();
- FILE *fref = fopen(argv[1], "rb");
- FILE *finp = fopen(argv[2], "rb");
- for (int i = 3; i < argc; i++) {
- if (!strncmp(argv[i], "-pcm_format:", 12)) {
- pcm_format = atoi(argv[i] + 12);
- } else if (!strncmp(argv[i], "-thr:", 5)) {
- thr = atof(argv[i] + 5);
+int main(int argc, const char* argv[]) {
+ if (argc < 3) {
+ printUsage();
+ return -1;
}
- }
- if (finp == nullptr || fref == nullptr) {
- printf("\nError: missing input/reference files\n");
- return -1;
- }
- int ret = EXIT_SUCCESS;
- auto sn = pcm_format == 0
- ? getSignalNoise<short>(finp, fref)
- : getSignalNoise<float>(finp, fref);
- if (sn.first > 0.f && sn.second > 0.f) {
- float snr = 10.f * log(sn.first / sn.second);
- // compare the measured snr value with threshold
- if (snr < thr) {
- printf("%.6f less than threshold %.6f\n", snr, thr);
- ret = EXIT_FAILURE;
- } else {
- printf("%.6f\n", snr);
+ int pcm_format = 0;
+ float thr = -std::numeric_limits<float>::infinity();
+ FILE* fref = fopen(argv[1], "rb");
+ FILE* finp = fopen(argv[2], "rb");
+ for (int i = 3; i < argc; i++) {
+ if (!strncmp(argv[i], "-pcm_format:", 12)) {
+ pcm_format = atoi(argv[i] + 12);
+ } else if (!strncmp(argv[i], "-thr:", 5)) {
+ thr = atof(argv[i] + 5);
+ }
}
- }
- fclose(finp);
- fclose(fref);
+ if (finp == nullptr || fref == nullptr) {
+ printf("\nError: missing input/reference files\n");
+ return -1;
+ }
+ int ret = EXIT_SUCCESS;
+ auto sn =
+ pcm_format == 0 ? getSignalNoise<short>(finp, fref) : getSignalNoise<float>(finp, fref);
+ if (sn.first > 0.f && sn.second > 0.f) {
+ float snr = 10.f * log(sn.first / sn.second);
+ // compare the measured snr value with threshold
+ if (snr < thr) {
+ printf("%.6f less than threshold %.6f\n", snr, thr);
+ ret = EXIT_FAILURE;
+ } else {
+ printf("%.6f\n", snr);
+ }
+ }
+ fclose(finp);
+ fclose(fref);
- return ret;
+ return ret;
}