Skip to content

Commit

Permalink
Bug fix and add support for different sample stream datatype
Browse files Browse the repository at this point in the history
1. Bug fix on computing signal power for convolver waveform cutting
2. Clean memory buffer on every EEL loads
3. Support for packed 24(3 byte) and unpacked 24 datatype for sample stream
  • Loading branch information
james34602 committed Feb 14, 2023
1 parent 0b6422b commit d377cd9
Show file tree
Hide file tree
Showing 7 changed files with 8,037 additions and 53 deletions.
42 changes: 27 additions & 15 deletions Main/libjamesdsp/jni/jamesdsp/jamesdsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,23 +104,29 @@ int32_t configure(EffectDSPMain *dspmain, void* pCmdData, effect_buffer_access_e
}
if (in.mask & EFFECT_CONFIG_FORMAT)
{
if (in.format != AUDIO_FORMAT_PCM_16_BIT)
{
if (in.format == AUDIO_FORMAT_PCM_FLOAT)
dspmain->formatFloatModeInt32Mode = 1;
else if (in.format == AUDIO_FORMAT_PCM_32_BIT)
dspmain->formatFloatModeInt32Mode = 2;
}
if (in.format == AUDIO_FORMAT_PCM_FLOAT)
dspmain->formatFloatModeInt32Mode = 1;
else if (in.format == AUDIO_FORMAT_PCM_32_BIT)
dspmain->formatFloatModeInt32Mode = 2;
else if (in.format == AUDIO_FORMAT_PCM_24_BIT_PACKED)
dspmain->formatFloatModeInt32Mode = 3;
else if (in.format == AUDIO_FORMAT_PCM_8_24_BIT)
dspmain->formatFloatModeInt32Mode = 4;
else if (in.format == AUDIO_FORMAT_PCM_16_BIT)
dspmain->formatFloatModeInt32Mode = 0;
}
if (out.mask & EFFECT_CONFIG_FORMAT)
{
if (out.format != AUDIO_FORMAT_PCM_16_BIT)
{
if (out.format == AUDIO_FORMAT_PCM_FLOAT)
dspmain->formatFloatModeInt32Mode = 1;
else if (in.format == AUDIO_FORMAT_PCM_32_BIT)
dspmain->formatFloatModeInt32Mode = 2;
}
if (out.format == AUDIO_FORMAT_PCM_FLOAT)
dspmain->formatFloatModeInt32Mode = 1;
else if (out.format == AUDIO_FORMAT_PCM_32_BIT)
dspmain->formatFloatModeInt32Mode = 2;
else if (out.format == AUDIO_FORMAT_PCM_24_BIT_PACKED)
dspmain->formatFloatModeInt32Mode = 3;
else if (out.format == AUDIO_FORMAT_PCM_8_24_BIT)
dspmain->formatFloatModeInt32Mode = 4;
else if (out.format == AUDIO_FORMAT_PCM_16_BIT)
dspmain->formatFloatModeInt32Mode = 0;
}
#ifdef DEBUG
LOGW("I/O FMT = { %u, %u }", in.format, out.format);
Expand Down Expand Up @@ -667,6 +673,12 @@ int32_t EffectDSPMainProcess(EffectDSPMain *dspmain, audio_buffer_t *in, audio_b
case 2:
dspmain->jdsp.processInt32Multiplexd(&dspmain->jdsp, in->s32, out->s32, actualFrameCount);
break;
case 3:
dspmain->jdsp.processInt24PackedMultiplexd(&dspmain->jdsp, (uint8_t*)in->raw, (uint8_t*)out->raw, actualFrameCount);
break;
case 4:
dspmain->jdsp.processInt8_24Multiplexd(&dspmain->jdsp, in->s32, out->s32, actualFrameCount);
break;
}
return dspmain->mEnable ? 0 : -ENODATA;
}
Expand All @@ -679,7 +691,7 @@ static effect_descriptor_t jamesdsp_descriptor =
EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST,
10,
1,
"JamesDSP v3.05",
"JamesDSP v3.12",
"James Fung"
};
__attribute__((constructor)) static void initialize(void)
Expand Down
55 changes: 48 additions & 7 deletions Main/libjamesdsp/jni/jamesdsp/jdsp/Effects/convolver1D.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ int Convolver1DLoadImpulseResponse(JamesDSPLib *jdsp, float *tempImpulseFloat, u
channelbuf[j] = p[j * impChannels];
finalImpulse[i] = channelbuf;
}
int ret = 1;
if (impulseLengthActual < 18000)
{
if (impChannels == 1)
Expand All @@ -96,7 +97,13 @@ int Convolver1DLoadImpulseResponse(JamesDSPLib *jdsp, float *tempImpulseFloat, u
return -1;
}
FFTConvolver2x2Init(jdsp->conv.conv1d2x2_S_S);
FFTConvolver2x2LoadImpulseResponse(jdsp->conv.conv1d2x2_S_S, (unsigned int)jdsp->blockSize, finalImpulse[0], finalImpulse[0], impulseLengthActual);
ret = FFTConvolver2x2LoadImpulseResponse(jdsp->conv.conv1d2x2_S_S, (unsigned int)jdsp->blockSize, finalImpulse[0], finalImpulse[0], impulseLengthActual);
if (!ret)
{
free(jdsp->conv.conv1d2x2_S_S);
jdsp->conv.conv1d2x2_S_S = 0;
goto bufDeleteAndUnlock;
}
jdsp->conv.process = Convolver1DProcessFFTConvolver2x2;
}
if (impChannels == 2)
Expand All @@ -108,7 +115,13 @@ int Convolver1DLoadImpulseResponse(JamesDSPLib *jdsp, float *tempImpulseFloat, u
return -1;
}
FFTConvolver2x2Init(jdsp->conv.conv1d2x2_S_S);
FFTConvolver2x2LoadImpulseResponse(jdsp->conv.conv1d2x2_S_S, (unsigned int)jdsp->blockSize, finalImpulse[0], finalImpulse[1], impulseLengthActual);
ret = FFTConvolver2x2LoadImpulseResponse(jdsp->conv.conv1d2x2_S_S, (unsigned int)jdsp->blockSize, finalImpulse[0], finalImpulse[1], impulseLengthActual);
if (!ret)
{
free(jdsp->conv.conv1d2x2_S_S);
jdsp->conv.conv1d2x2_S_S = 0;
goto bufDeleteAndUnlock;
}
jdsp->conv.process = Convolver1DProcessFFTConvolver2x2;
}
if (impChannels == 4)
Expand All @@ -120,7 +133,13 @@ int Convolver1DLoadImpulseResponse(JamesDSPLib *jdsp, float *tempImpulseFloat, u
return -1;
}
FFTConvolver2x4x2Init(jdsp->conv.conv1d2x4x2_S_S);
FFTConvolver2x4x2LoadImpulseResponse(jdsp->conv.conv1d2x4x2_S_S, (unsigned int)jdsp->blockSize, finalImpulse[0], finalImpulse[1], finalImpulse[2], finalImpulse[3], impulseLengthActual);
ret = FFTConvolver2x4x2LoadImpulseResponse(jdsp->conv.conv1d2x4x2_S_S, (unsigned int)jdsp->blockSize, finalImpulse[0], finalImpulse[1], finalImpulse[2], finalImpulse[3], impulseLengthActual);
if (!ret)
{
free(jdsp->conv.conv1d2x4x2_S_S);
jdsp->conv.conv1d2x4x2_S_S = 0;
goto bufDeleteAndUnlock;
}
jdsp->conv.process = Convolver1DProcessFFTConvolver2x4x2;
}
}
Expand Down Expand Up @@ -153,7 +172,13 @@ int Convolver1DLoadImpulseResponse(JamesDSPLib *jdsp, float *tempImpulseFloat, u
return -1;
}
TwoStageFFTConvolver2x2Init(jdsp->conv.conv1d2x2_T_S);
TwoStageFFTConvolver2x2LoadImpulseResponse(jdsp->conv.conv1d2x2_T_S, seg1Len, seg2Len, finalImpulse[0], finalImpulse[0], impulseLengthActual);
ret = TwoStageFFTConvolver2x2LoadImpulseResponse(jdsp->conv.conv1d2x2_T_S, seg1Len, seg2Len, finalImpulse[0], finalImpulse[0], impulseLengthActual);
if (!ret)
{
free(jdsp->conv.conv1d2x2_T_S);
jdsp->conv.conv1d2x2_T_S = 0;
goto bufDeleteAndUnlock;
}
jdsp->conv.process = Convolver1DProcessTwoStageFFTConvolver2x2;
}
if (impChannels == 2)
Expand All @@ -165,7 +190,13 @@ int Convolver1DLoadImpulseResponse(JamesDSPLib *jdsp, float *tempImpulseFloat, u
return -1;
}
TwoStageFFTConvolver2x2Init(jdsp->conv.conv1d2x2_T_S);
TwoStageFFTConvolver2x2LoadImpulseResponse(jdsp->conv.conv1d2x2_T_S, seg1Len, seg2Len, finalImpulse[0], finalImpulse[1], impulseLengthActual);
ret = TwoStageFFTConvolver2x2LoadImpulseResponse(jdsp->conv.conv1d2x2_T_S, seg1Len, seg2Len, finalImpulse[0], finalImpulse[1], impulseLengthActual);
if (!ret)
{
free(jdsp->conv.conv1d2x2_T_S);
jdsp->conv.conv1d2x2_T_S = 0;
goto bufDeleteAndUnlock;
}
jdsp->conv.process = Convolver1DProcessTwoStageFFTConvolver2x2;
}
if (impChannels == 4)
Expand All @@ -177,13 +208,23 @@ int Convolver1DLoadImpulseResponse(JamesDSPLib *jdsp, float *tempImpulseFloat, u
return -1;
}
TwoStageFFTConvolver2x4x2Init(jdsp->conv.conv1d2x4x2_T_S);
TwoStageFFTConvolver2x4x2LoadImpulseResponse(jdsp->conv.conv1d2x4x2_T_S, seg1Len, seg2Len, finalImpulse[0], finalImpulse[1], finalImpulse[2], finalImpulse[3], impulseLengthActual);
ret = TwoStageFFTConvolver2x4x2LoadImpulseResponse(jdsp->conv.conv1d2x4x2_T_S, seg1Len, seg2Len, finalImpulse[0], finalImpulse[1], finalImpulse[2], finalImpulse[3], impulseLengthActual);
if (!ret)
{
free(jdsp->conv.conv1d2x4x2_T_S);
jdsp->conv.conv1d2x4x2_T_S = 0;
goto bufDeleteAndUnlock;
}
jdsp->conv.process = Convolver1DProcessTwoStageFFTConvolver2x4x2;
}
}
bufDeleteAndUnlock:
for (unsigned int i = 0; i < impChannels; i++)
free(finalImpulse[i]);
free(finalImpulse);
jdsp_unlock(jdsp);
return 1;
if (~ret)
return -2;
else
return 1;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5779,7 +5779,7 @@ unsigned char *compileCodeBlockWithRet(compileContext *ctx, opcodeRec *rec, int3
p += funcsz;
memcpy(p, &GLUE_RET, sizeof(GLUE_RET)); p += sizeof(GLUE_RET);
#ifdef __arm__
__clear_cache(newblock2, p);
//__clear_cache(newblock2, p);
#endif
ctx->l_stats[2] += funcsz + 2;
return newblock2;
Expand Down Expand Up @@ -7187,7 +7187,7 @@ NSEEL_CODEHANDLE NSEEL_code_compile_ex(NSEEL_VMCTX _ctx, const char *_expression
ctx->l_stats[1] = size;
handle->code_size = (int32_t)(writeptr - (unsigned char *)handle->code);
#ifdef __arm__
__clear_cache(handle->code, writeptr);
//__clear_cache(handle->code, writeptr);
#endif
}
handle->blocks = ctx->blocks_head;
Expand Down Expand Up @@ -7271,6 +7271,7 @@ void NSEEL_VM_freevars(NSEEL_VMCTX _ctx)
if (_ctx)
{
compileContext *ctx = (compileContext*)_ctx;
memset(ctx->ram_state, 0, sizeof(ctx->ram_state));
free(ctx->varTable_Values);
free(ctx->varTable_Names);
ctx->varTable_Values = 0;
Expand Down
Loading

0 comments on commit d377cd9

Please sign in to comment.