Skip to content

Commit 071cbe9

Browse files
committed
Fixed AudioTransportSource buffer reading
1 parent 81164ef commit 071cbe9

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

webrtc-jni/src/main/cpp/src/JNI_AudioProcessing.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ JNIEXPORT jint JNICALL Java_dev_onvoid_webrtc_media_audio_AudioProcessing_proces
7272
jbyte * srcPtr = env->GetByteArrayElements(src, nullptr);
7373
jbyte * dstPtr = env->GetByteArrayElements(dest, &isDstCopy);
7474

75-
int result = apm->ProcessStream(reinterpret_cast<int16_t *>(srcPtr), srcConfig, dstConfig, reinterpret_cast<int16_t *>(dstPtr));
75+
int result = apm->ProcessStream(reinterpret_cast<const int16_t *>(srcPtr), srcConfig, dstConfig, reinterpret_cast<int16_t *>(dstPtr));
7676

7777
if (isDstCopy == JNI_TRUE) {
7878
jsize dstLength = env->GetArrayLength(dest);

webrtc-jni/src/main/cpp/src/media/audio/AudioTransportSource.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,30 @@ namespace jni
3939
{
4040
JNIEnv * env = AttachCurrentThread();
4141

42-
const jbyte * buffer = static_cast<const jbyte *>(audioSamples);
43-
jbyteArray dataArray = env->NewByteArray(0);
42+
jsize bufferSize = nSamples * nBytesPerSample;
43+
jbyteArray dataArray = env->NewByteArray(bufferSize);
44+
jsize bufferLength = env->GetArrayLength(dataArray);
4445

4546
*elapsed_time_ms = 0;
4647
*ntp_time_ms = 0;
4748

49+
if (bufferLength < bufferSize) {
50+
env->DeleteLocalRef(dataArray);
51+
return 0;
52+
}
53+
4854
nSamplesOut = env->CallIntMethod(source, javaClass->onPlaybackData, dataArray, nSamples, nBytesPerSample, nChannels, samplesPerSec);
4955

50-
if (nSamplesOut < nSamples) {
51-
// EOF. Fill with silence.
52-
nSamplesOut = nSamples * nChannels;
56+
if (nSamplesOut > 0) {
57+
jbyte * buf = env->GetByteArrayElements(dataArray, NULL);
5358

54-
std::memset(audioSamples, 0, nSamples * nBytesPerSample);
59+
std::memcpy(audioSamples, buf, bufferSize);
60+
61+
env->ReleaseByteArrayElements(dataArray, buf, JNI_ABORT);
62+
}
63+
else if (nSamplesOut < nSamples) {
64+
// EOF. Fill with silence.
65+
std::memset(audioSamples, 0, bufferSize);
5566
}
5667

5768
return 0;

0 commit comments

Comments
 (0)