8000 Don't block main thread on release, some cleanup · flutter-webrtc/flutter-webrtc@5c5545b · GitHub
[go: up one dir, main page]

Skip to content

Commit 5c5545b

Browse files
committed
Don't block main thread on release, some cleanup
1 parent 1107e32 commit 5c5545b

File tree

1 file changed

+8
-26
lines changed

1 file changed

+8
-26
lines changed

android/src/main/java/com/cloudwebrtc/webrtc/record/VideoFileRenderer.java

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,21 @@
1111

1212
import org.webrtc.EglBase;
1313
import org.webrtc.GlRectDrawer;
14-
import org.webrtc.ThreadUtils;
1514
import org.webrtc.VideoFrame;
1615
import org.webrtc.VideoFrameDrawer;
1716
import org.webrtc.VideoSink;
1817
import org.webrtc.audio.JavaAudioDeviceModule;
1918
import org.webrtc.audio.JavaAudioDeviceModule.SamplesReadyCallback;
2019

21-
import java.io.FileOutputStream;
2220
import java.io.IOException;
2321
import java.nio.ByteBuffer;
24-
import java.util.concurrent.CountDownLatch;
2522

2623
class VideoFileRenderer implements VideoSink, SamplesReadyCallback {
2724
private static final String TAG = "VideoFileRenderer";
2825
private final HandlerThread renderThread;
2926
private final Handler renderThreadHandler;
3027
private final HandlerThread audioThread;
3128
private final Handler audioThreadHandler;
32-
private final FileOutputStream videoOutFile;
33-
private final String outputFileName;
3429
private int outputFileWidth = -1;
3530
private int outputFileHeight = -1;
3631
private ByteBuffer[] encoderOutputBuffers;
@@ -56,8 +51,6 @@ class VideoFileRenderer implements VideoSink, SamplesReadyCallback {
5651
private MediaCodec audioEncoder;
5752

5853
VideoFileRenderer(String outputFile, final EglBase.Context sharedContext, boolean withAudio) throws IOException {
59-
this.outputFileName = outputFile;
60-
videoOutFile = new FileOutputStream(outputFile);
6154
renderThread = new HandlerThread(TAG + "RenderThread");
6255
renderThread.start();
6356
renderThreadHandler = new Handler(renderThread.getLooper());
@@ -134,28 +127,21 @@ private void renderFrameOnRenderThread(VideoFrame frame) {
134127
* Release all resources. All already posted frames will be rendered first.
135128
*/
136129
void release() {
137-
final CountDownLatch cleanupBarrier = new CountDownLatch(2);
138130
isRunning = false;
131+
if (audioThreadHandler != null)
132+
audioThreadHandler.post(() -> {
133+
audioEncoder.stop();
134+
audioEncoder.release();
135+
audioThread.quit();
136+
});
139137
renderThreadHandler.post(() -> {
140138
encoder.stop();
141139
encoder.release();
142140
eglBase.release();
141+
mediaMuxer.stop();
142+
mediaMuxer.release();
143143
renderThread.quit();
144-
cleanupBarrier.countDown();
145144
});
146-
if (audioThreadHandler != null) {
147-
audioThreadHandler.post(() -> {
148-
audioEncoder.stop();
149-
audioEncoder.release();
150-
audioThread.quit();
151-
cleanupBarrier.countDown();
152-
});
153-
} else {
154-
cleanupBarrier.countDown();
155-
}
156-
ThreadUtils.awaitUninterruptibly(cleanupBarrier);
157-
mediaMuxer.stop();
158-
mediaMuxer.release();
159145
}
160146

161147
private boolean encoderStarted = false;
@@ -208,8 +194,6 @@ private void drainEncoder() {
208194
if (muxerStarted)
209195
mediaMuxer.writeSampleData(trackIndex, encodedData, bufferInfo);
210196
isRunning = isRunning && (bufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) == 0;
211-
Log.d(TAG, "passed " + bufferInfo.size + " bytes to file"
212-
+ (!isRunning ? " (EOS)" : ""));
213197
encoder.releaseOutputBuffer(encoderStatus, false);
214198
if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) {
215199
break;
@@ -262,8 +246,6 @@ private void drainAudio() {
262246
if (muxerStarted)
263247
mediaMuxer.writeSampleData(audioTrackIndex, encodedData, audioBufferInfo);
264248
isRunning = isRunning && (audioBufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) == 0;
265-
Log.d(TAG, "passed " + audioBufferInfo.size + " bytes to file"
266-
+ (!isRunning ? " (EOS)" : ""));
267249
audioEncoder.releaseOutputBuffer(encoderStatus, false);
268250
if ((audioBufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) {
269251
break;

0 commit comments

Comments
 (0)
0