Skip to content

Commit 29ed6bd

Browse files
committed
tweaks
1 parent d168091 commit 29ed6bd

File tree

4 files changed

+34
-22
lines changed

4 files changed

+34
-22
lines changed

android/src/main/java/io/getstream/webrtc/flutter/GetUserMediaImpl.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -708,8 +708,6 @@ private synchronized void stopScreenAudioCapture() {
708708
localCapturer.stopCapture();
709709
Log.d(TAG, "Screen audio capture stopped");
710710
}
711-
712-
currentScreenCapturer = null;
713711
}
714712

715713
/**

android/src/main/java/io/getstream/webrtc/flutter/MethodCallHandlerImpl.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,12 @@ void dispose() {
209209
* tracks.
210210
*/
211211
private boolean isMicrophoneMuted() {
212-
for (LocalTrack track : localTracks.values()) {
213-
if (track instanceof LocalAudioTrack) {
214-
if (track.enabled()) {
215-
return false;
212+
synchronized (localTracks) {
213+
for (LocalTrack track : localTracks.values()) {
214+
if (track instanceof LocalAudioTrack) {
215+
if (track.enabled()) {
216+
return false;
217+
}
216218
}
217219
}
218220
}

android/src/main/java/io/getstream/webrtc/flutter/audio/AudioBufferMixer.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,24 @@ public static void mixBuffers(ByteBuffer destBuffer, ByteBuffer srcBuffer, int b
5151
srcBuffer.asShortBuffer().get(srcSamples, 0, srcSamplesToRead);
5252

5353
// Mix samples with clipping
54+
// Only mix up to the minimum of both buffers, then copy remaining samples
55+
int mixableCount = Math.min(destSamplesToRead, srcSamplesToRead);
56+
5457
byte[] mixedBytes = new byte[bytesToMix];
5558
for (int i = 0; i < samplesToMix; i++) {
5659
int sum;
57-
if (i >= destSamplesToRead) {
58-
sum = srcSamples[i];
59-
} else if (i >= srcSamplesToRead) {
60+
if (i < mixableCount) {
61+
// Both buffers have valid data at this index - mix them
62+
sum = destSamples[i] + srcSamples[i];
63+
} else if (i < destSamplesToRead) {
64+
// Only dest buffer has valid data at this index
6065
sum = destSamples[i];
66+
} else if (i < srcSamplesToRead) {
67+
// Only src buffer has valid data at this index
68+
sum = srcSamples[i];
6169
} else {
62-
sum = destSamples[i] + srcSamples[i];
70+
// Neither buffer has valid data - output silence
71+
sum = 0;
6372
}
6473

6574
if (sum > Short.MAX_VALUE) {

android/src/main/java/io/getstream/webrtc/flutter/audio/ScreenAudioCapturer.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ public class ScreenAudioCapturer {
3636
private static final int SAMPLE_RATE = 48000; // Standard WebRTC sample rate
3737

3838
private final Context context;
39-
private AudioRecord screenAudioRecord;
39+
private volatile AudioRecord screenAudioRecord;
4040
private MediaProjection mediaProjection;
41-
private ByteBuffer screenAudioBuffer;
41+
private volatile ByteBuffer screenAudioBuffer;
4242
private volatile boolean isCapturing = false;
4343

4444
public ScreenAudioCapturer(Context context) {
@@ -129,24 +129,27 @@ public ByteBuffer getScreenAudioBytes(int bytesRequested) {
129129
}
130130

131131
try {
132+
ByteBuffer localBuffer = screenAudioBuffer;
133+
132134
// Ensure buffer has enough capacity
133-
if (screenAudioBuffer == null || screenAudioBuffer.capacity() < bytesRequested) {
134-
screenAudioBuffer = ByteBuffer.allocateDirect(bytesRequested);
135-
screenAudioBuffer.order(ByteOrder.LITTLE_ENDIAN);
135+
if (localBuffer == null || localBuffer.capacity() < bytesRequested) {
136+
localBuffer = ByteBuffer.allocateDirect(bytesRequested);
137+
localBuffer.order(ByteOrder.LITTLE_ENDIAN);
138+
screenAudioBuffer = localBuffer;
136139
}
137140

138-
screenAudioBuffer.clear();
139-
screenAudioBuffer.limit(bytesRequested);
141+
localBuffer.clear();
142+
localBuffer.limit(bytesRequested);
140143

141144
int bytesRead = localAudioRecord.read(
142-
screenAudioBuffer,
145+
localBuffer,
143146
bytesRequested,
144-
AudioRecord.READ_NON_BLOCKING);
147+
AudioRecord.READ_BLOCKING);
145148

146149
if (bytesRead > 0) {
147-
screenAudioBuffer.limit(bytesRead);
148-
screenAudioBuffer.position(0);
149-
return screenAudioBuffer;
150+
localBuffer.limit(bytesRead);
151+
localBuffer.position(0);
152+
return localBuffer;
150153
}
151154

152155
} catch (Exception e) {

0 commit comments

Comments
 (0)