diff --git a/zefie_wtvp_minisrv/ra_win/rpcli.cpp b/zefie_wtvp_minisrv/ra_win/rpcli.cpp index bebf17d6..e0ff1afe 100644 --- a/zefie_wtvp_minisrv/ra_win/rpcli.cpp +++ b/zefie_wtvp_minisrv/ra_win/rpcli.cpp @@ -331,6 +331,7 @@ static int decode_mpeg_audio_to_wav(const char *inputPath, mp3dec_frame_info_t info; mp3d_sample_t pcm[MINIMP3_MAX_SAMPLES_PER_FRAME]; int samples = mp3dec_decode_frame(&dec, inputData + pos, (int)(inputSize - pos), pcm, &info); + int totalSamples; if (info.frame_bytes <= 0) { ++pos; @@ -342,6 +343,15 @@ static int decode_mpeg_audio_to_wav(const char *inputPath, continue; } + if (info.channels <= 0) { + fclose(out); + DeleteFileA(outputPath); + free(inputData); + return 0; + } + + totalSamples = samples * info.channels; + if (!haveAudio) { sampleRate = info.hz; channels = info.channels; @@ -355,18 +365,18 @@ static int decode_mpeg_audio_to_wav(const char *inputPath, if (gainScale != 1.0) { int sampleIndex; - for (sampleIndex = 0; sampleIndex < samples; ++sampleIndex) { + for (sampleIndex = 0; sampleIndex < totalSamples; ++sampleIndex) { pcm[sampleIndex] = apply_gain_sample(pcm[sampleIndex], gainScale); } } - if (fwrite(pcm, sizeof(mp3d_sample_t), (size_t)samples, out) != (size_t)samples) { + if (fwrite(pcm, sizeof(mp3d_sample_t), (size_t)totalSamples, out) != (size_t)totalSamples) { fclose(out); DeleteFileA(outputPath); free(inputData); return 0; } - dataBytes += (unsigned)(samples * sizeof(mp3d_sample_t)); + dataBytes += (unsigned)(totalSamples * sizeof(mp3d_sample_t)); } free(inputData); diff --git a/zefie_wtvp_minisrv/ra_win/rpcli.exe b/zefie_wtvp_minisrv/ra_win/rpcli.exe index fa3cf1a6..f20f8917 100644 Binary files a/zefie_wtvp_minisrv/ra_win/rpcli.exe and b/zefie_wtvp_minisrv/ra_win/rpcli.exe differ